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