summaryrefslogtreecommitdiffstats
path: root/contrib/sendmail/src
diff options
context:
space:
mode:
authorgshapiro <gshapiro@FreeBSD.org>2001-01-21 22:21:43 +0000
committergshapiro <gshapiro@FreeBSD.org>2001-01-21 22:21:43 +0000
commite804c25cafdf47cc91627155f1389c81fa997eca (patch)
tree115a2c1b4e339bc9c060e940ec6ae17826a0f7e0 /contrib/sendmail/src
parentc5e098efbef941858129b84a112a036d572ba53c (diff)
downloadFreeBSD-src-e804c25cafdf47cc91627155f1389c81fa997eca.zip
FreeBSD-src-e804c25cafdf47cc91627155f1389c81fa997eca.tar.gz
Repair 8.11.2 merge conflicts
Diffstat (limited to 'contrib/sendmail/src')
-rw-r--r--contrib/sendmail/src/aliases.56
-rw-r--r--contrib/sendmail/src/conf.c114
-rw-r--r--contrib/sendmail/src/conf.h16
-rw-r--r--contrib/sendmail/src/headers.c69
-rw-r--r--contrib/sendmail/src/mailq.16
-rw-r--r--contrib/sendmail/src/mci.c16
-rw-r--r--contrib/sendmail/src/savemail.c12
-rw-r--r--contrib/sendmail/src/sendmail.86
8 files changed, 160 insertions, 85 deletions
diff --git a/contrib/sendmail/src/aliases.5 b/contrib/sendmail/src/aliases.5
index 7b274e7..1910da5 100644
--- a/contrib/sendmail/src/aliases.5
+++ b/contrib/sendmail/src/aliases.5
@@ -9,13 +9,13 @@
.\" the sendmail distribution.
.\"
.\"
-.\" $Id: aliases.5,v 8.15.4.1 2000/07/18 07:23:02 gshapiro Exp $
+.\" $Id: aliases.5,v 8.15.4.2 2000/12/14 23:08:15 gshapiro Exp $
.\"
.\" $FreeBSD$
.\"
-.TH ALIASES 5 "$Date: 2000/07/18 07:23:02 $"
+.TH ALIASES 5 "$Date: 2000/12/14 23:08:15 $"
.SH NAME
-.B aliases
+aliases
\- aliases file for sendmail
.SH SYNOPSIS
.B aliases
diff --git a/contrib/sendmail/src/conf.c b/contrib/sendmail/src/conf.c
index 6130bee..61424f4 100644
--- a/contrib/sendmail/src/conf.c
+++ b/contrib/sendmail/src/conf.c
@@ -12,7 +12,7 @@
*/
#ifndef lint
-static char id[] = "@(#)$Id: conf.c,v 8.646.2.2.2.32 2000/09/23 00:31:33 ca Exp $";
+static char id[] = "@(#)$Id: conf.c,v 8.646.2.2.2.61 2000/12/28 23:46:41 gshapiro Exp $";
#endif /* ! lint */
/* $FreeBSD$ */
@@ -382,7 +382,7 @@ setupmailers()
{
char buf[100];
- (void) strlcpy(buf, "prog, P=/bin/sh, F=lsoDq9, T=X-Unix/X-Unix/X-Unix, A=sh -c \201u",
+ (void) strlcpy(buf, "prog, P=/bin/sh, F=lsouDq9, T=X-Unix/X-Unix/X-Unix, A=sh -c \201u",
sizeof buf);
makemailer(buf);
@@ -827,7 +827,7 @@ switch_map_find(service, maptype, mapreturn)
char *maptype[MAXMAPSTACK];
short mapreturn[MAXMAPACTIONS];
{
- int svcno;
+ int svcno = 0;
int save_errno = errno;
#ifdef _USE_SUN_NSSWITCH_
@@ -847,7 +847,7 @@ switch_map_find(service, maptype, mapreturn)
else
lk = nsw_conf->lookups;
svcno = 0;
- while (lk != NULL)
+ while (lk != NULL && svcno < MAXMAPSTACK)
{
maptype[svcno] = lk->service_name;
if (lk->actions[__NSW_NOTFOUND] == __NSW_RETURN)
@@ -884,7 +884,7 @@ switch_map_find(service, maptype, mapreturn)
errno = save_errno;
return -1;
}
- for (svcno = 0; svcno < SVC_PATHSIZE; svcno++)
+ for (svcno = 0; svcno < SVC_PATHSIZE && svcno < MAXMAPSTACK; svcno++)
{
switch (svcinfo->svcpath[svc][svcno])
{
@@ -1514,6 +1514,7 @@ init_vendor_macros(e)
#define LA_KSTAT 12 /* special Solaris kstat(3k) implementation */
#define LA_DEVSHORT 13 /* read short from a device */
#define LA_ALPHAOSF 14 /* Digital UNIX (OSF/1 on Alpha) table() call */
+#define LA_PSET 15 /* Solaris per-processor-set load average */
/* do guesses based on general OS type */
#ifndef LA_TYPE
@@ -2071,6 +2072,28 @@ int getla()
#endif /* LA_TYPE == LA_ALPHAOSF */
+#if LA_TYPE == LA_PSET
+
+static int
+getla()
+{
+ double avenrun[3];
+
+ if (pset_getloadavg(PS_MYID, avenrun,
+ sizeof(avenrun) / sizeof(avenrun[0])) < 0)
+ {
+ if (tTd(3, 1))
+ dprintf("getla: pset_getloadavg failed: %s",
+ errstring(errno));
+ return -1;
+ }
+ if (tTd(3, 1))
+ dprintf("getla: %d\n", (int) (avenrun[0] +0.5));
+ return ((int) (avenrun[0] + 0.5));
+}
+
+#endif /* LA_TYPE == LA_PSET */
+
#if LA_TYPE == LA_ZERO
static int
@@ -2230,35 +2253,12 @@ refuseconnections(name, e, d)
ENVELOPE *e;
int d;
{
- time_t now;
- static time_t lastconn[MAXDAEMONS];
- static int conncnt[MAXDAEMONS];
-
-
#ifdef XLA
if (!xla_smtp_ok())
return TRUE;
#endif /* XLA */
- now = curtime();
- if (now != lastconn[d])
- {
- lastconn[d] = now;
- conncnt[d] = 0;
- }
- else if (conncnt[d]++ > ConnRateThrottle && ConnRateThrottle > 0)
- {
- /* sleep to flatten out connection load */
- sm_setproctitle(TRUE, e, "deferring connections on daemon %s: %d per second",
- name, ConnRateThrottle);
- if (LogLevel >= 9)
- sm_syslog(LOG_INFO, NOQID,
- "deferring connections on daemon %s: %d per second",
- name, ConnRateThrottle);
- (void) sleep(1);
- }
-
- CurrentLA = getla();
+ CurrentLA = sm_getla(NULL);
if (RefuseLA > 0 && CurrentLA >= RefuseLA)
{
sm_setproctitle(TRUE, e, "rejecting connections on daemon %s: load average: %d",
@@ -2475,7 +2475,7 @@ setproctitle(fmt, va_alist)
if (kmem < 0 || kmempid != getpid())
{
if (kmem >= 0)
- close(kmem);
+ (void) close(kmem);
kmem = open(_PATH_KMEM, O_RDWR, 0);
if (kmem < 0)
return;
@@ -3631,6 +3631,7 @@ transienterror(err)
** type -- type of the lock. Bits can be:
** LOCK_EX -- exclusive lock.
** LOCK_NB -- non-blocking.
+** LOCK_UN -- unlock.
**
** Returns:
** TRUE if the lock was acquired.
@@ -4139,7 +4140,7 @@ validate_connection(sap, hostname, e)
hostname, anynet_ntoa(sap));
if (rscheck("check_relay", hostname, anynet_ntoa(sap),
- e, TRUE, TRUE, 4) != EX_OK)
+ e, TRUE, TRUE, 4, NULL) != EX_OK)
{
static char reject[BUFSIZ*2];
extern char MsgBuf[];
@@ -4381,6 +4382,20 @@ getipnodebyaddr(addr, len, family, err)
*err = h_errno;
return h;
}
+
+# if _FFR_FREEHOSTENT
+void
+freehostent(h)
+ struct hostent *h;
+{
+ /*
+ ** Stub routine -- if they don't have getipnodeby*(),
+ ** they probably don't have the free routine either.
+ */
+
+ return;
+}
+# endif /* _FFR_FREEHOSTENT */
#endif /* NEEDSGETIPNODE && NETINET6 && __RES < 19990909 */
struct hostent *
@@ -4437,9 +4452,12 @@ sm_gethostbyname(name, family)
nmaps = switch_map_find("hosts", maptype, mapreturn);
while (--nmaps >= 0)
+ {
if (strcmp(maptype[nmaps], "nis") == 0 ||
strcmp(maptype[nmaps], "files") == 0)
break;
+ }
+
if (nmaps >= 0)
{
/* try short name */
@@ -4670,14 +4688,16 @@ add_hostnames(sa)
#if NETINET
case AF_INET:
hp = sm_gethostbyaddr((char *) &sa->sin.sin_addr,
- sizeof(sa->sin.sin_addr), sa->sa.sa_family);
+ sizeof(sa->sin.sin_addr),
+ sa->sa.sa_family);
break;
#endif /* NETINET */
#if NETINET6
case AF_INET6:
hp = sm_gethostbyaddr((char *) &sa->sin6.sin6_addr,
- sizeof(sa->sin6.sin6_addr), sa->sa.sa_family);
+ sizeof(sa->sin6.sin6_addr),
+ sa->sa.sa_family);
break;
#endif /* NETINET6 */
@@ -4750,6 +4770,9 @@ add_hostnames(sa)
*ha);
}
}
+#if _FFR_FREEHOSTENT && NETINET6
+ freehostent(hp);
+#endif /* _FFR_FREEHOSTENT && NETINET6 */
return 0;
}
/*
@@ -4818,7 +4841,7 @@ load_if_names()
if (numifs <= 0)
{
- close(s);
+ (void) close(s);
return;
}
lifc.lifc_len = numifs * sizeof (struct lifreq);
@@ -4829,7 +4852,8 @@ load_if_names()
{
if (tTd(0, 4))
dprintf("SIOCGLIFCONF failed: %s\n", errstring(errno));
- close(s);
+ (void) close(s);
+ free(lifc.lifc_buf);
return;
}
@@ -4862,7 +4886,10 @@ load_if_names()
s = socket(af, SOCK_DGRAM, 0);
if (s == -1)
+ {
+ free(lifc.lifc_buf);
return;
+ }
/*
** If we don't have a complete ifr structure,
@@ -4911,7 +4938,18 @@ load_if_names()
{
case AF_INET6:
ia6 = sa->sin6.sin6_addr;
- if (ia6.s6_addr == in6addr_any.s6_addr)
+# ifdef __KAME__
+ /* convert into proper scoped address - */
+ if ((IN6_IS_ADDR_LINKLOCAL(&ia6) ||
+ IN6_IS_ADDR_SITELOCAL(&ia6)) &&
+ sa->sin6.sin6_scope_id == 0)
+ {
+ sa->sin6.sin6_scope_id = ntohs(ia6.s6_addr[3] |
+ ((unsigned int) ia6.s6_addr[2] << 8));
+ ia6.s6_addr[2] = ia6.s6_addr[3] = 0;
+ }
+# endif /* __KAME__ */
+ if (IN6_IS_ADDR_UNSPECIFIED(&ia6))
{
addr = anynet_ntop(&ia6, buf6, sizeof buf6);
message("WARNING: interface %s is UP with %s address",
@@ -4962,7 +5000,7 @@ load_if_names()
(void) add_hostnames(sa);
}
free(lifc.lifc_buf);
- close(s);
+ (void) close(s);
#else /* NETINET6 && defined(SIOCGLIFCONF) */
# if defined(SIOCGIFCONF) && !SIOCGIFCONF_IS_BROKEN
int s;
@@ -5094,7 +5132,7 @@ load_if_names()
# if NETINET6
case AF_INET6:
ia6 = sa->sin6.sin6_addr;
- if (ia6.s6_addr == in6addr_any.s6_addr)
+ if (IN6_IS_ADDR_UNSPECIFIED(&ia6))
{
addr = anynet_ntop(&ia6, buf6, sizeof buf6);
message("WARNING: interface %s is UP with %s address",
diff --git a/contrib/sendmail/src/conf.h b/contrib/sendmail/src/conf.h
index 1ef1427..0eeecba 100644
--- a/contrib/sendmail/src/conf.h
+++ b/contrib/sendmail/src/conf.h
@@ -10,7 +10,7 @@
* the sendmail distribution.
*
*
- * $Id: conf.h,v 8.496.4.25 2000/08/08 23:50:40 ca Exp $
+ * $Id: conf.h,v 8.496.4.32 2000/12/15 19:20:53 gshapiro Exp $
*/
/* $FreeBSD$ */
@@ -92,6 +92,7 @@ struct rusage; /* forward declaration to get gcc to shut up in wait.h */
#define MAXSHORTSTR 203 /* max short string length */
#define MAXMACNAMELEN 25 /* max macro name length */
#define MAXMACROID 0377 /* max macro id number */
+ /* Must match (BITMAPBITS - 1) */
#ifndef MAXHDRSLEN
# define MAXHDRSLEN (32 * 1024) /* max size of message headers */
#endif /* ! MAXHDRSLEN */
@@ -528,12 +529,19 @@ typedef int pid_t;
# if SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206)
# define HASSNPRINTF 1 /* has snprintf starting in 2.6 */
# else /* SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206) */
- typedef int int32_t;
+# if _FFR_MILTER
+# define SM_INT32 int /* 32bit integer */
+# endif /* _FFR_MILTER */
# endif /* SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206) */
# if SOLARIS >= 20700 || (SOLARIS < 10000 && SOLARIS >= 207)
# ifndef LA_TYPE
# include <sys/loadavg.h>
-# define LA_TYPE LA_SUBR /* getloadavg(3c) appears in 2.7 */
+# if SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209)
+# include <sys/pset.h>
+# define LA_TYPE LA_PSET /* pset_getloadavg(3c) appears in 2.9 */
+# else
+# define LA_TYPE LA_SUBR /* getloadavg(3c) appears in 2.7 */
+# endif /* SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209) */
# endif /* ! LA_TYPE */
# define HASGETUSERSHELL 1 /* getusershell(3c) bug fixed in 2.7 */
# endif /* SOLARIS >= 20700 || (SOLARIS < 10000 && SOLARIS >= 207) */
@@ -1700,6 +1708,7 @@ typedef int pid_t;
# define __svr4__
# define SYS5SIGNALS 1
# define HASSETSID 1
+# define HASSNPRINTF 1
# define HASSETREUID 1
# define HASWAITPID 1
# define HASGETDTABLESIZE 1
@@ -1719,6 +1728,7 @@ typedef int pid_t;
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/sendmail.pid"
# endif /* ! _PATH_SENDMAILPID */
+# undef offsetof /* avoid stddefs.h, sys/sysmacros.h conflict */
#endif /* __svr5__ */
/* ###################################################################### */
diff --git a/contrib/sendmail/src/headers.c b/contrib/sendmail/src/headers.c
index 03472ac..c45c00f 100644
--- a/contrib/sendmail/src/headers.c
+++ b/contrib/sendmail/src/headers.c
@@ -12,14 +12,14 @@
*/
#ifndef lint
-static char id[] = "@(#)$Id: headers.c,v 8.203.4.7 2000/08/22 21:50:36 gshapiro Exp $";
+static char id[] = "@(#)$Id: headers.c,v 8.203.4.10 2000/10/13 17:54:30 gshapiro Exp $";
#endif /* ! lint */
/* $FreeBSD$ */
#include <sendmail.h>
-static bool fix_mime_header __P((char *));
+static size_t fix_mime_header __P((char *));
static int priencode __P((char *));
static void put_vanilla_header __P((HDR *, char *, MCI *));
@@ -166,7 +166,7 @@ chompheader(line, pflag, hdrp, e)
goto hse;
}
- setbitn(*p, mopts);
+ setbitn(bitidx(*p), mopts);
cond = TRUE;
p++;
}
@@ -346,7 +346,8 @@ hse:
free(sp);
define(macid("{currHeader}", NULL), newstr(qval), e);
define(macid("{hdr_name}", NULL), newstr(fname), e);
- (void) rscheck(rs, fvalue, NULL, e, stripcom, TRUE, 4);
+ (void) rscheck(rs, fvalue, NULL, e, stripcom, TRUE, 4,
+ NULL);
}
}
@@ -1390,14 +1391,18 @@ putheader(mci, hdr, e, flags)
wordinclass(h->h_field,
macid("{checkMIMEFieldHeaders}", NULL)))
{
- if (fix_mime_header(h->h_value))
+ size_t len;
+
+ len = fix_mime_header(h->h_value);
+ if (len > 0)
{
sm_syslog(LOG_ALERT, e->e_id,
- "Truncated MIME %s header due to field size (possible attack)",
- h->h_field);
+ "Truncated MIME %s header due to field size (length = %ld) (possible attack)",
+ h->h_field, (unsigned long) len);
if (tTd(34, 11))
- dprintf(" truncated MIME %s header due to field size (possible attack)\n",
- h->h_field);
+ dprintf(" truncated MIME %s header due to field size (length = %ld) (possible attack)\n",
+ h->h_field,
+ (unsigned long) len);
}
}
@@ -1405,15 +1410,19 @@ putheader(mci, hdr, e, flags)
wordinclass(h->h_field,
macid("{checkMIMETextHeaders}", NULL)))
{
- if (strlen(h->h_value) > (size_t)MaxMimeHeaderLength)
+ size_t len;
+
+ len = strlen(h->h_value);
+ if (len > (size_t) MaxMimeHeaderLength)
{
h->h_value[MaxMimeHeaderLength - 1] = '\0';
sm_syslog(LOG_ALERT, e->e_id,
- "Truncated long MIME %s header (possible attack)",
- h->h_field);
+ "Truncated long MIME %s header (length = %ld) (possible attack)",
+ h->h_field, (unsigned long) len);
if (tTd(34, 11))
- dprintf(" truncated long MIME %s header (possible attack)\n",
- h->h_field);
+ dprintf(" truncated long MIME %s header (length = %ld) (possible attack)\n",
+ h->h_field,
+ (unsigned long) len);
}
}
@@ -1421,14 +1430,19 @@ putheader(mci, hdr, e, flags)
wordinclass(h->h_field,
macid("{checkMIMEHeaders}", NULL)))
{
- if (shorten_rfc822_string(h->h_value, MaxMimeHeaderLength))
+ size_t len;
+
+ len = strlen(h->h_value);
+ if (shorten_rfc822_string(h->h_value,
+ MaxMimeHeaderLength))
{
sm_syslog(LOG_ALERT, e->e_id,
- "Truncated long MIME %s header (possible attack)",
- h->h_field);
+ "Truncated long MIME %s header (length = %ld) (possible attack)",
+ h->h_field, (unsigned long) len);
if (tTd(34, 11))
- dprintf(" truncated long MIME %s header (possible attack)\n",
- h->h_field);
+ dprintf(" truncated long MIME %s header (length = %ld) (possible attack)\n",
+ h->h_field,
+ (unsigned long) len);
}
}
@@ -1459,7 +1473,7 @@ putheader(mci, hdr, e, flags)
if (bitset(H_CHECK|H_ACHECK, h->h_flags) &&
!bitintersect(h->h_mflags, mci->mci_mailer->m_flags) &&
(h->h_macro == '\0' ||
- macvalue(h->h_macro & 0377, e) == NULL))
+ macvalue(bitidx(h->h_macro), e) == NULL))
{
if (tTd(34, 11))
dprintf(" (skipped)\n");
@@ -1821,22 +1835,23 @@ copyheader(header)
** string -- the full header
**
** Returns:
-** TRUE if the header was modified, FALSE otherwise
+** length of last offending field, 0 if all ok.
**
** Side Effects:
** string modified in place
*/
-static bool
+static size_t
fix_mime_header(string)
char *string;
{
- bool modified = FALSE;
char *begin = string;
char *end;
+ size_t len = 0;
+ size_t retlen = 0;
if (string == NULL || *string == '\0')
- return FALSE;
+ return 0;
/* Split on each ';' */
while ((end = find_character(begin, ';')) != NULL)
@@ -1846,9 +1861,11 @@ fix_mime_header(string)
*end = '\0';
+ len = strlen(begin);
+
/* Shorten individual parameter */
if (shorten_rfc822_string(begin, MaxMimeFieldLength))
- modified = TRUE;
+ retlen = len;
/* Collapse the possibly shortened string with rest */
bp = begin + strlen(begin);
@@ -1872,5 +1889,5 @@ fix_mime_header(string)
/* Move past ';' */
begin = end + 1;
}
- return modified;
+ return retlen;
}
diff --git a/contrib/sendmail/src/mailq.1 b/contrib/sendmail/src/mailq.1
index cfbdab4..8a73342 100644
--- a/contrib/sendmail/src/mailq.1
+++ b/contrib/sendmail/src/mailq.1
@@ -9,13 +9,13 @@
.\" the sendmail distribution.
.\"
.\"
-.\" $Id: mailq.1,v 8.14.28.2 2000/09/17 17:04:27 gshapiro Exp $
+.\" $Id: mailq.1,v 8.14.28.3 2000/12/14 23:08:15 gshapiro Exp $
.\"
.\" $FreeBSD$
.\"
-.TH MAILQ 1 "$Date: 2000/09/17 17:04:27 $"
+.TH MAILQ 1 "$Date: 2000/12/14 23:08:15 $"
.SH NAME
-.B mailq
+mailq
\- print the mail queue
.SH SYNOPSIS
.B mailq
diff --git a/contrib/sendmail/src/mci.c b/contrib/sendmail/src/mci.c
index 171c71b..e3c43f2 100644
--- a/contrib/sendmail/src/mci.c
+++ b/contrib/sendmail/src/mci.c
@@ -12,7 +12,7 @@
*/
#ifndef lint
-static char id[] = "@(#)$Id: mci.c,v 8.133.10.3 2000/06/23 16:17:06 ca Exp $";
+static char id[] = "@(#)$Id: mci.c,v 8.133.10.7 2000/12/12 00:39:34 ca Exp $";
#endif /* ! lint */
/* $FreeBSD$ */
@@ -276,8 +276,10 @@ mci_flush(doquit, allbut)
return;
for (i = 0; i < MaxMciCache; i++)
+ {
if (allbut != MciCache[i])
mci_uncache(&MciCache[i], doquit);
+ }
}
/*
** MCI_GET -- get information about a particular host
@@ -302,7 +304,7 @@ mci_get(host, m)
(void) mci_scan(NULL);
if (m->m_mno < 0)
- syserr("negative mno %d (%s)", m->m_mno, m->m_name);
+ syserr("!negative mno %d (%s)", m->m_mno, m->m_name);
s = stab(host, ST_MCI + m->m_mno, ST_ENTER);
mci = &s->s_mci;
@@ -385,7 +387,7 @@ mci_match(host, m)
register MCI *mci;
register STAB *s;
- if (m->m_mno < 0)
+ if (m->m_mno < 0 || m->m_mno > MAXMAILERS)
return FALSE;
s = stab(host, ST_MCI + m->m_mno, ST_FIND);
if (s == NULL)
@@ -462,7 +464,7 @@ static struct mcifbits MciFlags[] =
{ MCIF_8BITOK, "8BITOK" },
{ MCIF_CVT7TO8, "CVT7TO8" },
{ MCIF_INMIME, "INMIME" },
- { 0, NULL }
+ { 0, NULL }
};
@@ -1331,12 +1333,12 @@ mci_generate_persistent_path(host, path, pathlen, createflag)
#if NETINET || NETINET6
/* check for bogus bracketed address */
- if (host[0] == '[' &&
+ if (host[0] == '['
# if NETINET6
- inet_pton(AF_INET6, t_host, &in6_addr) != 1 &&
+ && inet_pton(AF_INET6, t_host, &in6_addr) != 1
# endif /* NETINET6 */
# if NETINET
- inet_addr(t_host) == INADDR_NONE
+ && inet_addr(t_host) == INADDR_NONE
# endif /* NETINET */
)
return -1;
diff --git a/contrib/sendmail/src/savemail.c b/contrib/sendmail/src/savemail.c
index a5173eb..8fbe30b 100644
--- a/contrib/sendmail/src/savemail.c
+++ b/contrib/sendmail/src/savemail.c
@@ -12,7 +12,7 @@
*/
#ifndef lint
-static char id[] = "@(#)$Id: savemail.c,v 8.212.4.5 2000/08/22 22:46:00 gshapiro Exp $";
+static char id[] = "@(#)$Id: savemail.c,v 8.212.4.11 2000/12/18 18:00:44 ca Exp $";
#endif /* ! lint */
/* $FreeBSD$ */
@@ -995,6 +995,8 @@ errbody(mci, e, separator)
if (e->e_msgboundary != NULL)
{
+ time_t now = curtime();
+
putline("", mci);
(void) snprintf(buf, sizeof buf, "--%s", e->e_msgboundary);
putline(buf, mci);
@@ -1048,7 +1050,13 @@ errbody(mci, e, separator)
char *action;
if (QS_IS_BADADDR(q->q_state))
+ {
+ /* RFC 1891, 6.2.6 (b) */
+ if (bitset(QHASNOTIFY, q->q_flags) &&
+ !bitset(QPINGONFAILURE, q->q_flags))
+ continue;
action = "failed";
+ }
else if (!bitset(QPRIMARY, q->q_flags))
continue;
else if (bitset(QDELIVERED, q->q_flags))
@@ -1198,7 +1206,7 @@ errbody(mci, e, separator)
/* Last-Attempt-Date: -- fine granularity */
if (q->q_statdate == (time_t) 0L)
- q->q_statdate = curtime();
+ q->q_statdate = now;
(void) snprintf(buf, sizeof buf,
"Last-Attempt-Date: %s",
arpadate(ctime(&q->q_statdate)));
diff --git a/contrib/sendmail/src/sendmail.8 b/contrib/sendmail/src/sendmail.8
index 2cf6600..4d9bce4 100644
--- a/contrib/sendmail/src/sendmail.8
+++ b/contrib/sendmail/src/sendmail.8
@@ -9,13 +9,13 @@
.\" the sendmail distribution.
.\"
.\"
-.\" $Id: sendmail.8,v 8.36.8.2 2000/09/07 21:14:00 ca Exp $
+.\" $Id: sendmail.8,v 8.36.8.3 2000/12/14 23:08:15 gshapiro Exp $
.\"
.\" $FreeBSD$
.\"
-.TH SENDMAIL 8 "$Date: 2000/09/07 21:14:00 $"
+.TH SENDMAIL 8 "$Date: 2000/12/14 23:08:15 $"
.SH NAME
-.B sendmail
+sendmail
\- an electronic mail transport agent
.SH SYNOPSIS
.B sendmail
OpenPOWER on IntegriCloud