*** RELEASE_NOTES.OLD Fri Feb 10 09:55:32 1995 --- RELEASE_NOTES Wed Mar 8 14:25:29 1995 *************** *** 1,10 **** SENDMAIL RELEASE NOTES ! @(#)RELEASE_NOTES 8.6.10.2 (Berkeley) 2/10/95 This listing shows the version of the sendmail binary, the version of the sendmail configuration files, the date of release, and a summary of the changes in that release. 8.6.10/8.6.10 95/02/10 SECURITY: Diagnose bogus values to some command line flags that could allow trash to get into headers and qf files. --- 1,45 ---- SENDMAIL RELEASE NOTES ! @(#)RELEASE_NOTES 8.6.11.1 (Berkeley) 3/8/95 This listing shows the version of the sendmail binary, the version of the sendmail configuration files, the date of release, and a summary of the changes in that release. + 8.6.11/8.6.11 95/03/08 + The ``possible attack'' message would be logged more often + than necessary if you are using Pine as a user agent. + The wrong host would be reported in the ``possible attack'' + message when attempted from IDENT. + In some cases the syslog buffer could be overflowed when + reporting the ``possible attack'' message. This can + cause denial of service attacks. Truncate the message + to 80 characters to prevent this problem. + When reading the IDENT response a loop is needed around the + read from the network to ensure that you don't get + partial lines. + Password entries without any shell listed (that is, a null + shell) wouldn't match as "ok". Problem noted by + Rob McMahon. + When running BIND 4.9.x a problem could occur because the + _res.options field is initialized differently than it + was historically -- this requires that sendmail call + res_init before it tweaks any bits. + Fix an incompatibility in openxscript() between the file open mode + and the stdio mode passed to fdopen. This caused UnixWare + 2.0 to have conniptions. Fix from Martin Sohnius of + Novell Labs Europe. + Fix problem with static linking of local getopt routine when + using GNU's ld command. Fix from John Kennedy of + Cal State Chico. + It was possible to turn off privacy flags. Problem noted by + *Hobbit*. + Be more paranoid about writing files. Suggestions by *Hobbit* + and Liudvikas Bukys. + MAKEMAP: fixes for 64 bit machines (DEC Alphas in particular) + from Spider Boardman. + CONFIG: No changes (version number only, to keep it in sync + with the binaries). + 8.6.10/8.6.10 95/02/10 SECURITY: Diagnose bogus values to some command line flags that could allow trash to get into headers and qf files. *************** *** 46,51 **** --- 81,88 ---- some cases, buffers could get trashed by map lookups causing it to do unexpected things. This also simplifies some of the map code. + CONFIG: No changes (version number only, to keep it in sync + with the binaries). 8.6.9/8.6.9 94/04/19 Do all mail delivery completely disconnected from any terminal. *** cf/m4/version.m4.OLD Fri Feb 10 08:14:41 1995 --- cf/m4/version.m4 Sat Mar 4 08:42:38 1995 *************** *** 32,39 **** # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # ! VERSIONID(`@(#)version.m4 8.6.10.1 (Berkeley) 2/10/95') # divert(0) # Configuration version number ! DZ8.6.10 --- 32,39 ---- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # ! VERSIONID(`@(#)version.m4 8.6.11.1 (Berkeley) 3/4/95') # divert(0) # Configuration version number ! DZ8.6.11 *** makemap/makemap.c.OLD Thu Feb 9 16:54:35 1995 --- makemap/makemap.c Mon Mar 6 13:26:59 1995 *************** *** 33,39 **** */ #ifndef lint ! static char sccsid[] = "@(#)makemap.c 8.6 (Berkeley) 11/22/93"; #endif /* not lint */ #include --- 33,39 ---- */ #ifndef lint ! static char sccsid[] = "@(#)makemap.c 8.6.1.1 (Berkeley) 3/6/95"; #endif /* not lint */ #include *************** *** 66,72 **** struct { char *data; ! int size; } xx; }; --- 66,72 ---- struct { char *data; ! size_t size; } xx; }; *************** *** 226,235 **** --- 226,239 ---- #ifdef NEWDB case T_HASH: dbp.db = dbopen(mapname, mode, 0644, DB_HASH, NULL); + if (dbp.db != NULL) + (void) (*dbp.db->sync)(dbp.db, 0); break; case T_BTREE: dbp.db = dbopen(mapname, mode, 0644, DB_BTREE, NULL); + if (dbp.db != NULL) + (void) (*dbp.db->sync)(dbp.db, 0); break; #endif *** src/READ_ME.OLD Thu Feb 9 12:21:39 1995 --- src/READ_ME Sun Mar 5 12:52:35 1995 *************** *** 30,36 **** # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # ! # @(#)READ_ME 8.61 (Berkeley) 4/17/94 # This directory contains the source files for sendmail. --- 30,36 ---- # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # ! # @(#)READ_ME 8.61.1.1 (Berkeley) 3/5/95 # This directory contains the source files for sendmail. *************** *** 666,671 **** --- 666,682 ---- the flock() system call gives errors. If you are running .14, you must not use flock. You can do this with -DHASFLOCK=0. + Around the inclusion of bind-4.9.3 & linux libc-4.6.20, the + initialization of the _res structure changed. If /etc/hosts.conf + was configured as "hosts, bind" the resolver code could return + "Name server failure" errors. This is supposedly fixed in + later versions of libc (>= 4.6.29?), and later versions of + sendmail (> 8.6.10) try to work around the problem. + + Some older versions (< 4.6.20?) of the libc/include files conflict + with sendmail's version of cdefs.h. Deleting sendmail's version + on those systems should be non-harmful, and new versions don't care. + AIX This version of sendmail does not support MB, MG, and MR resource records, which are supported by AIX sendmail. *************** *** 869,872 **** Eric Allman ! (Version 8.61, last update 4/17/94 07:05:32) --- 880,883 ---- Eric Allman ! (Version 8.61.1.1, last update 3/5/95 12:52:16) *** src/conf.c.OLD Thu Feb 9 12:21:59 1995 --- src/conf.c Tue Mar 7 09:49:01 1995 *************** *** 33,39 **** */ #ifndef lint ! static char sccsid[] = "@(#)conf.c 8.89 (Berkeley) 4/18/94"; #endif /* not lint */ # include "sendmail.h" --- 33,39 ---- */ #ifndef lint ! static char sccsid[] = "@(#)conf.c 8.89.1.3 (Berkeley) 3/7/95"; #endif /* not lint */ # include "sendmail.h" *************** *** 1402,1409 **** int opterr = 1; /* if error message should be printed */ int optind = 1; /* index into parent argv vector */ #endif ! int optopt; /* character checked for validity */ ! char *optarg; /* argument associated with option */ #define BADCH (int)'?' #define EMSG "" --- 1402,1409 ---- int opterr = 1; /* if error message should be printed */ int optind = 1; /* index into parent argv vector */ #endif ! int optopt = 0; /* character checked for validity */ ! char *optarg = NULL; /* argument associated with option */ #define BADCH (int)'?' #define EMSG "" *************** *** 1543,1548 **** --- 1543,1551 ---- register char *p; extern char *getusershell(); + if (shell == NULL || shell[0] == '\0') + return TRUE; + setusershell(); while ((p = getusershell()) != NULL) if (strcmp(p, shell) == 0 || strcmp(p, WILDCARD_SHELL) == 0) *************** *** 1553,1558 **** --- 1556,1564 ---- register FILE *shellf; char buf[MAXLINE]; + if (shell == NULL || shell[0] == '\0') + return TRUE; + shellf = fopen(_PATH_SHELLS, "r"); if (shellf == NULL) { *************** *** 2190,2195 **** --- 2196,2203 ---- */ #ifdef SOLARIS + + extern int h_errno; struct hostent * solaris_gethostbyname(name) *** src/daemon.c.OLD Thu Feb 9 17:28:51 1995 --- src/daemon.c Tue Feb 28 15:40:25 1995 *************** *** 37,45 **** #ifndef lint #ifdef DAEMON ! static char sccsid[] = "@(#)daemon.c 8.48.1.2 (Berkeley) 2/9/95 (with daemon mode)"; #else ! static char sccsid[] = "@(#)daemon.c 8.48.1.2 (Berkeley) 2/9/95 (without daemon mode)"; #endif #endif /* not lint */ --- 37,45 ---- #ifndef lint #ifdef DAEMON ! static char sccsid[] = "@(#)daemon.c 8.48.1.4 (Berkeley) 2/28/95 (with daemon mode)"; #else ! static char sccsid[] = "@(#)daemon.c 8.48.1.4 (Berkeley) 2/28/95 (without daemon mode)"; #endif #endif /* not lint */ *************** *** 995,1000 **** --- 995,1002 ---- int s; int i; EVENT *ev; + int nleft; + char ibuf[MAXNAME + 1]; #endif static char hbuf[MAXNAME * 2 + 2]; extern char *hostnamebyanyaddr(); *************** *** 1030,1036 **** } /* create ident query */ ! (void) sprintf(hbuf, "%d,%d\r\n", ntohs(RealHostAddr.sin.sin_port), ntohs(la.sin.sin_port)); /* create local address */ --- 1032,1038 ---- } /* create ident query */ ! (void) sprintf(ibuf, "%d,%d\r\n", ntohs(RealHostAddr.sin.sin_port), ntohs(la.sin.sin_port)); /* create local address */ *************** *** 1068,1094 **** } if (tTd(9, 10)) ! printf("getauthinfo: sent %s", hbuf); /* send query */ ! if (write(s, hbuf, strlen(hbuf)) < 0) goto closeident; /* get result */ ! i = read(s, hbuf, sizeof hbuf); (void) close(s); clrevent(ev); ! if (i <= 0) goto noident; - if (hbuf[--i] == '\n' && hbuf[--i] == '\r') - i--; - hbuf[++i] = '\0'; if (tTd(9, 3)) ! printf("getauthinfo: got %s\n", hbuf); /* parse result */ ! p = strchr(hbuf, ':'); if (p == NULL) { /* malformed response */ --- 1070,1103 ---- } if (tTd(9, 10)) ! printf("getauthinfo: sent %s", ibuf); /* send query */ ! if (write(s, ibuf, strlen(ibuf)) < 0) goto closeident; /* get result */ ! p = &ibuf[0]; ! nleft = sizeof(ibuf - 1); ! while ((i = read(s, p, nleft)) > 0) ! { ! p += i; ! nleft -= i; ! } (void) close(s); clrevent(ev); ! if (i < 0 || p == &ibuf[0]) goto noident; + if (*--p == '\n' && *--p == '\r') + p--; + *++p = '\0'; + if (tTd(9, 3)) ! printf("getauthinfo: got %s\n", ibuf); /* parse result */ ! p = strchr(ibuf, ':'); if (p == NULL) { /* malformed response */ *** src/deliver.c.OLD Sun Mar 5 08:28:25 1995 --- src/deliver.c Sun Mar 5 14:55:38 1995 *************** *** 33,39 **** */ #ifndef lint ! static char sccsid[] = "@(#)deliver.c 8.84.1.1 (Berkeley) 2/10/95"; #endif /* not lint */ #include "sendmail.h" --- 33,39 ---- */ #ifndef lint ! static char sccsid[] = "@(#)deliver.c 8.84.1.3 (Berkeley) 3/5/95"; #endif /* not lint */ #include "sendmail.h" *************** *** 1181,1186 **** --- 1181,1192 ---- extern char **environ; extern int DtableSize; + if (e->e_lockfp != NULL) + { + fclose(e->e_lockfp); + e->e_lockfp = NULL; + } + /* child -- set up input & exec mailer */ (void) setsignal(SIGINT, SIG_IGN); (void) setsignal(SIGHUP, SIG_IGN); *************** *** 2176,2183 **** --- 2182,2197 ---- { /* child -- actually write to file */ struct stat stb; + struct stat fsb; MCI mcibuf; + int oflags = O_WRONLY|O_APPEND; + if (e->e_lockfp != NULL) + { + fclose(e->e_lockfp); + e->e_lockfp = NULL; + } + (void) setsignal(SIGINT, SIG_DFL); (void) setsignal(SIGHUP, SIG_DFL); (void) setsignal(SIGTERM, SIG_DFL); *************** *** 2184,2190 **** --- 2198,2209 ---- (void) umask(OldUmask); if (stat(filename, &stb) < 0) + { stb.st_mode = FileMode; + oflags |= O_CREAT|O_EXCL; + } + else if (bitset(0111, stb.st_mode)) + exit(EX_CANTCREAT); mode = stb.st_mode; /* limit the errors to those actually caused in the child */ *************** *** 2191,2198 **** errno = 0; ExitStat = EX_OK; - if (bitset(0111, stb.st_mode)) - exit(EX_CANTCREAT); if (ctladdr != NULL) { /* ignore setuid and setgid bits */ --- 2210,2215 ---- *************** *** 2232,2241 **** } FileName = filename; LineNumber = 0; ! f = dfopen(filename, O_WRONLY|O_CREAT|O_APPEND, FileMode); if (f == NULL) { message("554 cannot open: %s", errstring(errno)); exit(EX_CANTCREAT); } --- 2249,2268 ---- } FileName = filename; LineNumber = 0; ! f = dfopen(filename, oflags, FileMode); if (f == NULL) { message("554 cannot open: %s", errstring(errno)); + exit(EX_CANTCREAT); + } + if (fstat(fileno(f), &fsb) < 0 || + !bitset(O_CREAT, oflags) && + (stb.st_nlink != fsb.st_nlink || + stb.st_dev != fsb.st_dev || + stb.st_ino != fsb.st_ino || + stb.st_uid != fsb.st_uid)) + { + message("554 cannot write: file changed after open"); exit(EX_CANTCREAT); } *** src/domain.c.OLD Thu Feb 9 12:21:48 1995 --- src/domain.c Mon Mar 6 16:03:01 1995 *************** *** 36,44 **** #ifndef lint #if NAMED_BIND ! static char sccsid[] = "@(#)domain.c 8.19 (Berkeley) 3/11/94 (with name server)"; #else ! static char sccsid[] = "@(#)domain.c 8.19 (Berkeley) 3/11/94 (without name server)"; #endif #endif /* not lint */ --- 36,44 ---- #ifndef lint #if NAMED_BIND ! static char sccsid[] = "@(#)domain.c 8.19.1.1 (Berkeley) 3/6/95 (with name server)"; #else ! static char sccsid[] = "@(#)domain.c 8.19.1.1 (Berkeley) 3/6/95 (without name server)"; #endif #endif /* not lint */ *************** *** 709,714 **** --- 709,715 ---- fname = getenv("HOSTALIASES"); if (fname == NULL || (fp = fopen(fname, "r")) == NULL) return NULL; + setbuf(fp, NULL); while (fgets(buf, sizeof buf, fp) != NULL) { for (p = buf; p != '\0' && !(isascii(*p) && isspace(*p)); p++) *** src/envelope.c.OLD Thu Feb 9 12:21:46 1995 --- src/envelope.c Tue Feb 28 13:25:41 1995 *************** *** 33,39 **** */ #ifndef lint ! static char sccsid[] = "@(#)envelope.c 8.34 (Berkeley) 4/14/94"; #endif /* not lint */ #include "sendmail.h" --- 33,39 ---- */ #ifndef lint ! static char sccsid[] = "@(#)envelope.c 8.34.1.1 (Berkeley) 2/28/95"; #endif /* not lint */ #include "sendmail.h" *************** *** 489,495 **** if (fd < 0) syserr("!Can't open /dev/null"); } ! e->e_xfp = fdopen(fd, "w"); if (e->e_xfp == NULL) { syserr("!Can't create transcript stream %s", p); --- 489,495 ---- if (fd < 0) syserr("!Can't open /dev/null"); } ! e->e_xfp = fdopen(fd, "a"); if (e->e_xfp == NULL) { syserr("!Can't create transcript stream %s", p); *** src/main.c.OLD Fri Feb 10 09:40:49 1995 --- src/main.c Sun Mar 5 10:10:07 1995 *************** *** 39,45 **** #endif /* not lint */ #ifndef lint ! static char sccsid[] = "@(#)main.c 8.55.1.3 (Berkeley) 2/10/95"; #endif /* not lint */ #define _DEFINE --- 39,45 ---- #endif /* not lint */ #ifndef lint ! static char sccsid[] = "@(#)main.c 8.55.1.7 (Berkeley) 3/5/95"; #endif /* not lint */ #define _DEFINE *************** *** 293,299 **** for (i = j = 0; j < MAXUSERENVIRON && (p = envp[i]) != NULL; i++) { ! if (strncmp(p, "FS=", 3) == 0 || strncmp(p, "LD_", 3) == 0) continue; UserEnviron[j++] = newstr(p); } --- 293,299 ---- for (i = j = 0; j < MAXUSERENVIRON && (p = envp[i]) != NULL; i++) { ! if (strncmp(p, "IFS=", 4) == 0 || strncmp(p, "LD_", 3) == 0) continue; UserEnviron[j++] = newstr(p); } *************** *** 324,330 **** --- 324,333 ---- #if NAMED_BIND if (tTd(8, 8)) + { + res_init(); _res.options |= RES_DEBUG; + } #endif errno = 0; *************** *** 490,496 **** ExitStat = EX_USAGE; break; } ! from = newstr(denlstring(optarg)); if (strcmp(RealUserName, from) != 0) warn_f_flag = j; break; --- 493,499 ---- ExitStat = EX_USAGE; break; } ! from = newstr(denlstring(optarg, TRUE, TRUE)); if (strcmp(RealUserName, from) != 0) warn_f_flag = j; break; *************** *** 571,576 **** --- 574,580 ---- break; case 'X': /* traffic log file */ + setgid(RealGid); setuid(RealUid); TrafficLogFile = fopen(optarg, "a"); if (TrafficLogFile == NULL) *************** *** 654,659 **** --- 658,672 ---- } /* + ** Initialize name server if it is going to be used. + */ + + #if NAMED_BIND + if (!bitset(RES_INIT, _res.options)) + res_init(); + #endif + + /* ** Process authorization warnings from command line. */ *************** *** 730,736 **** /* full names can't have newlines */ if (FullName != NULL && strchr(FullName, '\n') != NULL) ! FullName = newstr(denlstring(FullName)); /* do heuristic mode adjustment */ if (Verbose) --- 743,749 ---- /* full names can't have newlines */ if (FullName != NULL && strchr(FullName, '\n') != NULL) ! FullName = newstr(denlstring(FullName, TRUE, TRUE)); /* do heuristic mode adjustment */ if (Verbose) *** src/queue.c.OLD Fri Feb 10 07:38:11 1995 --- src/queue.c Sun Mar 5 10:10:09 1995 *************** *** 36,44 **** #ifndef lint #ifdef QUEUE ! static char sccsid[] = "@(#)queue.c 8.41.1.1 (Berkeley) 2/10/95 (with queueing)"; #else ! static char sccsid[] = "@(#)queue.c 8.41.1.1 (Berkeley) 2/10/95 (without queueing)"; #endif #endif /* not lint */ --- 36,44 ---- #ifndef lint #ifdef QUEUE ! static char sccsid[] = "@(#)queue.c 8.41.1.3 (Berkeley) 3/5/95 (with queueing)"; #else ! static char sccsid[] = "@(#)queue.c 8.41.1.3 (Berkeley) 3/5/95 (without queueing)"; #endif #endif /* not lint */ *************** *** 210,216 **** /* message from envelope, if it exists */ if (e->e_message != NULL) ! fprintf(tfp, "M%s\n", denlstring(e->e_message)); /* send various flag bits through */ p = buf; --- 210,216 ---- /* message from envelope, if it exists */ if (e->e_message != NULL) ! fprintf(tfp, "M%s\n", denlstring(e->e_message, TRUE, FALSE)); /* send various flag bits through */ p = buf; *************** *** 224,237 **** /* $r and $s and $_ macro values */ if ((p = macvalue('r', e)) != NULL) ! fprintf(tfp, "$r%s\n", denlstring(p)); if ((p = macvalue('s', e)) != NULL) ! fprintf(tfp, "$s%s\n", denlstring(p)); if ((p = macvalue('_', e)) != NULL) ! fprintf(tfp, "$_%s\n", denlstring(p)); /* output name of sender */ ! fprintf(tfp, "S%s\n", denlstring(e->e_from.q_paddr)); /* output list of error recipients */ printctladdr(NULL, NULL); --- 224,237 ---- /* $r and $s and $_ macro values */ if ((p = macvalue('r', e)) != NULL) ! fprintf(tfp, "$r%s\n", denlstring(p, TRUE, FALSE)); if ((p = macvalue('s', e)) != NULL) ! fprintf(tfp, "$s%s\n", denlstring(p, TRUE, FALSE)); if ((p = macvalue('_', e)) != NULL) ! fprintf(tfp, "$_%s\n", denlstring(p, TRUE, FALSE)); /* output name of sender */ ! fprintf(tfp, "S%s\n", denlstring(e->e_from.q_paddr, TRUE, FALSE)); /* output list of error recipients */ printctladdr(NULL, NULL); *************** *** 240,246 **** if (!bitset(QDONTSEND|QBADADDR, q->q_flags)) { printctladdr(q, tfp); ! fprintf(tfp, "E%s\n", denlstring(q->q_paddr)); } } --- 240,246 ---- if (!bitset(QDONTSEND|QBADADDR, q->q_flags)) { printctladdr(q, tfp); ! fprintf(tfp, "E%s\n", denlstring(q->q_paddr, TRUE, FALSE)); } } *************** *** 251,257 **** (queueall && !bitset(QDONTSEND|QBADADDR|QSENT, q->q_flags))) { printctladdr(q, tfp); ! fprintf(tfp, "R%s\n", denlstring(q->q_paddr)); if (announce) { e->e_to = q->q_paddr; --- 251,257 ---- (queueall && !bitset(QDONTSEND|QBADADDR|QSENT, q->q_flags))) { printctladdr(q, tfp); ! fprintf(tfp, "R%s\n", denlstring(q->q_paddr, TRUE, FALSE)); if (announce) { e->e_to = q->q_paddr; *************** *** 427,433 **** else uname = pw->pw_name; ! fprintf(tfp, "C%s:%s\n", uname, denlstring(a->q_paddr)); } /* --- 427,433 ---- else uname = pw->pw_name; ! fprintf(tfp, "C%s:%s\n", uname, denlstring(a->q_paddr, TRUE, FALSE)); } /* *** src/recipient.c.OLD Mon Feb 20 17:31:39 1995 --- src/recipient.c Sun Mar 5 10:10:06 1995 *************** *** 33,39 **** */ #ifndef lint ! static char sccsid[] = "@(#)recipient.c 8.44.1.4 (Berkeley) 2/20/95"; #endif /* not lint */ # include "sendmail.h" --- 33,39 ---- */ #ifndef lint ! static char sccsid[] = "@(#)recipient.c 8.44.1.6 (Berkeley) 3/5/95"; #endif /* not lint */ # include "sendmail.h" *************** *** 111,117 **** bufp = buf; else bufp = xalloc(i); ! strcpy(bufp, denlstring(list)); for (p = bufp; *p != '\0'; ) { --- 111,117 ---- bufp = buf; else bufp = xalloc(i); ! strcpy(bufp, denlstring(list, FALSE, TRUE)); for (p = bufp; *p != '\0'; ) { *** src/sendmail.h.OLD Tue Mar 7 16:22:14 1995 --- src/sendmail.h Sun Mar 5 09:58:06 1995 *************** *** 31,37 **** * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ! * @(#)sendmail.h 8.43.1.1 (Berkeley) 2/10/95 */ /* --- 31,37 ---- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ! * @(#)sendmail.h 8.43.1.3 (Berkeley) 3/5/95 */ /* *************** *** 41,47 **** # ifdef _DEFINE # define EXTERN # ifndef lint ! static char SmailSccsId[] = "@(#)sendmail.h 8.43.1.1 2/10/95"; # endif # else /* _DEFINE */ # define EXTERN extern --- 41,47 ---- # ifdef _DEFINE # define EXTERN # ifndef lint ! static char SmailSccsId[] = "@(#)sendmail.h 8.43.1.3 3/5/95"; # endif # else /* _DEFINE */ # define EXTERN extern *************** *** 956,962 **** extern char *shortenstring __P((char *, int)); extern bool usershellok __P((char *)); extern void commaize __P((HDR *, char *, int, MCI *, ENVELOPE *)); ! extern char *denlstring __P((char *)); /* ellipsis is a different case though */ #ifdef __STDC__ --- 956,962 ---- extern char *shortenstring __P((char *, int)); extern bool usershellok __P((char *)); extern void commaize __P((HDR *, char *, int, MCI *, ENVELOPE *)); ! extern char *denlstring __P((char *, int, int)); /* ellipsis is a different case though */ #ifdef __STDC__ *** src/util.c.OLD Tue Feb 28 08:11:27 1995 --- src/util.c Sun Mar 5 10:10:07 1995 *************** *** 33,39 **** */ #ifndef lint ! static char sccsid[] = "@(#)util.c 8.39.1.2 (Berkeley) 2/10/95"; #endif /* not lint */ # include "sendmail.h" --- 33,39 ---- */ #ifndef lint ! static char sccsid[] = "@(#)util.c 8.39.1.5 (Berkeley) 3/5/95"; #endif /* not lint */ # include "sendmail.h" *************** *** 1485,1491 **** { #ifdef LOG /* check for newlines and log if necessary */ ! (void) denlstring(f); #endif l--; --- 1485,1491 ---- { #ifdef LOG /* check for newlines and log if necessary */ ! (void) denlstring(f, TRUE, TRUE); #endif l--; *************** *** 1506,1511 **** --- 1506,1513 ---- ** ** Parameters: ** s -- the input string + ** strict -- if set, don't permit continuation lines. + ** logattacks -- if set, log attempted attacks. ** ** Returns: ** A pointer to a version of the string with newlines *************** *** 1513,1520 **** */ char * ! denlstring(s) char *s; { register char *p; int l; --- 1515,1524 ---- */ char * ! denlstring(s, strict, logattacks) char *s; + int strict; + int logattacks; { register char *p; int l; *************** *** 1521,1527 **** static char *bp = NULL; static int bl = 0; ! if (strchr(s, '\n') == NULL) return s; l = strlen(s) + 1; --- 1525,1535 ---- static char *bp = NULL; static int bl = 0; ! p = s; ! while ((p = strchr(p, '\n')) != NULL) ! if (strict || (*++p != ' ' && *p != '\t')) ! break; ! if (p == NULL) return s; l = strlen(s) + 1; *************** *** 1538,1546 **** *p++ = ' '; #ifdef LOG ! p = macvalue('_', CurEnv); ! syslog(LOG_ALERT, "POSSIBLE ATTACK from %s: newline in string \"%s\"", ! p == NULL ? "[UNKNOWN]" : p, bp); #endif return bp; --- 1546,1557 ---- *p++ = ' '; #ifdef LOG ! if (logattacks) ! { ! syslog(LOG_NOTICE, "POSSIBLE ATTACK from %s: newline in string \"%s\"", ! RealHostName == NULL ? "[UNKNOWN]" : RealHostName, ! shortenstring(bp, 80)); ! } #endif return bp; *** src/version.c.OLD Tue Feb 28 08:35:57 1995 --- src/version.c Tue Feb 28 11:11:00 1995 *************** *** 33,39 **** */ #ifndef lint ! static char sccsid[] = "@(#)version.c 8.6.10.1 (Berkeley) 2/7/95"; #endif /* not lint */ ! char Version[] = "8.6.10"; --- 33,39 ---- */ #ifndef lint ! static char sccsid[] = "@(#)version.c 8.6.11.1 (Berkeley) 2/28/95"; #endif /* not lint */ ! char Version[] = "8.6.11";