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