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