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