diff options
author | gshapiro <gshapiro@FreeBSD.org> | 2004-02-14 21:53:31 +0000 |
---|---|---|
committer | gshapiro <gshapiro@FreeBSD.org> | 2004-02-14 21:53:31 +0000 |
commit | 3b5debc668e4cf70a893a0e38111db42ea9ecd45 (patch) | |
tree | 621e7318cf8faf4eacb777dd294461b080ec5c75 /contrib/sendmail/src | |
parent | 1b4c430a4d3cf1880aead276da9d85ddec2aecdb (diff) | |
parent | 238623a0204c90e8d61dbde7b3b499a5036f2e5d (diff) | |
download | FreeBSD-src-3b5debc668e4cf70a893a0e38111db42ea9ecd45.zip FreeBSD-src-3b5debc668e4cf70a893a0e38111db42ea9ecd45.tar.gz |
This commit was generated by cvs2svn to compensate for changes in r125820,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'contrib/sendmail/src')
-rw-r--r-- | contrib/sendmail/src/README | 9 | ||||
-rw-r--r-- | contrib/sendmail/src/alias.c | 4 | ||||
-rw-r--r-- | contrib/sendmail/src/daemon.c | 18 | ||||
-rw-r--r-- | contrib/sendmail/src/deliver.c | 7 | ||||
-rw-r--r-- | contrib/sendmail/src/main.c | 49 | ||||
-rw-r--r-- | contrib/sendmail/src/milter.c | 21 | ||||
-rw-r--r-- | contrib/sendmail/src/mime.c | 74 | ||||
-rw-r--r-- | contrib/sendmail/src/queue.c | 121 | ||||
-rw-r--r-- | contrib/sendmail/src/readcf.c | 8 | ||||
-rw-r--r-- | contrib/sendmail/src/recipient.c | 7 | ||||
-rw-r--r-- | contrib/sendmail/src/sendmail.h | 3 | ||||
-rw-r--r-- | contrib/sendmail/src/srvrsmtp.c | 51 | ||||
-rw-r--r-- | contrib/sendmail/src/tls.c | 36 | ||||
-rw-r--r-- | contrib/sendmail/src/util.c | 7 | ||||
-rw-r--r-- | contrib/sendmail/src/version.c | 6 |
15 files changed, 290 insertions, 131 deletions
diff --git a/contrib/sendmail/src/README b/contrib/sendmail/src/README index 669a20c..e0af96b 100644 --- a/contrib/sendmail/src/README +++ b/contrib/sendmail/src/README @@ -9,7 +9,7 @@ # the sendmail distribution. # # -# $Id: README,v 8.355.2.15 2003/06/02 01:43:04 ca Exp $ +# $Id: README,v 8.355.2.16 2004/01/08 21:54:55 ca Exp $ # This directory contains the source files for sendmail(TM). @@ -561,6 +561,11 @@ MATCHGECOS Permit fuzzy matching of user names against the full MIME8TO7 If non-zero, include 8 to 7 bit MIME conversions. This also controls advertisement of 8BITMIME in the ESMTP startup dialogue. +MIME7TO8_OLD If 0 then use an algorithm for MIME 7-bit quoted-printable + or base64 encoding to 8-bit text that has been introduced + in 8.12.3. There are some examples where that code fails, + but the old code works. If you have an example of improper + 7 to 8 bit conversion please send it to sendmail-bugs. MIME7TO8 If non-zero, include 7 to 8 bit MIME conversions. HES_GETMAILHOST Define this to 1 if you are using Hesiod with the hes_getmailhost() routine. This is included with the MIT @@ -1797,4 +1802,4 @@ util.c Some general purpose routines used by sendmail. version.c The version number and information about this version of sendmail. -(Version $Revision: 8.355.2.15 $, last update $Date: 2003/06/02 01:43:04 $ ) +(Version $Revision: 8.355.2.16 $, last update $Date: 2004/01/08 21:54:55 $ ) diff --git a/contrib/sendmail/src/alias.c b/contrib/sendmail/src/alias.c index 3ce8b0e..c944388 100644 --- a/contrib/sendmail/src/alias.c +++ b/contrib/sendmail/src/alias.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -13,7 +13,7 @@ #include <sendmail.h> -SM_RCSID("@(#)$Id: alias.c,v 8.214.2.1 2003/07/28 17:47:55 ca Exp $") +SM_RCSID("@(#)$Id: alias.c,v 8.214.2.2 2003/10/06 20:43:29 ca Exp $") #define SEPARATOR ':' # define ALIAS_SPEC_SEPARATORS " ,/:" diff --git a/contrib/sendmail/src/daemon.c b/contrib/sendmail/src/daemon.c index 267f363..88c55cd 100644 --- a/contrib/sendmail/src/daemon.c +++ b/contrib/sendmail/src/daemon.c @@ -13,7 +13,7 @@ #include <sendmail.h> -SM_RCSID("@(#)$Id: daemon.c,v 8.613.2.17 2003/07/30 20:17:04 ca Exp $") +SM_RCSID("@(#)$Id: daemon.c,v 8.613.2.20 2003/11/25 19:02:24 ca Exp $") #if defined(SOCK_STREAM) || defined(__GNU_LIBRARY__) # define USE_SOCK_STREAM 1 @@ -164,6 +164,8 @@ getrequests(e) extern bool refuseconnections __P((char *, ENVELOPE *, int, bool)); + /* initialize data for function that generates queue ids */ + init_qid_alg(); for (idx = 0; idx < NDaemons; idx++) { Daemons[idx].d_port = setupdaemon(&(Daemons[idx].d_addr)); @@ -363,7 +365,6 @@ getrequests(e) /* Did someone signal while waiting? */ CHECK_RESTART; - curdaemon = -1; if (doqueuerun()) { @@ -3484,10 +3485,21 @@ getauthinfo(fd, may_be_forged) nleft = sizeof ibuf - 1; while ((i = read(s, p, nleft)) > 0) { + char *s; + p += i; nleft -= i; *p = '\0'; - if (strchr(ibuf, '\n') != NULL || nleft <= 0) + if ((s = strchr(ibuf, '\n')) != NULL) + { + if (p > s + 1) + { + p = s + 1; + *p = '\0'; + } + break; + } + if (nleft <= 0) break; } (void) close(s); diff --git a/contrib/sendmail/src/deliver.c b/contrib/sendmail/src/deliver.c index 95149a0..eb98f83 100644 --- a/contrib/sendmail/src/deliver.c +++ b/contrib/sendmail/src/deliver.c @@ -14,7 +14,7 @@ #include <sendmail.h> #include <sys/time.h> -SM_RCSID("@(#)$Id: deliver.c,v 8.940.2.19 2003/09/03 19:58:26 ca Exp $") +SM_RCSID("@(#)$Id: deliver.c,v 8.940.2.20 2003/09/26 18:26:19 ca Exp $") #if HASSETUSERCONTEXT # include <login_cap.h> @@ -3491,7 +3491,12 @@ do_transfer: (mci->mci_state == MCIS_MAIL || mci->mci_state == MCIS_RCPT || mci->mci_state == MCIS_DATA)) + { mci->mci_state = MCIS_OPEN; + SmtpPhase = mci->mci_phase = "idle"; + sm_setproctitle(true, e, "%s: %s", CurHostName, + mci->mci_phase); + } } if (tobuf[0] != '\0') diff --git a/contrib/sendmail/src/main.c b/contrib/sendmail/src/main.c index a56315c..0d8c0ce 100644 --- a/contrib/sendmail/src/main.c +++ b/contrib/sendmail/src/main.c @@ -25,7 +25,7 @@ SM_UNUSED(static char copyright[]) = The Regents of the University of California. All rights reserved.\n"; #endif /* ! lint */ -SM_RCSID("@(#)$Id: main.c,v 8.887.2.27 2003/08/04 17:23:37 ca Exp $") +SM_RCSID("@(#)$Id: main.c,v 8.887.2.29 2003/11/07 00:09:31 ca Exp $") #if NETINET || NETINET6 @@ -2234,8 +2234,32 @@ main(argc, argv, envp) int status; pid_t ret; + errno = 0; while ((ret = sm_wait(&status)) <= 0) + { + if (errno == ECHILD) + { + /* + ** Oops... something got messed + ** up really bad. Waiting for + ** non-existent children + ** shouldn't happen. Let's get + ** out of here. + */ + + CurChildren = 0; + break; + } continue; + } + + /* something is really really wrong */ + if (errno == ECHILD) + { + sm_syslog(LOG_ERR, NOQID, + "queue control process: lost all children: wait returned ECHILD"); + break; + } /* Only drop when a child gives status */ if (WIFSTOPPED(status)) @@ -2371,8 +2395,31 @@ main(argc, argv, envp) int group; CHECK_RESTART; + errno = 0; while ((ret = sm_wait(&status)) <= 0) + { + /* + ** Waiting for non-existent + ** children shouldn't happen. + ** Let's get out of here if + ** it occurs. + */ + + if (errno == ECHILD) + { + CurChildren = 0; + break; + } continue; + } + + /* something is really really wrong */ + if (errno == ECHILD) + { + sm_syslog(LOG_ERR, NOQID, + "persistent queue runner control process: lost all children: wait returned ECHILD"); + break; + } if (WIFSTOPPED(status)) continue; diff --git a/contrib/sendmail/src/milter.c b/contrib/sendmail/src/milter.c index c91ad12..c25101c 100644 --- a/contrib/sendmail/src/milter.c +++ b/contrib/sendmail/src/milter.c @@ -10,7 +10,7 @@ #include <sendmail.h> -SM_RCSID("@(#)$Id: milter.c,v 8.197.2.9 2003/09/07 00:18:29 ca Exp $") +SM_RCSID("@(#)$Id: milter.c,v 8.197.2.10 2003/12/01 23:57:44 msk Exp $") #if MILTER # include <libmilter/mfapi.h> @@ -34,6 +34,9 @@ static char *MilterConnectMacros[MAXFILTERMACROS + 1]; static char *MilterHeloMacros[MAXFILTERMACROS + 1]; static char *MilterEnvFromMacros[MAXFILTERMACROS + 1]; static char *MilterEnvRcptMacros[MAXFILTERMACROS + 1]; +#if _FFR_MILTER_MACROS_EOM +static char *MilterEOMMacros[MAXFILTERMACROS + 1]; +#endif /* _FFR_MILTER_MACROS_EOM */ # define MILTER_CHECK_DONE_MSG() \ if (*state == SMFIR_REPLYCODE || \ @@ -1415,6 +1418,10 @@ static struct milteropt { "macros.envrcpt", MO_MACROS_ENVRCPT }, # define MO_LOGLEVEL 0x05 { "loglevel", MO_LOGLEVEL }, +#if _FFR_MILTER_MACROS_EOM +# define MO_MACROS_EOM 0x06 + { "macros.eom", MO_MACROS_EOM }, +#endif /* _FFR_MILTER_MACROS_EOM */ { NULL, 0 }, }; @@ -1488,6 +1495,13 @@ milter_set_option(name, val, sticky) case MO_MACROS_ENVRCPT: if (macros == NULL) macros = MilterEnvRcptMacros; +#if _FFR_MILTER_MACROS_EOM + /* FALLTHROUGH */ + + case MO_MACROS_EOM: + if (macros == NULL) + macros = MilterEOMMacros; +#endif /* _FFR_MILTER_MACROS_EOM */ p = newstr(val); while (*p != '\0') @@ -3594,6 +3608,11 @@ milter_data(e, state) MILTER_CHECK_RESULTS(); } +#if _FFR_MILTER_MACROS_EOM + if (MilterEOMMacros[0] != NULL) + milter_send_macros(m, MilterEOMMacros, SMFIC_BODYEOB, e); +#endif /* _FFR_MILTER_MACROS_EOM */ + /* send the final body chunk */ (void) milter_write(m, SMFIC_BODYEOB, NULL, 0, m->mf_timeout[SMFTO_WRITE], e); diff --git a/contrib/sendmail/src/mime.c b/contrib/sendmail/src/mime.c index 62d1617..a9a26c4 100644 --- a/contrib/sendmail/src/mime.c +++ b/contrib/sendmail/src/mime.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1994, 1996-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1994 @@ -14,7 +14,7 @@ #include <sendmail.h> #include <string.h> -SM_RCSID("@(#)$Id: mime.c,v 8.130.2.1 2003/04/15 01:05:59 ca Exp $") +SM_RCSID("@(#)$Id: mime.c,v 8.130.2.3 2004/01/08 21:42:56 ca Exp $") /* ** MIME support. @@ -33,6 +33,11 @@ SM_RCSID("@(#)$Id: mime.c,v 8.130.2.1 2003/04/15 01:05:59 ca Exp $") ** the problem. */ +/* use "old" mime 7 to 8 algorithm by default */ +#ifndef MIME7TO8_OLD +# define MIME7TO8_OLD 1 +#endif /* ! MIME7TO8_OLD */ + #if MIME8TO7 static int isboundary __P((char *, char **)); static int mimeboundary __P((char *, char **)); @@ -1064,54 +1069,41 @@ mime7to8(mci, header, e) c1 = CHAR64(c1); c2 = CHAR64(c2); +#if MIME7TO8_OLD +#define CHK_EOL if (*--fbufp != '\n' || (fbufp > fbuf && *--fbufp != '\r')) \ + ++fbufp; +#else /* MIME7TO8_OLD */ +#define CHK_EOL if (*--fbufp != '\n' || (fbufp > fbuf && *--fbufp != '\r')) \ + { \ + ++fbufp; \ + pxflags |= PXLF_NOADDEOL; \ + } +#endif /* MIME7TO8_OLD */ + +#define PUTLINE64 \ + do \ + { \ + if (*fbufp++ == '\n' || fbufp >= &fbuf[MAXLINE]) \ + { \ + CHK_EOL; \ + putxline((char *) fbuf, fbufp - fbuf, mci, pxflags); \ + pxflags &= ~PXLF_NOADDEOL; \ + fbufp = fbuf; \ + } \ + } while (0) + *fbufp = (c1 << 2) | ((c2 & 0x30) >> 4); - if (*fbufp++ == '\n' || fbufp >= &fbuf[MAXLINE]) - { - if (*--fbufp != '\n' || - (fbufp > fbuf && *--fbufp != '\r')) - { - pxflags |= PXLF_NOADDEOL; - fbufp++; - } - putxline((char *) fbuf, fbufp - fbuf, - mci, pxflags); - pxflags &= ~PXLF_NOADDEOL; - fbufp = fbuf; - } + PUTLINE64; if (c3 == '=') continue; c3 = CHAR64(c3); *fbufp = ((c2 & 0x0f) << 4) | ((c3 & 0x3c) >> 2); - if (*fbufp++ == '\n' || fbufp >= &fbuf[MAXLINE]) - { - if (*--fbufp != '\n' || - (fbufp > fbuf && *--fbufp != '\r')) - { - pxflags |= PXLF_NOADDEOL; - fbufp++; - } - putxline((char *) fbuf, fbufp - fbuf, - mci, pxflags); - pxflags &= ~PXLF_NOADDEOL; - fbufp = fbuf; - } + PUTLINE64; if (c4 == '=') continue; c4 = CHAR64(c4); *fbufp = ((c3 & 0x03) << 6) | c4; - if (*fbufp++ == '\n' || fbufp >= &fbuf[MAXLINE]) - { - if (*--fbufp != '\n' || - (fbufp > fbuf && *--fbufp != '\r')) - { - pxflags |= PXLF_NOADDEOL; - fbufp++; - } - putxline((char *) fbuf, fbufp - fbuf, - mci, pxflags); - pxflags &= ~PXLF_NOADDEOL; - fbufp = fbuf; - } + PUTLINE64; } } else diff --git a/contrib/sendmail/src/queue.c b/contrib/sendmail/src/queue.c index 6f91ed9..e71b8f2 100644 --- a/contrib/sendmail/src/queue.c +++ b/contrib/sendmail/src/queue.c @@ -13,7 +13,7 @@ #include <sendmail.h> -SM_RCSID("@(#)$Id: queue.c,v 8.863.2.61 2003/09/03 19:58:26 ca Exp $") +SM_RCSID("@(#)$Id: queue.c,v 8.863.2.67 2003/12/02 23:56:01 ca Exp $") #include <dirent.h> @@ -22,7 +22,16 @@ SM_RCSID("@(#)$Id: queue.c,v 8.863.2.61 2003/09/03 19:58:26 ca Exp $") # define sm_file_exists(errno) ((errno) == EEXIST) -# define TF_OPEN_FLAGS (O_CREAT|O_WRONLY|O_EXCL) +# if HASFLOCK && defined(O_EXLOCK) +# define SM_OPEN_EXLOCK 1 +# define TF_OPEN_FLAGS (O_CREAT|O_WRONLY|O_EXCL|O_EXLOCK) +# else /* HASFLOCK && defined(O_EXLOCK) */ +# define TF_OPEN_FLAGS (O_CREAT|O_WRONLY|O_EXCL) +# endif /* HASFLOCK && defined(O_EXLOCK) */ + +#ifndef SM_OPEN_EXLOCK +# define SM_OPEN_EXLOCK 0 +#endif /* ! SM_OPEN_EXLOCK */ /* ** Historical notes: @@ -358,6 +367,18 @@ queueup(e, announce, msync) ** Create control file. */ +#define OPEN_TF do \ + { \ + MODE_T oldumask = 0; \ + \ + if (bitset(S_IWGRP, QueueFileMode)) \ + oldumask = umask(002); \ + tfd = open(tf, TF_OPEN_FLAGS, QueueFileMode); \ + if (bitset(S_IWGRP, QueueFileMode)) \ + (void) umask(oldumask); \ + } while (0) + + newid = (e->e_id == NULL) || !bitset(EF_INQUEUE, e->e_flags); (void) sm_strlcpy(tf, queuename(e, NEWQFL_LETTER), sizeof tf); tfp = e->e_lockfp; @@ -370,9 +391,11 @@ queueup(e, announce, msync) */ (void) sm_strlcpy(tf, queuename(e, ANYQFL_LETTER), sizeof tf); - tfd = open(tf, TF_OPEN_FLAGS, FileMode); + OPEN_TF; if (tfd < 0 || +#if !SM_OPEN_EXLOCK !lockfile(tfd, tf, NULL, LOCK_EX|LOCK_NB) || +#endif /* !SM_OPEN_EXLOCK */ (tfp = sm_io_open(SmFtStdiofd, SM_TIME_DEFAULT, (void *) &tfd, SM_IO_WRONLY_B, NULL)) == NULL) @@ -396,14 +419,7 @@ queueup(e, announce, msync) { if (tfd < 0) { - MODE_T oldumask = 0; - - if (bitset(S_IWGRP, QueueFileMode)) - oldumask = umask(002); - tfd = open(tf, TF_OPEN_FLAGS, QueueFileMode); - if (bitset(S_IWGRP, QueueFileMode)) - (void) umask(oldumask); - + OPEN_TF; if (tfd < 0) { if (errno != EEXIST) @@ -414,12 +430,22 @@ queueup(e, announce, msync) tf, (int) geteuid(), sm_errstring(errno)); } +#if SM_OPEN_EXLOCK + else + break; +#endif /* SM_OPEN_EXLOCK */ } if (tfd >= 0) { +#if SM_OPEN_EXLOCK + /* file is locked by open() */ + break; +#else /* SM_OPEN_EXLOCK */ if (lockfile(tfd, tf, NULL, LOCK_EX|LOCK_NB)) break; - else if (LogLevel > 0 && (i % 32) == 0) + else +#endif /* SM_OPEN_EXLOCK */ + if (LogLevel > 0 && (i % 32) == 0) sm_syslog(LOG_ALERT, e->e_id, "queueup: cannot lock %s: %s", tf, sm_errstring(errno)); @@ -5172,6 +5198,36 @@ queuename(e, type) sm_dprintf("queuename: %s\n", buf); return buf; } + +/* +** INIT_QID_ALG -- Initialize the (static) parameters that are used to +** generate a queue ID. +** +** This function is called by the daemon to reset +** LastQueueTime and LastQueuePid which are used by assign_queueid(). +** Otherwise the algorithm may cause problems because +** LastQueueTime and LastQueuePid are set indirectly by main() +** before the daemon process is started, hence LastQueuePid is not +** the pid of the daemon and therefore a child of the daemon can +** actually have the same pid as LastQueuePid which means the section +** in assign_queueid(): +** * see if we need to get a new base time/pid * +** is NOT triggered which will cause the same queue id to be generated. +** +** Parameters: +** none +** +** Returns: +** none. +*/ + +void +init_qid_alg() +{ + LastQueueTime = 0; + LastQueuePid = -1; +} + /* ** ASSIGN_QUEUEID -- assign a queue ID for this envelope. ** @@ -5188,8 +5244,20 @@ queuename(e, type) ** none. */ -static const char QueueIdChars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx"; +static const char QueueIdChars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; # define QIC_LEN 60 +# define QIC_LEN_R 62 + +/* +** Note: the length is "officially" 60 because minutes and seconds are +** usually only 0-59. However (Linux): +** tm_sec The number of seconds after the minute, normally in +** the range 0 to 59, but can be up to 61 to allow for +** leap seconds. +** Hence the real length of the string is 62 to take this into account. +** Alternatively % QIC_LEN can (should) be used for access everywhere. +*/ + # define queuenextid() CurrentPid @@ -5244,8 +5312,8 @@ assign_queueid(e) idbuf[1] = QueueIdChars[tm->tm_mon]; idbuf[2] = QueueIdChars[tm->tm_mday]; idbuf[3] = QueueIdChars[tm->tm_hour]; - idbuf[4] = QueueIdChars[tm->tm_min]; - idbuf[5] = QueueIdChars[tm->tm_sec]; + idbuf[4] = QueueIdChars[tm->tm_min % QIC_LEN_R]; + idbuf[5] = QueueIdChars[tm->tm_sec % QIC_LEN_R]; idbuf[6] = QueueIdChars[seq / QIC_LEN]; idbuf[7] = QueueIdChars[seq % QIC_LEN]; (void) sm_snprintf(&idbuf[8], sizeof idbuf - 8, "%06d", @@ -7357,10 +7425,10 @@ cmpidx(a, b) void makeworkgroups() { - int i, j, total_runners = 0; - int dir; + int i, j, total_runners, dir, h; SORTQGRP_T si[MAXQUEUEGROUPS + 1]; + total_runners = 0; if (NumQueue == 1 && strcmp(Queue[0]->qg_name, "mqueue") == 0) { /* @@ -7456,18 +7524,19 @@ makeworkgroups() (WorkGrp[j].wg_numqgrp + 1))); } - WorkGrp[j].wg_qgs[WorkGrp[j].wg_numqgrp] = Queue[si[i].sg_idx]; + h = si[i].sg_idx; + WorkGrp[j].wg_qgs[WorkGrp[j].wg_numqgrp] = Queue[h]; WorkGrp[j].wg_numqgrp++; - WorkGrp[j].wg_runners += Queue[i]->qg_maxqrun; - Queue[si[i].sg_idx]->qg_wgrp = j; + WorkGrp[j].wg_runners += Queue[h]->qg_maxqrun; + Queue[h]->qg_wgrp = j; if (WorkGrp[j].wg_maxact == 0) { /* can't have more runners than allowed total */ if (MaxQueueChildren > 0 && - Queue[i]->qg_maxqrun > MaxQueueChildren) - Queue[i]->qg_maxqrun = MaxQueueChildren; - WorkGrp[j].wg_maxact = Queue[i]->qg_maxqrun; + Queue[h]->qg_maxqrun > MaxQueueChildren) + Queue[h]->qg_maxqrun = MaxQueueChildren; + WorkGrp[j].wg_maxact = Queue[h]->qg_maxqrun; } /* @@ -7477,9 +7546,9 @@ makeworkgroups() */ /* keep track of the lowest interval for a persistent runner */ - if (Queue[si[i].sg_idx]->qg_queueintvl > 0 && - WorkGrp[j].wg_lowqintvl < Queue[si[i].sg_idx]->qg_queueintvl) - WorkGrp[j].wg_lowqintvl = Queue[si[i].sg_idx]->qg_queueintvl; + if (Queue[h]->qg_queueintvl > 0 && + WorkGrp[j].wg_lowqintvl < Queue[h]->qg_queueintvl) + WorkGrp[j].wg_lowqintvl = Queue[h]->qg_queueintvl; j += dir; } if (tTd(41, 9)) diff --git a/contrib/sendmail/src/readcf.c b/contrib/sendmail/src/readcf.c index 2a40e82..161e7d5 100644 --- a/contrib/sendmail/src/readcf.c +++ b/contrib/sendmail/src/readcf.c @@ -13,7 +13,7 @@ #include <sendmail.h> -SM_RCSID("@(#)$Id: readcf.c,v 8.607.2.11 2003/04/03 23:04:06 ca Exp $") +SM_RCSID("@(#)$Id: readcf.c,v 8.607.2.12 2003/10/07 17:45:28 ca Exp $") #if NETINET || NETINET6 # include <arpa/inet.h> @@ -3153,7 +3153,7 @@ setoption(opt, val, safe, sticky, e) RunAsGid = pw->pw_gid; else if (UseMSP && *p == '\0') (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, - "WARNING: RunAsGid for MSP ignored, check group ids (egid=%d, want=%d)\n", + "WARNING: RunAsUser for MSP ignored, check group ids (egid=%d, want=%d)\n", (int) EffGid, (int) pw->pw_gid); } @@ -3177,7 +3177,7 @@ setoption(opt, val, safe, sticky, e) else if (UseMSP) (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, - "WARNING: RunAsGid for MSP ignored, check group ids (egid=%d, want=%d)\n", + "WARNING: RunAsUser for MSP ignored, check group ids (egid=%d, want=%d)\n", (int) EffGid, (int) runasgid); } @@ -3194,7 +3194,7 @@ setoption(opt, val, safe, sticky, e) else if (UseMSP) (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, - "WARNING: RunAsGid for MSP ignored, check group ids (egid=%d, want=%d)\n", + "WARNING: RunAsUser for MSP ignored, check group ids (egid=%d, want=%d)\n", (int) EffGid, (int) gr->gr_gid); } diff --git a/contrib/sendmail/src/recipient.c b/contrib/sendmail/src/recipient.c index 7452897..b7b6660 100644 --- a/contrib/sendmail/src/recipient.c +++ b/contrib/sendmail/src/recipient.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -13,7 +13,7 @@ #include <sendmail.h> -SM_RCSID("@(#)$Id: recipient.c,v 8.330.2.2 2003/09/16 19:56:25 ca Exp $") +SM_RCSID("@(#)$Id: recipient.c,v 8.330.2.4 2003/10/06 20:43:29 ca Exp $") static void includetimeout __P((void)); static ADDRESS *self_reference __P((ADDRESS *)); @@ -397,7 +397,8 @@ removefromlist(list, sendq, e) for (pq = sendq; (q = *pq) != NULL; pq = &q->q_next) { if (!QS_IS_DEAD(q->q_state) && - sameaddr(q, &a)) + (sameaddr(q, &a) || + strcmp(q->q_paddr, a.q_paddr) == 0)) { if (tTd(25, 5)) { diff --git a/contrib/sendmail/src/sendmail.h b/contrib/sendmail/src/sendmail.h index 07e59bc..2e1b732 100644 --- a/contrib/sendmail/src/sendmail.h +++ b/contrib/sendmail/src/sendmail.h @@ -48,7 +48,7 @@ #ifdef _DEFINE # ifndef lint -SM_UNUSED(static char SmailId[]) = "@(#)$Id: sendmail.h,v 8.919.2.28 2003/09/03 19:58:27 ca Exp $"; +SM_UNUSED(static char SmailId[]) = "@(#)$Id: sendmail.h,v 8.919.2.29 2003/11/07 00:08:02 ca Exp $"; # endif /* ! lint */ #endif /* _DEFINE */ @@ -1973,6 +1973,7 @@ extern void setup_queues __P((bool)); extern bool setnewqueue __P((ENVELOPE *)); extern bool shouldqueue __P((long, time_t)); extern void sync_queue_time __P((void)); +extern void init_qid_alg __P((void)); extern int print_single_queue __P((int, int)); #if REQUIRES_DIR_FSYNC # define SYNC_DIR(path, panic) sync_dir(path, panic) diff --git a/contrib/sendmail/src/srvrsmtp.c b/contrib/sendmail/src/srvrsmtp.c index 52d47a1..e752aa0 100644 --- a/contrib/sendmail/src/srvrsmtp.c +++ b/contrib/sendmail/src/srvrsmtp.c @@ -16,7 +16,7 @@ # include <libmilter/mfdef.h> #endif /* MILTER */ -SM_RCSID("@(#)$Id: srvrsmtp.c,v 8.829.2.31 2003/07/01 17:30:01 ca Exp $") +SM_RCSID("@(#)$Id: srvrsmtp.c,v 8.829.2.34 2004/01/14 19:13:46 ca Exp $") #if SASL || STARTTLS # include <sys/time.h> @@ -1288,6 +1288,7 @@ smtp(nullserver, d_flags, e) case CMDEHLO: case CMDNOOP: case CMDRSET: + case CMDERROR: /* process normally */ break; @@ -2338,6 +2339,29 @@ tlsfail: case CMDRCPT: /* rcpt -- designate recipient */ DELAY_CONN("RCPT"); + if (BadRcptThrottle > 0 && + n_badrcpts >= BadRcptThrottle) + { + if (LogLevel > 5 && + n_badrcpts == BadRcptThrottle) + { + sm_syslog(LOG_INFO, e->e_id, + "%s: Possible SMTP RCPT flood, throttling.", + CurSmtpClient); + + /* To avoid duplicated message */ + n_badrcpts++; + } + + /* + ** Don't use exponential backoff for now. + ** Some servers will open more connections + ** and actually overload the receiver even + ** more. + */ + + (void) sleep(1); + } if (!smtp.sm_gotmail) { usrerr("503 5.0.0 Need MAIL before RCPT"); @@ -2384,29 +2408,6 @@ tlsfail: e, true); macdefine(&e->e_macro, A_PERM, macid("{addr_type}"), NULL); - if (BadRcptThrottle > 0 && - n_badrcpts >= BadRcptThrottle) - { - if (LogLevel > 5 && - n_badrcpts == BadRcptThrottle) - { - sm_syslog(LOG_INFO, e->e_id, - "%s: Possible SMTP RCPT flood, throttling.", - CurSmtpClient); - - /* To avoid duplicated message */ - n_badrcpts++; - } - - /* - ** Don't use exponential backoff for now. - ** Some servers will open more connections - ** and actually overload the receiver even - ** more. - */ - - (void) sleep(1); - } if (Errors > 0) goto rcpt_done; if (a == NULL) @@ -3146,7 +3147,7 @@ smtp_data(smtp, e) doublequeue = false; aborting = Errors > 0; - if (!aborting && + if (!(aborting || bitset(EF_DISCARD, e->e_flags)) && #if _FFR_QUARANTINE (QueueMode == QM_QUARANTINE || e->e_quarmsg == NULL) && #endif /* _FFR_QUARANTINE */ diff --git a/contrib/sendmail/src/tls.c b/contrib/sendmail/src/tls.c index a74c691..598c187 100644 --- a/contrib/sendmail/src/tls.c +++ b/contrib/sendmail/src/tls.c @@ -10,7 +10,7 @@ #include <sendmail.h> -SM_RCSID("@(#)$Id: tls.c,v 8.79.4.4 2003/03/20 00:03:42 ca Exp $") +SM_RCSID("@(#)$Id: tls.c,v 8.79.4.5 2003/12/28 04:23:28 gshapiro Exp $") #if STARTTLS # include <openssl/err.h> @@ -344,30 +344,36 @@ tls_set_verify(ctx, ssl, vrfy) # define TLS_S_DHPAR_EX 0x00400000 /* DH param file exists */ # define TLS_S_DHPAR_OK 0x00800000 /* DH param file is ok to use */ +/* Type of variable */ +# define TLS_T_OTHER 0 +# define TLS_T_SRV 1 +# define TLS_T_CLT 2 + /* ** TLS_OK_F -- can var be an absolute filename? ** ** Parameters: ** var -- filename ** fn -- what is the filename used for? -** srv -- server side? +** type -- type of variable ** ** Returns: ** ok? */ static bool -tls_ok_f(var, fn, srv) +tls_ok_f(var, fn, type) char *var; char *fn; - bool srv; + int type; { /* must be absolute pathname */ if (var != NULL && *var == '/') return true; if (LogLevel > 12) sm_syslog(LOG_WARNING, NOQID, "STARTTLS: %s%s missing", - srv ? "Server" : "Client", fn); + type == TLS_T_SRV ? "Server" : + (type == TLS_T_CLT ? "Client" : ""), var); return false; } /* @@ -407,16 +413,16 @@ tls_safe_f(var, sff, srv) ** fn -- what is the filename used for? ** req -- is the file required? ** st -- status bit to set if ok -** srv -- server side? +** type -- type of variable ** ** Side Effects: ** uses r, ok; may change ok and status. ** */ -# define TLS_OK_F(var, fn, req, st, srv) if (ok) \ +# define TLS_OK_F(var, fn, req, st, type) if (ok) \ { \ - r = tls_ok_f(var, fn, srv); \ + r = tls_ok_f(var, fn, type); \ if (r) \ status |= st; \ else if (req) \ @@ -539,13 +545,13 @@ inittls(ctx, req, srv, certfile, keyfile, cacertpath, cacertfile, dhparam) */ TLS_OK_F(certfile, "CertFile", bitset(TLS_I_CERT_EX, req), - TLS_S_CERT_EX, srv); + TLS_S_CERT_EX, srv ? TLS_T_SRV : TLS_T_CLT); TLS_OK_F(keyfile, "KeyFile", bitset(TLS_I_KEY_EX, req), - TLS_S_KEY_EX, srv); + TLS_S_KEY_EX, srv ? TLS_T_SRV : TLS_T_CLT); TLS_OK_F(cacertpath, "CACertPath", bitset(TLS_I_CERTP_EX, req), - TLS_S_CERTP_EX, srv); + TLS_S_CERTP_EX, TLS_T_OTHER); TLS_OK_F(cacertfile, "CACertFile", bitset(TLS_I_CERTF_EX, req), - TLS_S_CERTF_EX, srv); + TLS_S_CERTF_EX, TLS_T_OTHER); # if _FFR_TLS_1 /* @@ -556,12 +562,12 @@ inittls(ctx, req, srv, certfile, keyfile, cacertpath, cacertfile, dhparam) if (cf2 != NULL) { TLS_OK_F(cf2, "CertFile", bitset(TLS_I_CERT_EX, req), - TLS_S_CERT2_EX, srv); + TLS_S_CERT2_EX, srv ? TLS_T_SRV : TLS_T_CLT); } if (kf2 != NULL) { TLS_OK_F(kf2, "KeyFile", bitset(TLS_I_KEY_EX, req), - TLS_S_KEY2_EX, srv); + TLS_S_KEY2_EX, srv ? TLS_T_SRV : TLS_T_CLT); } # endif /* _FFR_TLS_1 */ @@ -599,7 +605,7 @@ inittls(ctx, req, srv, certfile, keyfile, cacertpath, cacertfile, dhparam) { TLS_OK_F(dhparam, "DHParameters", bitset(TLS_I_DHPAR_EX, req), - TLS_S_DHPAR_EX, srv); + TLS_S_DHPAR_EX, TLS_T_OTHER); } } if (!ok) diff --git a/contrib/sendmail/src/util.c b/contrib/sendmail/src/util.c index dc0b1e4..911f692 100644 --- a/contrib/sendmail/src/util.c +++ b/contrib/sendmail/src/util.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -13,7 +13,7 @@ #include <sendmail.h> -SM_RCSID("@(#)$Id: util.c,v 8.363.2.7 2003/06/02 03:25:39 gshapiro Exp $") +SM_RCSID("@(#)$Id: util.c,v 8.363.2.10 2003/10/15 17:19:14 ca Exp $") #include <sysexits.h> #include <sm/xtrap.h> @@ -2380,7 +2380,8 @@ str2prt(s) *h++ = 'r'; break; default: - (void) sm_snprintf(h, l, "%03o", (int) c); + (void) sm_snprintf(h, l, "%03o", + (unsigned int)((unsigned char) c)); /* ** XXX since l is unsigned this may diff --git a/contrib/sendmail/src/version.c b/contrib/sendmail/src/version.c index 9f7eb12..ec91cfe 100644 --- a/contrib/sendmail/src/version.c +++ b/contrib/sendmail/src/version.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2003 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -13,6 +13,6 @@ #include <sm/gen.h> -SM_RCSID("@(#)$Id: version.c,v 8.104.2.22 2003/09/16 20:02:04 ca Exp $") +SM_RCSID("@(#)$Id: version.c,v 8.104.2.26 2004/01/13 00:29:26 ca Exp $") -char Version[] = "8.12.10"; +char Version[] = "8.12.11"; |