Index: vacation-1.2.6.2/vacation.c
===================================================================
--- vacation-1.2.6.2.orig/vacation.c
+++ vacation-1.2.6.2/vacation.c
@@ -365,11 +365,23 @@ void readheaders(void)
   register ALIAS *cur;
   register char *p;
   int tome, cont;
-  char buf[MAXLINE];
+  char buf[MAXLINE]; /* actual line */
+  char buf2[MAXLINE]; /* next line */
   char uucpfrom[MAXLINE];
 
-    cont = tome = 0;
-    while (fgets(buf, sizeof(buf), stdin) && *buf != '\n')
+  cont = tome = 0;
+  fgets (buf, sizeof (buf), stdin);
+  if (*buf != '\n')
+    fgets (buf2, sizeof (buf2), stdin);
+  while (*buf != '\n')
+   {
+    while (*buf2 != '\n' && ((buf2)[0] == ' ' || (buf2)[0] == '\t') &&
+	strlen (buf) + strlen (buf2) < MAXLINE) /* only to buf capacity */
+      { /* it's OK for "From:" and it doesn't matter for "To:" and "Cc:" */
+	(buf)[strlen (buf) - 1] = '\0'; /* remove '\n' */
+	strlcat (buf, buf2, MAXLINE);
+	fgets (buf2, sizeof (buf2), stdin);
+      }
       switch(toupper(*buf)) {
       case 'F':         /* "From: " or "From "*/
         cont = 0;
@@ -495,6 +507,10 @@ void readheaders(void)
 
     } /* switch(toupper(*buf)) */
 
+    strlcpy (buf, buf2, MAXLINE);
+    if (*buf != '\n')
+      fgets (buf2, sizeof (buf2), stdin);
+   }
   if (!jflag && !tome)
     EXITIT(0);
   if (!*from) {
Index: vacation-1.2.6.2/Makefile
===================================================================
--- vacation-1.2.6.2.orig/Makefile
+++ vacation-1.2.6.2/Makefile
@@ -28,14 +28,15 @@ SUBVERSION 	= 2
 PATCHLEVEL	= 2
 
 # what are we making
-SRC		= vacation.c
+EXTRAS		= strlcat.c strlcpy.c
+SRC		= vacation.c $(EXTRAS)
 OBJ		= vacation.o 
 BIN		= vacation
 
 # what we are packaging
 PACKAGE		= ChangeLog Makefile README tzfile.h \
 		  vacation vacation.c vacation.h *.man COPYING \
-		  contrib vacation-1.2.2.lsm patches OLD
+		  contrib vacation-1.2.2.lsm patches OLD strlcat.c strlcpy.c
 TGZFILE		= vacation-$(VERSION).$(SUBVERSION).$(PATCHLEVEL).tar.gz
 
 # rules
Index: vacation-1.2.6.2/strlcat.c
===================================================================
--- /dev/null
+++ vacation-1.2.6.2/strlcat.c
@@ -0,0 +1,67 @@
+/*	$OpenBSD: strlcat.c,v 1.13 2005/08/08 08:05:37 espie Exp $	*/
+
+/*
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/types.h>
+#include <string.h>
+
+#ifndef lint
+/*static char sccsid[] = "from: @(#)vacation.c  5.19 (Berkeley) 3/23/91";*/
+static char rcsid[] __attribute__ ((unused)) =
+  "$Id$";
+#endif /* not lint */
+
+/*
+ * Appends src to string dst of size siz (unlike strncat, siz is the
+ * full size of dst, not space left).  At most siz-1 characters
+ * will be copied.  Always NUL terminates (unless siz <= strlen(dst)).
+ * Returns strlen(src) + MIN(siz, strlen(initial dst)).
+ * If retval >= siz, truncation occurred.
+ */
+size_t
+strlcat (char *dst, const char *src, size_t siz)
+{
+  char *d = dst;
+  const char *s = src;
+  size_t n = siz;
+  size_t dlen;
+
+  /* If destination or source are NULL return 0 bytes copied */
+  if ( (!dst) || (!src) )
+    return(0);
+
+  /* Find the end of dst and adjust bytes left but don't go past end */
+  while (n-- != 0 && *d != '\0')
+    d++;
+  dlen = d - dst;
+  n = siz - dlen;
+
+  if (n == 0)
+    return (dlen + strlen (s));
+  while (*s != '\0')
+    {
+      if (n != 1)
+	{
+	  *d++ = *s;
+	  n--;
+	}
+      s++;
+    }
+  *d = '\0';
+
+  return (dlen + (s - src));	/* count does not include NUL */
+}
Index: vacation-1.2.6.2/strlcpy.c
===================================================================
--- /dev/null
+++ vacation-1.2.6.2/strlcpy.c
@@ -0,0 +1,66 @@
+/*	$OpenBSD: strlcpy.c,v 1.11 2006/05/05 15:27:38 millert Exp $	*/
+
+/*
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/types.h>
+#include <string.h>
+
+#ifndef lint
+/*static char sccsid[] = "from: @(#)vacation.c  5.19 (Berkeley) 3/23/91";*/
+static char rcsid[] __attribute__ ((unused)) =
+  "$Id$";
+#endif /* not lint */
+
+
+/*
+ * Copy src to string dst of size siz.  At most siz-1 characters
+ * will be copied.  Always NUL terminates (unless siz == 0).
+ * Returns strlen(src); if retval >= siz, truncation occurred.
+ */
+size_t
+strlcpy (char *dst, const char *src, size_t siz)
+{
+  char *d = dst;
+  const char *s = src;
+  size_t n = siz;
+
+  /* If destination or source are NULL return 0 bytes copied */
+  if ( (!dst) || (!src) )
+    return(0);
+
+  /* Copy as many bytes as will fit */
+  if (n != 0)
+    {
+      while (--n != 0)
+	{
+	  if ((*d++ = *s++) == '\0')
+	    break;
+	}
+    }
+
+  /* Not enough room in dst, add NUL and traverse rest of src */
+  if (n == 0)
+    {
+      if (siz != 0)
+	*d = '\0';		/* NUL-terminate dst */
+      while (*s++)
+	;
+    }
+
+  return (s - src - 1);		/* count does not include NUL */
+}
+
