return more informative errors, fix a typo in swstrategy (from cgd)
[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 *
f243158a 8 * @(#)conf.h 8.88 (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
179# endif
180
7b3820ed 181# ifdef SOLARIS
ba6514e2 182 /* Solaris 2.x (a.k.a. SunOS 5.x) */
0554a095
EA
183# ifndef __svr4__
184# define __svr4__ /* use all System V Releae 4 defines below */
185# endif
fd57f063 186# include <sys/time.h>
6f884c69
EA
187# define gethostbyname solaris_gethostbyname /* get working version */
188# define gethostbyaddr solaris_gethostbyaddr /* get working version */
d7a2e485 189# define GIDSET_T gid_t
f361504a
EA
190# ifndef _PATH_UNIX
191# define _PATH_UNIX "/kernel/unix"
192# endif
33d59d37
EA
193# ifndef _PATH_SENDMAILCF
194# define _PATH_SENDMAILCF "/etc/mail/sendmail.cf"
0f786d57 195# endif
0f786d57 196# ifndef _PATH_SENDMAILPID
33d59d37
EA
197# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid"
198# endif
71aecf7c
EA
199# ifndef SYSLOG_BUFSIZE
200# define SYSLOG_BUFSIZE 1024 /* allow full size syslog buffer */
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 */
e1ab99fe 241# define HASGETUSERSHELL 0 /* does not have getusershell(3) */
a74fd615
EA
242# ifndef IDENTPROTO
243# define IDENTPROTO 0 /* TCP/IP implementation is broken */
244# endif
fe3849ea 245# undef SETPROCTITLE
5e0e0f8f 246# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */
8988dfd3
EA
247
248/* these include files must be included early on DG/UX */
249# include <netinet/in.h>
250# include <arpa/inet.h>
251
fe3849ea
EA
252# define inet_addr dgux_inet_addr
253extern long dgux_inet_addr();
254#endif
255
2b09dd75 256
ba6514e2
EA
257/*
258** Digital Ultrix 4.2A or 4.3
9cea9407
EA
259**
260** Apparently, fcntl locking is broken on 4.2A, in that locks are
261** not dropped when the process exits. This causes major problems,
262** so flock is the only alternative.
ba6514e2
EA
263*/
264
45f49b73 265#ifdef ultrix
39270cfd 266# define HASSETREUID 1 /* has setreuid(2) call */
33d59d37 267# define HASUNSETENV 1 /* has unsetenv(3) call */
39270cfd 268# define HASINITGROUPS 1 /* has initgroups(3) call */
72af7ebb
EA
269# ifndef HASFLOCK
270# define HASFLOCK 1 /* has flock(2) call */
271# endif
1ee33f7d 272# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
0dbb4629
EA
273# ifdef vax
274# define LA_TYPE LA_FLOAT
275# else
276# define LA_TYPE LA_INT
277# define LA_AVENRUN "avenrun"
278# endif
5e0e0f8f 279# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
a74fd615
EA
280# ifndef IDENTPROTO
281# define IDENTPROTO 0 /* TCP/IP implementation is broken */
282# endif
e6245c7e
EA
283#endif
284
2b09dd75 285
ba6514e2
EA
286/*
287** OSF/1 (tested on Alpha)
288*/
289
fd57f063 290#ifdef __osf__
33d59d37 291# define HASUNSETENV 1 /* has unsetenv(3) call */
39270cfd
EA
292# define HASSETREUID 1 /* has setreuid(2) call */
293# define HASINITGROUPS 1 /* has initgroups(3) call */
72af7ebb
EA
294# ifdef HASFLOCK
295# define HASFLOCK 1 /* has flock(2) call */
296# endif
33d59d37 297# define LA_TYPE LA_INT
5e0e0f8f 298# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
8988dfd3 299# ifndef _PATH_SENDMAILPID
fc658fc9 300# define _PATH_SENDMAILPID "/var/run/sendmail.pid"
8988dfd3 301# endif
6070681d
EA
302#endif
303
2b09dd75 304
ba6514e2
EA
305/*
306** NeXTstep
307*/
308
fbfeb92c 309#ifdef NeXT
39270cfd 310# define HASINITGROUPS 1 /* has initgroups(3) call */
72af7ebb
EA
311# ifndef HASFLOCK
312# define HASFLOCK 1 /* has flock(2) call */
313# endif
9cb009c2 314# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
693a756a 315# define WAITUNION 1 /* use "union wait" as wait argument type */
8e5c6745 316# define sleep sleepX
0d2faefc 317# define setpgid setpgrp
e60b62fd
EA
318# ifndef LA_TYPE
319# define LA_TYPE LA_MACH
320# endif
5e0e0f8f 321# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
0349f8cc 322# ifndef _POSIX_SOURCE
39270cfd 323typedef int pid_t;
0349f8cc
EA
324# undef WEXITSTATUS
325# undef WIFEXITED
326# endif
0f786d57
EA
327# ifndef _PATH_SENDMAILCF
328# define _PATH_SENDMAILCF "/etc/sendmail/sendmail.cf"
329# endif
0f786d57
EA
330# ifndef _PATH_SENDMAILPID
331# define _PATH_SENDMAILPID "/etc/sendmail/sendmail.pid"
332# endif
8c5949d2
EA
333#endif
334
2b09dd75 335
ba6514e2 336/*
33d59d37 337** 4.4 BSD
9c08c09b
EA
338**
339** See also BSD defines.
ba6514e2
EA
340*/
341
ed0b2c1b 342#ifdef BSD4_4
0f786d57 343# define HASUNSETENV 1 /* has unsetenv(3) call */
ed0b2c1b 344# include <sys/cdefs.h>
7621e399 345# define ERRLIST_PREDEFINED /* don't declare sys_errlist */
0f786d57
EA
346# ifndef LA_TYPE
347# define LA_TYPE LA_SUBR
348# endif
5e0e0f8f 349# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
7621e399
EA
350#endif
351
2b09dd75 352
e7261663
EA
353/*
354** BSD/386 (all versions)
355** From Tony Sanders, BSDI
356*/
357
358#ifdef __bsdi__
359# define HASUNSETENV 1 /* has the unsetenv(3) call */
360# define HASSETSID 1 /* has the setsid(2) POSIX syscall */
b75837c3 361# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
e7261663
EA
362# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199312
363# define HASSETPROCTITLE 1 /* setproctitle is in libc */
364# else
365# define SETPROCTITLE 1
366# endif
367# include <sys/cdefs.h>
368# define ERRLIST_PREDEFINED /* don't declare sys_errlist */
369# ifndef LA_TYPE
370# define LA_TYPE LA_SUBR
371# endif
372#endif
373
374
375
db82ecce 376/*
766f059d 377** 386BSD / FreeBSD 1.0E / NetBSD (all architectures, all versions)
db82ecce
EA
378**
379** 4.3BSD clone, closer to 4.4BSD
9c08c09b
EA
380**
381** See also BSD defines.
db82ecce
EA
382*/
383
766f059d 384#if defined(__386BSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
db82ecce
EA
385# define HASUNSETENV 1 /* has unsetenv(3) call */
386# define HASSETSID 1 /* has the setsid(2) POSIX syscall */
db82ecce
EA
387# include <sys/cdefs.h>
388# define ERRLIST_PREDEFINED /* don't declare sys_errlist */
389# ifndef LA_TYPE
390# define LA_TYPE LA_SUBR
391# endif
5e0e0f8f 392# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */
db82ecce
EA
393#endif
394
395
8988dfd3
EA
396/*
397** Mach386
398**
399** For mt Xinu's Mach386 system.
400*/
401
402#if defined(MACH) && defined(i386)
403# define MACH386 1
404# define HASUNSETENV 1 /* has unsetenv(3) call */
405# define HASINITGROUPS 1 /* has initgroups(3) call */
72af7ebb
EA
406# ifdef HASFLOCK
407# define HASFLOCK 1 /* has flock(2) call */
408# endif
8988dfd3
EA
409# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
410# define NEEDSTRTOL 1 /* need the strtol() function */
411# define setpgid setpgrp
412# ifndef LA_TYPE
413# define LA_TYPE LA_FLOAT
414# endif
5e0e0f8f 415# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
c6bd47b4 416# undef HASSETVBUF /* don't actually have setvbuf(3) */
8988dfd3
EA
417# undef WEXITSTATUS
418# undef WIFEXITED
419# ifndef _PATH_SENDMAILCF
420# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
421# endif
422# ifndef _PATH_SENDMAILPID
423# define _PATH_SENDMAILPID "/etc/sendmail.pid"
424# endif
425#endif
426
427
35f1f39e
EA
428/*
429** 4.3 BSD -- this is for very old systems
430**
f0bb212b
EA
431** Should work for mt Xinu MORE/BSD and Mips UMIPS-BSD 2.1.
432**
35f1f39e
EA
433** You'll also have to install a new resolver library.
434** I don't guarantee that support for this environment is complete.
435*/
436
f0bb212b 437#if defined(oldBSD43) || defined(MORE_BSD) || defined(umipsbsd)
35f1f39e
EA
438# define NEEDVPRINTF 1 /* need a replacement for vprintf(3) */
439# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
0639fd0c 440# define ARBPTR_T char *
0d2faefc 441# define setpgid setpgrp
35f1f39e
EA
442# ifndef LA_TYPE
443# define LA_TYPE LA_FLOAT
444# endif
445# ifndef _PATH_SENDMAILCF
446# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
447# endif
a74fd615
EA
448# ifndef IDENTPROTO
449# define IDENTPROTO 0 /* TCP/IP implementation is broken */
450# endif
ac3f694f
EA
451# undef WEXITSTATUS
452# undef WIFEXITED
453typedef short pid_t;
454extern int errno;
35f1f39e
EA
455#endif
456
2b09dd75 457
ba6514e2
EA
458/*
459** SCO Unix
8e01bd08
EA
460**
461** This includes two parts -- the first is for SCO Open Server 3.2v4
462** (contributed by Philippe Brand <phb@colombo.telesys-innov.fr>).
463** The second is, I believe, for an older version.
ba6514e2
EA
464*/
465
8e01bd08
EA
466#ifdef _SCO_unix_4_2
467# define _SCO_unix_
468# define HASSETREUID 1 /* has setreuid(2) call */
469# define _PATH_UNIX "/unix"
470# ifndef _PATH_SENDMAILCF
471# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
472# endif
473# ifndef _PATH_SENDMAILPID
474# define _PATH_SENDMAILPID "/etc/sendmail.pid"
475# endif
476#endif
477
7621e399
EA
478#ifdef _SCO_unix_
479# define SYSTEM5 1 /* include all the System V defines */
39270cfd 480# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
175dac04 481# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
7621e399
EA
482# define FORK fork
483# define MAXPATHLEN PATHSIZE
fe3849ea 484# define LA_TYPE LA_SHORT
5e0e0f8f 485# define SFS_TYPE SFS_STATFS /* use <sys/statfs.h> statfs() impl */
8988dfd3 486# undef NETUNIX /* no unix domain socket support */
33d59d37
EA
487#endif
488
2b09dd75 489
33d59d37
EA
490/*
491** ConvexOS 11.0 and later
f0bb212b
EA
492**
493** "Todd C. Miller" <millert@mroe.cs.colorado.edu> claims this
494** works on 9.1 as well.
33d59d37
EA
495*/
496
497#ifdef _CONVEX_SOURCE
0c31d7be
EA
498# define BSD 1 /* include all the BSD defines */
499# define HASUNAME 1 /* use System V uname(2) system call */
33d59d37 500# define HASSETSID 1 /* has POSIX setsid(2) call */
0c31d7be 501# define NEEDGETOPT 1 /* need replacement for getopt(3) */
33d59d37 502# define LA_TYPE LA_FLOAT
5e0e0f8f 503# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
f0bb212b
EA
504# ifndef _PATH_SENDMAILCF
505# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
506# endif
507# ifndef S_IREAD
508# define S_IREAD _S_IREAD
509# define S_IWRITE _S_IWRITE
510# define S_IEXEC _S_IEXEC
511# define S_IFMT _S_IFMT
512# define S_IFCHR _S_IFCHR
513# define S_IFBLK _S_IFBLK
514# endif
a74fd615
EA
515# ifndef IDENTPROTO
516# define IDENTPROTO 0 /* TCP/IP implementation is broken */
517# endif
33d59d37
EA
518#endif
519
2b09dd75 520
33d59d37 521/*
fa323968 522** RISC/os 4.52
33d59d37 523**
fa323968 524** Gives a ton of warning messages, but otherwise compiles.
33d59d37
EA
525*/
526
0fc3fb21 527#ifdef RISCOS
fa323968 528
33d59d37 529# define HASUNSETENV 1 /* has unsetenv(3) call */
72af7ebb
EA
530# ifdef HASFLOCK
531# define HASFLOCK 1 /* has flock(2) call */
532# endif
fa323968
EA
533# define WAITUNION 1 /* use "union wait" as wait argument type */
534# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
33d59d37
EA
535# define LA_TYPE LA_INT
536# define LA_AVENRUN "avenrun"
537# define _PATH_UNIX "/unix"
fa323968
EA
538# undef WIFEXITED
539
540# define setpgid setpgrp
541
542extern int errno;
543typedef int pid_t;
544#define SIGFUNC_DEFINED
545typedef int (*sigfunc_t)();
546extern char *getenv();
547extern void *malloc();
548
ed0b2c1b
EA
549#endif
550
2b09dd75 551
0d2faefc
EA
552/*
553** Linux 0.99pl10 and above...
554** From Karl London <karl@borg.demon.co.uk>.
555*/
556
404f4d13 557#ifdef __linux__
0d2faefc
EA
558# define BSD 1 /* pretend to be BSD based today */
559# undef NEEDVPRINTF 1 /* need a replacement for vprintf(3) */
560# define NEEDGETOPT 1 /* need a replacement for getopt(3) */
c2edb205 561# define HASUNSETENV 1 /* has unsetenv(3) call */
0d2faefc
EA
562# ifndef LA_TYPE
563# define LA_TYPE LA_FLOAT
564# endif
72ef208d 565# include <sys/sysmacros.h>
6c8c0a75 566# define GIDSET_T gid_t
0d2faefc
EA
567#endif
568
569
178464cb
EA
570/*
571** DELL SVR4 Issue 2.2, and others
572** From Kimmo Suominen <kim@grendel.lut.fi>
573**
574** It's on #ifdef DELL_SVR4 because Solaris also gets __svr4__
575** defined, and the definitions conflict.
69bed929
EA
576**
577** Peter Wemm <peter@perth.DIALix.oz.au> claims that the setreuid
578** trick works on DELL 2.2 (SVR4.0/386 version 4.0) and ESIX 4.0.3A
579** (SVR4.0/386 version 3.0).
178464cb
EA
580*/
581
582#ifdef DELL_SVR4
f361504a
EA
583 /* no changes necessary */
584 /* see general __svr4__ defines below */
178464cb
EA
585#endif
586
587
c2edb205
EA
588/*
589** Apple A/UX 3.0
590*/
591
592#ifdef _AUX_SOURCE
25a722b1 593# include <sys/sysmacros.h>
c2edb205 594# define BSD /* has BSD routines */
c2edb205 595# define HASUNAME 1 /* use System V uname(2) system call */
c2edb205 596# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
53335960 597# define SIGFUNC_DEFINED /* sigfunc_t already defined */
a74fd615
EA
598# ifndef IDENTPROTO
599# define IDENTPROTO 0 /* TCP/IP implementation is broken */
600# endif
c2edb205
EA
601# define FORK fork
602# ifndef _PATH_SENDMAILCF
603# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
604# endif
605# ifndef LA_TYPE
606# define LA_TYPE LA_ZERO
607# endif
5e0e0f8f 608# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */
96e003d2
EA
609# undef WIFEXITED
610# undef WEXITSTATUS
c2edb205
EA
611#endif
612
613
82530719
EA
614/*
615** Encore UMAX V
616**
617** Not extensively tested.
618*/
619
620#ifdef UMAXV
621# include <limits.h>
622# define HASUNAME 1 /* use System V uname(2) system call */
82530719
EA
623# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
624# define HASINITGROUPS 1 /* has initgroups(3) call */
1ee33f7d 625# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
82530719
EA
626# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
627# define SYS5SETPGRP 1 /* use System V setpgrp(2) syscall */
628# define FORK fork /* no vfork(2) primitive available */
5e0e0f8f 629# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */
82530719
EA
630# define MAXPATHLEN PATH_MAX
631extern struct passwd *getpwent(), *getpwnam(), *getpwuid();
632extern struct group *getgrent(), *getgrnam(), *getgrgid();
633# undef WIFEXITED
634# undef WEXITSTATUS
635#endif
636
637
31c3ae15
EA
638/*
639** Stardent Titan 3000 running TitanOS 4.2.
640**
641** Must be compiled in "cc -43" mode.
642**
fce21cb9 643** From Kate Hedstrom <kate@ahab.rutgers.edu>.
31c3ae15
EA
644**
645** Note the tweaking below after the BSD defines are set.
646*/
647
648#ifdef titan
649# define setpgid setpgrp
650typedef int pid_t;
651# undef WIFEXITED
652# undef WEXITSTATUS
653#endif
654
655
c6bd47b4
EA
656/*
657** Sequent DYNIX 3.2.0
658**
659** From Jim Davis <jdavis@cs.arizona.edu>.
660*/
661
662#ifdef sequent
efadb8ee 663
c6bd47b4
EA
664# define BSD 1
665# define HASUNSETENV 1
666# define BSD4_3 1 /* to get signal() in conf.c */
667# define WAITUNION 1
668# define LA_TYPE LA_FLOAT
669# ifdef _POSIX_VERSION
670# undef _POSIX_VERSION /* set in <unistd.h> */
671# endif
672# undef HASSETVBUF /* don't actually have setvbuf(3) */
673# define setpgid setpgrp
674
675/* Have to redefine WIFEXITED to take an int, to work with waitfor() */
676# undef WIFEXITED
677# define WIFEXITED(s) (((union wait*)&(s))->w_stopval != WSTOPPED && \
678 ((union wait*)&(s))->w_termsig == 0)
679# define WEXITSTATUS(s) (((union wait*)&(s))->w_retcode)
680typedef int pid_t;
681# define isgraph(c) (isprint(c) && (c != ' '))
682
683# ifndef _PATH_UNIX
684# define _PATH_UNIX "/dynix"
685# endif
686# ifndef _PATH_SENDMAILCF
687# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
688# endif
689
690#endif
691
692
efadb8ee
EA
693/*
694** Sequent DYNIX/ptx v2.0 (and higher)
695**
696** For DYNIX/ptx v1.x, undefine HASSETREUID.
697**
698** From Tim Wright <timw@sequent.com>.
699*/
700
701#ifdef _SEQUENT_
702# define SYSTEM5 1 /* include all the System V defines */
703# define HASSETSID 1 /* has POSIX setsid(2) call */
704# define HASINITGROUPS 1 /* has initgroups(3) call */
705# define HASSETREUID 1 /* has setreuid(2) call */
706# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
707# define GIDSET_T gid_t
708# define LA_TYPE LA_INT
709# define SFS_TYPE SFS_STATFS /* use <sys/statfs.h> statfs() impl */
710# undef SETPROCTITLE
711# ifndef _PATH_SENDMAILCF
712# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
713# endif
714# ifndef _PATH_SENDMAILPID
715# define _PATH_SENDMAILPID "/etc/sendmail.pid"
716# endif
717#endif
718
719
250441f6
EA
720/*
721** Cray Unicos
722**
723** Ported by David L. Kensiski, Sterling Sofware <kensiski@nas.nasa.gov>
724*/
725
726#ifdef UNICOS
727# define SYSTEM5 1 /* include all the System V defines */
728# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */
250441f6
EA
729# define MAXPATHLEN PATHSIZE
730# define LA_TYPE LA_ZERO
5e0e0f8f 731# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */
250441f6
EA
732#endif
733
c6bd47b4 734
548197f7
EA
735/*
736** Apollo DomainOS
737**
738** From Todd Martin <tmartint@tus.ssi1.com> & Don Lewis <gdonl@gv.ssi1.com>
e7261663 739**
548197f7
EA
740** 15 Jan 1994
741**
742*/
743
744#ifdef apollo
548197f7
EA
745# define HASSETREUID 1 /* has setreuid(2) call */
746# define HASINITGROUPS 1 /* has initgroups(2) call */
747# undef SETPROCTITLE
748# define LA_TYPE LA_SUBR /* use getloadavg.c */
f243158a 749# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */
548197f7
EA
750# ifndef _PATH_SENDMAILCF
751# define _PATH_SENDMAILCF "/usr/lib/sendmail.cf"
752# endif
753# ifndef _PATH_SENDMAILPID
754# define _PATH_SENDMAILPID "/etc/sendmail.pid"
755# endif
756# undef S_IFSOCK /* S_IFSOCK and S_IFIFO are the same */
757# undef S_IFIFO
758# define S_IFIFO 0010000
759# ifndef IDENTPROTO
760# define IDENTPROTO 0 /* TCP/IP implementation is broken */
761# endif
e7261663 762#endif
548197f7
EA
763
764
765
178464cb 766
ba6514e2 767/**********************************************************************
fd57f063 768** End of Per-Operating System defines
ba6514e2 769**********************************************************************/
fd57f063 770
b4cd00ff
EA
771/**********************************************************************
772** More general defines
773**********************************************************************/
774
33d59d37
EA
775/* general BSD defines */
776#ifdef BSD
39270cfd
EA
777# define HASGETDTABLESIZE 1 /* has getdtablesize(2) call */
778# define HASSETREUID 1 /* has setreuid(2) call */
779# define HASINITGROUPS 1 /* has initgroups(2) call */
72af7ebb
EA
780# ifndef HASFLOCK
781# define HASFLOCK 1 /* has flock(2) call */
782# endif
33d59d37
EA
783#endif
784
f361504a
EA
785/* general System V Release 4 defines */
786#ifdef __svr4__
787# define SYSTEM5 1
788# define HASSETREUID 1 /* has seteuid(2) call & working saved uids */
1ee33f7d
EA
789# ifndef HASGETUSERSHELL
790# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */
9ceb18fe 791# endif
f361504a
EA
792# define setreuid(r, e) seteuid(e)
793
794# ifndef _PATH_UNIX
795# define _PATH_UNIX "/unix"
796# endif
797# ifndef _PATH_SENDMAILCF
798# define _PATH_SENDMAILCF "/usr/ucblib/sendmail.cf"
799# endif
800# ifndef _PATH_SENDMAILPID
801# define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid"
802# endif
803# ifndef SYSLOG_BUFSIZE
804# define SYSLOG_BUFSIZE 128
805# endif
806#endif
807
fd57f063
EA
808/* general System V defines */
809# ifdef SYSTEM5
8988dfd3 810# include <sys/sysmacros.h>
b4cd00ff 811# define HASUNAME 1 /* use System V uname(2) system call */
82530719 812# define SYS5SETPGRP 1 /* use System V setpgrp(2) syscall */
c6bd47b4 813# define HASSETVBUF 1 /* we have setvbuf(3) in libc */
33d59d37 814# ifndef LA_TYPE
5e0e0f8f
EA
815# define LA_TYPE LA_INT /* assume integer load average */
816# endif
817# ifndef SFS_TYPE
818# define SFS_TYPE SFS_USTAT /* use System V ustat(2) syscall */
33d59d37 819# endif
b4cd00ff
EA
820# define bcopy(s, d, l) (memmove((d), (s), (l)))
821# define bzero(d, l) (memset((d), '\0', (l)))
822# define bcmp(s, d, l) (memcmp((s), (d), (l)))
fd57f063
EA
823# endif
824
b4cd00ff
EA
825/* general POSIX defines */
826#ifdef _POSIX_VERSION
fe3849ea
EA
827# define HASSETSID 1 /* has Posix setsid(2) call */
828# define HASWAITPID 1 /* has Posix waitpid(2) call */
b4cd00ff
EA
829#endif
830
e6cb9fc4
EA
831/*
832** If no type for argument two of getgroups call is defined, assume
833** it's an integer -- unfortunately, there seem to be several choices
834** here.
835*/
836
837#ifndef GIDSET_T
838# define GIDSET_T int
839#endif
840
31c3ae15
EA
841/*
842** Tweaking for systems that (for example) claim to be BSD but
843** don't have all the standard BSD routines (boo hiss).
844*/
845
846#ifdef titan
847# undef HASINITGROUPS /* doesn't have initgroups(3) call */
848#endif
849
72af7ebb 850
a74fd615
EA
851/*
852** Due to a "feature" in some operating systems such as Ultrix 4.3 and
853** HPUX 8.0, if you receive a "No route to host" message (ICMP message
854** ICMP_UNREACH_HOST) on _any_ connection, all connections to that host
855** are closed. Some firewalls return this error if you try to connect
856** to the IDENT port (113), so you can't receive email from these hosts
857** on these systems. The firewall really should use a more specific
858** message such as ICMP_UNREACH_PROTOCOL or _PORT or _NET_PROHIB. If
859** not explicitly set to zero above, default it on.
860*/
861
862#ifndef IDENTPROTO
863# define IDENTPROTO 1 /* use IDENT proto (RFC 1413) */
864#endif
865
1ee33f7d
EA
866#ifndef HASGETUSERSHELL
867# define HASGETUSERSHELL 1 /* libc has getusershell(3) call */
9ceb18fe
EA
868#endif
869
72af7ebb
EA
870#ifndef HASFLOCK
871# define HASFLOCK 0 /* assume no flock(2) support */
872#endif
873
2295903c
EA
874
875/**********************************************************************
e6245c7e
EA
876** Remaining definitions should never have to be changed. They are
877** primarily to provide back compatibility for older systems -- for
6070681d 878** example, it includes some POSIX compatibility definitions
2295903c 879**********************************************************************/
e6245c7e 880
bd3dddbf
EA
881/* System 5 compatibility */
882#ifndef S_ISREG
fce21cb9
EA
883# define S_ISREG(foo) ((foo & S_IFMT) == S_IFREG)
884#endif
885#if !defined(S_ISLNK) && defined(S_IFLNK)
886# define S_ISLNK(foo) ((foo & S_IFMT) == S_IFLNK)
bd3dddbf
EA
887#endif
888#ifndef S_IWGRP
889#define S_IWGRP 020
890#endif
891#ifndef S_IWOTH
892#define S_IWOTH 002
893#endif
894
030ae776
EA
895/*
896** Older systems don't have this error code -- it should be in
897** /usr/include/sysexits.h.
898*/
899
900# ifndef EX_CONFIG
901# define EX_CONFIG 78 /* configuration error */
902# endif
5229f34d 903
fe3849ea
EA
904/* pseudo-code used in server SMTP */
905# define EX_QUIT 22 /* drop out of server immediately */
906
907
92f2b65e
EA
908/*
909** These are used in a few cases where we need some special
910** error codes, but where the system doesn't provide something
911** reasonable. They are printed in errstring.
912*/
913
914#ifndef E_PSEUDOBASE
915# define E_PSEUDOBASE 256
916#endif
917
918#define EOPENTIMEOUT (E_PSEUDOBASE + 0) /* timeout on open */
919#define E_DNSBASE (E_PSEUDOBASE + 20) /* base for DNS h_errno */
920
0639fd0c
EA
921/* type of arbitrary pointer */
922#ifndef ARBPTR_T
923# define ARBPTR_T void *
924#endif
925
ed0b2c1b
EA
926#ifndef __P
927# include "cdefs.h"
928#endif
929
3356c77c
EA
930/*
931** Do some required dependencies
932*/
933
934#if defined(NETINET) || defined(NETISO)
e9aa7870
EA
935# define SMTP 1 /* enable user and server SMTP */
936# define QUEUE 1 /* enable queueing */
937# define DAEMON 1 /* include the daemon (requires IPC & SMTP) */
3356c77c
EA
938#endif
939
940
5229f34d
EA
941/*
942** Arrange to use either varargs or stdargs
943*/
944
945# ifdef __STDC__
946
947# include <stdarg.h>
948
5229f34d
EA
949# define VA_LOCAL_DECL va_list ap;
950# define VA_START(f) va_start(ap, f)
951# define VA_END va_end(ap)
952
953# else
954
955# include <varargs.h>
956
5229f34d
EA
957# define VA_LOCAL_DECL va_list ap;
958# define VA_START(f) va_start(ap)
959# define VA_END va_end(ap)
960
961# endif
422bed79 962
322eceee 963#ifdef HASUNAME
422bed79
EA
964# include <sys/utsname.h>
965# ifdef newstr
966# undef newstr
967# endif
322eceee 968#else /* ! HASUNAME */
422bed79
EA
969# define NODE_LENGTH 32
970struct utsname
971{
972 char nodename[NODE_LENGTH+1];
973};
322eceee 974#endif /* HASUNAME */
6e99f903 975
7621e399
EA
976#if !defined(MAXHOSTNAMELEN) && !defined(_SCO_unix_)
977# define MAXHOSTNAMELEN 256
8d3fd325 978#endif
49c069a9
EA
979
980#if !defined(SIGCHLD) && defined(SIGCLD)
981# define SIGCHLD SIGCLD
982#endif
983
984#ifndef STDIN_FILENO
985#define STDIN_FILENO 0
986#endif
987
988#ifndef STDOUT_FILENO
989#define STDOUT_FILENO 1
990#endif
991
992#ifndef STDERR_FILENO
993#define STDERR_FILENO 2
994#endif
f8a31c8e 995
0f786d57 996#ifndef LOCK_SH
39270cfd
EA
997# define LOCK_SH 0x01 /* shared lock */
998# define LOCK_EX 0x02 /* exclusive lock */
999# define LOCK_NB 0x04 /* non-blocking lock */
1000# define LOCK_UN 0x08 /* unlock */
1001#endif
64247676 1002
39270cfd
EA
1003#ifndef SIG_ERR
1004# define SIG_ERR ((void (*)()) -1)
f8a31c8e 1005#endif
a3685d83 1006
0349f8cc
EA
1007#ifndef WEXITSTATUS
1008# define WEXITSTATUS(st) (((st) >> 8) & 0377)
1009#endif
1010#ifndef WIFEXITED
1011# define WIFEXITED(st) (((st) & 0377) == 0)
1012#endif
1013
53335960
EA
1014#ifndef SIGFUNC_DEFINED
1015typedef void (*sigfunc_t) __P((int));
1016#endif
1017
7cfc9c77
EA
1018/* size of syslog buffer */
1019#ifndef SYSLOG_BUFSIZE
1020# define SYSLOG_BUFSIZE 1024
1021#endif
1022
a3685d83
EA
1023/*
1024** Size of tobuf (deliver.c)
1025** Tweak this to match your syslog implementation. It will have to
1026** allow for the extra information printed.
1027*/
1028
1029#ifndef TOBUFSIZE
7cfc9c77
EA
1030# if (SYSLOG_BUFSIZE) > 512
1031# define TOBUFSIZE (SYSLOG_BUFSIZE - 256)
1032# else
1033# define TOBUFSIZE 256
1034# endif
a3685d83 1035#endif
9114f86c 1036
77779257
EA
1037/*
1038** Size of prescan buffer.
1039** Despite comments in the _sendmail_ book, this probably should
1040** not be changed; there are some hard-to-define dependencies.
1041*/
1042
1043# define PSBUFSIZE (MAXNAME + MAXATOM) /* size of prescan buffer */
9114f86c
EA
1044/* fork routine -- set above using #ifdef _osname_ or in Makefile */
1045# ifndef FORK
1046# define FORK vfork /* function to call to fork mailer */
1047# endif
5e0139e6
EA
1048
1049/*
1050** If we are going to link scanf anyway, use it in readcf
1051*/
1052
1053#if !defined(HASUNAME) && !defined(SCANF)
1054# define SCANF 1
1055#endif