=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/vacation/vacation.c,v retrieving revision 1.11 retrieving revision 1.12 diff -c -r1.11 -r1.12 *** src/usr.bin/vacation/vacation.c 1999/02/12 01:21:07 1.11 --- src/usr.bin/vacation/vacation.c 1999/06/03 20:20:26 1.12 *************** *** 1,4 **** ! /* $OpenBSD: vacation.c,v 1.11 1999/02/12 01:21:07 marc Exp $ */ /* $NetBSD: vacation.c,v 1.7 1995/04/29 05:58:27 cgd Exp $ */ /* --- 1,4 ---- ! /* $OpenBSD: vacation.c,v 1.12 1999/06/03 20:20:26 marc Exp $ */ /* $NetBSD: vacation.c,v 1.7 1995/04/29 05:58:27 cgd Exp $ */ /* *************** *** 44,50 **** #if 0 static char sccsid[] = "@(#)vacation.c 8.2 (Berkeley) 1/26/94"; #endif ! static char rcsid[] = "$OpenBSD: vacation.c,v 1.11 1999/02/12 01:21:07 marc Exp $"; #endif /* not lint */ /* --- 44,50 ---- #if 0 static char sccsid[] = "@(#)vacation.c 8.2 (Berkeley) 1/26/94"; #endif ! static char rcsid[] = "$OpenBSD: vacation.c,v 1.12 1999/06/03 20:20:26 marc Exp $"; #endif /* not lint */ /* *************** *** 90,95 **** --- 90,96 ---- DB *db; char from[MAXLINE]; + char subj[MAXLINE]; int junkmail __P((void)); int nsearch __P((char *, char *)); *************** *** 219,225 **** case 'F': /* "From " */ cont = 0; if (!strncmp(buf, "From ", 5)) { ! for (p = buf + 5; *p && *p != ' '; ++p); *p = '\0'; (void)strcpy(from, buf + 5); if (p = strchr(from, '\n')) --- 220,227 ---- case 'F': /* "From " */ cont = 0; if (!strncmp(buf, "From ", 5)) { ! for (p = buf + 5; *p && *p != ' '; ++p) ! ; *p = '\0'; (void)strcpy(from, buf + 5); if (p = strchr(from, '\n')) *************** *** 234,240 **** sizeof("Return-Path:")-1) || buf[12] != ' ' && buf[12] != '\t') break; ! for (p = buf + 12; *p && isspace(*p); ++p); if (strlcpy(from, p, sizeof from ) > sizeof from) { syslog(LOG_NOTICE, "Return-Path %s exceeds limits", p); --- 236,243 ---- sizeof("Return-Path:")-1) || buf[12] != ' ' && buf[12] != '\t') break; ! for (p = buf + 12; *p && isspace(*p); ++p) ! ; if (strlcpy(from, p, sizeof from ) > sizeof from) { syslog(LOG_NOTICE, "Return-Path %s exceeds limits", p); *************** *** 260,265 **** --- 263,284 ---- !strncasecmp(p, "list", 4)) exit(0); break; + case 'S': /* Subject: */ + cont = 0; + if (strncasecmp(buf, "Subject:", + sizeof("Subject:")-1) || + buf[8] != ' ' && buf[8] != '\t') + break; + for (p = buf + 8; *p && isspace(*p); ++p) + ; + if (strlcpy(subj, p, sizeof subj ) > sizeof subj) { + syslog(LOG_NOTICE, + "Subject %s exceeds limits", p); + exit(1); + } + if (p = strchr(subj, '\n')) + *p = '\0'; + break; case 'C': /* "Cc:" */ if (strncmp(buf, "Cc:", 3)) break; *************** *** 334,340 **** ++p; else p = from; ! for (; *p; ++p); } len = p - from; for (cur = ignore; cur->name; ++cur) --- 353,360 ---- ++p; else p = from; ! for (; *p; ++p) ! ; } len = p - from; for (cur = ignore; cur->name; ++cur) *************** *** 452,459 **** close(pvect[0]); sfp = fdopen(pvect[1], "w"); fprintf(sfp, "To: %s\n", from); ! while (fgets(buf, sizeof buf, mfp)) ! fputs(buf, sfp); fclose(mfp); fclose(sfp); } --- 472,488 ---- close(pvect[0]); sfp = fdopen(pvect[1], "w"); fprintf(sfp, "To: %s\n", from); ! while (fgets(buf, sizeof buf, mfp)) { ! char *s = strstr(buf, "$SUBJECT"); ! if ( s ) { ! *s = 0; ! fputs(buf, sfp); ! fputs(subj, sfp); ! fputs(s+8, sfp); ! } else { ! fputs(buf, sfp); ! } ! } fclose(mfp); fclose(sfp); }