version 1.11, 1999/02/12 01:21:07 |
version 1.12, 1999/06/03 20:20:26 |
|
|
|
|
DB *db; |
DB *db; |
char from[MAXLINE]; |
char from[MAXLINE]; |
|
char subj[MAXLINE]; |
|
|
int junkmail __P((void)); |
int junkmail __P((void)); |
int nsearch __P((char *, char *)); |
int nsearch __P((char *, char *)); |
|
|
case 'F': /* "From " */ |
case 'F': /* "From " */ |
cont = 0; |
cont = 0; |
if (!strncmp(buf, "From ", 5)) { |
if (!strncmp(buf, "From ", 5)) { |
for (p = buf + 5; *p && *p != ' '; ++p); |
for (p = buf + 5; *p && *p != ' '; ++p) |
|
; |
*p = '\0'; |
*p = '\0'; |
(void)strcpy(from, buf + 5); |
(void)strcpy(from, buf + 5); |
if (p = strchr(from, '\n')) |
if (p = strchr(from, '\n')) |
|
|
sizeof("Return-Path:")-1) || |
sizeof("Return-Path:")-1) || |
buf[12] != ' ' && buf[12] != '\t') |
buf[12] != ' ' && buf[12] != '\t') |
break; |
break; |
for (p = buf + 12; *p && isspace(*p); ++p); |
for (p = buf + 12; *p && isspace(*p); ++p) |
|
; |
if (strlcpy(from, p, sizeof from ) > sizeof from) { |
if (strlcpy(from, p, sizeof from ) > sizeof from) { |
syslog(LOG_NOTICE, |
syslog(LOG_NOTICE, |
"Return-Path %s exceeds limits", p); |
"Return-Path %s exceeds limits", p); |
|
|
!strncasecmp(p, "list", 4)) |
!strncasecmp(p, "list", 4)) |
exit(0); |
exit(0); |
break; |
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:" */ |
case 'C': /* "Cc:" */ |
if (strncmp(buf, "Cc:", 3)) |
if (strncmp(buf, "Cc:", 3)) |
break; |
break; |
|
|
++p; |
++p; |
else |
else |
p = from; |
p = from; |
for (; *p; ++p); |
for (; *p; ++p) |
|
; |
} |
} |
len = p - from; |
len = p - from; |
for (cur = ignore; cur->name; ++cur) |
for (cur = ignore; cur->name; ++cur) |
|
|
close(pvect[0]); |
close(pvect[0]); |
sfp = fdopen(pvect[1], "w"); |
sfp = fdopen(pvect[1], "w"); |
fprintf(sfp, "To: %s\n", from); |
fprintf(sfp, "To: %s\n", from); |
while (fgets(buf, sizeof buf, mfp)) |
while (fgets(buf, sizeof buf, mfp)) { |
fputs(buf, sfp); |
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(mfp); |
fclose(sfp); |
fclose(sfp); |
} |
} |