source: trunk/third/sendmail/src/conf.h @ 12554

Revision 12554, 69.1 KB checked in by danw, 26 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r12553, which included commits to RCS files with non-trunk default branches.
Line 
1/*
2 * Copyright (c) 1998 Sendmail, Inc.  All rights reserved.
3 * Copyright (c) 1983, 1995-1997 Eric P. Allman.  All rights reserved.
4 * Copyright (c) 1988, 1993
5 *      The Regents of the University of California.  All rights reserved.
6 *
7 * By using this file, you agree to the terms and conditions set
8 * forth in the LICENSE file which can be found at the top level of
9 * the sendmail distribution.
10 *
11 *
12 *      @(#)conf.h      8.385 (Berkeley) 1/28/1999
13 */
14
15/*
16**  CONF.H -- All user-configurable parameters for sendmail
17**
18**      Send updates to sendmail@Sendmail.ORG so they will be
19**      included in the next release.
20*/
21
22#ifdef __GNUC__
23struct rusage;  /* forward declaration to get gcc to shut up in wait.h */
24#endif
25
26# include <sys/param.h>
27# include <sys/types.h>
28# include <sys/stat.h>
29#ifndef __QNX__
30/* in QNX this grabs bogus LOCK_* manifests */
31# include <sys/file.h>
32#endif
33# include <sys/wait.h>
34# include <limits.h>
35# include <fcntl.h>
36# include <signal.h>
37# include <netdb.h>
38# include <pwd.h>
39
40/**********************************************************************
41**  Table sizes, etc....
42**      There shouldn't be much need to change these....
43**********************************************************************/
44
45# define MAXLINE        2048            /* max line length */
46# define MAXNAME        256             /* max length of a name */
47# define MAXPV          40              /* max # of parms to mailers */
48# define MAXATOM        200             /* max atoms per address */
49# define MAXMAILERS     25              /* maximum mailers known to system */
50# define MAXRWSETS      200             /* max # of sets of rewriting rules */
51# define MAXPRIORITIES  25              /* max values for Precedence: field */
52# define MAXMXHOSTS     100             /* max # of MX records for one host */
53# define SMTPLINELIM    990             /* maximum SMTP line length */
54# define MAXKEY         128             /* maximum size of a database key */
55# define MEMCHUNKSIZE   1024            /* chunk size for memory allocation */
56# define MAXUSERENVIRON 100             /* max envars saved, must be >= 3 */
57# define MAXALIASDB     12              /* max # of alias databases */
58# define MAXMAPSTACK    12              /* max # of stacked or sequenced maps */
59# define MAXTOCLASS     8               /* max # of message timeout classes */
60# define MAXMIMEARGS    20              /* max args in Content-Type: */
61# define MAXMIMENESTING 20              /* max MIME multipart nesting */
62# define QUEUESEGSIZE   1000            /* increment for queue size */
63# define MAXQFNAME      20              /* max qf file name length */
64# define MACBUFSIZE     4096            /* max expanded macro buffer size */
65# define TOBUFSIZE      512             /* max buffer to hold address list */
66# define MAXSHORTSTR    203             /* max short string length */
67# if _FFR_MAX_MIME_HEADER_LENGTH
68#  define MAXMACNAMELEN 25              /* max macro name length */
69# else
70#  define MAXMACNAMELEN 20              /* max macro name length */
71# endif
72# ifndef MAXHDRSLEN
73#  define MAXHDRSLEN    (32 * 1024)     /* max size of message headers */
74# endif
75
76/**********************************************************************
77**  Compilation options.
78**      #define these to 1 if they are available;
79**      #define them to 0 otherwise.
80**  All can be overridden from Makefile.
81**********************************************************************/
82
83# ifndef NETINET
84#  define NETINET       1       /* include internet support */
85# endif
86
87# ifndef NETISO
88#  define NETISO        0       /* do not include ISO socket support */
89# endif
90
91# ifndef NAMED_BIND
92#  define NAMED_BIND    1       /* use Berkeley Internet Domain Server */
93# endif
94
95# ifndef XDEBUG
96#  define XDEBUG        1       /* enable extended debugging */
97# endif
98
99# ifndef MATCHGECOS
100#  define MATCHGECOS    1       /* match user names from gecos field */
101# endif
102
103# ifndef DSN
104#  define DSN           1       /* include delivery status notification code */
105# endif
106
107# if !defined(USERDB) && (defined(NEWDB) || defined(HESIOD))
108#  define USERDB        1       /* look in user database */
109# endif
110
111# ifndef MIME8TO7
112#  define MIME8TO7      1       /* 8->7 bit MIME conversions */
113# endif
114
115# ifndef MIME7TO8
116#  define MIME7TO8      1       /* 7->8 bit MIME conversions */
117# endif
118
119/**********************************************************************
120**  "Hard" compilation options.
121**      #define these if they are available; comment them out otherwise.
122**  These cannot be overridden from the Makefile, and should really not
123**  be turned off unless absolutely necessary.
124**********************************************************************/
125
126# define LOG            1       /* enable logging -- don't turn off */
127
128/**********************************************************************
129**  End of site-specific configuration.
130**********************************************************************/
131/*
132**  General "standard C" defines.
133**
134**      These may be undone later, to cope with systems that claim to
135**      be Standard C but aren't.  Gcc is the biggest offender -- it
136**      doesn't realize that the library is part of the language.
137**
138**      Life would be much easier if we could get rid of this sort
139**      of bozo problems.
140*/
141
142#ifdef __STDC__
143# define HASSETVBUF     1       /* we have setvbuf(3) in libc */
144#endif
145
146/*
147**  Assume you have standard calls; can be #undefed below if necessary.
148*/
149
150# define HASLSTAT       1       /* has lstat(2) call */
151/**********************************************************************
152**  Operating system configuration.
153**
154**      Unless you are porting to a new OS, you shouldn't have to
155**      change these.
156**********************************************************************/
157
158/*
159**  HP-UX -- tested for 8.07, 9.00, and 9.01.
160**
161**      If V4FS is defined, compile for HP-UX 10.0.
162**      11.x support from Richard Allen <ra@hp.is>.
163*/
164
165#ifdef __hpux
166                /* common definitions for HP-UX 9.x and 10.x */
167# undef m_flags         /* conflict between Berkeley DB 1.85 db.h & sys/sysmacros.h on HP 300 */
168# define SYSTEM5        1       /* include all the System V defines */
169# define HASINITGROUPS  1       /* has initgroups(3) call */
170# define HASFCHMOD      1       /* has fchmod(2) syscall */
171# define USESETEUID     1       /* has useable seteuid(2) call */
172# define BOGUS_O_EXCL   1       /* exclusive open follows symlinks */
173# define seteuid(e)     setresuid(-1, e, -1)
174# define IP_SRCROUTE    1       /* can check IP source routing */
175# define LA_TYPE        LA_HPUX
176# define SPT_TYPE       SPT_PSTAT
177# define SFS_TYPE       SFS_VFS /* use <sys/vfs.h> statfs() implementation */
178# define GIDSET_T       gid_t
179# ifndef HASGETUSERSHELL
180#  define HASGETUSERSHELL 0     /* getusershell(3) causes core dumps */
181# endif
182# ifndef HPUX11
183#  define syslog        hard_syslog
184# endif
185# define SAFENFSPATHCONF 1      /* pathconf(2) pessimizes on NFS filesystems */
186
187# ifdef V4FS
188                /* HP-UX 10.x */
189#  define _PATH_UNIX            "/stand/vmunix"
190#  ifndef _PATH_VENDOR_CF
191#   define _PATH_VENDOR_CF      "/etc/mail/sendmail.cf"
192#  endif
193#  ifndef _PATH_SENDMAILPID
194#   define _PATH_SENDMAILPID    "/etc/mail/sendmail.pid"
195#  endif
196#  ifndef IDENTPROTO
197#   define IDENTPROTO   1       /* TCP/IP implementation fixed in 10.0 */
198#  endif
199
200# else
201                /* HP-UX 9.x */
202#  define _PATH_UNIX            "/hp-ux"
203#  ifndef _PATH_VENDOR_CF
204#   define _PATH_VENDOR_CF      "/usr/lib/sendmail.cf"
205#  endif
206#  ifndef IDENTPROTO
207#   define IDENTPROTO   0       /* TCP/IP implementation is broken */
208#  endif
209#  ifdef __STDC__
210extern void     hard_syslog(int, char *, ...);
211#  else
212extern void     hard_syslog();
213#  endif
214#  define FDSET_CAST    (int *) /* cast for fd_set parameters to select */
215# endif
216
217#endif
218
219
220/*
221**  IBM AIX 4.x
222*/
223
224#ifdef _AIX4
225# define _AIX3          1       /* pull in AIX3 stuff */
226# define USESETEUID     1       /* seteuid(2) works */
227# define TZ_TYPE        TZ_NAME /* use tzname[] vector */
228# define SOCKOPT_LEN_T  size_t  /* arg#5 to getsockopt */
229# if _AIX4 >= 40200
230#  define HASSETREUID   1       /* setreuid(2) works as of AIX 4.2 */
231#  define SOCKADDR_LEN_T        size_t  /* e.g., arg#3 to accept, getsockname */
232# endif
233# if defined(_ILS_MACROS)       /* IBM versions aren't side-effect clean */
234#  undef isascii
235#  define isascii(c)            !(c & ~0177)
236#  undef isdigit
237#  define isdigit(__a)          (_IS(__a,_ISDIGIT))
238#  undef isspace
239#  define isspace(__a)          (_IS(__a,_ISSPACE))
240# endif
241#endif
242
243
244/*
245**  IBM AIX 3.x -- actually tested for 3.2.3
246*/
247
248#ifdef _AIX3
249# include <paths.h>
250# include <sys/machine.h>       /* to get byte order */
251# include <sys/select.h>
252# define HASINITGROUPS  1       /* has initgroups(3) call */
253# define HASUNAME       1       /* use System V uname(2) system call */
254# define HASGETUSERSHELL 0      /* does not have getusershell(3) call */
255# define HASFCHMOD      1       /* has fchmod(2) syscall */
256# define IP_SRCROUTE    0       /* Something is broken with getsockopt() */
257# define GIDSET_T       gid_t
258# define SFS_TYPE       SFS_STATFS      /* use <sys/statfs.h> statfs() impl */
259# define SPT_PADCHAR    '\0'    /* pad process title with nulls */
260# define LA_TYPE        LA_INT
261# define FSHIFT         16
262# define LA_AVENRUN     "avenrun"
263#endif
264
265
266/*
267**  IBM AIX 2.2.1 -- actually tested for osupdate level 2706+1773
268**
269**      From Mark Whetzel <markw@wg.waii.com>.
270*/
271
272#ifdef AIX                      /* AIX/RT compiler pre-defines this */
273# include <paths.h>
274# include <sys/time.h>          /* AIX/RT resource.h does NOT include this */
275# define HASINITGROUPS  1       /* has initgroups(3) call */
276# define HASUNAME       1       /* use System V uname(2) system call */
277# define HASGETUSERSHELL 0      /* does not have getusershell(3) call */
278# define HASFCHMOD      0       /* does not have fchmod(2) syscall */
279# define HASSETREUID    1       /* use setreuid(2) -lbsd system call */
280# define HASSETVBUF     1       /* use setvbuf(2) system call */
281# define HASSETRLIMIT   0       /* does not have setrlimit call */
282# define HASFLOCK       0       /* does not have flock call - use fcntl */
283# define HASULIMIT      1       /* use ulimit instead of setrlimit call */
284# define NEEDGETOPT     1       /* Do we need theirs or ours */
285# define SYS5SETPGRP    1       /* don't have setpgid on AIX/RT */
286# define IP_SRCROUTE    0       /* Something is broken with getsockopt() */
287# define BSD4_3         1       /* NOT bsd 4.4 or posix signals */
288# define GIDSET_T       int
289# define SFS_TYPE       SFS_STATFS      /* use <sys/statfs.h> statfs() impl */
290# define SPT_PADCHAR    '\0'            /* pad process title with nulls */
291# define LA_TYPE        LA_SUBR         /* use our ported loadavgd daemon */
292# define TZ_TYPE        TZ_TZNAME       /* use tzname[] vector */
293# define ARBPTR_T       int *
294# define void           int
295typedef int             pid_t;
296/* RTisms for BSD compatibility, specified in the Makefile
297  define BSD            1
298  define BSD_INCLUDES           1
299  define BSD_REMAP_SIGNAL_TO_SIGVEC
300    RTisms needed above */
301/* make this sendmail in a completely different place */
302# ifndef _PATH_VENDOR_CF
303#  define _PATH_VENDOR_CF       "/usr/local/newmail/sendmail.cf"
304# endif
305# ifndef _PATH_SENDMAILPID
306#  define _PATH_SENDMAILPID     "/usr/local/newmail/sendmail.pid"
307# endif
308#endif
309
310
311/*
312**  Silicon Graphics IRIX
313**
314**      Compiles on 4.0.1.
315**
316**      Use IRIX64 instead of IRIX for 64-bit IRIX (6.0).
317**      Use IRIX5 instead of IRIX for IRIX 5.x.
318**
319**      This version tries to be adaptive using _MIPS_SIM:
320**              _MIPS_SIM == _ABIO32 (= 1)    Abi: -32  on IRIX 6.2
321**              _MIPS_SIM == _ABIN32 (= 2)    Abi: -n32 on IRIX 6.2
322**              _MIPS_SIM == _ABI64  (= 3)    Abi: -64 on IRIX 6.2
323**
324**              _MIPS_SIM is 1 also on IRIX 5.3
325**
326**      IRIX64 changes from Mark R. Levinson <ml@cvdev.rochester.edu>.
327**      IRIX5 changes from Kari E. Hurtta <Kari.Hurtta@fmi.fi>.
328**      Adaptive changes from Kari E. Hurtta <Kari.Hurtta@fmi.fi>.
329*/
330
331#if defined(__sgi)
332# ifndef IRIX
333#  define IRIX
334# endif
335# if _MIPS_SIM > 0 && !defined(IRIX5)
336#  define IRIX5                 /* IRIX5 or IRIX6 */
337# endif
338# if _MIPS_SIM > 1 && !defined(IRIX6) && !defined(IRIX64)
339#  define IRIX6                 /* IRIX6 */
340# endif
341
342#endif
343
344#ifdef IRIX
345# define SYSTEM5        1       /* this is a System-V derived system */
346# define HASSETREUID    1       /* has setreuid(2) call */
347# define HASINITGROUPS  1       /* has initgroups(3) call */
348# define HASFCHMOD      1       /* has fchmod(2) syscall */
349# define HASGETUSERSHELL 0      /* does not have getusershell(3) call */
350# define IP_SRCROUTE    1       /* can check IP source routing */
351# define setpgid        BSDsetpgrp
352# define GIDSET_T       gid_t
353# define SFS_TYPE       SFS_4ARGS       /* four argument statfs() call */
354# define SFS_BAVAIL     f_bfree         /* alternate field name */
355# define SYSLOG_BUFSIZE 512
356# ifdef IRIX6
357#  define STAT64        1
358#  define QUAD_T        unsigned long long
359#  define LA_TYPE       LA_IRIX6        /* figure out at run time */
360#  define SAFENFSPATHCONF 0     /* pathconf(2) lies on NFS filesystems */
361# else
362#  define LA_TYPE       LA_INT
363
364#  ifdef IRIX64
365#   define STAT64       1
366#   define QUAD_T       unsigned long long
367#   define NAMELISTMASK 0x7fffffffffffffff      /* mask for nlist() values */
368#  else
369#   define STAT64       0
370#   define NAMELISTMASK 0x7fffffff              /* mask for nlist() values */
371#  endif
372# endif
373# if defined(IRIX64) || defined(IRIX5) || defined(IRIX6)
374#  include <sys/cdefs.h>
375#  include <paths.h>
376#  define ARGV_T        char *const *
377#  define HASSETRLIMIT  1       /* has setrlimit(2) syscall */
378#  define HASGETDTABLESIZE 1    /* has getdtablesize(2) syscall */
379#  define HASSTRERROR   1       /* has strerror(3) */
380# else
381#  define ARGV_T        const char **
382#  define WAITUNION     1       /* use "union wait" as wait argument type */
383# endif
384#endif
385
386
387/*
388**  SunOS and Solaris
389**
390**      Tested on SunOS 4.1.x (a.k.a. Solaris 1.1.x) and
391**      Solaris 2.4 (a.k.a. SunOS 5.4).
392*/
393
394#if defined(sun) && !defined(BSD)
395
396# include <sys/time.h>
397# define HASINITGROUPS  1       /* has initgroups(3) call */
398# define HASUNAME       1       /* use System V uname(2) system call */
399# define HASFCHMOD      1       /* has fchmod(2) syscall */
400# define IP_SRCROUTE    1       /* can check IP source routing */
401# define SAFENFSPATHCONF 1      /* pathconf(2) pessimizes on NFS filesystems */
402
403# ifdef SOLARIS_2_3
404#  define SOLARIS       20300   /* for back compat only -- use -DSOLARIS=20300 */
405# endif
406
407# if defined(NOT_SENDMAIL) && !defined(SOLARIS) && defined(sun) && (defined(__svr4__) || defined(__SVR4))
408#  define SOLARIS       1       /* unknown Solaris version */
409# endif
410
411# ifdef SOLARIS
412                        /* Solaris 2.x (a.k.a. SunOS 5.x) */
413#  ifndef __svr4__
414#   define __svr4__             /* use all System V Releae 4 defines below */
415#  endif
416#  define GIDSET_T      gid_t
417#  define USE_SA_SIGACTION      1       /* use sa_sigaction field */
418#  ifndef _PATH_UNIX
419#   define _PATH_UNIX           "/dev/ksyms"
420#  endif
421#  ifndef _PATH_VENDOR_CF
422#   define _PATH_VENDOR_CF      "/etc/mail/sendmail.cf"
423#  endif
424#  ifndef _PATH_SENDMAILPID
425#   define _PATH_SENDMAILPID    "/etc/mail/sendmail.pid"
426#  endif
427#  ifndef _PATH_HOSTS
428#   define _PATH_HOSTS          "/etc/inet/hosts"
429#  endif
430#  ifndef SYSLOG_BUFSIZE
431#   define SYSLOG_BUFSIZE       1024    /* allow full size syslog buffer */
432#  endif
433#  ifndef TZ_TYPE
434#   define TZ_TYPE      TZ_TZNAME
435#  endif
436#  if SOLARIS >= 20300 || (SOLARIS < 10000 && SOLARIS >= 203)
437#   define USESETEUID   1               /* seteuid works as of 2.3 */
438#  endif
439#  if SOLARIS >= 20500 || (SOLARIS < 10000 && SOLARIS >= 205)
440#   define HASSETREUID  1               /* setreuid works as of 2.5 */
441#   if SOLARIS < 207 || (SOLARIS > 10000 && SOLARIS < 20700)
442#    ifndef LA_TYPE
443#     define LA_TYPE    LA_KSTAT        /* use kstat(3k) -- may work in < 2.5 */
444#    endif
445#   endif
446#  endif
447#  if SOLARIS >= 20600 || (SOLARIS < 10000 && SOLARIS >= 206)
448#   define HASSNPRINTF  1               /* has snprintf starting in 2.6 */
449#  endif
450#  if SOLARIS >= 20700 || (SOLARIS < 10000 && SOLARIS >= 207)
451#   ifndef LA_TYPE
452#    define LA_TYPE     LA_SUBR         /* getloadavg(3c) appears in 2.7 */
453#   endif
454#   define HASGETUSERSHELL 1    /* getusershell(3c) bug fixed in 2.7 */
455#  endif
456#  ifndef HASGETUSERSHELL
457#   define HASGETUSERSHELL 0    /* getusershell(3) causes core dumps pre-2.7 */
458#  endif
459
460# else
461                        /* SunOS 4.0.3 or 4.1.x */
462#  define HASGETUSERSHELL 1     /* DOES have getusershell(3) call in libc */
463#  define HASSETREUID   1       /* has setreuid(2) call */
464#  ifndef HASFLOCK
465#   define HASFLOCK     1       /* has flock(2) call */
466#  endif
467#  define SFS_TYPE      SFS_VFS /* use <sys/vfs.h> statfs() implementation */
468#  define TZ_TYPE       TZ_TM_ZONE      /* use tm->tm_zone */
469#  include <memory.h>
470#  include <vfork.h>
471#  ifdef __GNUC__
472#   define strtoul      strtol  /* gcc library bogosity */
473#  endif
474
475#  ifdef SUNOS403
476                        /* special tweaking for SunOS 4.0.3 */
477#   include <malloc.h>
478#   define BSD4_3       1       /* 4.3 BSD-based */
479#   define NEEDSTRSTR   1       /* need emulation of strstr(3) routine */
480#   define WAITUNION    1       /* use "union wait" as wait argument type */
481#   undef WIFEXITED
482#   undef WEXITSTATUS
483#   undef HASUNAME
484#   define setpgid      setpgrp
485#   define MODE_T       int
486typedef int             pid_t;
487extern char             *getenv();
488
489#  else
490                        /* 4.1.x specifics */
491#   define HASSETSID    1       /* has Posix setsid(2) call */
492#   define HASSETVBUF   1       /* we have setvbuf(3) in libc */
493
494#  endif
495# endif
496
497# ifndef LA_TYPE
498#  define LA_TYPE       LA_INT
499# endif
500
501#endif /* sun && !BSD */
502
503/*
504**  DG/UX
505**
506**      Tested on 5.4.2 and 5.4.3.  Use DGUX_5_4_2 to get the
507**      older support.
508**      5.4.3 changes from Mark T. Robinson <mtr@ornl.gov>.
509*/
510
511#ifdef DGUX_5_4_2
512# define DGUX           1
513#endif
514
515#ifdef  DGUX
516# define SYSTEM5        1
517# define LA_TYPE        LA_DGUX
518# define HASSETREUID    1       /* has setreuid(2) call */
519# define HASUNAME       1       /* use System V uname(2) system call */
520# define HASSETSID      1       /* has Posix setsid(2) call */
521# define HASINITGROUPS  1       /* has initgroups(3) call */
522# define IP_SRCROUTE    0       /* does not have <netinet/ip_var.h> */
523# define HASGETUSERSHELL 0      /* does not have getusershell(3) */
524# define HASSNPRINTF    1       /* has snprintf(3) */
525# ifndef IDENTPROTO
526#  define IDENTPROTO    0       /* TCP/IP implementation is broken */
527# endif
528# define SPT_TYPE       SPT_NONE        /* don't use setproctitle */
529# define SFS_TYPE       SFS_4ARGS       /* four argument statfs() call */
530
531/* these include files must be included early on DG/UX */
532# include <netinet/in.h>
533# include <arpa/inet.h>
534
535/* compiler doesn't understand const? */
536# define const
537
538# ifdef DGUX_5_4_2
539#  define inet_addr     dgux_inet_addr
540extern long     dgux_inet_addr();
541# endif
542#endif
543
544
545/*
546**  Digital Ultrix 4.2A or 4.3
547**
548**      Apparently, fcntl locking is broken on 4.2A, in that locks are
549**      not dropped when the process exits.  This causes major problems,
550**      so flock is the only alternative.
551*/
552
553#ifdef ultrix
554# define HASSETREUID    1       /* has setreuid(2) call */
555# define HASUNSETENV    1       /* has unsetenv(3) call */
556# define HASINITGROUPS  1       /* has initgroups(3) call */
557# define HASUNAME       1       /* use System V uname(2) system call */
558# define HASFCHMOD      1       /* has fchmod(2) syscall */
559# ifndef HASFLOCK
560#  define HASFLOCK      1       /* has flock(2) call */
561# endif
562# define HASGETUSERSHELL 0      /* does not have getusershell(3) call */
563# ifndef BROKEN_RES_SEARCH
564#  define BROKEN_RES_SEARCH 1   /* res_search(unknown) returns h_errno=0 */
565# endif
566# ifdef vax
567#  define LA_TYPE       LA_FLOAT
568# else
569#  define LA_TYPE       LA_INT
570#  define LA_AVENRUN    "avenrun"
571# endif
572# define SFS_TYPE       SFS_MOUNT       /* use <sys/mount.h> statfs() impl */
573# ifndef IDENTPROTO
574#  define IDENTPROTO    0       /* pre-4.4 TCP/IP implementation is broken */
575# endif
576# define SYSLOG_BUFSIZE 256
577#endif
578
579
580/*
581**  OSF/1 for KSR.
582**
583**      Contributed by Todd C. Miller <Todd.Miller@cs.colorado.edu>
584*/
585
586#ifdef __ksr__
587# define __osf__        1       /* get OSF/1 defines below */
588# ifndef TZ_TYPE
589#  define TZ_TYPE       TZ_TZNAME       /* use tzname[] vector */
590# endif
591#endif
592
593
594/*
595**  OSF/1 for Intel Paragon.
596**
597**      Contributed by Jeff A. Earickson <jeff@ssd.intel.com>
598**      of Intel Scalable Systems Divison.
599*/
600
601#ifdef __PARAGON__
602# define __osf__        1       /* get OSF/1 defines below */
603# ifndef TZ_TYPE
604#  define TZ_TYPE       TZ_TZNAME       /* use tzname[] vector */
605# endif
606# define GIDSET_T       gid_t
607# define MAXNAMLEN      NAME_MAX
608#endif
609
610
611/*
612**  OSF/1 (tested on Alpha) -- now known as Digital UNIX.
613**
614**      Tested for 3.2 and 4.0.
615*/
616
617#ifdef __osf__
618# define HASUNSETENV    1       /* has unsetenv(3) call */
619# define USESETEUID     1       /* has useable seteuid(2) call */
620# define HASINITGROUPS  1       /* has initgroups(3) call */
621# define HASFCHMOD      1       /* has fchmod(2) syscall */
622# define IP_SRCROUTE    1       /* can check IP source routing */
623# define HAS_ST_GEN     1       /* has st_gen field in stat struct */
624# ifndef HASFLOCK
625#  define HASFLOCK      1       /* has flock(2) call */
626# endif
627# define LA_TYPE        LA_ALPHAOSF
628# define SFS_TYPE       SFS_STATVFS     /* use <sys/statvfs.h> statfs() impl */
629# ifndef _PATH_VENDOR_CF
630#  define _PATH_VENDOR_CF       "/var/adm/sendmail/sendmail.cf"
631# endif 
632# ifndef _PATH_SENDMAILPID
633#  define _PATH_SENDMAILPID     "/var/run/sendmail.pid"
634# endif
635# define bcopy(s, d, l)         (memmove((d), (s), (l)))
636# define bzero(d, l)            (memset((d), '\0', (l)))
637# define bcmp(s, d, l)          (memcmp((s), (d), (l)))
638#endif
639
640
641/*
642**  NeXTstep
643*/
644
645#ifdef NeXT
646# define HASINITGROUPS  1       /* has initgroups(3) call */
647# define NEEDPUTENV     2       /* need putenv(3) call; no setenv(3) call */
648# ifndef HASFLOCK
649#  define HASFLOCK      1       /* has flock(2) call */
650# endif
651# define NEEDGETOPT     1       /* need a replacement for getopt(3) */
652# define WAITUNION      1       /* use "union wait" as wait argument type */
653# define UID_T          int     /* compiler gripes on uid_t */
654# define GID_T          int     /* ditto for gid_t */
655# define MODE_T         int     /* and mode_t */
656# define setpgid        setpgrp
657# ifndef NOT_SENDMAIL
658#  define sleep         sleepX
659# endif
660# ifndef LA_TYPE
661#  define LA_TYPE       LA_MACH
662# endif
663# define SFS_TYPE       SFS_VFS /* use <sys/vfs.h> statfs() implementation */
664# ifndef _POSIX_SOURCE
665typedef int             pid_t;
666#  undef WEXITSTATUS
667#  undef WIFEXITED
668# endif
669# ifndef _PATH_VENDOR_CF
670#  define _PATH_VENDOR_CF       "/etc/sendmail/sendmail.cf"
671# endif
672# ifndef _PATH_SENDMAILPID
673#  define _PATH_SENDMAILPID     "/etc/sendmail/sendmail.pid"
674# endif
675
676# ifdef TCPWRAPPERS
677#  ifndef HASUNSETENV
678#   define HASUNSETENV  1
679#  endif
680#  undef NEEDPUTENV
681# endif
682
683#endif
684
685/*
686**  Apple Rhapsody
687**      Contributed by Wilfredo Sanchez <wsanchez@apple.com>
688*/
689
690#ifdef __APPLE__
691# define HASFCHMOD      1       /* has fchmod(2) syscall */
692# define HASFLOCK       1       /* has flock(2) syscall */
693# define HASUNAME       1       /* has uname(2) syscall */
694# define HASUNSETENV    1
695# define HASSETSID      1       /* has the setsid(2) POSIX syscall */
696# define HASINITGROUPS  1
697# define HASSETVBUF     1
698# define HASSETREUID    1
699# define USESETEUID     1       /* has useable seteuid(2) call */
700# define HASLSTAT       1
701# define HASSETRLIMIT   1
702# define HASWAITPID     1
703# define HASSTRERROR    1       /* has strerror(3) */
704# define HASSNPRINTF    1       /* has snprintf(3) and vsnprintf(3) */
705# define USESTRERROR    1       /* has strerror(3) */
706# define HASGETDTABLESIZE       1
707# define HASGETUSERSHELL        1
708# define NEEDGETOPT     1       /* need a replacement for getopt(3) */
709# define BSD4_4_SOCKADDR        /* has sa_len */
710# define NETLINK        1       /* supports AF_LINK */
711# define HAS_ST_GEN     1       /* has st_gen field in stat struct */
712# define GIDSET_T       gid_t
713# define LA_TYPE        LA_SUBR         /* use getloadavg(3) */
714# define SFS_TYPE       SFS_MOUNT       /* use <sys/mount.h> statfs() impl */
715# define SPT_TYPE       SPT_PSSTRINGS
716# define SPT_PADCHAR    '\0'    /* pad process title with nulls */
717# define ERRLIST_PREDEFINED     /* don't declare sys_errlist */
718#endif
719
720
721/*
722**  4.4 BSD
723**
724**      See also BSD defines.
725*/
726
727#if defined(BSD4_4) && !defined(__bsdi__) && !defined(__GNU__)
728# include <paths.h>
729# define HASUNSETENV    1       /* has unsetenv(3) call */
730# define USESETEUID     1       /* has useable seteuid(2) call */
731# define HASFCHMOD      1       /* has fchmod(2) syscall */
732# define HASSNPRINTF    1       /* has snprintf(3) and vsnprintf(3) */
733# define HASSTRERROR    1       /* has strerror(3) */
734# define HAS_ST_GEN     1       /* has st_gen field in stat struct */
735# include <sys/cdefs.h>
736# define ERRLIST_PREDEFINED     /* don't declare sys_errlist */
737# define BSD4_4_SOCKADDR        /* has sa_len */
738# define NEED_PRINTF_PERCENTQ   1       /* doesn't have %lld */
739# define NETLINK        1       /* supports AF_LINK */
740# ifndef LA_TYPE
741#  define LA_TYPE       LA_SUBR
742# endif
743# define SFS_TYPE       SFS_MOUNT       /* use <sys/mount.h> statfs() impl */
744# define SPT_TYPE       SPT_PSSTRINGS   /* use PS_STRINGS pointer */
745#endif
746
747
748/*
749**  BSD/OS (was BSD/386) (all versions)
750**      From Tony Sanders, BSDI
751*/
752
753#ifdef __bsdi__
754# include <paths.h>
755# define HASUNSETENV    1       /* has the unsetenv(3) call */
756# define HASSETSID      1       /* has the setsid(2) POSIX syscall */
757# define USESETEUID     1       /* has useable seteuid(2) call */
758# define HASFCHMOD      1       /* has fchmod(2) syscall */
759# define HASSNPRINTF    1       /* has snprintf(3) and vsnprintf(3) */
760# define HASUNAME       1       /* has uname(2) syscall */
761# define HASSTRERROR    1       /* has strerror(3) */
762# define HAS_ST_GEN     1       /* has st_gen field in stat struct */
763# include <sys/cdefs.h>
764# define ERRLIST_PREDEFINED     /* don't declare sys_errlist */
765# define BSD4_4_SOCKADDR        /* has sa_len */
766# define NETLINK        1       /* supports AF_LINK */
767# define SFS_TYPE       SFS_MOUNT       /* use <sys/mount.h> statfs() impl */
768# ifndef LA_TYPE
769#  define LA_TYPE       LA_SUBR
770# endif
771# define GIDSET_T       gid_t
772# define QUAD_T         quad_t
773# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199312
774                        /* version 1.1 or later */
775#  undef SPT_TYPE
776#  define SPT_TYPE      SPT_BUILTIN     /* setproctitle is in libc */
777# else
778                        /* version 1.0 or earlier */
779#  define SPT_PADCHAR   '\0'    /* pad process title with nulls */
780# endif
781# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199701  /* on 3.x */
782#  define HASSETUSERCONTEXT 1   /* has setusercontext */
783# endif
784#endif
785
786
787/*
788**  QNX 4.2x
789**      Contributed by Glen McCready <glen@qnx.com>.
790**
791**      Should work with all versions of QNX.
792*/
793
794#if defined(__QNX__)
795# include <unix.h>
796# include <sys/select.h>
797# undef NGROUPS_MAX
798# define HASSETSID      1       /* has the setsid(2) POSIX syscall */
799# define USESETEUID     1       /* has useable seteuid(2) call */
800# define HASFCHMOD      1       /* has fchmod(2) syscall */
801# define HASGETDTABLESIZE 1     /* has getdtablesize(2) call */
802# define HASSETREUID    1       /* has setreuid(2) call */
803# define HASSTRERROR    1       /* has strerror(3) */
804# define HASFLOCK       0
805# undef HASINITGROUPS           /* has initgroups(3) call */
806# define NEEDGETOPT     1       /* use sendmail's getopt */
807# define IP_SRCROUTE    1       /* can check IP source routing */
808# define TZ_TYPE        TZ_TMNAME       /* use tmname variable */
809# define GIDSET_T       gid_t
810# define LA_TYPE        LA_ZERO
811# define SFS_TYPE       SFS_NONE
812# define SPT_TYPE       SPT_REUSEARGV
813# define SPT_PADCHAR    '\0'    /* pad process title with nulls */
814# define HASGETUSERSHELL 0
815# define E_PSEUDOBASE   512
816# define bcopy(s, d, l)         (memmove((d), (s), (l)))
817# define bzero(d, l)            (memset((d), '\0', (l)))
818# define bcmp(s, d, l)          (memcmp((s), (d), (l)))
819# define _FILE_H_INCLUDED
820#endif
821
822
823/*
824**  FreeBSD / NetBSD / OpenBSD (all architectures, all versions)
825**
826**  4.3BSD clone, closer to 4.4BSD      for FreeBSD 1.x and NetBSD 0.9x
827**  4.4BSD-Lite based                   for FreeBSD 2.x and NetBSD 1.x
828**
829**      See also BSD defines.
830*/
831
832#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
833# include <paths.h>
834# define HASUNSETENV    1       /* has unsetenv(3) call */
835# define HASSETSID      1       /* has the setsid(2) POSIX syscall */
836# define USESETEUID     1       /* has useable seteuid(2) call */
837# define HASFCHMOD      1       /* has fchmod(2) syscall */
838# define HASSNPRINTF    1       /* has snprintf(3) and vsnprintf(3) */
839# define HASUNAME       1       /* has uname(2) syscall */
840# define HASSTRERROR    1       /* has strerror(3) */
841# define HAS_ST_GEN     1       /* has st_gen field in stat struct */
842# define NEED_PRINTF_PERCENTQ   1       /* doesn't have %lld */
843# include <sys/cdefs.h>
844# define ERRLIST_PREDEFINED     /* don't declare sys_errlist */
845# define BSD4_4_SOCKADDR        /* has sa_len */
846# define NETLINK        1       /* supports AF_LINK */
847# define SAFENFSPATHCONF 1      /* pathconf(2) pessimizes on NFS filesystems */
848# define GIDSET_T       gid_t
849# define QUAD_T         unsigned long long
850# ifndef LA_TYPE
851#  define LA_TYPE       LA_SUBR
852# endif
853# define SFS_TYPE       SFS_MOUNT       /* use <sys/mount.h> statfs() impl */
854# if defined(__NetBSD__) && (NetBSD > 199307 || NetBSD0_9 > 1)
855#  undef SPT_TYPE
856#  define SPT_TYPE      SPT_BUILTIN     /* setproctitle is in libc */
857# endif
858# if defined(__FreeBSD__)
859#  undef SPT_TYPE
860#  if __FreeBSD__ >= 2
861#   include <osreldate.h>
862#   if __FreeBSD_version >= 199512      /* 2.2-current when it appeared */
863#    include <libutil.h>
864#    define SPT_TYPE    SPT_BUILTIN
865#   endif
866#   if __FreeBSD_version >= 222000      /* 2.2.2-release and later */
867#    define HASSETUSERCONTEXT   1       /* BSDI-style login classes */
868#   endif
869#  endif
870#  ifndef SPT_TYPE
871#   define SPT_TYPE     SPT_REUSEARGV
872#   define SPT_PADCHAR  '\0'            /* pad process title with nulls */
873#  endif
874# endif
875# if defined(__OpenBSD__)
876#  undef SPT_TYPE
877#  define SPT_TYPE      SPT_BUILTIN     /* setproctitle is in libc */
878# endif
879#endif
880
881
882
883/*
884**  Mach386
885**
886**      For mt Xinu's Mach386 system.
887*/
888
889#if defined(MACH) && defined(i386) && !defined(__GNU__)
890# define MACH386        1
891# define HASUNSETENV    1       /* has unsetenv(3) call */
892# define HASINITGROUPS  1       /* has initgroups(3) call */
893# ifndef HASFLOCK
894#  define HASFLOCK      1       /* has flock(2) call */
895# endif
896# define NEEDGETOPT     1       /* need a replacement for getopt(3) */
897# define NEEDSTRTOL     1       /* need the strtol() function */
898# define setpgid        setpgrp
899# ifndef LA_TYPE
900#  define LA_TYPE       LA_FLOAT
901# endif
902# define SFS_TYPE       SFS_VFS /* use <sys/vfs.h> statfs() implementation */
903# undef HASSETVBUF              /* don't actually have setvbuf(3) */
904# undef WEXITSTATUS
905# undef WIFEXITED
906# ifndef _PATH_VENDOR_CF
907#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
908# endif
909# ifndef _PATH_SENDMAILPID
910#  define _PATH_SENDMAILPID     "/etc/sendmail.pid"
911# endif
912#endif
913
914
915
916/*
917**  GNU OS (hurd)
918**      Largely BSD & posix compatible.
919**      Port contributed by Miles Bader <miles@gnu.ai.mit.edu>.
920*/
921
922#ifdef __GNU_HURD__
923# define SIOCGIFCONF_IS_BROKEN  1
924# define IP_SRCROUTE            0
925# define HASFCHMOD              1
926# define HASFLOCK               1
927# define HASUNAME               1
928# define HASUNSETENV            1
929# define HASSETSID              1
930# define HASINITGROUPS          1
931# define HASSETVBUF             1
932# define HASSETREUID            1
933# define USESETEUID             1
934# define HASLSTAT               1
935# define HASSETRLIMIT           1
936# define HASWAITPID             1
937# define HASGETDTABLESIZE       1
938# define HASSTRERROR            1
939/* # define NEEDGETOPT          1 */
940# define HASGETUSERSHELL        1
941# define ERRLIST_PREDEFINED     1
942# define BSD4_4_SOCKADDR        1
943# define GIDSET_T       gid_t
944# define LA_TYPE        LA_MACH
945
946/* GNU uses mach[34], which renames some rpcs from mach2.x.  */
947# define host_self      mach_host_self
948# define SFS_TYPE       SFS_STATFS
949# define SPT_TYPE       SPT_CHANGEARGV
950
951/* GNU has no MAXPATHLEN; ideally the code should be changed to not use it.  */
952# define MAXPATHLEN     2048
953
954/* Define device num frobbing macros.  */
955# define major(x)       ((x)>>8)
956# define minor(x)       ((x)&0xFF)
957#endif /* GNU */
958
959/*
960**  4.3 BSD -- this is for very old systems
961**
962**      Should work for mt Xinu MORE/BSD and Mips UMIPS-BSD 2.1.
963**
964**      You'll also have to install a new resolver library.
965**      I don't guarantee that support for this environment is complete.
966*/
967
968#if defined(oldBSD43) || defined(MORE_BSD) || defined(umipsbsd)
969# define NEEDVPRINTF    1       /* need a replacement for vprintf(3) */
970# define NEEDGETOPT     1       /* need a replacement for getopt(3) */
971# define ARBPTR_T       char *
972# define setpgid        setpgrp
973# ifndef LA_TYPE
974#  define LA_TYPE       LA_FLOAT
975# endif
976# ifndef _PATH_VENDOR_CF
977#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
978# endif
979# ifndef IDENTPROTO
980#  define IDENTPROTO    0       /* TCP/IP implementation is broken */
981# endif
982# undef WEXITSTATUS
983# undef WIFEXITED
984typedef short           pid_t;
985extern int              errno;
986#endif
987
988
989/*
990**  SCO Unix
991**
992**      This includes three parts:
993**
994**      The first is for SCO OpenServer 5.
995**      (Contributed by Keith Reynolds <keithr@sco.COM>).
996**
997**              SCO OpenServer 5 has a compiler version number macro,
998**              which we can use to figure out what version we're on.
999**              This may have to change in future releases.
1000**
1001**      The second is for SCO UNIX 3.2v4.2/Open Desktop 3.0.
1002**      (Contributed by Philippe Brand <phb@colombo.telesys-innov.fr>).
1003**
1004**      The third is for SCO UNIX 3.2v4.0/Open Desktop 2.0 and earlier.
1005*/
1006
1007/* SCO OpenServer 5 */
1008#if _SCO_DS >= 1
1009# include <paths.h>
1010# define SIOCGIFNUM_IS_BROKEN 1 /* SIOCGIFNUM returns bogus value */
1011# define HASSNPRINTF    1       /* has snprintf(3) call */
1012# define HASFCHMOD      1       /* has fchmod(2) call */
1013# define HASSETRLIMIT   1       /* has setrlimit(2) call */
1014# define USESETEUID     1       /* has seteuid(2) call */
1015# define HASINITGROUPS  1       /* has initgroups(3) call */
1016# define HASGETDTABLESIZE 1     /* has getdtablesize(2) call */
1017# define RLIMIT_NEEDS_SYS_TIME_H        1
1018# ifndef LA_TYPE
1019#  define LA_TYPE       LA_DEVSHORT
1020# endif
1021# define _PATH_AVENRUN  "/dev/table/avenrun"
1022# ifndef _SCO_unix_4_2
1023#  define _SCO_unix_4_2
1024# else
1025#  define SOCKADDR_LEN_T        size_t  /* e.g., arg#3 to accept, getsockname */
1026#  define SOCKOPT_LEN_T         size_t  /* arg#5 to getsockopt */
1027# endif
1028#endif
1029
1030/* SCO UNIX 3.2v4.2/Open Desktop 3.0 */
1031#ifdef _SCO_unix_4_2
1032# define _SCO_unix_
1033# define HASSETREUID    1       /* has setreuid(2) call */
1034#endif
1035
1036/* SCO UNIX 3.2v4.0 Open Desktop 2.0 and earlier */
1037#ifdef _SCO_unix_
1038# include <sys/stream.h>        /* needed for IP_SRCROUTE */
1039# define SYSTEM5        1       /* include all the System V defines */
1040# define HASGETUSERSHELL 0      /* does not have getusershell(3) call */
1041# define NOFTRUNCATE    0       /* has (simulated) ftruncate call */
1042# define USE_SIGLONGJMP 1       /* sigsetjmp needed for signal handling */
1043# define MAXPATHLEN     PATHSIZE
1044# define SFS_TYPE       SFS_4ARGS       /* use <sys/statfs.h> 4-arg impl */
1045# define SFS_BAVAIL     f_bfree         /* alternate field name */
1046# define SPT_TYPE       SPT_SCO         /* write kernel u. area */
1047# define TZ_TYPE        TZ_TM_NAME      /* use tm->tm_name */
1048# define UID_T          uid_t
1049# define GID_T          gid_t
1050# define GIDSET_T       gid_t
1051# define _PATH_UNIX             "/unix"
1052# ifndef _PATH_VENDOR_CF
1053#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
1054# endif
1055# ifndef _PATH_SENDMAILPID
1056#  define _PATH_SENDMAILPID     "/etc/sendmail.pid"
1057# endif
1058
1059/* stuff fixed in later releases */
1060# ifndef _SCO_unix_4_2
1061#  define SYS5SIGNALS   1       /* SysV signal semantics -- reset on each sig */
1062# endif
1063
1064# ifndef _SCO_DS
1065#  define ftruncate     chsize  /* use chsize(2) to emulate ftruncate */
1066#  define NEEDFSYNC     1       /* needs the fsync(2) call stub */
1067#  define NETUNIX       0       /* no unix domain socket support */
1068#  define LA_TYPE       LA_SHORT
1069# endif
1070
1071#endif
1072
1073
1074/*
1075**  ISC (SunSoft) Unix.
1076**
1077**      Contributed by J.J. Bailey <jjb@jagware.bcc.com>
1078*/
1079
1080#ifdef ISC_UNIX
1081# include <net/errno.h>
1082# include <sys/stream.h>        /* needed for IP_SRCROUTE */
1083# include <sys/bsdtypes.h>
1084# define SYSTEM5        1       /* include all the System V defines */
1085# define SYS5SIGNALS    1       /* SysV signal semantics -- reset on each sig */
1086# define HASGETUSERSHELL 0      /* does not have getusershell(3) call */
1087# define HASSETREUID    1       /* has setreuid(2) call */
1088# define NEEDFSYNC      1       /* needs the fsync(2) call stub */
1089# define NETUNIX        0       /* no unix domain socket support */
1090# define MAXPATHLEN     1024
1091# define LA_TYPE        LA_SHORT
1092# define SFS_TYPE       SFS_STATFS      /* use <sys/statfs.h> statfs() impl */
1093# define SFS_BAVAIL     f_bfree         /* alternate field name */
1094# define _PATH_UNIX             "/unix"
1095# ifndef _PATH_VENDOR_CF
1096#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
1097# endif
1098# ifndef _PATH_SENDMAILPID
1099#  define _PATH_SENDMAILPID     "/etc/sendmail.pid"
1100# endif
1101
1102#endif
1103
1104
1105/*
1106**  Altos System V (5.3.1)
1107**      Contributed by Tim Rice <tim@trr.metro.net>.
1108*/
1109
1110#ifdef ALTOS_SYSTEM_V
1111# include <sys/stream.h>
1112# include <limits.h>
1113# define SYSTEM5        1       /* include all the System V defines */
1114# define SYS5SIGNALS    1       /* SysV signal semantics -- reset on each sig */
1115# define HASGETUSERSHELL 0      /* does not have getusershell(3) call */
1116# define WAITUNION      1       /* use "union wait" as wait argument type */
1117# define NEEDFSYNC      1       /* no fsync(2) in system library */
1118# define NEEDSTRSTR     1       /* need emulation of the strstr(3) call */
1119# define NOFTRUNCATE    1       /* do not have ftruncate(2) */
1120# define MAXPATHLEN     PATH_MAX
1121# define LA_TYPE        LA_SHORT
1122# define SFS_TYPE       SFS_STATFS      /* use <sys/statfs.h> statfs() impl */
1123# define SFS_BAVAIL     f_bfree         /* alternate field name */
1124# define TZ_TYPE        TZ_TZNAME       /* use tzname[] vector */
1125# define NETUNIX        0       /* no unix domain socket support */
1126# undef WIFEXITED
1127# undef WEXITSTATUS
1128# define strtoul        strtol  /* gcc library bogosity */
1129
1130typedef unsigned short  uid_t;
1131typedef unsigned short  gid_t;
1132typedef short           pid_t;
1133typedef unsigned long   mode_t;
1134
1135/* some stuff that should have been in the include files */
1136# include <grp.h>
1137extern char             *malloc();
1138extern struct passwd    *getpwent();
1139extern struct passwd    *getpwnam();
1140extern struct passwd    *getpwuid();
1141extern char             *getenv();
1142extern struct group     *getgrgid();
1143extern struct group     *getgrnam();
1144
1145#endif
1146
1147
1148/*
1149**  ConvexOS 11.0 and later
1150**
1151**      "Todd C. Miller" <millert@mroe.cs.colorado.edu> claims this
1152**      works on 9.1 as well.
1153**
1154**  ConvexOS 11.5 and later, should work on 11.0 as defined.
1155**  For pre-ConvexOOS 11.0, define NEEDGETOPT, undef IDENTPROTO
1156**
1157**      Eric Schnoebelen (eric@cirr.com) For CONVEX Computer Corp.
1158**              (now the CONVEX Technologies Center of Hewlett Packard)
1159*/
1160
1161#ifdef _CONVEX_SOURCE
1162# define HASGETDTABLESIZE       1       /* has getdtablesize(2) */
1163# define HASINITGROUPS  1       /* has initgroups(3) */
1164# define HASUNAME       1       /* use System V uname(2) system call */
1165# define HASSETSID      1       /* has POSIX setsid(2) call */
1166# define HASUNSETENV    1       /* has unsetenv(3) */
1167# define HASFLOCK       1       /* has flock(2) */
1168# define HASSETRLIMIT   1       /* has setrlimit(2) */
1169# define HASSETREUID    1       /* has setreuid(2) */
1170# define BROKEN_RES_SEARCH      1       /* res_search(unknown) returns h_error=0 */
1171# define NEEDPUTENV     1       /* needs putenv (written in terms of setenv) */
1172# define NEEDGETOPT     0       /* need replacement for getopt(3) */
1173# define IP_SRCROUTE    0       /* Something is broken with getsockopt() */
1174# define LA_TYPE        LA_FLOAT
1175# define SFS_TYPE       SFS_VFS /* use <sys/vfs.h> statfs() implementation */
1176# ifndef _PATH_VENDOR_CF
1177#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
1178# endif
1179# ifndef S_IREAD
1180#  define S_IREAD       _S_IREAD
1181#  define S_IWRITE      _S_IWRITE
1182#  define S_IEXEC       _S_IEXEC
1183#  define S_IFMT        _S_IFMT
1184#  define S_IFCHR       _S_IFCHR
1185#  define S_IFBLK       _S_IFBLK
1186# endif
1187# ifndef TZ_TYPE
1188#  define TZ_TYPE       TZ_TIMEZONE
1189# endif
1190# ifndef IDENTPROTO
1191#  define IDENTPROTO    1
1192# endif
1193# ifndef SHARE_V1
1194#  define SHARE_V1      1       /* version 1 of the fair share scheduler */
1195# endif
1196# if !defined(__GNUC__ )
1197#  define UID_T int             /* GNUC gets it right, ConvexC botches */
1198#  define GID_T int             /* GNUC gets it right, ConvexC botches */
1199# endif
1200# if SECUREWARE
1201#  define FORK  fork            /* SecureWare wants the real fork! */
1202# else
1203#  define FORK  vfork           /* the rest of the OS versions don't care */
1204# endif
1205#endif
1206
1207
1208/*
1209**  RISC/os 4.52
1210**
1211**      Gives a ton of warning messages, but otherwise compiles.
1212*/
1213
1214#ifdef RISCOS
1215
1216# define HASUNSETENV    1       /* has unsetenv(3) call */
1217# ifndef HASFLOCK
1218#  define HASFLOCK      1       /* has flock(2) call */
1219# endif
1220# define WAITUNION      1       /* use "union wait" as wait argument type */
1221# define NEEDGETOPT     1       /* need a replacement for getopt(3) */
1222# define NEEDPUTENV     1       /* need putenv(3) call */
1223# define NEEDSTRSTR     1       /* need emulation of the strstr(3) call */
1224# define SFS_TYPE       SFS_VFS /* use <sys/vfs.h> statfs() implementation */
1225# define LA_TYPE        LA_INT
1226# define LA_AVENRUN     "avenrun"
1227# define _PATH_UNIX     "/unix"
1228# undef WIFEXITED
1229
1230# define setpgid        setpgrp
1231
1232extern int              errno;
1233typedef int             pid_t;
1234# define SIGFUNC_DEFINED
1235# define SIGFUNC_RETURN (0)
1236# define SIGFUNC_DECL   int
1237typedef int             (*sigfunc_t)();
1238extern char             *getenv();
1239extern void             *malloc();
1240
1241/* added for RISC/os 4.01...which is dumber than 4.50 */
1242# ifdef RISCOS_4_0
1243#  ifndef ARBPTR_T
1244#   define ARBPTR_T     char *
1245#  endif
1246#  undef HASFLOCK
1247#  define HASFLOCK      0
1248# endif /* RISCOS_4_0 */
1249
1250# include <sys/time.h>
1251
1252#endif
1253
1254
1255/*
1256**  Linux 0.99pl10 and above...
1257**
1258**  Thanks to, in reverse order of contact:
1259**
1260**      John Kennedy <warlock@csuchico.edu>
1261**      Andrew Pam <avatar@aus.xanadu.com>
1262**      Florian La Roche <rzsfl@rz.uni-sb.de>
1263**      Karl London <karl@borg.demon.co.uk>
1264**
1265**  Last compiled against:      [07/21/98 @ 11:47:34 AM (Tuesday)]
1266**      sendmail 8.9.1          bind-8.1.2              db-2.4.14
1267**      gcc-2.8.1               glibc-2.0.94            linux-2.1.109
1268**
1269**  NOTE: Override HASFLOCK as you will but, as of 1.99.6, mixed-style
1270**      file locking is no longer allowed.  In particular, make sure
1271**      your DBM library and sendmail are both using either flock(2)
1272**      *or* fcntl(2) file locking, but not both.
1273*/
1274
1275#ifdef __linux__
1276# define BSD            1       /* include BSD defines */
1277# define USESETEUID     0       /* Have it due to POSIX, but doesn't work */
1278# define NEEDGETOPT     1       /* need a replacement for getopt(3) */
1279# define HASUNAME       1       /* use System V uname(2) system call */
1280# define HASUNSETENV    1       /* has unsetenv(3) call */
1281# ifndef HASSNPRINTF
1282#  define HASSNPRINTF   1       /* has snprintf(3) and vsnprintf(3) */
1283# endif
1284# define ERRLIST_PREDEFINED     /* don't declare sys_errlist */
1285# define GIDSET_T       gid_t   /* from <linux/types.h> */
1286# define HASGETUSERSHELL 0      /* getusershell(3) broken in Slackware 2.0 */
1287# define IP_SRCROUTE    0       /* linux <= 1.2.8 doesn't support IP_OPTIONS */
1288# define USE_SIGLONGJMP 1       /* sigsetjmp needed for signal handling */
1289# ifndef HASFLOCK
1290#  include <linux/version.h>
1291#  if LINUX_VERSION_CODE < 66399
1292#   define HASFLOCK     0       /* flock(2) is broken after 0.99.13 */
1293#  else
1294#   define HASFLOCK     1       /* flock(2) fixed after 1.3.95 */
1295#  endif
1296# endif
1297# ifndef LA_TYPE
1298#  define LA_TYPE       LA_PROCSTR
1299# endif
1300# define SFS_TYPE       SFS_VFS         /* use <sys/vfs.h> statfs() impl */
1301# define SPT_PADCHAR    '\0'            /* pad process title with nulls */
1302# ifndef TZ_TYPE
1303#  define TZ_TYPE       TZ_NONE         /* no standard for Linux */
1304# endif
1305# ifndef _PATH_SENDMAILPID
1306#  define _PATH_SENDMAILPID     "/var/run/sendmail.pid"
1307# endif
1308# include <sys/sysmacros.h>
1309# undef atol                    /* wounded in <stdlib.h> */
1310#endif
1311
1312
1313/*
1314**  DELL SVR4 Issue 2.2, and others
1315**      From Kimmo Suominen <kim@grendel.lut.fi>
1316**
1317**      It's on #ifdef DELL_SVR4 because Solaris also gets __svr4__
1318**      defined, and the definitions conflict.
1319**
1320**      Peter Wemm <peter@perth.DIALix.oz.au> claims that the setreuid
1321**      trick works on DELL 2.2 (SVR4.0/386 version 4.0) and ESIX 4.0.3A
1322**      (SVR4.0/386 version 3.0).
1323*/
1324
1325#ifdef DELL_SVR4
1326                                /* no changes necessary */
1327                                /* see general __svr4__ defines below */
1328#endif
1329
1330
1331/*
1332**  Apple A/UX 3.0
1333*/
1334
1335#ifdef _AUX_SOURCE
1336# include <sys/sysmacros.h>
1337# define BSD                    /* has BSD routines */
1338# define HASSETRLIMIT   0       /* ... but not setrlimit(2) */
1339# define BROKEN_RES_SEARCH 1    /* res_search(unknown) returns h_errno=0 */
1340# define BOGUS_O_EXCL   1       /* exclusive open follows symlinks */
1341# define HASUNAME       1       /* use System V uname(2) system call */
1342# define HASFCHMOD      1       /* has fchmod(2) syscall */
1343# define HASINITGROUPS  1       /* has initgroups(3) call */
1344# define HASSETVBUF     1       /* has setvbuf(3) in libc */
1345# define HASSTRERROR    1       /* has strerror(3) */
1346# define SIGFUNC_DEFINED        /* sigfunc_t already defined */
1347# define SIGFUNC_RETURN         /* POSIX-mode */
1348# define SIGFUNC_DECL   void    /* POSIX-mode */
1349# define ERRLIST_PREDEFINED     1
1350# ifndef IDENTPROTO
1351#  define IDENTPROTO    0       /* TCP/IP implementation is broken */
1352# endif
1353# ifndef LA_TYPE
1354#  define LA_TYPE       LA_INT
1355#  define FSHIFT        16
1356# endif
1357# define LA_AVENRUN     "avenrun"
1358# define SFS_TYPE       SFS_VFS /* use <sys/vfs.h> statfs() implementation */
1359# define TZ_TYPE        TZ_TZNAME
1360# ifndef _PATH_UNIX
1361#  define _PATH_UNIX            "/unix"         /* should be in <paths.h> */
1362# endif
1363# ifndef _PATH_VENDOR_CF
1364#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
1365# endif
1366# undef WIFEXITED
1367# undef WEXITSTATUS
1368#endif
1369
1370
1371/*
1372**  Encore UMAX V
1373**
1374**      Not extensively tested.
1375*/
1376
1377#ifdef UMAXV
1378# define HASUNAME       1       /* use System V uname(2) system call */
1379# define HASSETVBUF     1       /* we have setvbuf(3) in libc */
1380# define HASINITGROUPS  1       /* has initgroups(3) call */
1381# define HASGETUSERSHELL 0      /* does not have getusershell(3) call */
1382# define SYS5SIGNALS    1       /* SysV signal semantics -- reset on each sig */
1383# define SYS5SETPGRP    1       /* use System V setpgrp(2) syscall */
1384# define SFS_TYPE       SFS_4ARGS       /* four argument statfs() call */
1385# define MAXPATHLEN     PATH_MAX
1386extern struct passwd    *getpwent(), *getpwnam(), *getpwuid();
1387extern struct group     *getgrent(), *getgrnam(), *getgrgid();
1388# undef WIFEXITED
1389# undef WEXITSTATUS
1390#endif
1391
1392
1393/*
1394**  Stardent Titan 3000 running TitanOS 4.2.
1395**
1396**      Must be compiled in "cc -43" mode.
1397**
1398**      From Kate Hedstrom <kate@ahab.rutgers.edu>.
1399**
1400**      Note the tweaking below after the BSD defines are set.
1401*/
1402
1403#ifdef titan
1404# define setpgid        setpgrp
1405typedef int             pid_t;
1406# undef WIFEXITED
1407# undef WEXITSTATUS
1408#endif
1409
1410
1411/*
1412**  Sequent DYNIX 3.2.0
1413**
1414**      From Jim Davis <jdavis@cs.arizona.edu>.
1415*/
1416
1417#ifdef sequent
1418
1419# define BSD            1
1420# define HASUNSETENV    1
1421# define BSD4_3         1       /* to get signal() in conf.c */
1422# define WAITUNION      1
1423# define LA_TYPE        LA_FLOAT
1424# ifdef _POSIX_VERSION
1425#  undef _POSIX_VERSION         /* set in <unistd.h> */
1426# endif
1427# undef HASSETVBUF              /* don't actually have setvbuf(3) */
1428# define setpgid        setpgrp
1429
1430/* Have to redefine WIFEXITED to take an int, to work with waitfor() */
1431# undef WIFEXITED
1432# define WIFEXITED(s)   (((union wait*)&(s))->w_stopval != WSTOPPED && \
1433                         ((union wait*)&(s))->w_termsig == 0)
1434# define WEXITSTATUS(s) (((union wait*)&(s))->w_retcode)
1435typedef int             pid_t;
1436# define isgraph(c)     (isprint(c) && (c != ' '))
1437
1438# ifndef IDENTPROTO
1439#  define IDENTPROTO    0       /* TCP/IP implementation is broken */
1440# endif
1441
1442# ifndef _PATH_UNIX
1443#  define _PATH_UNIX            "/dynix"
1444# endif
1445# ifndef _PATH_VENDOR_CF
1446#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
1447# endif
1448#endif
1449
1450
1451/*
1452**  Sequent DYNIX/ptx v2.0 (and higher)
1453**
1454**      For DYNIX/ptx v1.x, undefine HASSETREUID.
1455**
1456**      From Tim Wright <timw@sequent.com>.
1457**      Update from Jack Woolley <jwoolley@sctcorp.com>, 26 Dec 1995,
1458**              for DYNIX/ptx 4.0.2.
1459*/
1460
1461#ifdef _SEQUENT_
1462# include <sys/stream.h>
1463# define SYSTEM5        1       /* include all the System V defines */
1464# define HASSETSID      1       /* has POSIX setsid(2) call */
1465# define HASINITGROUPS  1       /* has initgroups(3) call */
1466# define HASSETREUID    1       /* has setreuid(2) call */
1467# define HASGETUSERSHELL 0      /* does not have getusershell(3) call */
1468# define GIDSET_T       gid_t
1469# define LA_TYPE        LA_INT
1470# define SFS_TYPE       SFS_STATFS      /* use <sys/statfs.h> statfs() impl */
1471# define SPT_TYPE       SPT_NONE        /* don't use setproctitle */
1472# ifndef IDENTPROTO
1473#  define IDENTPROTO    0       /* TCP/IP implementation is broken */
1474# endif
1475# ifndef _PATH_VENDOR_CF
1476#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
1477# endif
1478# ifndef _PATH_SENDMAILPID
1479#  define _PATH_SENDMAILPID     "/etc/sendmail.pid"
1480# endif
1481#endif
1482
1483
1484/*
1485**  Cray Unicos
1486**
1487**      Ported by David L. Kensiski, Sterling Sofware <kensiski@nas.nasa.gov>
1488*/
1489
1490#ifdef UNICOS
1491# define SYSTEM5        1       /* include all the System V defines */
1492# define SYS5SIGNALS    1       /* SysV signal semantics -- reset on each sig */
1493# define MAXPATHLEN     PATHSIZE
1494# define LA_TYPE        LA_ZERO
1495# define SFS_TYPE       SFS_4ARGS       /* four argument statfs() call */
1496# define SFS_BAVAIL     f_bfree         /* alternate field name */
1497#endif
1498
1499
1500/*
1501**  Apollo DomainOS
1502**
1503**  From Todd Martin <tmartint@tus.ssi1.com> & Don Lewis <gdonl@gv.ssi1.com>
1504**
1505**  15 Jan 1994; updated 2 Aug 1995
1506**
1507*/
1508
1509#ifdef apollo
1510# define HASSETREUID    1       /* has setreuid(2) call */
1511# define HASINITGROUPS  1       /* has initgroups(2) call */
1512# define IP_SRCROUTE    0       /* does not have <netinet/ip_var.h> */
1513# define SPT_TYPE       SPT_NONE        /* don't use setproctitle */
1514# define LA_TYPE        LA_SUBR         /* use getloadavg.c */
1515# define SFS_TYPE       SFS_4ARGS       /* four argument statfs() call */
1516# define SFS_BAVAIL     f_bfree         /* alternate field name */
1517# define TZ_TYPE        TZ_TZNAME
1518# ifndef _PATH_VENDOR_CF
1519#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
1520# endif
1521# ifndef _PATH_SENDMAILPID
1522#  define _PATH_SENDMAILPID     "/etc/sendmail.pid"
1523# endif
1524# undef  S_IFSOCK               /* S_IFSOCK and S_IFIFO are the same */
1525# undef  S_IFIFO
1526# define S_IFIFO        0010000
1527# ifndef IDENTPROTO
1528#  define IDENTPROTO    0       /* TCP/IP implementation is broken */
1529# endif
1530# define RLIMIT_NEEDS_SYS_TIME_H        1
1531# if defined(NGROUPS_MAX) && !NGROUPS_MAX
1532#  undef NGROUPS_MAX
1533# endif
1534#endif
1535
1536/*
1537**  System V Rel 5.x (a.k.a Unixware7 w/o BSD-Compatiblity Libs ie. native)
1538**
1539**      Contributed by Paul Gampe <paulg@apnic.net>
1540*/
1541
1542#ifdef __svr5__
1543# include <sys/mkdev.h>
1544# define __svr4__
1545# define SYS5SIGNALS            1
1546# define HASSETSID              1
1547# define HASSETREUID            1
1548# define HASWAITPID             1
1549# define HASGETDTABLESIZE       1
1550# define GIDSET_T               gid_t
1551# define SOCKADDR_LEN_T         size_t
1552# define SOCKOPT_LEN_T          size_t
1553# ifndef _PATH_UNIX
1554#  define _PATH_UNIX            "/stand/unix"
1555# endif
1556# define SPT_PADCHAR            '\0'    /* pad process title with nulls */
1557# define SYSLOG_BUFSIZE         1024    /* unsure */
1558# ifndef _PATH_VENDOR_CF
1559#  define _PATH_VENDOR_CF       "/etc/sendmail.cf"
1560# endif
1561# ifndef _PATH_SENDMAILPID
1562#  define _PATH_SENDMAILPID     "/etc/sendmail.pid"
1563# endif
1564#endif
1565
1566/* ###################################################################### */
1567
1568/*
1569**  UnixWare 2.x
1570*/
1571
1572#ifdef UNIXWARE2
1573# define UNIXWARE       1
1574# define HASSNPRINTF    1       /* has snprintf(3) and vsnprintf(3) */
1575# undef offsetof                /* avoid stddefs.h, sys/sysmacros.h conflict */
1576#endif
1577
1578
1579/*
1580**  UnixWare 1.1.2.
1581**
1582**      Updated by Petr Lampa <lampa@fee.vutbr.cz>.
1583**      From Evan Champion <evanc@spatial.synapse.org>.
1584*/
1585
1586#ifdef UNIXWARE
1587# include <sys/mkdev.h>
1588# define SYSTEM5                1
1589# define HASGETUSERSHELL        0       /* does not have getusershell(3) call */
1590# define HASSETREUID            1
1591# define HASSETSID              1
1592# define HASINITGROUPS          1
1593# define GIDSET_T               gid_t
1594# define SLEEP_T                unsigned
1595# define SFS_TYPE               SFS_STATVFS
1596# define LA_TYPE                LA_ZERO
1597# undef WIFEXITED
1598# undef WEXITSTATUS
1599# ifndef _PATH_UNIX
1600#  define _PATH_UNIX            "/unix"
1601# endif
1602# ifndef _PATH_VENDOR_CF
1603#  define _PATH_VENDOR_CF       "/usr/ucblib/sendmail.cf"
1604# endif
1605# ifndef _PATH_SENDMAILPID
1606#  define _PATH_SENDMAILPID     "/usr/ucblib/sendmail.pid"
1607# endif
1608# define SYSLOG_BUFSIZE 128
1609#endif
1610
1611
1612/*
1613**  Intergraph CLIX 3.1
1614**
1615**      From Paul Southworth <pauls@locust.cic.net>
1616*/
1617
1618#ifdef CLIX
1619# define SYSTEM5        1       /* looks like System V */
1620# ifndef HASGETUSERSHELL
1621#  define HASGETUSERSHELL 0     /* does not have getusershell(3) call */
1622# endif
1623# define DEV_BSIZE      512     /* device block size not defined */
1624# define GIDSET_T       gid_t
1625# undef LOG                     /* syslog not available */
1626# define NEEDFSYNC      1       /* no fsync in system library */
1627# define GETSHORT       _getshort
1628#endif
1629
1630
1631/*
1632**  NCR MP-RAS 2.x (SysVr4) with Wollongong TCP/IP
1633**
1634**      From Kevin Darcy <kevin@tech.mis.cfc.com>.
1635*/
1636
1637#ifdef NCR_MP_RAS2
1638# include <sys/sockio.h>
1639# define __svr4__
1640# define IP_SRCROUTE    0       /* Something is broken with getsockopt() */
1641# define SYSLOG_BUFSIZE 1024
1642# define SPT_TYPE  SPT_NONE
1643#endif
1644
1645
1646/*
1647**  NCR MP-RAS 3.x (SysVr4) with STREAMware TCP/IP
1648**
1649**      From Tom Moore <Tom.Moore@DaytonOH.NCR.COM>
1650*/
1651
1652#ifdef NCR_MP_RAS3
1653# define __svr4__
1654# define SIOCGIFNUM_IS_BROKEN   1       /* SIOCGIFNUM has non-std interface */
1655# define SYSLOG_BUFSIZE 1024
1656# define SPT_TYPE       SPT_NONE
1657#endif
1658
1659
1660/*
1661**  Tandem NonStop-UX SVR4
1662**
1663**      From Rick McCarty <mccarty@mpd.tandem.com>.
1664*/
1665
1666#ifdef NonStop_UX_BXX
1667# define __svr4__
1668#endif
1669
1670
1671/*
1672**  Hitachi 3050R & 3050RX Workstations running HI-UX/WE2.
1673**
1674**      Tested for 1.04 and 1.03
1675**      From Akihiro Hashimoto ("Hash") <hash@dominic.ipc.chiba-u.ac.jp>.
1676*/
1677
1678#ifdef __H3050R
1679# define SYSTEM5        1       /* include all the System V defines */
1680# define HASINITGROUPS  1       /* has initgroups(3) call */
1681# define setreuid(r, e) setresuid(r, e, -1)
1682# define LA_TYPE        LA_FLOAT
1683# define SFS_TYPE       SFS_VFS /* use <sys/vfs.h> statfs() implementation */
1684# define HASSETVBUF     /* HI-UX has no setlinebuf */
1685# ifndef GIDSET_T
1686#  define GIDSET_T      gid_t
1687# endif
1688# ifndef _PATH_UNIX
1689#  define _PATH_UNIX            "/HI-UX"
1690# endif
1691# ifndef _PATH_VENDOR_CF
1692#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
1693# endif
1694# ifndef IDENTPROTO
1695#  define IDENTPROTO    0       /* TCP/IP implementation is broken */
1696# endif
1697# ifndef HASGETUSERSHELL
1698#  define HASGETUSERSHELL 0     /* getusershell(3) causes core dumps */
1699# endif
1700
1701/*
1702**  avoid m_flags conflict between Berkeley DB 1.85 db.h & sys/sysmacros.h
1703**  on HIUX 3050
1704*/
1705# undef m_flags
1706
1707# ifdef __STDC__
1708extern int      syslog(int, char *, ...);
1709#else
1710extern int      syslog();
1711# endif
1712
1713#endif
1714
1715
1716/*
1717**  Amdahl UTS System V 2.1.5 (SVr3-based)
1718**
1719**    From: Janet Jackson <janet@dialix.oz.au>.
1720*/
1721
1722#ifdef _UTS
1723# include <sys/sysmacros.h>
1724# undef HASLSTAT                /* has symlinks, but they cause problems */
1725# define NEEDFSYNC      1       /* system fsync(2) fails on non-EFS filesys */
1726# define SYS5SIGNALS    1       /* System V signal semantics */
1727# define SYS5SETPGRP    1       /* use System V setpgrp(2) syscall */
1728# define HASUNAME       1       /* use System V uname(2) system call */
1729# define HASINITGROUPS  1       /* has initgroups(3) function */
1730# define HASSETVBUF     1       /* has setvbuf(3) function */
1731# ifndef HASGETUSERSHELL
1732#  define HASGETUSERSHELL 0     /* does not have getusershell(3) function */
1733# endif
1734# define GIDSET_T       gid_t   /* type of 2nd arg to getgroups(2) isn't int */
1735# define LA_TYPE        LA_ZERO         /* doesn't have load average */
1736# define SFS_TYPE       SFS_4ARGS       /* use 4-arg statfs() */
1737# define SFS_BAVAIL     f_bfree         /* alternate field name */
1738# define _PATH_UNIX             "/unix"
1739# ifndef _PATH_VENDOR_CF
1740#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
1741# endif
1742#endif
1743
1744/*
1745**  Cray Computer Corporation's CSOS
1746**
1747**      From Scott Bolte <scott@craycos.com>.
1748*/
1749
1750#ifdef _CRAYCOM
1751# define SYSTEM5        1       /* include all the System V defines */
1752# define SYS5SIGNALS    1       /* SysV signal semantics -- reset on each sig */
1753# define NEEDFSYNC      1       /* no fsync in system library */
1754# define MAXPATHLEN     PATHSIZE
1755# define LA_TYPE        LA_ZERO
1756# define SFS_TYPE       SFS_4ARGS       /* four argument statfs() call */
1757# define SFS_BAVAIL     f_bfree         /* alternate field name */
1758# define _POSIX_CHOWN_RESTRICTED        -1
1759extern struct group     *getgrent(), *getgrnam(), *getgrgid();
1760#endif
1761
1762
1763/*
1764**  Sony NEWS-OS 4.2.1R and 6.0.3
1765**
1766**      From Motonori NAKAMURA <motonori@cs.ritsumei.ac.jp>.
1767*/
1768
1769#ifdef sony_news
1770# ifndef __svr4
1771                        /* NEWS-OS 4.2.1R */
1772#  ifndef BSD
1773#   define BSD                  /* has BSD routines */
1774#  endif
1775#  define HASUNSETENV   1       /* has unsetenv(2) call */
1776#  undef HASSETVBUF             /* don't actually have setvbuf(3) */
1777#  define WAITUNION     1       /* use "union wait" as wait argument type */
1778#  define LA_TYPE       LA_INT
1779#  define SFS_TYPE      SFS_VFS /* use <sys/vfs.h> statfs() implementation */
1780#  ifndef HASFLOCK
1781#   define HASFLOCK     1       /* has flock(2) call */
1782#  endif
1783#  define setpgid       setpgrp
1784#  undef WIFEXITED
1785#  undef WEXITSTATUS
1786#  define MODE_T        int     /* system include files have no mode_t */
1787typedef int             pid_t;
1788typedef int             (*sigfunc_t)();
1789#  define SIGFUNC_DEFINED
1790#  define SIGFUNC_RETURN        (0)
1791#  define SIGFUNC_DECL          int
1792
1793# else
1794                        /* NEWS-OS 6.0.3 with /bin/cc */
1795#  ifndef __svr4__
1796#   define __svr4__             /* use all System V Releae 4 defines below */
1797#  endif
1798#  define HASSETSID     1       /* has Posix setsid(2) call */
1799#  define HASGETUSERSHELL 1     /* DOES have getusershell(3) call in libc */
1800#  define LA_TYPE       LA_READKSYM     /* use MIOC_READKSYM ioctl */
1801#  ifndef SPT_TYPE
1802#   define SPT_TYPE     SPT_SYSMIPS     /* use sysmips() (OS 6.0.2 or later) */
1803#  endif
1804#  define GIDSET_T      gid_t
1805#  undef WIFEXITED
1806#  undef WEXITSTATUS
1807#  ifndef SYSLOG_BUFSIZE
1808#   define SYSLOG_BUFSIZE       1024
1809#  endif
1810#  define _PATH_UNIX            "/stand/unix"
1811#  ifndef _PATH_VENDOR_CF
1812#   define _PATH_VENDOR_CF      "/etc/mail/sendmail.cf"
1813#  endif
1814#  ifndef _PATH_SENDMAILPID
1815#   define _PATH_SENDMAILPID    "/etc/mail/sendmail.pid"
1816#  endif
1817
1818# endif
1819#endif
1820
1821
1822/*
1823**  Omron LUNA/UNIOS-B 3.0, LUNA2/Mach and LUNA88K Mach
1824**
1825**      From Motonori NAKAMURA <motonori@cs.ritsumei.ac.jp>.
1826*/
1827
1828#ifdef luna
1829# ifndef IDENTPROTO
1830#  define IDENTPROTO    0       /* TCP/IP implementation is broken */
1831# endif
1832# define HASUNSETENV    1       /* has unsetenv(2) call */
1833# define NEEDPUTENV     1       /* need putenv(3) call */
1834# define NEEDGETOPT     1       /* need a replacement for getopt(3) */
1835# define NEEDSTRSTR     1       /* need emulation of the strstr(3) call */
1836# define WAITUNION      1       /* use "union wait" as wait argument type */
1837# ifdef uniosb
1838#  include <sys/time.h>
1839#  define NEEDVPRINTF   1       /* need a replacement for vprintf(3) */
1840#  define LA_TYPE       LA_INT
1841#  define TZ_TYPE       TZ_TM_ZONE      /* use tm->tm_zone */
1842# endif
1843# ifdef luna2
1844#  define LA_TYPE       LA_SUBR
1845#  define TZ_TYPE       TZ_TM_ZONE      /* use tm->tm_zone */
1846# endif
1847# ifdef luna88k
1848#  define HASSNPRINTF   1       /* has snprintf(3) and vsnprintf(3) */
1849#  define LA_TYPE       LA_INT
1850# endif
1851# define SFS_TYPE       SFS_VFS /* use <sys/vfs.h> statfs() implementation */
1852# define setpgid        setpgrp
1853# undef WIFEXITED
1854# undef WEXITSTATUS
1855typedef int             pid_t;
1856typedef int             (*sigfunc_t)();
1857# define SIGFUNC_DEFINED
1858# define SIGFUNC_RETURN (0)
1859# define SIGFUNC_DECL   int
1860extern char     *getenv();
1861extern int      errno;
1862# ifndef _PATH_VENDOR_CF
1863#  define _PATH_VENDOR_CF       "/usr/lib/sendmail.cf"
1864# endif
1865#endif
1866
1867 
1868/*
1869**  NEC EWS-UX/V 4.2 (with /usr/ucb/cc)
1870**
1871**      From Motonori NAKAMURA <motonori@cs.ritsumei.ac.jp>.
1872*/
1873
1874#if defined(nec_ews_svr4) || defined(_nec_ews_svr4)
1875# ifndef __svr4__
1876#  define __svr4__              /* use all System V Releae 4 defines below */
1877# endif
1878# define SYS5SIGNALS    1       /* SysV signal semantics -- reset on each sig */
1879# define HASSETSID      1       /* has Posix setsid(2) call */
1880# define LA_TYPE        LA_READKSYM     /* use MIOC_READSYM ioctl */
1881# define SFS_TYPE       SFS_USTAT       /* use System V ustat(2) syscall */
1882# define GIDSET_T       gid_t
1883# undef WIFEXITED
1884# undef WEXITSTATUS
1885# define NAMELISTMASK   0x7fffffff      /* mask for nlist() values */
1886# ifndef SYSLOG_BUFSIZE
1887#  define SYSLOG_BUFSIZE        1024    /* allow full size syslog buffer */
1888# endif
1889#endif
1890
1891
1892/*
1893**  Fujitsu/ICL UXP/DS (For the DS/90 Series)
1894**
1895**      From Diego R. Lopez <drlopez@cica.es>.
1896**      Additional changes from Fumio Moriya and Toshiaki Nomura of the
1897**              Fujitsu Fresoftware gruop <dsfrsoft@oai6.yk.fujitsu.co.jp>.
1898*/
1899
1900#ifdef __uxp__
1901# include <arpa/nameser.h>
1902# include <sys/sysmacros.h>
1903# include <sys/mkdev.h>
1904# define __svr4__
1905# define HASGETUSERSHELL        0
1906# define HASFLOCK               0
1907# if UXPDS == 10
1908#  define HASSNPRINTF           0       /* no snprintf(3) or vsnprintf(3) */
1909# else
1910#  define HASSNPRINTF           1       /* has snprintf(3) and vsnprintf(3) */
1911# endif
1912# define _PATH_UNIX             "/stand/unix"
1913# ifndef _PATH_VENDOR_CF
1914#  define _PATH_VENDOR_CF       "/usr/ucblib/sendmail.cf"
1915# endif
1916# ifndef _PATH_SENDMAILPID
1917#  define _PATH_SENDMAILPID     "/usr/ucblib/sendmail.pid"
1918# endif
1919#endif
1920
1921/*
1922**  Pyramid DC/OSx
1923**
1924**      From Earle Ake <akee@wpdiss1.wpafb.af.mil>.
1925*/
1926
1927#ifdef DCOSx
1928# define GIDSET_T       gid_t
1929# ifndef IDENTPROTO
1930#  define IDENTPROTO    0       /* TCP/IP implementation is broken */
1931# endif
1932#endif
1933
1934/*
1935**  Concurrent Computer Corporation Maxion
1936**
1937**      From Donald R. Laster Jr. <laster@access.digex.net>.
1938*/
1939
1940#ifdef __MAXION__
1941
1942# include <sys/stream.h>
1943# define __svr4__               1       /* SVR4.2MP */
1944# define HASSETREUID            1       /* have setreuid(2) */
1945# define HASLSTAT               1       /* have lstat(2) */
1946# define HASSETRLIMIT           1       /* have setrlimit(2) */
1947# define HASGETDTABLESIZE       1       /* have getdtablesize(2) */
1948# define HASSNPRINTF            1       /* have snprintf(3) */
1949# define HASGETUSERSHELL        1       /* have getusershell(3) */
1950# define NOFTRUNCATE            1       /* do not have ftruncate(2) */
1951# define SLEEP_T                unsigned
1952# define SFS_TYPE               SFS_STATVFS
1953# define SFS_BAVAIL             f_bavail
1954# ifndef SYSLOG_BUFSIZE
1955#  define SYSLOG_BUFSIZE        256     /* Use 256 bytes */
1956# endif
1957
1958# undef WUNTRACED
1959# undef WIFEXITED
1960# undef WIFSIGNALED
1961# undef WIFSTOPPED
1962# undef WEXITSTATUS
1963# undef WTERMSIG
1964# undef WSTOPSIG
1965
1966#endif
1967
1968/*
1969**  Harris Nighthawk PowerUX (nh6000 box)
1970**
1971**  Contributed by Bob Miorelli, Pratt & Whitney <miorelli@pweh.com>
1972*/
1973
1974#ifdef _PowerUX
1975# ifndef __svr4__
1976#  define __svr4__
1977# endif
1978# ifndef _PATH_VENDOR_CF
1979#  define _PATH_VENDOR_CF       "/etc/mail/sendmail.cf"
1980# endif
1981# ifndef _PATH_SENDMAILPID
1982#  define _PATH_SENDMAILPID     "/etc/mail/sendmail.pid"
1983# endif
1984# define SYSLOG_BUFSIZE         1024
1985# define HASSNPRINTF            1       /* has snprintf(3) and vsnprintf(3) */
1986# define LA_TYPE                LA_ZERO
1987typedef struct msgb             mblk_t;
1988# undef offsetof        /* avoid stddefs.h and sys/sysmacros.h conflict */
1989#endif
1990
1991/*
1992**  Siemens Nixdorf Informationssysteme AG SINIX
1993**
1994**      Contributed by Gerald Rinske <Gerald.Rinske@mch.sni.de>
1995**      of Siemens Business Services VAS.
1996*/
1997#ifdef sinix
1998# define SYSLOG_BUFSIZE         1024
1999#endif
2000
2001/*
2002**  CRAY T3E
2003**
2004**      Contributed by Manu Mahonen <mailadm@csc.fi>
2005**      of Center for Scientific Computing.
2006*/
2007#ifdef _CRAY
2008# define GET_IPOPT_DST(dst)     *(struct in_addr *)&(dst)
2009#endif
2010
2011/**********************************************************************
2012**  End of Per-Operating System defines
2013**********************************************************************/
2014/**********************************************************************
2015**  More general defines
2016**********************************************************************/
2017
2018/* general BSD defines */
2019#ifdef BSD
2020# define HASGETDTABLESIZE 1     /* has getdtablesize(2) call */
2021# define HASSETREUID    1       /* has setreuid(2) call */
2022# define HASINITGROUPS  1       /* has initgroups(3) call */
2023# ifndef IP_SRCROUTE
2024#  define IP_SRCROUTE   1       /* can check IP source routing */
2025# endif
2026# ifndef HASSETRLIMIT
2027#  define HASSETRLIMIT  1       /* has setrlimit(2) call */
2028# endif
2029# ifndef HASFLOCK
2030#  define HASFLOCK      1       /* has flock(2) call */
2031# endif
2032# ifndef TZ_TYPE
2033#  define TZ_TYPE       TZ_TM_ZONE      /* use tm->tm_zone variable */
2034# endif
2035#endif
2036
2037/* general System V Release 4 defines */
2038#ifdef __svr4__
2039# define SYSTEM5        1
2040# define USESETEUID     1       /* has useable seteuid(2) call */
2041# define HASINITGROUPS  1       /* has initgroups(3) call */
2042# define BSD_COMP       1       /* get BSD ioctl calls */
2043# ifndef HASSETRLIMIT
2044#  define HASSETRLIMIT  1       /* has setrlimit(2) call */
2045# endif
2046# ifndef HASGETUSERSHELL
2047#  define HASGETUSERSHELL 0     /* does not have getusershell(3) call */
2048# endif
2049# ifndef HASFCHMOD
2050#  define HASFCHMOD     1       /* most (all?) SVr4s seem to have fchmod(2) */
2051# endif
2052
2053# ifndef _PATH_UNIX
2054#  define _PATH_UNIX            "/unix"
2055# endif
2056# ifndef _PATH_VENDOR_CF
2057#  define _PATH_VENDOR_CF       "/usr/ucblib/sendmail.cf"
2058# endif
2059# ifndef _PATH_SENDMAILPID
2060#  define _PATH_SENDMAILPID     "/usr/ucblib/sendmail.pid"
2061# endif
2062# ifndef SYSLOG_BUFSIZE
2063#  define SYSLOG_BUFSIZE        128
2064# endif
2065# ifndef SFS_TYPE
2066#  define SFS_TYPE              SFS_STATVFS
2067# endif
2068
2069# define USE_SIGLONGJMP 1       /* sigsetjmp needed for signal handling */
2070#endif
2071
2072/* general System V defines */
2073#ifdef SYSTEM5
2074# include <sys/sysmacros.h>
2075# define HASUNAME       1       /* use System V uname(2) system call */
2076# define SYS5SETPGRP    1       /* use System V setpgrp(2) syscall */
2077# define HASSETVBUF     1       /* we have setvbuf(3) in libc */
2078# ifndef HASULIMIT
2079#  define HASULIMIT     1       /* has the ulimit(2) syscall */
2080# endif
2081# ifndef LA_TYPE
2082#  ifdef MIOC_READKSYM
2083#   define LA_TYPE      LA_READKSYM     /* use MIOC_READKSYM ioctl */
2084#  else
2085#   define LA_TYPE      LA_INT          /* assume integer load average */
2086#  endif
2087# endif
2088# ifndef SFS_TYPE
2089#  define SFS_TYPE      SFS_USTAT       /* use System V ustat(2) syscall */
2090# endif
2091# ifndef TZ_TYPE
2092#  define TZ_TYPE       TZ_TZNAME       /* use tzname[] vector */
2093# endif
2094# define bcopy(s, d, l)         (memmove((d), (s), (l)))
2095# define bzero(d, l)            (memset((d), '\0', (l)))
2096# define bcmp(s, d, l)          (memcmp((s), (d), (l)))
2097#endif
2098
2099/* general POSIX defines */
2100#ifdef _POSIX_VERSION
2101# define HASSETSID      1       /* has Posix setsid(2) call */
2102# define HASWAITPID     1       /* has Posix waitpid(2) call */
2103# if _POSIX_VERSION >= 199500 && !defined(USESETEUID)
2104#  define USESETEUID    1       /* has useable seteuid(2) call */
2105# endif
2106# ifndef bcopy
2107#  define bcopy(s, d, l)        (memmove((d), (s), (l)))
2108#  define bzero(d, l)           (memset((d), '\0', (l)))
2109#  define bcmp(s, d, l)         (memcmp((s), (d), (l)))
2110# endif
2111#endif
2112/*
2113**  Tweaking for systems that (for example) claim to be BSD or POSIX
2114**  but don't have all the standard BSD or POSIX routines (boo hiss).
2115*/
2116
2117#ifdef titan
2118# undef HASINITGROUPS           /* doesn't have initgroups(3) call */
2119#endif
2120
2121#ifdef _CRAYCOM
2122# undef HASSETSID               /* despite POSIX claim, doesn't have setsid */
2123#endif
2124
2125#ifdef ISC_UNIX
2126# undef bcopy                   /* despite SystemV claim, uses BSD bcopy */
2127#endif
2128
2129#ifdef ALTOS_SYSTEM_V
2130# undef bcopy                   /* despite SystemV claim, uses BSD bcopy */
2131# undef bzero                   /* despite SystemV claim, uses BSD bzero */
2132# undef bcmp                    /* despite SystemV claim, uses BSD bcmp */
2133#endif
2134
2135#if defined(sun) && !defined(BSD) && !defined(SOLARIS) && !defined(__svr4__) && !defined(__SVR4)
2136# undef bcopy                   /* SunOS 4 doesn't have memmove() */
2137#endif
2138
2139
2140/*
2141**  Due to a "feature" in some operating systems such as Ultrix 4.3 and
2142**  HPUX 8.0, if you receive a "No route to host" message (ICMP message
2143**  ICMP_UNREACH_HOST) on _any_ connection, all connections to that host
2144**  are closed.  Some firewalls return this error if you try to connect
2145**  to the IDENT port (113), so you can't receive email from these hosts
2146**  on these systems.  The firewall really should use a more specific
2147**  message such as ICMP_UNREACH_PROTOCOL or _PORT or _FILTER_PROHIB.  If
2148**  not explicitly set to zero above, default it on.
2149*/
2150
2151#ifndef IDENTPROTO
2152# define IDENTPROTO     1       /* use IDENT proto (RFC 1413) */
2153#endif
2154
2155#ifndef IP_SRCROUTE
2156# define IP_SRCROUTE    1       /* Detect IP source routing */
2157#endif
2158
2159#ifndef HASGETUSERSHELL
2160# define HASGETUSERSHELL 1      /* libc has getusershell(3) call */
2161#endif
2162
2163#ifndef NETUNIX
2164# define NETUNIX        1       /* include unix domain support */
2165#endif
2166
2167#ifndef HASFLOCK
2168# define HASFLOCK       0       /* assume no flock(2) support */
2169#endif
2170
2171#ifndef HASSETREUID
2172# define HASSETREUID    0       /* assume no setreuid(2) call */
2173#endif
2174
2175#ifndef HASFCHMOD
2176# define HASFCHMOD      0       /* assume no fchmod(2) syscall */
2177#endif
2178
2179#ifndef USESETEUID
2180# define USESETEUID     0       /* assume no seteuid(2) call or no saved ids */
2181#endif
2182
2183#ifndef HASSETRLIMIT
2184# define HASSETRLIMIT   0       /* assume no setrlimit(2) support */
2185#endif
2186
2187#ifndef HASULIMIT
2188# define HASULIMIT      0       /* assume no ulimit(2) support */
2189#endif
2190
2191#ifndef SECUREWARE
2192# define SECUREWARE     0       /* assume no SecureWare C2 auditing hooks */
2193#endif
2194
2195#ifndef USE_SIGLONGJMP
2196# define USE_SIGLONGJMP 0       /* assume setjmp handles signals properly */
2197#endif
2198
2199#ifndef FDSET_CAST
2200# define FDSET_CAST             /* (empty) cast for fd_set arg to select */
2201#endif
2202
2203/*
2204**  If no type for argument two of getgroups call is defined, assume
2205**  it's an integer -- unfortunately, there seem to be several choices
2206**  here.
2207*/
2208
2209#ifndef GIDSET_T
2210# define GIDSET_T       int
2211#endif
2212
2213#ifndef UID_T
2214# define UID_T          uid_t
2215#endif
2216
2217#ifndef GID_T
2218# define GID_T          gid_t
2219#endif
2220
2221#ifndef SIZE_T
2222# define SIZE_T         size_t
2223#endif
2224
2225#ifndef MODE_T
2226# define MODE_T         mode_t
2227#endif
2228
2229#ifndef ARGV_T
2230# define ARGV_T         char **
2231#endif
2232
2233#ifndef SOCKADDR_LEN_T
2234# define SOCKADDR_LEN_T int
2235#endif
2236
2237#ifndef SOCKOPT_LEN_T
2238# define SOCKOPT_LEN_T  int
2239#endif
2240
2241#ifndef QUAD_T
2242# define QUAD_T unsigned long
2243#endif
2244/**********************************************************************
2245**  Remaining definitions should never have to be changed.  They are
2246**  primarily to provide back compatibility for older systems -- for
2247**  example, it includes some POSIX compatibility definitions
2248**********************************************************************/
2249
2250/* System 5 compatibility */
2251#ifndef S_ISREG
2252# define S_ISREG(foo)   ((foo & S_IFMT) == S_IFREG)
2253#endif
2254#ifndef S_ISDIR
2255# define S_ISDIR(foo)   ((foo & S_IFMT) == S_IFDIR)
2256#endif
2257#if !defined(S_ISLNK) && defined(S_IFLNK)
2258# define S_ISLNK(foo)   ((foo & S_IFMT) == S_IFLNK)
2259#endif
2260#ifndef S_IRUSR
2261# define S_IRUSR                0400
2262#endif
2263#ifndef S_IWUSR
2264# define S_IWUSR                0200
2265#endif
2266#ifndef S_IRGRP
2267# define S_IRGRP                0040
2268#endif
2269#ifndef S_IWGRP
2270# define S_IWGRP                0020
2271#endif
2272#ifndef S_IROTH
2273# define S_IROTH                0004
2274#endif
2275#ifndef S_IWOTH
2276# define S_IWOTH                0002
2277#endif
2278
2279/*
2280**  Older systems don't have this error code -- it should be in
2281**  /usr/include/sysexits.h.
2282*/
2283
2284# ifndef EX_CONFIG
2285# define EX_CONFIG      78      /* configuration error */
2286# endif
2287
2288/* pseudo-code used in server SMTP */
2289# define EX_QUIT        22      /* drop out of server immediately */
2290
2291/* pseudo-code used for mci_setstat */
2292# define EX_NOTSTICKY   -5      /* don't save persistent status */
2293
2294
2295/*
2296**  An "impossible" file mode to indicate that the file does not exist.
2297*/
2298
2299#define ST_MODE_NOFILE  0171147         /* unlikely to occur */
2300
2301
2302/*
2303**  These are used in a few cases where we need some special
2304**  error codes, but where the system doesn't provide something
2305**  reasonable.  They are printed in errstring.
2306*/
2307
2308#ifndef E_PSEUDOBASE
2309# define E_PSEUDOBASE   256
2310#endif
2311
2312#define E_SM_OPENTIMEOUT (E_PSEUDOBASE + 0)     /* Timeout on file open */
2313#define E_SM_NOSLINK    (E_PSEUDOBASE + 1)      /* Symbolic links not allowed */
2314#define E_SM_NOHLINK    (E_PSEUDOBASE + 2)      /* Hard links not allowed */
2315#define E_SM_REGONLY    (E_PSEUDOBASE + 3)      /* Regular files only */
2316#define E_SM_ISEXEC     (E_PSEUDOBASE + 4)      /* Executable files not allowed */
2317#define E_SM_WWDIR      (E_PSEUDOBASE + 5)      /* World writable directory */
2318#define E_SM_GWDIR      (E_PSEUDOBASE + 6)      /* Group writable directory */
2319#define E_SM_FILECHANGE (E_PSEUDOBASE + 7)      /* File changed after open */
2320#define E_SM_WWFILE     (E_PSEUDOBASE + 8)      /* World writable file */
2321#define E_SM_GWFILE     (E_PSEUDOBASE + 9)      /* Group writable file */
2322#define E_DNSBASE       (E_PSEUDOBASE + 20)     /* base for DNS h_errno */
2323
2324/* type of arbitrary pointer */
2325#ifndef ARBPTR_T
2326# define ARBPTR_T       void *
2327#endif
2328
2329#ifndef __P
2330# include "cdefs.h"
2331#endif
2332
2333#if HESIOD && !defined(NAMED_BIND)
2334# define NAMED_BIND     1       /* not one without the other */
2335#endif
2336
2337#if NAMED_BIND && !defined(__ksr__) && !defined(h_errno)
2338extern int      h_errno;
2339#endif
2340
2341/*
2342**  Do some required dependencies
2343*/
2344
2345#if NETINET || NETISO
2346# ifndef SMTP
2347#  define SMTP          1       /* enable user and server SMTP */
2348# endif
2349# ifndef QUEUE
2350#  define QUEUE         1       /* enable queueing */
2351# endif
2352# ifndef DAEMON
2353#  define DAEMON        1       /* include the daemon (requires IPC & SMTP) */
2354# endif
2355#endif
2356
2357
2358/*
2359**  Arrange to use either varargs or stdargs
2360*/
2361
2362# ifdef __STDC__
2363
2364# include <stdarg.h>
2365
2366# define VA_LOCAL_DECL  va_list ap;
2367# define VA_START(f)    va_start(ap, f)
2368# define VA_END         va_end(ap)
2369
2370# else
2371
2372# include <varargs.h>
2373
2374# define VA_LOCAL_DECL  va_list ap;
2375# define VA_START(f)    va_start(ap)
2376# define VA_END         va_end(ap)
2377
2378# endif
2379
2380#ifdef HASUNAME
2381# include <sys/utsname.h>
2382# ifdef newstr
2383#  undef newstr
2384# endif
2385#else /* ! HASUNAME */
2386# define NODE_LENGTH 32
2387struct utsname
2388{
2389        char nodename[NODE_LENGTH+1];
2390};
2391#endif /* HASUNAME */
2392
2393#if !defined(MAXHOSTNAMELEN) && !defined(_SCO_unix_) && !defined(NonStop_UX_BXX) && !defined(ALTOS_SYSTEM_V)
2394# define MAXHOSTNAMELEN 256
2395#endif
2396
2397#if !defined(SIGCHLD) && defined(SIGCLD)
2398# define SIGCHLD        SIGCLD
2399#endif
2400
2401#ifndef STDIN_FILENO
2402# define STDIN_FILENO   0
2403#endif
2404
2405#ifndef STDOUT_FILENO
2406# define STDOUT_FILENO  1
2407#endif
2408
2409#ifndef STDERR_FILENO
2410# define STDERR_FILENO  2
2411#endif
2412
2413#ifndef LOCK_SH
2414# define LOCK_SH        0x01    /* shared lock */
2415# define LOCK_EX        0x02    /* exclusive lock */
2416# define LOCK_NB        0x04    /* non-blocking lock */
2417# define LOCK_UN        0x08    /* unlock */
2418#endif
2419
2420#ifndef S_IXOTH
2421# define S_IXOTH        (S_IEXEC >> 6)
2422#endif
2423
2424#ifndef S_IXGRP
2425# define S_IXGRP        (S_IEXEC >> 3)
2426#endif
2427
2428#ifndef S_IXUSR
2429# define S_IXUSR        (S_IEXEC)
2430#endif
2431
2432#ifndef SEEK_SET
2433# define SEEK_SET       0
2434# define SEEK_CUR       1
2435# define SEEK_END       2
2436#endif
2437
2438#ifndef SIG_ERR
2439# define SIG_ERR        ((void (*)()) -1)
2440#endif
2441
2442#ifndef WEXITSTATUS
2443# define WEXITSTATUS(st)        (((st) >> 8) & 0377)
2444#endif
2445#ifndef WIFEXITED
2446# define WIFEXITED(st)          (((st) & 0377) == 0)
2447#endif
2448
2449#ifndef SIGFUNC_DEFINED
2450typedef void            (*sigfunc_t) __P((int));
2451#endif
2452#ifndef SIGFUNC_RETURN
2453# define SIGFUNC_RETURN
2454#endif
2455#ifndef SIGFUNC_DECL
2456# define SIGFUNC_DECL   void
2457#endif
2458
2459/* size of syslog buffer */
2460#ifndef SYSLOG_BUFSIZE
2461# define SYSLOG_BUFSIZE 1024
2462#endif
2463
2464/*
2465**  Size of prescan buffer.
2466**      Despite comments in the _sendmail_ book, this probably should
2467**      not be changed; there are some hard-to-define dependencies.
2468*/
2469
2470# define PSBUFSIZE      (MAXNAME + MAXATOM)     /* size of prescan buffer */
2471
2472/* fork routine -- set above using #ifdef _osname_ or in Makefile */
2473# ifndef FORK
2474# define FORK           fork            /* function to call to fork mailer */
2475# endif
2476
2477/*
2478**  Default to using scanf in readcf.
2479*/
2480
2481#ifndef SCANF
2482# define SCANF          1
2483#endif
2484
2485/*
2486**  SVr4 and similar systems use different routines for setjmp/longjmp
2487**  with signal support
2488*/
2489
2490#if USE_SIGLONGJMP
2491# ifdef jmp_buf
2492#  undef jmp_buf
2493# endif
2494# define jmp_buf                sigjmp_buf
2495# ifdef setjmp
2496#  undef setjmp
2497# endif
2498# define setjmp(env)            sigsetjmp(env, 1)
2499# ifdef longjmp
2500#  undef longjmp
2501# endif
2502# define longjmp(env, val)      siglongjmp(env, val)
2503#endif
2504
2505#if !defined(NGROUPS_MAX) && defined(NGROUPS)
2506# define NGROUPS_MAX    NGROUPS         /* POSIX naming convention */
2507#endif
2508
2509/*
2510**  If we don't have a system syslog, simulate it.
2511*/
2512
2513#if !LOG
2514# define LOG_EMERG      0       /* system is unusable */
2515# define LOG_ALERT      1       /* action must be taken immediately */
2516# define LOG_CRIT       2       /* critical conditions */
2517# define LOG_ERR        3       /* error conditions */
2518# define LOG_WARNING    4       /* warning conditions */
2519# define LOG_NOTICE     5       /* normal but significant condition */
2520# define LOG_INFO       6       /* informational */
2521# define LOG_DEBUG      7       /* debug-level messages */
2522#endif
Note: See TracBrowser for help on using the repository browser.