conf.h
上传用户:xu_441
上传日期:2007-01-04
资源大小:1640k
文件大小:82k
源码类别:

Email客户端

开发平台:

Unix_Linux

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