[comp.bugs.4bsd] 4.3bsd vacation program

cball@inmet.UUCP (01/30/87)

Index: 4.3BSD /usr/ucb/vacation.c (getfrom)

Description:

Vacation depends on an initial "From <user>" line.  It doesn't look for
rfc822-style "From:" header fields.  This is a problem for some internet
mail or from Sendmail mailers configured not to send an initial From
line.

Repeat-by:

Send yourself mail. Save the mail to a file.  Delete the inital "From "
line.  Invoke vacation:
vacation -d <your login-id> < file

Fix:

--- vacation.c	Fri Jan 30 09:31:55 1987
***************
*** 166,172
  getfrom()
  {
  	static char line[MAXLINE];
! 	register char *p;
  	extern char *index();
  
  	/* read the from line */

--- 166,172 -----
  getfrom()
  {
  	static char line[MAXLINE];
! 	register char *p, *lp;
  	extern char *index();
  
  	while(1) {
***************
*** 169,180
  	register char *p;
  	extern char *index();
  
! 	/* read the from line */
! 	if (fgets(line, sizeof line, stdin) == NULL ||
! 	    strncmp(line, "From ", 5) != NULL)
! 	{
! 		usrerr("No initial From line");
! 		exit(EX_USAGE);
  	}
  
  	/* find the end of the sender address and terminate it */

--- 169,183 -----
  	register char *p, *lp;
  	extern char *index();
  
! 	while(1) {
! 		if (gets(line) == NULL || strlen(line) == 0) {
! 			usrerr("No initial From line");
! 			exit(EX_USAGE);
! 		}
! 		if (strncmp(line, "From", 4) == NULL) {
! 			printf("found %s\n", line);
! 			break;
! 		}
  	}
  
  	/* find the end of the sender address and terminate it */
***************
*** 178,185
  	}
  
  	/* find the end of the sender address and terminate it */
! 	p = index(&line[5], ' ');
! 	if (p == NULL)
  	{
  		usrerr("Funny From line '%s'", line);
  		exit(EX_USAGE);

--- 181,189 -----
  	}
  
  	/* find the end of the sender address and terminate it */
! 	lp = index(line, ' ');	/* Skip "From[:]" */
! 	while (*lp == ' ') lp++;
! 	if (lp == NULL)
  	{
  		usrerr("Funny From line '%s'", line);
  		exit(EX_USAGE);
***************
*** 184,190
  		usrerr("Funny From line '%s'", line);
  		exit(EX_USAGE);
  	}
! 	*p = '\0';
  
  	/* return the sender address */
  	return (&line[5]);

--- 188,194 -----
  		usrerr("Funny From line '%s'", line);
  		exit(EX_USAGE);
  	}
! 	if((p=index(lp, ' '))!=NULL) *p = '\0';
  
  	/* return the sender address */
  	return (lp);
***************
*** 187,193
  	*p = '\0';
  
  	/* return the sender address */
! 	return (&line[5]);
  }
  /*
  **  JUNKMAIL -- read the header and tell us if this is junk/bulk mail.

--- 191,197 -----
  	if((p=index(lp, ' '))!=NULL) *p = '\0';
  
  	/* return the sender address */
! 	return (lp);
  }
  /*
  **  JUNKMAIL -- read the header and tell us if this is junk/bulk mail.