Fix conflicts from merge of sendmail 8.11.1
This commit is contained in:
parent
a9ff8c001c
commit
d995d2ba6b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=66497
@ -157,6 +157,8 @@ define(`SITE', `ifelse(CONCAT($'2`, $3), SU,
|
||||
sinclude(_CF_DIR_`'siteconfig/$1.m4)')
|
||||
define(`EXPOSED_USER', `PUSHDIVERT(5)CE$1
|
||||
POPDIVERT`'dnl`'')
|
||||
ifdef(`_FFR_EXPOSED_USER_FILE', `define(`EXPOSED_USER_FILE', `PUSHDIVERT(5)FE$1
|
||||
POPDIVERT`'dnl`'')', `dnl')
|
||||
define(`LOCAL_USER', `PUSHDIVERT(5)CL$1
|
||||
POPDIVERT`'dnl`'')
|
||||
define(`MASQUERADE_AS', `define(`MASQUERADE_NAME', $1)')
|
||||
@ -252,4 +254,4 @@ define(`confMILTER_MACROS_ENVRCPT', ``{rcpt_mailer}, {rcpt_host}, {rcpt_addr}'')
|
||||
|
||||
|
||||
divert(0)dnl
|
||||
VERSIONID(`$Id: cfhead.m4,v 8.76.4.9 2000/07/11 23:50:30 geir Exp $')
|
||||
VERSIONID(`$Id: cfhead.m4,v 8.76.4.13 2000/08/24 17:09:50 gshapiro Exp $')
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers.
|
||||
.\" Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.
|
||||
.\" All rights reserved.
|
||||
.\" Copyright (c) 1990, 1993
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
@ -8,17 +8,17 @@
|
||||
.\" the sendmail distribution.
|
||||
.\"
|
||||
.\"
|
||||
.\" $Id: mail.local.8,v 8.14 1999/08/26 15:49:20 ca Exp $
|
||||
.\" $Id: mail.local.8,v 8.14.14.3 2000/09/17 17:04:25 gshapiro Exp $
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.TH MAIL.LOCAL 8 "$Date: 1999/08/26 15:49:20 $"
|
||||
.TH MAIL.LOCAL 8 "$Date: 2000/09/17 17:04:25 $"
|
||||
.SH NAME
|
||||
.B mail.local
|
||||
\- store mail in a mailbox
|
||||
.SH SYNOPSIS
|
||||
.B mail.local
|
||||
.RB [ \-7 "] [" \-B "] [" \-d "] [" \-l "] [" \-s "] [" \-f
|
||||
.RB [ \-7 "] [" \-B "] [" \-b "] [" \-d "] [" \-l "] [" \-s "] [" \-f
|
||||
.IR from "] " "user ..."
|
||||
.SH DESCRIPTION
|
||||
.B Mail.local
|
||||
@ -109,6 +109,12 @@ flock(2),
|
||||
getservbyname(3),
|
||||
comsat(8),
|
||||
sendmail(8)
|
||||
.SH WARNING
|
||||
.B mail.local
|
||||
escapes only "^From " lines that follow an empty line.
|
||||
If all lines starting with "From " should be escaped,
|
||||
use the 'E' flag for the local mailer in the
|
||||
sendmail.cf file.
|
||||
.SH HISTORY
|
||||
A superset of
|
||||
.B mail.local
|
||||
|
@ -19,7 +19,7 @@ static char copyright[] =
|
||||
#endif /* ! lint */
|
||||
|
||||
#ifndef lint
|
||||
static char id[] = "@(#)$Id: mail.local.c,v 8.143.4.13 2000/07/18 05:41:38 gshapiro Exp $";
|
||||
static char id[] = "@(#)$Id: mail.local.c,v 8.143.4.37 2000/09/22 00:49:10 doug Exp $";
|
||||
#endif /* ! lint */
|
||||
|
||||
/* $FreeBSD$ */
|
||||
@ -34,215 +34,219 @@ static char id[] = "@(#)$Id: mail.local.c,v 8.143.4.13 2000/07/18 05:41:38 gshap
|
||||
*/
|
||||
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/file.h>
|
||||
/* additional mode for open() */
|
||||
# define EXTRA_MODE 0
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/nameser.h>
|
||||
# include <sys/types.h>
|
||||
# include <sys/param.h>
|
||||
# include <sys/stat.h>
|
||||
# include <sys/socket.h>
|
||||
# include <sys/file.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <netdb.h>
|
||||
#include <pwd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <syslog.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#ifdef EX_OK
|
||||
# undef EX_OK /* unistd.h may have another use for this */
|
||||
#endif /* EX_OK */
|
||||
#include <sysexits.h>
|
||||
#include <ctype.h>
|
||||
# include <netinet/in.h>
|
||||
# include <arpa/nameser.h>
|
||||
|
||||
#ifndef __P
|
||||
# include "sendmail/cdefs.h"
|
||||
#endif /* ! __P */
|
||||
#include "sendmail/useful.h"
|
||||
# include <fcntl.h>
|
||||
# include <netdb.h>
|
||||
# include <pwd.h>
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include <syslog.h>
|
||||
# include <time.h>
|
||||
# include <unistd.h>
|
||||
# ifdef EX_OK
|
||||
# undef EX_OK /* unistd.h may have another use for this */
|
||||
# endif /* EX_OK */
|
||||
# include <sysexits.h>
|
||||
# include <ctype.h>
|
||||
|
||||
# ifndef __P
|
||||
# include "sendmail/cdefs.h"
|
||||
# endif /* ! __P */
|
||||
# include "sendmail/useful.h"
|
||||
|
||||
extern size_t strlcpy __P((char *, const char *, size_t));
|
||||
extern size_t strlcat __P((char *, const char *, size_t));
|
||||
|
||||
#if defined(BSD4_4) || defined(__osf__) || defined(__GNU_LIBRARY__) || defined(IRIX64) || defined(IRIX5) || defined(IRIX6)
|
||||
# ifndef HASSTRERROR
|
||||
# define HASSTRERROR 1
|
||||
# endif /* ! HASSTRERROR */
|
||||
#endif /* defined(BSD4_4) || defined(__osf__) || defined(__GNU_LIBRARY__) ||
|
||||
defined(IRIX64) || defined(IRIX5) || defined(IRIX6) */
|
||||
# if defined(BSD4_4) || defined(__osf__) || defined(__GNU_LIBRARY__) || defined(IRIX64) || defined(IRIX5) || defined(IRIX6)
|
||||
# ifndef HASSTRERROR
|
||||
# define HASSTRERROR 1
|
||||
# endif /* ! HASSTRERROR */
|
||||
# endif /* defined(BSD4_4) || defined(__osf__) || defined(__GNU_LIBRARY__) || defined(IRIX64) || defined(IRIX5) || defined(IRIX6) */
|
||||
|
||||
#include "sendmail/errstring.h"
|
||||
# include "sendmail/errstring.h"
|
||||
|
||||
# ifndef LOCKTO_RM
|
||||
# define LOCKTO_RM 300 /* timeout for stale lockfile removal */
|
||||
# endif /* ! LOCKTO_RM */
|
||||
# ifndef LOCKTO_GLOB
|
||||
# define LOCKTO_GLOB 400 /* global timeout for lockfile creation */
|
||||
# endif /* ! LOCKTO_GLOB */
|
||||
|
||||
#ifndef LOCKTO_RM
|
||||
# define LOCKTO_RM 300 /* timeout for stale lockfile removal */
|
||||
#endif /* LOCKTO_RM */
|
||||
#ifndef LOCKTO_GLOB
|
||||
# define LOCKTO_GLOB 400 /* global timeout for lockfile creation */
|
||||
#endif /* LOCKTO_GLOB */
|
||||
|
||||
#ifdef __STDC__
|
||||
# include <stdarg.h>
|
||||
# define REALLOC(ptr, size) realloc(ptr, size)
|
||||
#else /* __STDC__ */
|
||||
# include <varargs.h>
|
||||
# ifdef __STDC__
|
||||
# include <stdarg.h>
|
||||
# define REALLOC(ptr, size) realloc(ptr, size)
|
||||
# else /* __STDC__ */
|
||||
# include <varargs.h>
|
||||
/* define a realloc() which works for NULL pointers */
|
||||
# define REALLOC(ptr, size) (((ptr) == NULL) ? malloc(size) : realloc(ptr, size))
|
||||
#endif /* __STDC__ */
|
||||
# define REALLOC(ptr, size) (((ptr) == NULL) ? malloc(size) : realloc(ptr, size))
|
||||
# endif /* __STDC__ */
|
||||
|
||||
#if (defined(sun) && defined(__svr4__)) || defined(__SVR4)
|
||||
# define USE_LOCKF 1
|
||||
# define USE_SETEUID 1
|
||||
# define _PATH_MAILDIR "/var/mail"
|
||||
#endif /* (defined(sun) && defined(__svr4__)) || defined(__SVR4) */
|
||||
# if (defined(sun) && defined(__svr4__)) || defined(__SVR4)
|
||||
# define USE_LOCKF 1
|
||||
# define USE_SETEUID 1
|
||||
# define _PATH_MAILDIR "/var/mail"
|
||||
# endif /* (defined(sun) && defined(__svr4__)) || defined(__SVR4) */
|
||||
|
||||
#ifdef NCR_MP_RAS3
|
||||
# define USE_LOCKF 1
|
||||
# define HASSNPRINTF 1
|
||||
# define _PATH_MAILDIR "/var/mail"
|
||||
#endif /* NCR_MP_RAS3 */
|
||||
# ifdef NCR_MP_RAS3
|
||||
# define USE_LOCKF 1
|
||||
# define HASSNPRINTF 1
|
||||
# define _PATH_MAILDIR "/var/mail"
|
||||
# endif /* NCR_MP_RAS3 */
|
||||
|
||||
#if defined(_AIX)
|
||||
# define USE_LOCKF 1
|
||||
# define USE_SETEUID 1
|
||||
# define USE_VSYSLOG 0
|
||||
#endif /* defined(_AIX) */
|
||||
# if defined(_AIX)
|
||||
# define USE_LOCKF 1
|
||||
# define USE_SETEUID 1
|
||||
# define USE_VSYSLOG 0
|
||||
# endif /* defined(_AIX) */
|
||||
|
||||
#if defined(__hpux)
|
||||
# define USE_LOCKF 1
|
||||
# define USE_SETRESUID 1
|
||||
# define USE_VSYSLOG 0
|
||||
#endif /* defined(__hpux) */
|
||||
# if defined(__hpux)
|
||||
# define USE_LOCKF 1
|
||||
# define USE_SETRESUID 1
|
||||
# define USE_VSYSLOG 0
|
||||
# endif /* defined(__hpux) */
|
||||
|
||||
#ifdef DGUX
|
||||
# define HASSNPRINTF 1
|
||||
# define USE_LOCKF 1
|
||||
# define USE_VSYSLOG 0
|
||||
#endif /* DGUX */
|
||||
# ifdef DGUX
|
||||
# define HASSNPRINTF 1
|
||||
# define USE_LOCKF 1
|
||||
# define USE_VSYSLOG 0
|
||||
# endif /* DGUX */
|
||||
|
||||
#if defined(_CRAY)
|
||||
# if !defined(MAXPATHLEN)
|
||||
# define MAXPATHLEN PATHSIZE
|
||||
# endif /* !defined(MAXPATHLEN) */
|
||||
# define USE_VSYSLOG 0
|
||||
# define _PATH_MAILDIR "/usr/spool/mail"
|
||||
#endif /* defined(_CRAY) */
|
||||
# if defined(_CRAY)
|
||||
# if !defined(MAXPATHLEN)
|
||||
# define MAXPATHLEN PATHSIZE
|
||||
# endif /* !defined(MAXPATHLEN) */
|
||||
# define USE_VSYSLOG 0
|
||||
# define _PATH_MAILDIR "/usr/spool/mail"
|
||||
# endif /* defined(_CRAY) */
|
||||
|
||||
#if defined(ultrix)
|
||||
# define USE_VSYSLOG 0
|
||||
#endif /* defined(ultrix) */
|
||||
# if defined(ultrix)
|
||||
# define USE_VSYSLOG 0
|
||||
# endif /* defined(ultrix) */
|
||||
|
||||
#if defined(__osf__)
|
||||
# define USE_VSYSLOG 0
|
||||
#endif /* defined(__osf__) */
|
||||
# if defined(__osf__)
|
||||
# define USE_VSYSLOG 0
|
||||
# endif /* defined(__osf__) */
|
||||
|
||||
#if defined(NeXT) && !defined(__APPLE__)
|
||||
# include <libc.h>
|
||||
# define _PATH_MAILDIR "/usr/spool/mail"
|
||||
# define S_IRUSR S_IREAD
|
||||
# define S_IWUSR S_IWRITE
|
||||
#endif /* defined(NeXT) && !defined(__APPLE__) */
|
||||
# if defined(NeXT) && !defined(__APPLE__)
|
||||
# include <libc.h>
|
||||
# define _PATH_MAILDIR "/usr/spool/mail"
|
||||
# define S_IRUSR S_IREAD
|
||||
# define S_IWUSR S_IWRITE
|
||||
# endif /* defined(NeXT) && !defined(__APPLE__) */
|
||||
|
||||
#if defined(IRIX64) || defined(IRIX5) || defined(IRIX6)
|
||||
# include <paths.h>
|
||||
#endif /* defined(IRIX64) || defined(IRIX5) || defined(IRIX6) */
|
||||
# if defined(IRIX64) || defined(IRIX5) || defined(IRIX6)
|
||||
# include <paths.h>
|
||||
# endif /* defined(IRIX64) || defined(IRIX5) || defined(IRIX6) */
|
||||
|
||||
/*
|
||||
* If you don't have flock, you could try using lockf instead.
|
||||
*/
|
||||
|
||||
#ifdef USE_LOCKF
|
||||
# define flock(a, b) lockf(a, b, 0)
|
||||
# ifdef LOCK_EX
|
||||
# undef LOCK_EX
|
||||
# endif /* LOCK_EX */
|
||||
# define LOCK_EX F_LOCK
|
||||
#endif /* USE_LOCKF */
|
||||
# ifdef USE_LOCKF
|
||||
# define flock(a, b) lockf(a, b, 0)
|
||||
# ifdef LOCK_EX
|
||||
# undef LOCK_EX
|
||||
# endif /* LOCK_EX */
|
||||
# define LOCK_EX F_LOCK
|
||||
# endif /* USE_LOCKF */
|
||||
|
||||
#ifndef USE_VSYSLOG
|
||||
# define USE_VSYSLOG 1
|
||||
#endif /* ! USE_VSYSLOG */
|
||||
# ifndef USE_VSYSLOG
|
||||
# define USE_VSYSLOG 1
|
||||
# endif /* ! USE_VSYSLOG */
|
||||
|
||||
#ifndef LOCK_EX
|
||||
# include <sys/file.h>
|
||||
#endif /* ! LOCK_EX */
|
||||
# ifndef LOCK_EX
|
||||
# include <sys/file.h>
|
||||
# endif /* ! LOCK_EX */
|
||||
|
||||
#if defined(BSD4_4) || defined(__GLIBC__)
|
||||
# include <paths.h>
|
||||
# define _PATH_LOCTMP "/var/tmp/local.XXXXXX"
|
||||
#endif /* defined(BSD4_4) || defined(__GLIBC__) */
|
||||
# if defined(BSD4_4) || defined(__GLIBC__)
|
||||
# include <paths.h>
|
||||
# define _PATH_LOCTMP "/var/tmp/local.XXXXXX"
|
||||
# endif /* defined(BSD4_4) || defined(__GLIBC__) */
|
||||
|
||||
#ifdef BSD4_4
|
||||
# define HAS_ST_GEN 1
|
||||
#else /* BSD4_4 */
|
||||
# ifndef _BSD_VA_LIST_
|
||||
# define _BSD_VA_LIST_ va_list
|
||||
# endif /* ! _BSD_VA_LIST_ */
|
||||
#endif /* BSD4_4 */
|
||||
# ifdef BSD4_4
|
||||
# define HAS_ST_GEN 1
|
||||
# else /* BSD4_4 */
|
||||
# ifndef _BSD_VA_LIST_
|
||||
# define _BSD_VA_LIST_ va_list
|
||||
# endif /* ! _BSD_VA_LIST_ */
|
||||
# endif /* BSD4_4 */
|
||||
|
||||
#if defined(BSD4_4) || defined(linux)
|
||||
# define HASSNPRINTF 1
|
||||
#else /* defined(BSD4_4) || defined(linux) */
|
||||
# ifndef ultrix
|
||||
# if defined(BSD4_4) || defined(linux)
|
||||
# define HASSNPRINTF 1
|
||||
# else /* defined(BSD4_4) || defined(linux) */
|
||||
# ifndef ultrix
|
||||
extern FILE *fdopen __P((int, const char *));
|
||||
# endif /* ! ultrix */
|
||||
#endif /* defined(BSD4_4) || defined(linux) */
|
||||
# endif /* ! ultrix */
|
||||
# endif /* defined(BSD4_4) || defined(linux) */
|
||||
|
||||
#if SOLARIS >= 20300 || (SOLARIS < 10000 && SOLARIS >= 203)
|
||||
# define CONTENTLENGTH 1 /* Needs the Content-Length header */
|
||||
#endif /* SOLARIS >= 20300 || (SOLARIS < 10000 && SOLARIS >= 203) */
|
||||
# if SOLARIS >= 20300 || (SOLARIS < 10000 && SOLARIS >= 203)
|
||||
# define CONTENTLENGTH 1 /* Needs the Content-Length header */
|
||||
# endif /* SOLARIS >= 20300 || (SOLARIS < 10000 && SOLARIS >= 203) */
|
||||
|
||||
#if SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206)
|
||||
# define HASSNPRINTF 1 /* has snprintf starting in 2.6 */
|
||||
#endif /* SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206) */
|
||||
# if SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206)
|
||||
# define HASSNPRINTF 1 /* has snprintf starting in 2.6 */
|
||||
# endif /* SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206) */
|
||||
|
||||
#ifdef HPUX11
|
||||
# define HASSNPRINTF 1 /* has snprintf starting in 2.6 */
|
||||
#endif /* HPUX11 */
|
||||
# ifdef HPUX11
|
||||
# define HASSNPRINTF 1 /* has snprintf starting in 11.X */
|
||||
# endif /* HPUX11 */
|
||||
|
||||
#if _AIX4 >= 40300
|
||||
# define HASSNPRINTF 1 /* has snprintf starting in 4.3 */
|
||||
#endif /* _AIX4 >= 40300 */
|
||||
# if _AIX4 >= 40300
|
||||
# define HASSNPRINTF 1 /* has snprintf starting in 4.3 */
|
||||
# endif /* _AIX4 >= 40300 */
|
||||
|
||||
#if !HASSNPRINTF
|
||||
# if !HASSNPRINTF
|
||||
extern int snprintf __P((char *, size_t, const char *, ...));
|
||||
# ifndef _CRAY
|
||||
# ifndef _CRAY
|
||||
extern int vsnprintf __P((char *, size_t, const char *, ...));
|
||||
# endif /* ! _CRAY */
|
||||
#endif /* !HASSNPRINTF */
|
||||
# endif /* ! _CRAY */
|
||||
# endif /* !HASSNPRINTF */
|
||||
|
||||
/*
|
||||
** If you don't have setreuid, and you have saved uids, and you have
|
||||
** a seteuid() call that doesn't try to emulate using setuid(), then
|
||||
** you can try defining USE_SETEUID.
|
||||
*/
|
||||
#ifdef USE_SETEUID
|
||||
# define setreuid(r, e) seteuid(e)
|
||||
#endif /* USE_SETEUID */
|
||||
# ifdef USE_SETEUID
|
||||
# define setreuid(r, e) seteuid(e)
|
||||
# endif /* USE_SETEUID */
|
||||
|
||||
/*
|
||||
** And of course on hpux you have setresuid()
|
||||
*/
|
||||
#ifdef USE_SETRESUID
|
||||
# define setreuid(r, e) setresuid(-1, e, -1)
|
||||
#endif /* USE_SETRESUID */
|
||||
# ifdef USE_SETRESUID
|
||||
# define setreuid(r, e) setresuid(-1, e, -1)
|
||||
# endif /* USE_SETRESUID */
|
||||
|
||||
#ifndef _PATH_LOCTMP
|
||||
# define _PATH_LOCTMP "/var/tmp/local.XXXXXX"
|
||||
#endif /* ! _PATH_LOCTMP */
|
||||
# ifndef _PATH_MAILDIR
|
||||
# define _PATH_MAILDIR "/var/spool/mail"
|
||||
# endif /* ! _PATH_MAILDIR */
|
||||
# ifndef _PATH_LOCTMP
|
||||
# define _PATH_LOCTMP "/var/tmp/local.XXXXXX"
|
||||
# endif /* ! _PATH_LOCTMP */
|
||||
# ifndef _PATH_MAILDIR
|
||||
# define _PATH_MAILDIR "/var/spool/mail"
|
||||
# endif /* ! _PATH_MAILDIR */
|
||||
|
||||
#ifndef S_ISREG
|
||||
# define S_ISREG(mode) (((mode) & _S_IFMT) == S_IFREG)
|
||||
#endif /* ! S_ISREG */
|
||||
# ifndef S_ISREG
|
||||
# define S_ISREG(mode) (((mode) & _S_IFMT) == S_IFREG)
|
||||
# endif /* ! S_ISREG */
|
||||
|
||||
#ifdef MAILLOCK
|
||||
# include <maillock.h>
|
||||
#endif /* MAILLOCK */
|
||||
# ifdef MAILLOCK
|
||||
# include <maillock.h>
|
||||
# endif /* MAILLOCK */
|
||||
|
||||
# define U_UID pw->pw_uid
|
||||
# define U_GID pw->pw_gid
|
||||
|
||||
#ifndef INADDRSZ
|
||||
# define INADDRSZ 4 /* size of an IPv4 address in bytes */
|
||||
@ -538,7 +542,8 @@ dolmtp(bouncequota)
|
||||
p = strchr(rcpt_addr[i], '+');
|
||||
if (p != NULL)
|
||||
*p++ = '\0';
|
||||
deliver(msgfd, rcpt_addr[i], bouncequota);
|
||||
deliver(msgfd, rcpt_addr[i],
|
||||
bouncequota);
|
||||
}
|
||||
(void) close(msgfd);
|
||||
goto rset;
|
||||
@ -628,7 +633,7 @@ dolmtp(bouncequota)
|
||||
{
|
||||
rcpt_alloc += RCPT_GROW;
|
||||
rcpt_addr = (char **)
|
||||
REALLOC((char *)rcpt_addr,
|
||||
REALLOC((char *) rcpt_addr,
|
||||
rcpt_alloc *
|
||||
sizeof(char **));
|
||||
if (rcpt_addr == NULL)
|
||||
@ -811,7 +816,7 @@ store(from, lmtprcpts)
|
||||
{
|
||||
if (eline && line[0] == 'F' &&
|
||||
!memcmp(line, "From ", 5))
|
||||
(void)putc('>', fp);
|
||||
(void) putc('>', fp);
|
||||
eline = FALSE;
|
||||
#ifdef CONTENTLENGTH
|
||||
/* discard existing "Content-Length:" headers */
|
||||
@ -879,7 +884,8 @@ store(from, lmtprcpts)
|
||||
snprintf(line, sizeof line, "%s\n",
|
||||
quad_to_string(BodyLength));
|
||||
else
|
||||
snprintf(line, sizeof line, "%ld\n", (long) BodyLength);
|
||||
snprintf(line, sizeof line, "%ld\n",
|
||||
(long) BodyLength);
|
||||
strlcpy(&ContentHdr[16], line, sizeof(ContentHdr) - 16);
|
||||
}
|
||||
else
|
||||
@ -940,7 +946,8 @@ deliver(fd, name, bouncequota)
|
||||
if (LMTPMode)
|
||||
{
|
||||
if (ExitVal == EX_TEMPFAIL)
|
||||
printf("451 4.3.0 cannot lookup name: %s\r\n", name);
|
||||
printf("451 4.3.0 cannot lookup name: %s\r\n",
|
||||
name);
|
||||
else
|
||||
printf("550 5.1.1 unknown name: %s\r\n", name);
|
||||
}
|
||||
@ -1030,7 +1037,7 @@ deliver(fd, name, bouncequota)
|
||||
{
|
||||
int save_errno;
|
||||
int mode = S_IRUSR|S_IWUSR;
|
||||
gid_t gid = pw->pw_gid;
|
||||
gid_t gid = U_GID;
|
||||
|
||||
#ifdef MAILGID
|
||||
(void) umask(0007);
|
||||
@ -1038,8 +1045,8 @@ deliver(fd, name, bouncequota)
|
||||
mode |= S_IRGRP|S_IWGRP;
|
||||
#endif /* MAILGID */
|
||||
|
||||
mbfd = open(path, O_APPEND|O_CREAT|O_EXCL|O_WRONLY, mode);
|
||||
|
||||
mbfd = open(path, O_APPEND|O_CREAT|O_EXCL|O_WRONLY|EXTRA_MODE,
|
||||
mode);
|
||||
save_errno = errno;
|
||||
|
||||
if (lstat(path, &sb) < 0)
|
||||
@ -1049,36 +1056,61 @@ deliver(fd, name, bouncequota)
|
||||
"%s: lstat: file changed after open", path);
|
||||
goto err1;
|
||||
}
|
||||
else
|
||||
sb.st_uid = pw->pw_uid;
|
||||
if (mbfd == -1)
|
||||
{
|
||||
if (save_errno == EEXIST)
|
||||
goto tryagain;
|
||||
|
||||
/* open failed, don't try again */
|
||||
mailerr("450 4.2.0", "%s: %s", path,
|
||||
errstring(save_errno));
|
||||
goto err0;
|
||||
}
|
||||
else if (fchown(mbfd, pw->pw_uid, gid) < 0)
|
||||
else if (fchown(mbfd, U_UID, gid) < 0)
|
||||
{
|
||||
mailerr("451 4.3.0", "chown %u.%u: %s",
|
||||
pw->pw_uid, gid, name);
|
||||
U_UID, gid, name);
|
||||
goto err1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
** open() was successful, now close it so can
|
||||
** be opened as the right owner again.
|
||||
** Paranoia: reset mbdf since the file descriptor
|
||||
** is no longer valid; better safe than sorry.
|
||||
*/
|
||||
|
||||
sb.st_uid = U_UID;
|
||||
(void) close(mbfd);
|
||||
mbfd = -1;
|
||||
}
|
||||
}
|
||||
else if (sb.st_nlink != 1 || !S_ISREG(sb.st_mode))
|
||||
{
|
||||
mailerr("550 5.2.0", "%s: irregular file", path);
|
||||
goto err0;
|
||||
}
|
||||
else if (sb.st_uid != pw->pw_uid)
|
||||
else if (sb.st_uid != U_UID)
|
||||
{
|
||||
ExitVal = EX_CANTCREAT;
|
||||
mailerr("550 5.2.0", "%s: wrong ownership (%d)",
|
||||
path, sb.st_uid);
|
||||
goto err0;
|
||||
}
|
||||
else
|
||||
mbfd = open(path, O_APPEND|O_WRONLY, 0);
|
||||
|
||||
if (mbfd == -1)
|
||||
/* change UID for quota checks */
|
||||
if (setreuid(0, U_UID) < 0)
|
||||
{
|
||||
mailerr("450 4.2.0", "setreuid(0, %d): %s (r=%d, e=%d)",
|
||||
U_UID, errstring(errno), getuid(), geteuid());
|
||||
goto err1;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "new euid = %d\n", geteuid());
|
||||
#endif /* DEBUG */
|
||||
mbfd = open(path, O_APPEND|O_WRONLY|EXTRA_MODE, 0);
|
||||
if (mbfd < 0)
|
||||
{
|
||||
mailerr("450 4.2.0", "%s: %s", path, errstring(errno));
|
||||
goto err0;
|
||||
@ -1089,9 +1121,9 @@ deliver(fd, name, bouncequota)
|
||||
!S_ISREG(fsb.st_mode) ||
|
||||
sb.st_dev != fsb.st_dev ||
|
||||
sb.st_ino != fsb.st_ino ||
|
||||
#if HAS_ST_GEN && 0 /* AFS returns random values for st_gen */
|
||||
# if HAS_ST_GEN && 0 /* AFS returns random values for st_gen */
|
||||
sb.st_gen != fsb.st_gen ||
|
||||
#endif /* HAS_ST_GEN && 0 */
|
||||
# endif /* HAS_ST_GEN && 0 */
|
||||
sb.st_uid != fsb.st_uid)
|
||||
{
|
||||
ExitVal = EX_TEMPFAIL;
|
||||
@ -1113,11 +1145,11 @@ deliver(fd, name, bouncequota)
|
||||
/* Get the starting offset of the new message for biff. */
|
||||
curoff = lseek(mbfd, (off_t)0, SEEK_END);
|
||||
if (sizeof curoff > sizeof(long))
|
||||
(void)snprintf(biffmsg, sizeof(biffmsg), "%s@%s\n",
|
||||
name, quad_to_string(curoff));
|
||||
(void) snprintf(biffmsg, sizeof(biffmsg), "%s@%s\n",
|
||||
name, quad_to_string(curoff));
|
||||
else
|
||||
(void)snprintf(biffmsg, sizeof(biffmsg), "%s@%ld\n",
|
||||
name, curoff);
|
||||
(void) snprintf(biffmsg, sizeof(biffmsg), "%s@%ld\n",
|
||||
name, (long) curoff);
|
||||
}
|
||||
|
||||
/* Copy the message into the file. */
|
||||
@ -1127,14 +1159,8 @@ deliver(fd, name, bouncequota)
|
||||
errstring(errno));
|
||||
goto err1;
|
||||
}
|
||||
if (setreuid(0, pw->pw_uid) < 0)
|
||||
{
|
||||
mailerr("450 4.2.0", "setreuid(0, %d): %s (r=%d, e=%d)",
|
||||
pw->pw_uid, errstring(errno), getuid(), geteuid());
|
||||
goto err1;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "new euid = %d\n", geteuid());
|
||||
fprintf(stderr, "before writing: euid = %d\n", geteuid());
|
||||
#endif /* DEBUG */
|
||||
#ifdef CONTENTLENGTH
|
||||
headerbytes = (BodyLength >= 0) ? HeaderLength : -1 ;
|
||||
@ -1203,7 +1229,8 @@ deliver(fd, name, bouncequota)
|
||||
fprintf(stderr, "reset euid = %d\n", geteuid());
|
||||
#endif /* DEBUG */
|
||||
(void) ftruncate(mbfd, curoff);
|
||||
err1: (void) close(mbfd);
|
||||
err1: if (mbfd >= 0)
|
||||
(void) close(mbfd);
|
||||
err0: unlockmbox();
|
||||
return;
|
||||
}
|
||||
@ -1250,7 +1277,7 @@ int
|
||||
lockmbox(name)
|
||||
char *name;
|
||||
{
|
||||
int r;
|
||||
int r = 0;
|
||||
|
||||
if (Locked)
|
||||
return 0;
|
||||
@ -1398,7 +1425,7 @@ void
|
||||
usage()
|
||||
{
|
||||
ExitVal = EX_USAGE;
|
||||
mailerr(NULL, "usage: mail.local [-B] [-l] [-f from] [-s] user ...");
|
||||
mailerr(NULL, "usage: mail.local [-7] [-B] [-b] [-l] [-f from] user ...");
|
||||
exit(ExitVal);
|
||||
}
|
||||
|
||||
@ -1674,8 +1701,8 @@ _gettemp(path, doopen)
|
||||
{
|
||||
if (doopen)
|
||||
{
|
||||
if ((*doopen =
|
||||
open(path, O_CREAT|O_EXCL|O_RDWR, 0600)) >= 0)
|
||||
if ((*doopen = open(path, O_CREAT|O_EXCL|O_RDWR,
|
||||
0600)) >= 0)
|
||||
return(1);
|
||||
if (errno != EEXIST)
|
||||
return(0);
|
||||
|
@ -14,14 +14,14 @@
|
||||
|
||||
#ifndef lint
|
||||
static char copyright[] =
|
||||
"@(#) Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers.\n\
|
||||
"@(#) Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.\n\
|
||||
All rights reserved.\n\
|
||||
Copyright (c) 1988, 1993\n\
|
||||
The Regents of the University of California. All rights reserved.\n";
|
||||
#endif /* ! lint */
|
||||
|
||||
#ifndef lint
|
||||
static char id[] = "@(#)$Id: mailstats.c,v 8.53.16.10 2000/07/18 05:51:15 gshapiro Exp $";
|
||||
static char id[] = "@(#)$Id: mailstats.c,v 8.53.16.11 2000/09/17 17:04:26 gshapiro Exp $";
|
||||
#endif /* ! lint */
|
||||
|
||||
/* $FreeBSD$ */
|
||||
|
@ -21,7 +21,7 @@ static char copyright[] =
|
||||
#endif /* ! lint */
|
||||
|
||||
#ifndef lint
|
||||
static char id[] = "@(#)$Id: makemap.c,v 8.135.4.10 2000/07/18 05:41:39 gshapiro Exp $";
|
||||
static char id[] = "@(#)$Id: makemap.c,v 8.135.4.11 2000/09/13 01:11:10 gshapiro Exp $";
|
||||
#endif /* ! lint */
|
||||
|
||||
/* $FreeBSD$ */
|
||||
@ -339,7 +339,7 @@ main(argc, argv)
|
||||
|
||||
(void) database->smdb_sync(database, 0);
|
||||
|
||||
if (geteuid() == 0 && TrustedUid != 0)
|
||||
if (!unmake && geteuid() == 0 && TrustedUid != 0)
|
||||
{
|
||||
errno = database->smdb_set_owner(database, TrustedUid, -1);
|
||||
if (errno != SMDBE_OK)
|
||||
|
@ -19,7 +19,7 @@ static char copyright[] =
|
||||
#endif /* ! lint */
|
||||
|
||||
#ifndef lint
|
||||
static char id[] = "@(#)$Id: rmail.c,v 8.39.4.5 2000/07/18 05:55:29 gshapiro Exp $";
|
||||
static char id[] = "@(#)$Id: rmail.c,v 8.39.4.8 2000/09/16 22:20:25 gshapiro Exp $";
|
||||
#endif /* ! lint */
|
||||
|
||||
/* $FreeBSD$ */
|
||||
@ -91,9 +91,9 @@ static char id[] = "@(#)$Id: rmail.c,v 8.39.4.5 2000/07/18 05:55:29 gshapiro Exp
|
||||
# define STDIN_FILENO 0
|
||||
#endif /* ! STDIN_FILENO */
|
||||
|
||||
#if defined(BSD4_4) || defined(linux) || SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206) || _AIX4 >= 40300
|
||||
#if defined(BSD4_4) || defined(linux) || SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206) || _AIX4 >= 40300 || defined(HPUX11)
|
||||
# define HASSNPRINTF 1
|
||||
#endif /* defined(BSD4_4) || defined(linux) || SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206) || _AIX4 >= 40300 */
|
||||
#endif /* defined(BSD4_4) || defined(linux) || SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206) || _AIX4 >= 40300 || defined(HPUX11) */
|
||||
|
||||
#if defined(sun) && !defined(BSD) && !defined(SOLARIS) && !defined(__svr4__) && !defined(__SVR4)
|
||||
# define memmove(d, s, l) (bcopy((s), (d), (l)))
|
||||
@ -153,7 +153,7 @@ main(argc, argv)
|
||||
FILE *fp;
|
||||
char *addrp = NULL, *domain, *p, *t;
|
||||
char *from_path, *from_sys, *from_user;
|
||||
char *args[100], buf[2048], lbuf[2048];
|
||||
char **args, buf[2048], lbuf[2048];
|
||||
struct stat sb;
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
@ -312,8 +312,13 @@ main(argc, argv)
|
||||
offset = (off_t)ftell(stdin);
|
||||
}
|
||||
|
||||
|
||||
/* Allocate args (with room for sendmail args as well as recipients */
|
||||
args = (char **)xalloc(sizeof(*args) * (10 + argc));
|
||||
|
||||
i = 0;
|
||||
args[i++] = _PATH_SENDMAIL; /* Build sendmail's argument list. */
|
||||
args[i++] = "-G"; /* relay submission */
|
||||
args[i++] = "-oee"; /* No errors, just status. */
|
||||
#ifdef QUEUE_ONLY
|
||||
args[i++] = "-odq"; /* Queue it, don't try to deliver. */
|
||||
@ -344,7 +349,7 @@ main(argc, argv)
|
||||
** the address (helps to pass addrs like @gw1,@gw2:aa@bb)
|
||||
*/
|
||||
|
||||
while (*argv)
|
||||
while (*argv != NULL)
|
||||
{
|
||||
if (**argv == '-')
|
||||
err(EX_USAGE, "dash precedes argument: %s", *argv);
|
||||
@ -359,13 +364,18 @@ main(argc, argv)
|
||||
snprintf(args[i++], len, "<%s>", *argv);
|
||||
}
|
||||
argv++;
|
||||
argc--;
|
||||
|
||||
/* Paranoia check, argc used for args[] bound */
|
||||
if (argc < 0)
|
||||
err(EX_SOFTWARE, "Argument count mismatch");
|
||||
}
|
||||
args[i] = 0;
|
||||
args[i] = NULL;
|
||||
|
||||
if (debug)
|
||||
{
|
||||
fprintf(stderr, "Sendmail arguments:\n");
|
||||
for (i = 0; args[i]; i++)
|
||||
for (i = 0; args[i] != NULL; i++)
|
||||
fprintf(stderr, "\t%s\n", args[i]);
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static char copyright[] =
|
||||
"@(#) Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers.\n\
|
||||
"@(#) Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.\n\
|
||||
All rights reserved.\n\
|
||||
Copyright (c) 1993 Eric P. Allman. All rights reserved.\n\
|
||||
Copyright (c) 1993\n\
|
||||
@ -21,7 +21,7 @@ static char copyright[] =
|
||||
#endif /* ! lint */
|
||||
|
||||
#ifndef lint
|
||||
static char id[] = "@(#)$Id: smrsh.c,v 8.31.4.4 2000/05/25 21:44:29 gshapiro Exp $";
|
||||
static char id[] = "@(#)$Id: smrsh.c,v 8.31.4.5 2000/09/17 17:04:27 gshapiro Exp $";
|
||||
#endif /* ! lint */
|
||||
|
||||
/* $FreeBSD$ */
|
||||
|
@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char id[] = "@(#)$Id: conf.c,v 8.646.2.2.2.23 2000/07/15 17:35:18 gshapiro Exp $";
|
||||
static char id[] = "@(#)$Id: conf.c,v 8.646.2.2.2.32 2000/09/23 00:31:33 ca Exp $";
|
||||
#endif /* ! lint */
|
||||
|
||||
/* $FreeBSD$ */
|
||||
@ -199,6 +199,12 @@ struct dbsval DontBlameSendmailValues[] =
|
||||
#if _FFR_UNSAFE_SASL
|
||||
{ "groupreadablesaslfile", DBS_GROUPREADABLESASLFILE },
|
||||
#endif /* _FFR_UNSAFE_SASL */
|
||||
#if _FFR_UNSAFE_WRITABLE_INCLUDE
|
||||
{ "groupwritableforwardfile", DBS_GROUPWRITABLEFORWARDFILE },
|
||||
{ "groupwritableincludefile", DBS_GROUPWRITABLEINCLUDEFILE },
|
||||
{ "worldwritableforwardfile", DBS_WORLDWRITABLEFORWARDFILE },
|
||||
{ "worldwritableincludefile", DBS_WORLDWRITABLEINCLUDEFILE },
|
||||
#endif /* _FFR_UNSAFE_WRITABLE_INCLUDE */
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
@ -2147,7 +2153,7 @@ sm_getla(e)
|
||||
{
|
||||
char labuf[8];
|
||||
|
||||
snprintf(labuf, sizeof labuf, "%d", CurrentLA);
|
||||
snprintf(labuf, sizeof labuf, "%d", la);
|
||||
define(macid("{load_avg}", NULL), newstr(labuf), e);
|
||||
}
|
||||
return la;
|
||||
@ -2986,7 +2992,7 @@ setsid __P ((void))
|
||||
fd = open("/dev/tty", O_RDWR, 0);
|
||||
if (fd >= 0)
|
||||
{
|
||||
(void) ioctl(fd, (int) TIOCNOTTY, (char *) 0);
|
||||
(void) ioctl(fd, TIOCNOTTY, (char *) 0);
|
||||
(void) close(fd);
|
||||
}
|
||||
# endif /* TIOCNOTTY */
|
||||
@ -4919,7 +4925,7 @@ load_if_names()
|
||||
if (addr != NULL)
|
||||
(void) snprintf(ip_addr, sizeof ip_addr,
|
||||
"[%.*s]",
|
||||
sizeof ip_addr - 3, addr);
|
||||
(int) sizeof ip_addr - 3, addr);
|
||||
break;
|
||||
|
||||
case AF_INET:
|
||||
@ -4934,7 +4940,7 @@ load_if_names()
|
||||
|
||||
/* save IP address in text from */
|
||||
(void) snprintf(ip_addr, sizeof ip_addr, "[%.*s]",
|
||||
sizeof ip_addr - 3, inet_ntoa(ia));
|
||||
(int) sizeof ip_addr - 3, inet_ntoa(ia));
|
||||
break;
|
||||
}
|
||||
|
||||
@ -4995,6 +5001,7 @@ load_if_names()
|
||||
if (tTd(0, 4))
|
||||
dprintf("SIOCGIFCONF failed: %s\n", errstring(errno));
|
||||
(void) close(s);
|
||||
free(ifc.ifc_buf);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
* the sendmail distribution.
|
||||
*
|
||||
*
|
||||
* $Id: conf.h,v 8.496.4.20 2000/07/15 17:35:19 gshapiro Exp $
|
||||
* $Id: conf.h,v 8.496.4.25 2000/08/08 23:50:40 ca Exp $
|
||||
*/
|
||||
|
||||
/* $FreeBSD$ */
|
||||
@ -527,6 +527,8 @@ typedef int pid_t;
|
||||
# endif /* SOLARIS >= 20500 || (SOLARIS < 10000 && SOLARIS >= 205) */
|
||||
# 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;
|
||||
# endif /* SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206) */
|
||||
# if SOLARIS >= 20700 || (SOLARIS < 10000 && SOLARIS >= 207)
|
||||
# ifndef LA_TYPE
|
||||
@ -536,9 +538,9 @@ typedef int pid_t;
|
||||
# define HASGETUSERSHELL 1 /* getusershell(3c) bug fixed in 2.7 */
|
||||
# endif /* SOLARIS >= 20700 || (SOLARIS < 10000 && SOLARIS >= 207) */
|
||||
# if SOLARIS >= 20800 || (SOLARIS < 10000 && SOLARIS >= 208)
|
||||
# undef NETINET6
|
||||
# define NETINET6 1 /* IPv6 added in 2.8 */
|
||||
# define HASSTRL 1 /* str*(3) added in 2.8 */
|
||||
# undef _PATH_SENDMAILPID /* tmpfs /var/run added in 2.8 */
|
||||
# define _PATH_SENDMAILPID "/var/run/sendmail.pid"
|
||||
# endif /* SOLARIS >= 20800 || (SOLARIS < 10000 && SOLARIS >= 208) */
|
||||
# ifndef HASGETUSERSHELL
|
||||
# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps pre-2.7 */
|
||||
@ -2791,9 +2793,14 @@ typedef void (*sigfunc_t) __P((int));
|
||||
# define LOG_DEBUG 7 /* debug-level messages */
|
||||
#endif /* !LOG */
|
||||
|
||||
#if SFIO && defined(ERRLIST_PREDEFINED)
|
||||
# undef ERRLIST_PREDEFINED
|
||||
#endif /* SFIO && defined(ERRLIST_PREDEFINED) */
|
||||
#if SFIO
|
||||
# ifdef ERRLIST_PREDEFINED
|
||||
# undef ERRLIST_PREDEFINED
|
||||
# endif /* ERRLIST_PREDEFINED */
|
||||
# if !HASSNPRINTF
|
||||
# define HASSNPRINTF 1 /* sfio includes snprintf() */
|
||||
# endif /* !HASSNPRINTF */
|
||||
#endif /* SFIO */
|
||||
|
||||
#ifndef SFIO_STDIO_COMPAT
|
||||
# define SFIO_STDIO_COMPAT 0
|
||||
|
@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char id[] = "@(#)$Id: headers.c,v 8.203.4.6 2000/07/19 02:53:32 ca Exp $";
|
||||
static char id[] = "@(#)$Id: headers.c,v 8.203.4.7 2000/08/22 21:50:36 gshapiro Exp $";
|
||||
#endif /* ! lint */
|
||||
|
||||
/* $FreeBSD$ */
|
||||
@ -53,9 +53,7 @@ setupheaders()
|
||||
**
|
||||
** Parameters:
|
||||
** line -- header as a text line.
|
||||
** pflag -- flags:
|
||||
** CHHDR_DEF: this is a default value.
|
||||
** CHHDR_CHECK: call rulesets.
|
||||
** pflag -- flags for chompheader() (from sendmail.h)
|
||||
** hdrp -- a pointer to the place to save the header.
|
||||
** e -- the envelope including this header.
|
||||
**
|
||||
@ -416,7 +414,7 @@ chompheader(line, pflag, hdrp, e)
|
||||
h->h_macro = mid;
|
||||
*hp = h;
|
||||
h->h_flags = hi->hi_flags;
|
||||
if (bitset(pflag, CHHDR_USER))
|
||||
if (bitset(pflag, CHHDR_USER) || bitset(pflag, CHHDR_QUEUE))
|
||||
h->h_flags |= H_USER;
|
||||
|
||||
/* strip EOH flag if parsing MIME headers */
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers.
|
||||
.\" Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers.
|
||||
.\" All rights reserved.
|
||||
.\" Copyright (c) 1983, 1997 Eric P. Allman. All rights reserved.
|
||||
.\" Copyright (c) 1985, 1990, 1993
|
||||
@ -9,11 +9,11 @@
|
||||
.\" the sendmail distribution.
|
||||
.\"
|
||||
.\"
|
||||
.\" $Id: mailq.1,v 8.14.28.1 2000/07/14 05:07:01 gshapiro Exp $
|
||||
.\" $Id: mailq.1,v 8.14.28.2 2000/09/17 17:04:27 gshapiro Exp $
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.TH MAILQ 1 "$Date: 2000/07/14 05:07:01 $"
|
||||
.TH MAILQ 1 "$Date: 2000/09/17 17:04:27 $"
|
||||
.SH NAME
|
||||
.B mailq
|
||||
\- print the mail queue
|
||||
|
@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char id[] = "@(#)$Id: savemail.c,v 8.212.4.3 2000/06/13 07:16:26 gshapiro Exp $";
|
||||
static char id[] = "@(#)$Id: savemail.c,v 8.212.4.5 2000/08/22 22:46:00 gshapiro Exp $";
|
||||
#endif /* ! lint */
|
||||
|
||||
/* $FreeBSD$ */
|
||||
@ -334,7 +334,8 @@ savemail(e, sendbody)
|
||||
{
|
||||
if (e->e_from.q_home != NULL)
|
||||
p = e->e_from.q_home;
|
||||
else if ((pw = sm_getpwnam(e->e_from.q_user)) != NULL)
|
||||
else if ((pw = sm_getpwnam(e->e_from.q_user)) != NULL &&
|
||||
*pw->pw_dir != '\0')
|
||||
p = pw->pw_dir;
|
||||
}
|
||||
if (p == NULL || e->e_dfp == NULL)
|
||||
@ -447,6 +448,7 @@ savemail(e, sendbody)
|
||||
case ESM_PANIC:
|
||||
/* leave the locked queue & transcript files around */
|
||||
loseqfile(e, "savemail panic");
|
||||
errno = 0;
|
||||
syserr("!554 savemail: cannot save rejected email anywhere");
|
||||
}
|
||||
}
|
||||
|
@ -9,11 +9,11 @@
|
||||
.\" the sendmail distribution.
|
||||
.\"
|
||||
.\"
|
||||
.\" $Id: sendmail.8,v 8.36 2000/02/01 05:49:57 gshapiro Exp $
|
||||
.\" $Id: sendmail.8,v 8.36.8.2 2000/09/07 21:14:00 ca Exp $
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.TH SENDMAIL 8 "$Date: 2000/02/01 05:49:57 $"
|
||||
.TH SENDMAIL 8 "$Date: 2000/09/07 21:14:00 $"
|
||||
.SH NAME
|
||||
.B sendmail
|
||||
\- an electronic mail transport agent
|
||||
@ -172,6 +172,13 @@ Otherwise,
|
||||
an X-Authentication-Warning header
|
||||
will be added to the message.
|
||||
.TP
|
||||
.BI \-G
|
||||
Relay (gateway) submission of a message,
|
||||
e.g., when
|
||||
.BR rmail
|
||||
calls
|
||||
.B sendmail .
|
||||
.TP
|
||||
.BI \-h N
|
||||
Set the hop count to
|
||||
.IR N .
|
||||
@ -674,8 +681,6 @@ Internet Request For Comments
|
||||
.IR RFC819 ,
|
||||
.IR RFC821 ,
|
||||
.IR RFC822 .
|
||||
.IR "Sendmail \- An Internetwork Mail Router" ,
|
||||
No. 9, SMM.
|
||||
.IR "Sendmail Installation and Operation Guide" ,
|
||||
No. 8, SMM.
|
||||
.PP
|
||||
|
Loading…
Reference in New Issue
Block a user