fix extra commas in short buffer syslogging
[unix-history] / usr / src / usr.sbin / sendmail / src / conf.h
CommitLineData
5a739feb 1/*
dc45ba8c 2 * Copyright (c) 1983 Eric P. Allman
31de980b
KB
3 * Copyright (c) 1988, 1993
4 * The Regents of the University of California. All rights reserved.
bee79b64 5 *
417f7a11 6 * %sccs.include.redist.c%
bee79b64 7 *
e7261663 8 * @(#)conf.h 8.83 (Berkeley) %G%
bee79b64 9 */
aeb2545d
DF
10
11/*
12** CONF.H -- All user-configurable parameters for sendmail
5a739feb
EA
13*/
14
f43b04ce 15# include <sys/param.h>
82530719 16# include <sys/types.h>
46300693 17# include <sys/stat.h>
c2edb205 18# include <sys/file.h>
0349f8cc 19# include <sys/wait.h>
f8a31c8e 20# include <fcntl.h>
39270cfd 21# include <signal.h>
f43b04ce 22
ba6514e2 23/**********************************************************************
5a739feb
EA
24** Table sizes, etc....
25** There shouldn't be much need to change these....
ba6514e2 26**********************************************************************/
5a739feb 27
d36f8e5c 28# define MAXLINE 2048 /* max line length */
f0a960f1 29# define MAXNAME 256 /* max length of a name */
5a739feb 30# define MAXPV 40 /* max # of parms to mailers */
d36f8e5c 31# define MAXATOM 200 /* max atoms per address */
5a739feb 32# define MAXMAILERS 25 /* maximum mailers known to system */
8583ab39 33# define MAXRWSETS 100 /* max # of sets of rewriting rules */
5a739feb 34# define MAXPRIORITIES 25 /* max values for Precedence: field */
8583ab39 35# define MAXMXHOSTS 20 /* max # of MX records */
8657d05f 36# define SMTPLINELIM 990 /* maximum SMTP line length */
f43b04ce
EA
37# define MAXKEY 128 /* maximum size of a database key */
38# define MEMCHUNKSIZE 1024 /* chunk size for memory allocation */
b0b636d1 39# define MAXUSERENVIRON 100 /* max envars saved, must be >= 3 */
9f7134c8 40# define MAXALIASDB 12 /* max # of alias databases */
8583ab39
EA
41
42# ifndef QUEUESIZE
43# define QUEUESIZE 1000 /* max # of jobs per queue run */
44# endif
45
ba6514e2 46/**********************************************************************
5a739feb 47** Compilation options.
9bcdff70
EA
48**
49** #define these if they are available; comment them out otherwise.
ba6514e2 50**********************************************************************/
5a739feb 51
9bcdff70 52# define LOG 1 /* enable logging */
9bcdff70 53# define UGLYUUCP 1 /* output ugly UUCP From lines */
8988dfd3 54# define NETUNIX 1 /* include unix domain support */
3356c77c 55# define NETINET 1 /* include internet support */
9bcdff70 56# define SETPROCTITLE 1 /* munge argv to display current status */
35af2f06 57# define NAMED_BIND 1 /* use Berkeley Internet Domain Server */
7f0fd60b 58# define MATCHGECOS 1 /* match user names from gecos field */
8e5c6745 59# define XDEBUG 1 /* enable extended debugging */
d25bb424 60
273562d8
EA
61# ifdef NEWDB
62# define USERDB 1 /* look in user database (requires NEWDB) */
5a4c03c6
EA
63# endif
64
fce21cb9
EA
65/*
66** Most systems have symbolic links today, so default them on. You
67** can turn them off by #undef'ing this below.
68*/
69
70# define HASLSTAT 1 /* has lstat(2) call */
71
c6bd47b4
EA
72/*
73** General "standard C" defines.
74**
75** These may be undone later, to cope with systems that claim to
76** be Standard C but aren't. Gcc is the biggest offender -- it
77** doesn't realize that the library is part of the language.
78**
79** Life would be much easier if we could get rid of this sort
80** of bozo problems.
81*/
82
83#ifdef __STDC__
84# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
85#endif
86
ba6514e2 87/**********************************************************************
e6245c7e
EA
88** Operating system configuration.
89**
90** Unless you are porting to a new OS, you shouldn't have to
91** change these.
ba6514e2 92**********************************************************************/
5a4c03c6 93
fd57f063
EA
94/*
95** Per-Operating System defines
96*/
97
2b09dd75 98
ba6514e2 99/*
27a00e24 100** HP-UX -- tested for 8.07, 9.00, and 9.01.
ba6514e2
EA
101*/
102
8a47b280 103# ifdef __hpux
192b13aa
EA
104/* avoid m_flags conflict between db.h & sys/sysmacros.h on HP 300 */
105# undef m_flags
fd57f063 106# define SYSTEM5 1 /* include all the System V defines */
39270cfd
EA
107# define HASINITGROUPS 1 /* has initgroups(3) call */
108# define HASSETREUID 1 /* has setreuid(2) call */
e7261663 109# define setreuid(r, e) setresuid(r, e, -1)
33d59d37 110# define LA_TYPE LA_FLOAT
5e0e0f8f 111# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
60e52ca7 112# define GIDSET_T gid_t
33d59d37 113# define _PATH_UNIX "/hp-ux"
60e52ca7
EA
114# ifndef _PATH_SENDMAILCF
115# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
116# endif
a74fd615
EA
117# ifndef IDENTPROTO
118# define IDENTPROTO 0 /* TCP/IP implementation is broken */
119# endif
0379c130
EA
120# ifndef HASGETUSERSHELL
121# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps */
122# endif
fc658fc9 123# define syslog hard_syslog
0379c130
EA
124# ifdef __STDC__
125extern int syslog(int, char *, ...);
126# endif
273562d8
EA
127# endif
128
2b09dd75 129
ba6514e2
EA
130/*
131** IBM AIX 3.x -- actually tested for 3.2.3
132*/
133
a419d027 134# ifdef _AIX3
39270cfd 135# define HASINITGROUPS 1 /* has initgroups(3) call */
485a1ac5 136# define HASUNAME 1 /* use System V uname(2) system call */
1ee33f7d 137# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
9114f86c 138# define FORK fork /* no vfork primitive available */
3077a686 139# undef SETPROCTITLE /* setproctitle confuses AIX */
5e0e0f8f 140# define SFS_TYPE SFS_STATFS /* use <sys/statfs.h> statfs() impl */
8e5c6745
EA
141# endif
142
2b09dd75 143
ba6514e2
EA
144/*
145** Silicon Graphics IRIX
146**
0fc3fb21 147** Compiles on 4.0.1.
ba6514e2
EA
148*/
149
8e5c6745 150# ifdef IRIX
192b13aa 151# include <sys/sysmacros.h>
39270cfd
EA
152# define HASSETREUID 1 /* has setreuid(2) call */
153# define HASINITGROUPS 1 /* has initgroups(3) call */
1ee33f7d 154# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
8e5c6745 155# define FORK fork /* no vfork primitive available */
1c8c1ad2 156# define WAITUNION 1 /* use "union wait" as wait argument type */
0d2faefc 157# define setpgid BSDsetpgrp
e6cb9fc4 158# define GIDSET_T gid_t
5e0e0f8f 159# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */
9114f86c
EA
160# endif
161
ba6514e2
EA
162
163/*
8988dfd3
EA
164** SunOS and Solaris
165**
166** Tested on SunOS 4.1.x (a.k.a. Solaris 1.1.x) and
167** Solaris 2.2 (a.k.a. SunOS 5.2).
ba6514e2
EA
168*/
169
45f49b73 170#if defined(sun) && !defined(BSD)
fd57f063 171
39270cfd 172# define HASINITGROUPS 1 /* has initgroups(3) call */
8988dfd3 173# define HASUNAME 1 /* use System V uname(2) system call */
1ee33f7d 174# define HASGETUSERSHELL 1 /* DOES have getusershell(3) call in libc */
5e0e0f8f 175# define LA_TYPE LA_INT
45f49b73 176
d4125001
EA
177# ifdef SOLARIS_2_3
178# define SOLARIS
e7261663
EA
179# ifndef SYSLOG_BUFSIZE
180# define SYSLOG_BUFSIZE 1024 /* allow full size syslog buffer */
181# endif
d4125001
EA
182# endif
183
7b3820ed 184# ifdef SOLARIS
ba6514e2 185 /* Solaris 2.x (a.k.a. SunOS 5.x) */
0554a095
EA
186# ifndef __svr4__
187# define __svr4__ /* use all System V Releae 4 defines below */
188# endif
fd57f063 189# include <sys/time.h>
6f884c69
EA
190# define gethostbyname solaris_gethostbyname /* get working version */
191# define gethostbyaddr solaris_gethostbyaddr /* get working version */
d7a2e485 192# define GIDSET_T gid_t
f361504a
EA
193# ifndef _PATH_UNIX
194# define _PATH_UNIX "/kernel/unix"
195# endif
33d59d37
EA
196# ifndef _PATH_SENDMAILCF
197# define _PATH_SENDMAILCF "/etc/mail/sendmail.cf"
0f786d57 198# endif
0f786d57 199# ifndef _PATH_SENDMAILPID
33d59d37
EA
200# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid"
201# endif
fd57f063 202
7b3820ed 203# else
e9abaf1a 204 /* SunOS 4.0.3 or 4.1.x */
f361504a 205# define HASSETREUID 1 /* has setreuid(2) call */
72af7ebb
EA
206# ifndef HASFLOCK
207# define HASFLOCK 1 /* has flock(2) call */
208# endif
5e0e0f8f 209# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
45f49b73 210# include <vfork.h>
45f49b73 211
e9abaf1a
EA
212# ifdef SUNOS403
213 /* special tweaking for SunOS 4.0.3 */
214# include <malloc.h>
215# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
216# define WAITUNION 1 /* use "union wait" as wait argument type */
217# undef WIFEXITED
218# undef WEXITSTATUS
219# undef HASUNAME
220# define setpgid setpgrp
221typedef int pid_t;
222extern char *getenv();
223
224# endif
fd57f063 225# endif
45f49b73
EA
226#endif
227
fe3849ea 228/*
8988dfd3
EA
229** DG/UX
230**
231** Tested on 5.4.2
fe3849ea
EA
232*/
233
234#ifdef DGUX
235# define SYSTEM5 1
236# define LA_TYPE LA_SUBR
fe3849ea
EA
237# define HASSETREUID 1 /* has setreuid(2) call */
238# define HASUNAME 1 /* use System V uname(2) system call */
239# define HASSETSID 1 /* has Posix setsid(2) call */
240# define HASINITGROUPS 1 /* has initgroups(3) call */
a74fd615
EA
241# ifndef IDENTPROTO
242# define IDENTPROTO 0 /* TCP/IP implementation is broken */
243# endif
fe3849ea 244# undef SETPROCTITLE
5e0e0f8f 245# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */
8988dfd3
EA
246
247/* these include files must be included early on DG/UX */
248# include <netinet/in.h>
249# include <arpa/inet.h>
250
fe3849ea
EA
251# define inet_addr dgux_inet_addr
252extern long dgux_inet_addr();
253#endif
254
2b09dd75 255
ba6514e2
EA
256/*
257** Digital Ultrix 4.2A or 4.3
9cea9407
EA
258**
259** Apparently, fcntl locking is broken on 4.2A, in that locks are
260** not dropped when the process exits. This causes major problems,
261** so flock is the only alternative.
ba6514e2
EA
262*/
263
45f49b73 264#ifdef ultrix
39270cfd 265# define HASSETREUID 1 /* has setreuid(2) call */
33d59d37 266# define HASUNSETENV 1 /* has unsetenv(3) call */
39270cfd 267# define HASINITGROUPS 1 /* has initgroups(3) call */
72af7ebb
EA
268# ifndef HASFLOCK
269# define HASFLOCK 1 /* has flock(2) call */
270# endif
1ee33f7d 271# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
0dbb4629
EA
272# ifdef vax
273# define LA_TYPE LA_FLOAT
274# else
275# define LA_TYPE LA_INT
276# define LA_AVENRUN "avenrun"
277# endif
5e0e0f8f 278# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
a74fd615
EA
279# ifndef IDENTPROTO
280# define IDENTPROTO 0 /* TCP/IP implementation is broken */
281# endif
e6245c7e
EA
282#endif
283
2b09dd75 284
ba6514e2
EA
285/*
286** OSF/1 (tested on Alpha)
287*/
288
fd57f063 289#ifdef __osf__
33d59d37 290# define HASUNSETENV 1 /* has unsetenv(3) call */
39270cfd
EA
291# define HASSETREUID 1 /* has setreuid(2) call */
292# define HASINITGROUPS 1 /* has initgroups(3) call */
72af7ebb
EA
293# ifdef HASFLOCK
294# define HASFLOCK 1 /* has flock(2) call */
295# endif
33d59d37 296# define LA_TYPE LA_INT
5e0e0f8f 297# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
8988dfd3 298# ifndef _PATH_SENDMAILPID
fc658fc9 299# define _PATH_SENDMAILPID "/var/run/sendmail.pid"
8988dfd3 300# endif
6070681d
EA
301#endif
302
2b09dd75 303
ba6514e2
EA
304/*
305** NeXTstep
306*/
307
fbfeb92c 308#ifdef NeXT
39270cfd 309# define HASINITGROUPS 1 /* has initgroups(3) call */
72af7ebb
EA
310# ifndef HASFLOCK
311# define HASFLOCK 1 /* has flock(2) call */
312# endif
9cb009c2 313# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
693a756a 314# define WAITUNION 1 /* use "union wait" as wait argument type */
8e5c6745 315# define sleep sleepX
0d2faefc 316# define setpgid setpgrp
e60b62fd
EA
317# ifndef LA_TYPE
318# define LA_TYPE LA_MACH
319# endif
5e0e0f8f 320# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
0349f8cc 321# ifndef _POSIX_SOURCE
39270cfd 322typedef int pid_t;
0349f8cc
EA
323# undef WEXITSTATUS
324# undef WIFEXITED
325# endif
0f786d57
EA
326# ifndef _PATH_SENDMAILCF
327# define _PATH_SENDMAILCF "/etc/sendmail/sendmail.cf"
328# endif
0f786d57
EA
329# ifndef _PATH_SENDMAILPID
330# define _PATH_SENDMAILPID "/etc/sendmail/sendmail.pid"
331# endif
8c5949d2
EA
332#endif
333
2b09dd75 334
ba6514e2 335/*
33d59d37 336** 4.4 BSD
9c08c09b
EA
337**
338** See also BSD defines.
ba6514e2
EA
339*/
340
ed0b2c1b 341#ifdef BSD4_4
0f786d57 342# define HASUNSETENV 1 /* has unsetenv(3) call */
ed0b2c1b 343# include <sys/cdefs.h>
7621e399 344# define ERRLIST_PREDEFINED /* don't declare sys_errlist */
0f786d57
EA
345# ifndef LA_TYPE
346# define LA_TYPE LA_SUBR
347# endif
5e0e0f8f 348# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
7621e399
EA
349#endif
350
2b09dd75 351
e7261663
EA
352/*
353** BSD/386 (all versions)
354** From Tony Sanders, BSDI
355*/
356
357#ifdef __bsdi__
358# define HASUNSETENV 1 /* has the unsetenv(3) call */
359# define HASSETSID 1 /* has the setsid(2) POSIX syscall */
360# define HASSTATFS 1 /* has the statfs(2) syscall */
361# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199312
362# define HASSETPROCTITLE 1 /* setproctitle is in libc */
363# else
364# define SETPROCTITLE 1
365# endif
366# include <sys/cdefs.h>
367# define ERRLIST_PREDEFINED /* don't declare sys_errlist */
368# ifndef LA_TYPE
369# define LA_TYPE LA_SUBR
370# endif
371#endif
372
373
374
db82ecce 375/*
766f059d 376** 386BSD / FreeBSD 1.0E / NetBSD (all architectures, all versions)
db82ecce
EA
377**
378** 4.3BSD clone, closer to 4.4BSD
9c08c09b
EA
379**
380** See also BSD defines.
db82ecce
EA
381*/
382
766f059d 383#if defined(__386BSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
db82ecce
EA
384# define HASUNSETENV 1 /* has unsetenv(3) call */
385# define HASSETSID 1 /* has the setsid(2) POSIX syscall */
db82ecce
EA
386# include <sys/cdefs.h>
387# define ERRLIST_PREDEFINED /* don't declare sys_errlist */
388# ifndef LA_TYPE
389# define LA_TYPE LA_SUBR
390# endif
5e0e0f8f 391# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
db82ecce
EA
392#endif
393
394
8988dfd3
EA
395/*
396** Mach386
397**
398** For mt Xinu's Mach386 system.
399*/
400
401#if defined(MACH) && defined(i386)
402# define MACH386 1
403# define HASUNSETENV 1 /* has unsetenv(3) call */
404# define HASINITGROUPS 1 /* has initgroups(3) call */
72af7ebb
EA
405# ifdef HASFLOCK
406# define HASFLOCK 1 /* has flock(2) call */
407# endif
8988dfd3
EA
408# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
409# define NEEDSTRTOL 1 /* need the strtol() function */
410# define setpgid setpgrp
411# ifndef LA_TYPE
412# define LA_TYPE LA_FLOAT
413# endif
5e0e0f8f 414# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
c6bd47b4 415# undef HASSETVBUF /* don't actually have setvbuf(3) */
8988dfd3
EA
416# undef WEXITSTATUS
417# undef WIFEXITED
418# ifndef _PATH_SENDMAILCF
419# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
420# endif
421# ifndef _PATH_SENDMAILPID
422# define _PATH_SENDMAILPID "/etc/sendmail.pid"
423# endif
424#endif
425
426
35f1f39e
EA
427/*
428** 4.3 BSD -- this is for very old systems
429**
f0bb212b
EA
430** Should work for mt Xinu MORE/BSD and Mips UMIPS-BSD 2.1.
431**
35f1f39e
EA
432** You'll also have to install a new resolver library.
433** I don't guarantee that support for this environment is complete.
434*/
435
f0bb212b 436#if defined(oldBSD43) || defined(MORE_BSD) || defined(umipsbsd)
35f1f39e
EA
437# define NEEDVPRINTF 1 /* need a replacement for vprintf(3) */
438# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
0639fd0c 439# define ARBPTR_T char *
0d2faefc 440# define setpgid setpgrp
35f1f39e
EA
441# ifndef LA_TYPE
442# define LA_TYPE LA_FLOAT
443# endif
444# ifndef _PATH_SENDMAILCF
445# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
446# endif
a74fd615
EA
447# ifndef IDENTPROTO
448# define IDENTPROTO 0 /* TCP/IP implementation is broken */
449# endif
ac3f694f
EA
450# undef WEXITSTATUS
451# undef WIFEXITED
452typedef short pid_t;
453extern int errno;
35f1f39e
EA
454#endif
455
2b09dd75 456
ba6514e2
EA
457/*
458** SCO Unix
8e01bd08
EA
459**
460** This includes two parts -- the first is for SCO Open Server 3.2v4
461** (contributed by Philippe Brand <phb@colombo.telesys-innov.fr>).
462** The second is, I believe, for an older version.
ba6514e2
EA
463*/
464
8e01bd08
EA
465#ifdef _SCO_unix_4_2
466# define _SCO_unix_
467# define HASSETREUID 1 /* has setreuid(2) call */
468# define _PATH_UNIX "/unix"
469# ifndef _PATH_SENDMAILCF
470# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
471# endif
472# ifndef _PATH_SENDMAILPID
473# define _PATH_SENDMAILPID "/etc/sendmail.pid"
474# endif
475#endif
476
7621e399
EA
477#ifdef _SCO_unix_
478# define SYSTEM5 1 /* include all the System V defines */
39270cfd 479# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
175dac04 480# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
7621e399
EA
481# define FORK fork
482# define MAXPATHLEN PATHSIZE
fe3849ea 483# define LA_TYPE LA_SHORT
5e0e0f8f 484# define SFS_TYPE SFS_STATFS /* use <sys/statfs.h> statfs() impl */
8988dfd3 485# undef NETUNIX /* no unix domain socket support */
33d59d37
EA
486#endif
487
2b09dd75 488
33d59d37
EA
489/*
490** ConvexOS 11.0 and later
f0bb212b
EA
491**
492** "Todd C. Miller" <millert@mroe.cs.colorado.edu> claims this
493** works on 9.1 as well.
33d59d37
EA
494*/
495
496#ifdef _CONVEX_SOURCE
0c31d7be
EA
497# define BSD 1 /* include all the BSD defines */
498# define HASUNAME 1 /* use System V uname(2) system call */
33d59d37 499# define HASSETSID 1 /* has POSIX setsid(2) call */
0c31d7be 500# define NEEDGETOPT 1 /* need replacement for getopt(3) */
33d59d37 501# define LA_TYPE LA_FLOAT
5e0e0f8f 502# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
f0bb212b
EA
503# ifndef _PATH_SENDMAILCF
504# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
505# endif
506# ifndef S_IREAD
507# define S_IREAD _S_IREAD
508# define S_IWRITE _S_IWRITE
509# define S_IEXEC _S_IEXEC
510# define S_IFMT _S_IFMT
511# define S_IFCHR _S_IFCHR
512# define S_IFBLK _S_IFBLK
513# endif
a74fd615
EA
514# ifndef IDENTPROTO
515# define IDENTPROTO 0 /* TCP/IP implementation is broken */
516# endif
33d59d37
EA
517#endif
518
2b09dd75 519
33d59d37 520/*
fa323968 521** RISC/os 4.52
33d59d37 522**
fa323968 523** Gives a ton of warning messages, but otherwise compiles.
33d59d37
EA
524*/
525
0fc3fb21 526#ifdef RISCOS
fa323968 527
33d59d37 528# define HASUNSETENV 1 /* has unsetenv(3) call */
72af7ebb
EA
529# ifdef HASFLOCK
530# define HASFLOCK 1 /* has flock(2) call */
531# endif
fa323968
EA
532# define WAITUNION 1 /* use "union wait" as wait argument type */
533# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
33d59d37
EA
534# define LA_TYPE LA_INT
535# define LA_AVENRUN "avenrun"
536# define _PATH_UNIX "/unix"
fa323968
EA
537# undef WIFEXITED
538
539# define setpgid setpgrp
540
541extern int errno;
542typedef int pid_t;
543#define SIGFUNC_DEFINED
544typedef int (*sigfunc_t)();
545extern char *getenv();
546extern void *malloc();
547
ed0b2c1b
EA
548#endif
549
2b09dd75 550
0d2faefc
EA
551/*
552** Linux 0.99pl10 and above...
553** From Karl London <karl@borg.demon.co.uk>.
554*/
555
404f4d13 556#ifdef __linux__
0d2faefc
EA
557# define BSD 1 /* pretend to be BSD based today */
558# undef NEEDVPRINTF 1 /* need a replacement for vprintf(3) */
559# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
c2edb205 560# define HASUNSETENV 1 /* has unsetenv(3) call */
0d2faefc
EA
561# ifndef LA_TYPE
562# define LA_TYPE LA_FLOAT
563# endif
72ef208d 564# include <sys/sysmacros.h>
6c8c0a75 565# define GIDSET_T gid_t
0d2faefc
EA
566#endif
567
568
178464cb
EA
569/*
570** DELL SVR4 Issue 2.2, and others
571** From Kimmo Suominen <kim@grendel.lut.fi>
572**
573** It's on #ifdef DELL_SVR4 because Solaris also gets __svr4__
574** defined, and the definitions conflict.
69bed929
EA
575**
576** Peter Wemm <peter@perth.DIALix.oz.au> claims that the setreuid
577** trick works on DELL 2.2 (SVR4.0/386 version 4.0) and ESIX 4.0.3A
578** (SVR4.0/386 version 3.0).
178464cb
EA
579*/
580
581#ifdef DELL_SVR4
f361504a
EA
582 /* no changes necessary */
583 /* see general __svr4__ defines below */
178464cb
EA
584#endif
585
586
c2edb205
EA
587/*
588** Apple A/UX 3.0
589*/
590
591#ifdef _AUX_SOURCE
25a722b1 592# include <sys/sysmacros.h>
c2edb205 593# define BSD /* has BSD routines */
c2edb205 594# define HASUNAME 1 /* use System V uname(2) system call */
c2edb205 595# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
53335960 596# define SIGFUNC_DEFINED /* sigfunc_t already defined */
a74fd615
EA
597# ifndef IDENTPROTO
598# define IDENTPROTO 0 /* TCP/IP implementation is broken */
599# endif
c2edb205
EA
600# define FORK fork
601# ifndef _PATH_SENDMAILCF
602# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
603# endif
604# ifndef LA_TYPE
605# define LA_TYPE LA_ZERO
606# endif
5e0e0f8f 607# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
96e003d2
EA
608# undef WIFEXITED
609# undef WEXITSTATUS
c2edb205
EA
610#endif
611
612
82530719
EA
613/*
614** Encore UMAX V
615**
616** Not extensively tested.
617*/
618
619#ifdef UMAXV
620# include <limits.h>
621# define HASUNAME 1 /* use System V uname(2) system call */
82530719
EA
622# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
623# define HASINITGROUPS 1 /* has initgroups(3) call */
1ee33f7d 624# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
82530719
EA
625# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
626# define SYS5SETPGRP 1 /* use System V setpgrp(2) syscall */
627# define FORK fork /* no vfork(2) primitive available */
5e0e0f8f 628# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */
82530719
EA
629# define MAXPATHLEN PATH_MAX
630extern struct passwd *getpwent(), *getpwnam(), *getpwuid();
631extern struct group *getgrent(), *getgrnam(), *getgrgid();
632# undef WIFEXITED
633# undef WEXITSTATUS
634#endif
635
636
31c3ae15
EA
637/*
638** Stardent Titan 3000 running TitanOS 4.2.
639**
640** Must be compiled in "cc -43" mode.
641**
fce21cb9 642** From Kate Hedstrom <kate@ahab.rutgers.edu>.
31c3ae15
EA
643**
644** Note the tweaking below after the BSD defines are set.
645*/
646
647#ifdef titan
648# define setpgid setpgrp
649typedef int pid_t;
650# undef WIFEXITED
651# undef WEXITSTATUS
652#endif
653
654
c6bd47b4
EA
655/*
656** Sequent DYNIX 3.2.0
657**
658** From Jim Davis <jdavis@cs.arizona.edu>.
659*/
660
661#ifdef sequent
662# define BSD 1
663# define HASUNSETENV 1
664# define BSD4_3 1 /* to get signal() in conf.c */
665# define WAITUNION 1
666# define LA_TYPE LA_FLOAT
667# ifdef _POSIX_VERSION
668# undef _POSIX_VERSION /* set in <unistd.h> */
669# endif
670# undef HASSETVBUF /* don't actually have setvbuf(3) */
671# define setpgid setpgrp
672
673/* Have to redefine WIFEXITED to take an int, to work with waitfor() */
674# undef WIFEXITED
675# define WIFEXITED(s) (((union wait*)&(s))->w_stopval != WSTOPPED && \
676 ((union wait*)&(s))->w_termsig == 0)
677# define WEXITSTATUS(s) (((union wait*)&(s))->w_retcode)
678typedef int pid_t;
679# define isgraph(c) (isprint(c) && (c != ' '))
680
681# ifndef _PATH_UNIX
682# define _PATH_UNIX "/dynix"
683# endif
684# ifndef _PATH_SENDMAILCF
685# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
686# endif
687
688#endif
689
690
250441f6
EA
691/*
692** Cray Unicos
693**
694** Ported by David L. Kensiski, Sterling Sofware <kensiski@nas.nasa.gov>
695*/
696
697#ifdef UNICOS
698# define SYSTEM5 1 /* include all the System V defines */
699# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
250441f6
EA
700# define MAXPATHLEN PATHSIZE
701# define LA_TYPE LA_ZERO
5e0e0f8f 702# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */
250441f6
EA
703#endif
704
c6bd47b4 705
548197f7
EA
706/*
707** Apollo DomainOS
708**
709** From Todd Martin <tmartint@tus.ssi1.com> & Don Lewis <gdonl@gv.ssi1.com>
e7261663 710**
548197f7
EA
711** 15 Jan 1994
712**
713*/
714
715#ifdef apollo
716# define HASSTATFS 1 /* has the statfs(2) syscall */
717# define HASSETREUID 1 /* has setreuid(2) call */
718# define HASINITGROUPS 1 /* has initgroups(2) call */
719# undef SETPROCTITLE
720# define LA_TYPE LA_SUBR /* use getloadavg.c */
721# define SFS_TYPE SFS_MOUNT
722# ifndef _PATH_SENDMAILCF
723# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
724# endif
725# ifndef _PATH_SENDMAILPID
726# define _PATH_SENDMAILPID "/etc/sendmail.pid"
727# endif
728# undef S_IFSOCK /* S_IFSOCK and S_IFIFO are the same */
729# undef S_IFIFO
730# define S_IFIFO 0010000
731# ifndef IDENTPROTO
732# define IDENTPROTO 0 /* TCP/IP implementation is broken */
733# endif
e7261663 734#endif
548197f7
EA
735
736
737
178464cb 738
ba6514e2 739/**********************************************************************
fd57f063 740** End of Per-Operating System defines
ba6514e2 741**********************************************************************/
fd57f063 742
b4cd00ff
EA
743/**********************************************************************
744** More general defines
745**********************************************************************/
746
33d59d37
EA
747/* general BSD defines */
748#ifdef BSD
39270cfd
EA
749# define HASGETDTABLESIZE 1 /* has getdtablesize(2) call */
750# define HASSETREUID 1 /* has setreuid(2) call */
751# define HASINITGROUPS 1 /* has initgroups(2) call */
72af7ebb
EA
752# ifndef HASFLOCK
753# define HASFLOCK 1 /* has flock(2) call */
754# endif
33d59d37
EA
755#endif
756
f361504a
EA
757/* general System V Release 4 defines */
758#ifdef __svr4__
759# define SYSTEM5 1
760# define HASSETREUID 1 /* has seteuid(2) call & working saved uids */
1ee33f7d
EA
761# ifndef HASGETUSERSHELL
762# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
9ceb18fe 763# endif
f361504a
EA
764# define setreuid(r, e) seteuid(e)
765
766# ifndef _PATH_UNIX
767# define _PATH_UNIX "/unix"
768# endif
769# ifndef _PATH_SENDMAILCF
770# define _PATH_SENDMAILCF "/usr/ucblib/sendmail.cf"
771# endif
772# ifndef _PATH_SENDMAILPID
773# define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid"
774# endif
775# ifndef SYSLOG_BUFSIZE
776# define SYSLOG_BUFSIZE 128
777# endif
778#endif
779
fd57f063
EA
780/* general System V defines */
781# ifdef SYSTEM5
8988dfd3 782# include <sys/sysmacros.h>
b4cd00ff 783# define HASUNAME 1 /* use System V uname(2) system call */
82530719 784# define SYS5SETPGRP 1 /* use System V setpgrp(2) syscall */
c6bd47b4 785# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
33d59d37 786# ifndef LA_TYPE
5e0e0f8f
EA
787# define LA_TYPE LA_INT /* assume integer load average */
788# endif
789# ifndef SFS_TYPE
790# define SFS_TYPE SFS_USTAT /* use System V ustat(2) syscall */
33d59d37 791# endif
b4cd00ff
EA
792# define bcopy(s, d, l) (memmove((d), (s), (l)))
793# define bzero(d, l) (memset((d), '\0', (l)))
794# define bcmp(s, d, l) (memcmp((s), (d), (l)))
fd57f063
EA
795# endif
796
b4cd00ff
EA
797/* general POSIX defines */
798#ifdef _POSIX_VERSION
fe3849ea
EA
799# define HASSETSID 1 /* has Posix setsid(2) call */
800# define HASWAITPID 1 /* has Posix waitpid(2) call */
b4cd00ff
EA
801#endif
802
e6cb9fc4
EA
803/*
804** If no type for argument two of getgroups call is defined, assume
805** it's an integer -- unfortunately, there seem to be several choices
806** here.
807*/
808
809#ifndef GIDSET_T
810# define GIDSET_T int
811#endif
812
31c3ae15
EA
813/*
814** Tweaking for systems that (for example) claim to be BSD but
815** don't have all the standard BSD routines (boo hiss).
816*/
817
818#ifdef titan
819# undef HASINITGROUPS /* doesn't have initgroups(3) call */
820#endif
821
72af7ebb 822
a74fd615
EA
823/*
824** Due to a "feature" in some operating systems such as Ultrix 4.3 and
825** HPUX 8.0, if you receive a "No route to host" message (ICMP message
826** ICMP_UNREACH_HOST) on _any_ connection, all connections to that host
827** are closed. Some firewalls return this error if you try to connect
828** to the IDENT port (113), so you can't receive email from these hosts
829** on these systems. The firewall really should use a more specific
830** message such as ICMP_UNREACH_PROTOCOL or _PORT or _NET_PROHIB. If
831** not explicitly set to zero above, default it on.
832*/
833
834#ifndef IDENTPROTO
835# define IDENTPROTO 1 /* use IDENT proto (RFC 1413) */
836#endif
837
1ee33f7d
EA
838#ifndef HASGETUSERSHELL
839# define HASGETUSERSHELL 1 /* libc has getusershell(3) call */
9ceb18fe
EA
840#endif
841
72af7ebb
EA
842#ifndef HASFLOCK
843# define HASFLOCK 0 /* assume no flock(2) support */
844#endif
845
2295903c
EA
846
847/**********************************************************************
e6245c7e
EA
848** Remaining definitions should never have to be changed. They are
849** primarily to provide back compatibility for older systems -- for
6070681d 850** example, it includes some POSIX compatibility definitions
2295903c 851**********************************************************************/
e6245c7e 852
bd3dddbf
EA
853/* System 5 compatibility */
854#ifndef S_ISREG
fce21cb9
EA
855# define S_ISREG(foo) ((foo & S_IFMT) == S_IFREG)
856#endif
857#if !defined(S_ISLNK) && defined(S_IFLNK)
858# define S_ISLNK(foo) ((foo & S_IFMT) == S_IFLNK)
bd3dddbf
EA
859#endif
860#ifndef S_IWGRP
861#define S_IWGRP 020
862#endif
863#ifndef S_IWOTH
864#define S_IWOTH 002
865#endif
866
030ae776
EA
867/*
868** Older systems don't have this error code -- it should be in
869** /usr/include/sysexits.h.
870*/
871
872# ifndef EX_CONFIG
873# define EX_CONFIG 78 /* configuration error */
874# endif
5229f34d 875
fe3849ea
EA
876/* pseudo-code used in server SMTP */
877# define EX_QUIT 22 /* drop out of server immediately */
878
879
92f2b65e
EA
880/*
881** These are used in a few cases where we need some special
882** error codes, but where the system doesn't provide something
883** reasonable. They are printed in errstring.
884*/
885
886#ifndef E_PSEUDOBASE
887# define E_PSEUDOBASE 256
888#endif
889
890#define EOPENTIMEOUT (E_PSEUDOBASE + 0) /* timeout on open */
891#define E_DNSBASE (E_PSEUDOBASE + 20) /* base for DNS h_errno */
892
0639fd0c
EA
893/* type of arbitrary pointer */
894#ifndef ARBPTR_T
895# define ARBPTR_T void *
896#endif
897
ed0b2c1b
EA
898#ifndef __P
899# include "cdefs.h"
900#endif
901
3356c77c
EA
902/*
903** Do some required dependencies
904*/
905
906#if defined(NETINET) || defined(NETISO)
e9aa7870
EA
907# define SMTP 1 /* enable user and server SMTP */
908# define QUEUE 1 /* enable queueing */
909# define DAEMON 1 /* include the daemon (requires IPC & SMTP) */
3356c77c
EA
910#endif
911
912
5229f34d
EA
913/*
914** Arrange to use either varargs or stdargs
915*/
916
917# ifdef __STDC__
918
919# include <stdarg.h>
920
5229f34d
EA
921# define VA_LOCAL_DECL va_list ap;
922# define VA_START(f) va_start(ap, f)
923# define VA_END va_end(ap)
924
925# else
926
927# include <varargs.h>
928
5229f34d
EA
929# define VA_LOCAL_DECL va_list ap;
930# define VA_START(f) va_start(ap)
931# define VA_END va_end(ap)
932
933# endif
422bed79 934
322eceee 935#ifdef HASUNAME
422bed79
EA
936# include <sys/utsname.h>
937# ifdef newstr
938# undef newstr
939# endif
322eceee 940#else /* ! HASUNAME */
422bed79
EA
941# define NODE_LENGTH 32
942struct utsname
943{
944 char nodename[NODE_LENGTH+1];
945};
322eceee 946#endif /* HASUNAME */
6e99f903 947
7621e399
EA
948#if !defined(MAXHOSTNAMELEN) && !defined(_SCO_unix_)
949# define MAXHOSTNAMELEN 256
8d3fd325 950#endif
49c069a9
EA
951
952#if !defined(SIGCHLD) && defined(SIGCLD)
953# define SIGCHLD SIGCLD
954#endif
955
956#ifndef STDIN_FILENO
957#define STDIN_FILENO 0
958#endif
959
960#ifndef STDOUT_FILENO
961#define STDOUT_FILENO 1
962#endif
963
964#ifndef STDERR_FILENO
965#define STDERR_FILENO 2
966#endif
f8a31c8e 967
0f786d57 968#ifndef LOCK_SH
39270cfd
EA
969# define LOCK_SH 0x01 /* shared lock */
970# define LOCK_EX 0x02 /* exclusive lock */
971# define LOCK_NB 0x04 /* non-blocking lock */
972# define LOCK_UN 0x08 /* unlock */
973#endif
64247676 974
39270cfd
EA
975#ifndef SIG_ERR
976# define SIG_ERR ((void (*)()) -1)
f8a31c8e 977#endif
a3685d83 978
0349f8cc
EA
979#ifndef WEXITSTATUS
980# define WEXITSTATUS(st) (((st) >> 8) & 0377)
981#endif
982#ifndef WIFEXITED
983# define WIFEXITED(st) (((st) & 0377) == 0)
984#endif
985
53335960
EA
986#ifndef SIGFUNC_DEFINED
987typedef void (*sigfunc_t) __P((int));
988#endif
989
7cfc9c77
EA
990/* size of syslog buffer */
991#ifndef SYSLOG_BUFSIZE
992# define SYSLOG_BUFSIZE 1024
993#endif
994
a3685d83
EA
995/*
996** Size of tobuf (deliver.c)
997** Tweak this to match your syslog implementation. It will have to
998** allow for the extra information printed.
999*/
1000
1001#ifndef TOBUFSIZE
7cfc9c77
EA
1002# if (SYSLOG_BUFSIZE) > 512
1003# define TOBUFSIZE (SYSLOG_BUFSIZE - 256)
1004# else
1005# define TOBUFSIZE 256
1006# endif
a3685d83 1007#endif
9114f86c 1008
77779257
EA
1009/*
1010** Size of prescan buffer.
1011** Despite comments in the _sendmail_ book, this probably should
1012** not be changed; there are some hard-to-define dependencies.
1013*/
1014
1015# define PSBUFSIZE (MAXNAME + MAXATOM) /* size of prescan buffer */
9114f86c
EA
1016/* fork routine -- set above using #ifdef _osname_ or in Makefile */
1017# ifndef FORK
1018# define FORK vfork /* function to call to fork mailer */
1019# endif
5e0139e6
EA
1020
1021/*
1022** If we are going to link scanf anyway, use it in readcf
1023*/
1024
1025#if !defined(HASUNAME) && !defined(SCANF)
1026# define SCANF 1
1027#endif