* Copyright (c) 1983 Eric P. Allman
* Copyright (c) 1988, 1993
* The Regents of the University of California. All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* @(#)conf.h 8.75 (Berkeley) 1/8/94
** CONF.H -- All user-configurable parameters for sendmail
/**********************************************************************
** There shouldn't be much need to change these....
**********************************************************************/
# define MAXLINE 2048 /* max line length */
# define MAXNAME 256 /* max length of a name */
# define MAXPV 40 /* max # of parms to mailers */
# define MAXATOM 200 /* max atoms per address */
# define MAXMAILERS 25 /* maximum mailers known to system */
# define MAXRWSETS 100 /* max # of sets of rewriting rules */
# define MAXPRIORITIES 25 /* max values for Precedence: field */
# define MAXMXHOSTS 20 /* max # of MX records */
# define SMTPLINELIM 990 /* maximum SMTP line length */
# define MAXKEY 128 /* maximum size of a database key */
# define MEMCHUNKSIZE 1024 /* chunk size for memory allocation */
# define MAXUSERENVIRON 100 /* max envars saved, must be >= 3 */
# define MAXALIASDB 12 /* max # of alias databases */
# define QUEUESIZE 1000 /* max # of jobs per queue run */
/**********************************************************************
** #define these if they are available; comment them out otherwise.
**********************************************************************/
# define LOG 1 /* enable logging */
# define UGLYUUCP 1 /* output ugly UUCP From lines */
# define NETUNIX 1 /* include unix domain support */
# define NETINET 1 /* include internet support */
# define SETPROCTITLE 1 /* munge argv to display current status */
# define NAMED_BIND 1 /* use Berkeley Internet Domain Server */
# define MATCHGECOS 1 /* match user names from gecos field */
# define XDEBUG 1 /* enable extended debugging */
# define USERDB 1 /* look in user database (requires NEWDB) */
** Most systems have symbolic links today, so default them on. You
** can turn them off by #undef'ing this below.
# define HASLSTAT 1 /* has lstat(2) call */
** General "standard C" defines.
** These may be undone later, to cope with systems that claim to
** be Standard C but aren't. Gcc is the biggest offender -- it
** doesn't realize that the library is part of the language.
** Life would be much easier if we could get rid of this sort
# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
/**********************************************************************
** Operating system configuration.
** Unless you are porting to a new OS, you shouldn't have to
**********************************************************************/
** Per-Operating System defines
** HP-UX -- tested for 8.07, 9.00, and 9.01.
/* avoid m_flags conflict between db.h & sys/sysmacros.h on HP 300 */
# define SYSTEM5 1 /* include all the System V defines */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASSETREUID 1 /* has setreuid(2) call */
# define setreuid(r, e) setresuid(r, e, -1)
# define LA_TYPE LA_FLOAT
# define _PATH_UNIX "/hp-ux"
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps */
# define syslog hard_syslog
extern int syslog(int, char *, ...);
** IBM AIX 3.x -- actually tested for 3.2.3
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASUNAME 1 /* use System V uname(2) system call */
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define FORK fork /* no vfork primitive available */
# undef SETPROCTITLE /* setproctitle confuses AIX */
# include <sys/sysmacros.h>
# define HASSETREUID 1 /* has setreuid(2) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define FORK fork /* no vfork primitive available */
# define WAITUNION 1 /* use "union wait" as wait argument type */
# define setpgid BSDsetpgrp
** Tested on SunOS 4.1.x (a.k.a. Solaris 1.1.x) and
** Solaris 2.2 (a.k.a. SunOS 5.2).
#if defined(sun) && !defined(BSD)
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASUNAME 1 /* use System V uname(2) system call */
# define HASGETUSERSHELL 1 /* DOES have getusershell(3) call in libc */
/* Solaris 2.x (a.k.a. SunOS 5.x) */
# define __svr4__ /* use all System V Releae 4 defines below */
# define gethostbyname solaris_gethostbyname /* get working version */
# define gethostbyaddr solaris_gethostbyaddr /* get working version */
# define _PATH_UNIX "/kernel/unix"
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/etc/mail/sendmail.cf"
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid"
/* SunOS 4.0.3 or 4.1.x */
# define HASSETREUID 1 /* has setreuid(2) call */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASFLOCK 1 /* has flock(2) call */
/* special tweaking for SunOS 4.0.3 */
# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
# define WAITUNION 1 /* use "union wait" as wait argument type */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASSETREUID 1 /* has setreuid(2) call */
# define HASUNAME 1 /* use System V uname(2) system call */
# define HASSETSID 1 /* has Posix setsid(2) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
/* these include files must be included early on DG/UX */
# define inet_addr dgux_inet_addr
extern long dgux_inet_addr();
** Digital Ultrix 4.2A or 4.3
** Apparently, fcntl locking is broken on 4.2A, in that locks are
** not dropped when the process exits. This causes major problems,
** so flock is the only alternative.
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASSETREUID 1 /* has setreuid(2) call */
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASFLOCK 1 /* has flock(2) call */
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define LA_TYPE LA_FLOAT
# define LA_AVENRUN "avenrun"
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
** OSF/1 (tested on Alpha)
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASSETREUID 1 /* has setreuid(2) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASFLOCK 1 /* has flock(2) call */
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/var/run/sendmail.pid"
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASFLOCK 1 /* has flock(2) call */
# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define WAITUNION 1 /* use "union wait" as wait argument type */
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/etc/sendmail/sendmail.cf"
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/sendmail/sendmail.pid"
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define ERRLIST_PREDEFINED /* don't declare sys_errlist */
** 386BSD / FreeBSD 1.0E / NetBSD (all architectures, all versions)
** 4.3BSD clone, closer to 4.4BSD
#if defined(__386BSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASSETSID 1 /* has the setsid(2) POSIX syscall */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define ERRLIST_PREDEFINED /* don't declare sys_errlist */
** For mt Xinu's Mach386 system.
#if defined(MACH) && defined(i386)
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASFLOCK 1 /* has flock(2) call */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
# define NEEDSTRTOL 1 /* need the strtol() function */
# define LA_TYPE LA_FLOAT
# undef HASSETVBUF /* don't actually have setvbuf(3) */
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/sendmail.pid"
** 4.3 BSD -- this is for very old systems
** You'll also have to install a new resolver library.
** I don't guarantee that support for this environment is complete.
# define NEEDVPRINTF 1 /* need a replacement for vprintf(3) */
# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
# define LA_TYPE LA_FLOAT
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
** This includes two parts -- the first is for SCO Open Server 3.2v4
** (contributed by Philippe Brand <phb@colombo.telesys-innov.fr>).
** The second is, I believe, for an older version.
# define HASSETREUID 1 /* has setreuid(2) call */
# define _PATH_UNIX "/unix"
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/etc/sendmail.pid"
# define SYSTEM5 1 /* include all the System V defines */
# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define MAXPATHLEN PATHSIZE
# define LA_TYPE LA_SHORT
# undef NETUNIX /* no unix domain socket support */
** ConvexOS 11.0 and later
# define BSD 1 /* include all the BSD defines */
# define HASUNAME 1 /* use System V uname(2) system call */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASSETSID 1 /* has POSIX setsid(2) call */
# define NEEDGETOPT 1 /* need replacement for getopt(3) */
# define LA_TYPE LA_FLOAT
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
** Gives a ton of warning messages, but otherwise compiles.
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define HASFLOCK 1 /* has flock(2) call */
# define WAITUNION 1 /* use "union wait" as wait argument type */
# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
# define LA_AVENRUN "avenrun"
# define _PATH_UNIX "/unix"
typedef int (*sigfunc_t
)();
** Linux 0.99pl10 and above...
** From Karl London <karl@borg.demon.co.uk>.
# define BSD 1 /* pretend to be BSD based today */
# undef NEEDVPRINTF 1 /* need a replacement for vprintf(3) */
# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
# define HASUNSETENV 1 /* has unsetenv(3) call */
# define LA_TYPE LA_FLOAT
# include <sys/sysmacros.h>
** DELL SVR4 Issue 2.2, and others
** From Kimmo Suominen <kim@grendel.lut.fi>
** It's on #ifdef DELL_SVR4 because Solaris also gets __svr4__
** defined, and the definitions conflict.
** Peter Wemm <peter@perth.DIALix.oz.au> claims that the setreuid
** trick works on DELL 2.2 (SVR4.0/386 version 4.0) and ESIX 4.0.3A
** (SVR4.0/386 version 3.0).
/* no changes necessary */
/* see general __svr4__ defines below */
# include <sys/sysmacros.h>
# define BSD /* has BSD routines */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASUNAME 1 /* use System V uname(2) system call */
# define HASUSTAT 1 /* use System V ustat(2) syscall */
# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
# define SIGFUNC_DEFINED /* sigfunc_t already defined */
# define IDENTPROTO 0 /* TCP/IP implementation is broken */
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
** Not extensively tested.
# define HASUNAME 1 /* use System V uname(2) system call */
# define HASSTATFS 1 /* has the statfs(2) syscall */
# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
# define HASINITGROUPS 1 /* has initgroups(3) call */
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
# define SYS5SETPGRP 1 /* use System V setpgrp(2) syscall */
# define FORK fork /* no vfork(2) primitive available */
# define MAXPATHLEN PATH_MAX
extern struct passwd
*getpwent(), *getpwnam(), *getpwuid();
extern struct group
*getgrent(), *getgrnam(), *getgrgid();
** Stardent Titan 3000 running TitanOS 4.2.
** Must be compiled in "cc -43" mode.
** From Kate Hedstrom <kate@ahab.rutgers.edu>.
** Note the tweaking below after the BSD defines are set.
** From Jim Davis <jdavis@cs.arizona.edu>.
# define BSD4_3 1 /* to get signal() in conf.c */
# define LA_TYPE LA_FLOAT
# undef _POSIX_VERSION /* set in <unistd.h> */
# undef HASSETVBUF /* don't actually have setvbuf(3) */
/* Have to redefine WIFEXITED to take an int, to work with waitfor() */
# define WIFEXITED(s) (((union wait*)&(s))->w_stopval != WSTOPPED && \
((union wait*)&(s))->w_termsig == 0)
# define WEXITSTATUS(s) (((union wait*)&(s))->w_retcode)
# define isgraph(c) (isprint(c) && (c != ' '))
# define _PATH_UNIX "/dynix"
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
/**********************************************************************
** End of Per-Operating System defines
**********************************************************************/
/**********************************************************************
**********************************************************************/
/* general BSD defines */
# define HASGETDTABLESIZE 1 /* has getdtablesize(2) call */
# define HASSETREUID 1 /* has setreuid(2) call */
# define HASINITGROUPS 1 /* has initgroups(2) call */
# define HASFLOCK 1 /* has flock(2) call */
/* general System V Release 4 defines */
# define HASSETREUID 1 /* has seteuid(2) call & working saved uids */
# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
# define setreuid(r, e) seteuid(e)
# define _PATH_UNIX "/unix"
# ifndef _PATH_SENDMAILCF
# define _PATH_SENDMAILCF "/usr/ucblib/sendmail.cf"
# ifndef _PATH_SENDMAILPID
# define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid"
# define SYSLOG_BUFSIZE 128
/* general System V defines */
# include <sys/sysmacros.h>
# define HASUNAME 1 /* use System V uname(2) system call */
# define HASUSTAT 1 /* use System V ustat(2) syscall */
# define SYS5SETPGRP 1 /* use System V setpgrp(2) syscall */
# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
# define bcopy(s, d, l) (memmove((d), (s), (l)))
# define bzero(d, l) (memset((d), '\0', (l)))
# define bcmp(s, d, l) (memcmp((s), (d), (l)))
/* general POSIX defines */
# define HASSETSID 1 /* has Posix setsid(2) call */
# define HASWAITPID 1 /* has Posix waitpid(2) call */
** If no type for argument two of getgroups call is defined, assume
** it's an integer -- unfortunately, there seem to be several choices
** Tweaking for systems that (for example) claim to be BSD but
** don't have all the standard BSD routines (boo hiss).
# undef HASINITGROUPS /* doesn't have initgroups(3) call */
** Due to a "feature" in some operating systems such as Ultrix 4.3 and
** HPUX 8.0, if you receive a "No route to host" message (ICMP message
** ICMP_UNREACH_HOST) on _any_ connection, all connections to that host
** are closed. Some firewalls return this error if you try to connect
** to the IDENT port (113), so you can't receive email from these hosts
** on these systems. The firewall really should use a more specific
** message such as ICMP_UNREACH_PROTOCOL or _PORT or _NET_PROHIB. If
** not explicitly set to zero above, default it on.
# define IDENTPROTO 1 /* use IDENT proto (RFC 1413) */
# define HASGETUSERSHELL 1 /* libc has getusershell(3) call */
/**********************************************************************
** Remaining definitions should never have to be changed. They are
** primarily to provide back compatibility for older systems -- for
** example, it includes some POSIX compatibility definitions
**********************************************************************/
/* System 5 compatibility */
# define S_ISREG(foo) ((foo & S_IFMT) == S_IFREG)
#if !defined(S_ISLNK) && defined(S_IFLNK)
# define S_ISLNK(foo) ((foo & S_IFMT) == S_IFLNK)
** Older systems don't have this error code -- it should be in
** /usr/include/sysexits.h.
# define EX_CONFIG 78 /* configuration error */
/* pseudo-code used in server SMTP */
# define EX_QUIT 22 /* drop out of server immediately */
** These are used in a few cases where we need some special
** error codes, but where the system doesn't provide something
** reasonable. They are printed in errstring.
# define E_PSEUDOBASE 256
#define EOPENTIMEOUT (E_PSEUDOBASE + 0) /* timeout on open */
#define E_DNSBASE (E_PSEUDOBASE + 20) /* base for DNS h_errno */
/* type of arbitrary pointer */
** Do some required dependencies
#if defined(NETINET) || defined(NETISO)
# define SMTP 1 /* enable user and server SMTP */
# define QUEUE 1 /* enable queueing */
# define DAEMON 1 /* include the daemon (requires IPC & SMTP) */
** Arrange to use either varargs or stdargs
# define VA_LOCAL_DECL va_list ap;
# define VA_START(f) va_start(ap, f)
# define VA_END va_end(ap)
# define VA_LOCAL_DECL va_list ap;
# define VA_START(f) va_start(ap)
# define VA_END va_end(ap)
# include <sys/utsname.h>
char nodename
[NODE_LENGTH
+1];
#if !defined(MAXHOSTNAMELEN) && !defined(_SCO_unix_)
# define MAXHOSTNAMELEN 256
#if !defined(SIGCHLD) && defined(SIGCLD)
# define LOCK_SH 0x01 /* shared lock */
# define LOCK_EX 0x02 /* exclusive lock */
# define LOCK_NB 0x04 /* non-blocking lock */
# define LOCK_UN 0x08 /* unlock */
# define SIG_ERR ((void (*)()) -1)
# define WEXITSTATUS(st) (((st) >> 8) & 0377)
# define WIFEXITED(st) (((st) & 0377) == 0)
typedef void (*sigfunc_t
) __P((int));
/* size of syslog buffer */
# define SYSLOG_BUFSIZE 1024
** Size of tobuf (deliver.c)
** Tweak this to match your syslog implementation. It will have to
** allow for the extra information printed.
# if (SYSLOG_BUFSIZE) > 512
# define TOBUFSIZE (SYSLOG_BUFSIZE - 256)
** Size of prescan buffer.
** Despite comments in the _sendmail_ book, this probably should
** not be changed; there are some hard-to-define dependencies.
# define PSBUFSIZE (MAXNAME + MAXATOM) /* size of prescan buffer */
/* fork routine -- set above using #ifdef _osname_ or in Makefile */
# define FORK vfork /* function to call to fork mailer */