diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 2001-09-11 18:55:53 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 2001-09-11 18:55:53 +0000 |
commit | 4643c616c81fb1198b29c3eaff4d697392c8dc4b (patch) | |
tree | 4afa26a5f1a2ef0e47061eb08b6d339bc7e8dad1 /gnu/usr.sbin/sendmail/include/sm | |
parent | 8afe339a41c898cc4a2d42d03d115b16f2053bad (diff) |
sendmail 8.12.0 with $Id tags converted to $Sendmail
Diffstat (limited to 'gnu/usr.sbin/sendmail/include/sm')
42 files changed, 5810 insertions, 0 deletions
diff --git a/gnu/usr.sbin/sendmail/include/sm/assert.h b/gnu/usr.sbin/sendmail/include/sm/assert.h new file mode 100644 index 00000000000..ae49efe01bd --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/assert.h @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: assert.h,v 1.10 2001/06/07 20:04:53 ca Exp $ + */ + +/* +** libsm abnormal program termination and assertion checking +** See libsm/assert.html for documentation. +*/ + +#ifndef SM_ASSERT_H +# define SM_ASSERT_H + +# include <sm/gen.h> +# include <sm/debug.h> + +/* +** abnormal program termination +*/ + +typedef void (*SM_ABORT_HANDLER_T) __P((const char *, int, const char *)); + +extern SM_DEAD(void +sm_abort_at __P(( + const char *, + int, + const char *))); + +extern void +sm_abort_sethandler __P(( + SM_ABORT_HANDLER_T)); + +extern SM_DEAD(void PRINTFLIKE(1, 2) +sm_abort __P(( + char *, + ...))); + +/* +** assertion checking +*/ + +# ifndef SM_CHECK_ALL +# define SM_CHECK_ALL 1 +# endif /* ! SM_CHECK_ALL */ + +# ifndef SM_CHECK_REQUIRE +# define SM_CHECK_REQUIRE SM_CHECK_ALL +# endif /* ! SM_CHECK_REQUIRE */ + +# ifndef SM_CHECK_ENSURE +# define SM_CHECK_ENSURE SM_CHECK_ALL +# endif /* ! SM_CHECK_ENSURE */ + +# ifndef SM_CHECK_ASSERT +# define SM_CHECK_ASSERT SM_CHECK_ALL +# endif /* ! SM_CHECK_ASSERT */ + +# if SM_CHECK_REQUIRE +# if defined(__STDC__) || defined(__cplusplus) +# define SM_REQUIRE(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_REQUIRE(" #cond ") failed"), 0))) +# else /* defined(__STDC__) || defined(__cplusplus) */ +# define SM_REQUIRE(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_REQUIRE(cond) failed"), 0))) +# endif /* defined(__STDC__) || defined(__cplusplus) */ +# else /* SM_CHECK_REQUIRE */ +# define SM_REQUIRE(cond) ((void) 0) +# endif /* SM_CHECK_REQUIRE */ + +# define SM_REQUIRE_ISA(obj, magic) \ + SM_REQUIRE((obj) != NULL && (obj)->sm_magic == (magic)) + +# if SM_CHECK_ENSURE +# if defined(__STDC__) || defined(__cplusplus) +# define SM_ENSURE(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_ENSURE(" #cond ") failed"), 0))) +# else /* defined(__STDC__) || defined(__cplusplus) */ +# define SM_ENSURE(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_ENSURE(cond) failed"), 0))) +# endif /* defined(__STDC__) || defined(__cplusplus) */ +# else /* SM_CHECK_ENSURE */ +# define SM_ENSURE(cond) ((void) 0) +# endif /* SM_CHECK_ENSURE */ + +# if SM_CHECK_ASSERT +# if defined(__STDC__) || defined(__cplusplus) +# define SM_ASSERT(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_ASSERT(" #cond ") failed"), 0))) +# else /* defined(__STDC__) || defined(__cplusplus) */ +# define SM_ASSERT(cond) \ + ((void) ((cond) || (sm_abort_at(__FILE__, __LINE__, \ + "SM_ASSERT(cond) failed"), 0))) +# endif /* defined(__STDC__) || defined(__cplusplus) */ +# else /* SM_CHECK_ASSERT */ +# define SM_ASSERT(cond) ((void) 0) +# endif /* SM_CHECK_ASSERT */ + +extern SM_DEBUG_T SmExpensiveRequire; +extern SM_DEBUG_T SmExpensiveEnsure; +extern SM_DEBUG_T SmExpensiveAssert; + +#endif /* ! SM_ASSERT_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/bitops.h b/gnu/usr.sbin/sendmail/include/sm/bitops.h new file mode 100644 index 00000000000..20cf5d0337c --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/bitops.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * + * $Sendmail: bitops.h,v 1.1 2001/01/29 07:38:16 gshapiro Exp $ + */ + +#ifndef SM_BITOPS_H +# define SM_BITOPS_H + +/* +** Data structure for bit maps. +** +** Each bit in this map can be referenced by an ascii character. +** This is 256 possible bits, or 32 8-bit bytes. +*/ + +# define BITMAPBITS 256 /* number of bits in a bit map */ +# define BYTEBITS 8 /* number of bits in a byte */ +# define BITMAPBYTES (BITMAPBITS / BYTEBITS) /* number of bytes in bit map */ + +/* internal macros */ +# define _BITWORD(bit) ((bit) / (BYTEBITS * sizeof (int))) +# define _BITBIT(bit) ((unsigned int)1 << ((bit) % (BYTEBITS * sizeof (int)))) + +typedef unsigned int BITMAP256[BITMAPBYTES / sizeof (int)]; + +/* properly case and truncate bit */ +# define bitidx(bit) ((unsigned int) (bit) & 0xff) + +/* test bit number N */ +# define bitnset(bit, map) ((map)[_BITWORD(bit)] & _BITBIT(bit)) + +/* set bit number N */ +# define setbitn(bit, map) (map)[_BITWORD(bit)] |= _BITBIT(bit) + +/* clear bit number N */ +# define clrbitn(bit, map) (map)[_BITWORD(bit)] &= ~_BITBIT(bit) + +/* clear an entire bit map */ +# define clrbitmap(map) memset((char *) map, '\0', BITMAPBYTES) + +/* bit hacking */ +# define bitset(bit, word) (((word) & (bit)) != 0) + +#endif /* ! SM_BITOPS_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/cdefs.h b/gnu/usr.sbin/sendmail/include/sm/cdefs.h new file mode 100644 index 00000000000..ecf597e6733 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/cdefs.h @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: cdefs.h,v 1.14 2001/06/07 20:04:53 ca Exp $ + */ + +/* +** libsm C language portability macros +** See libsm/cdefs.html for documentation. +*/ + +#ifndef SM_CDEFS_H +# define SM_CDEFS_H + +# include <sm/config.h> + +/* +** BSD and Linux have <sys/cdefs.h> which defines a set of C language +** portability macros that are a defacto standard in the open source +** community. +*/ + +# if SM_CONF_SYS_CDEFS_H +# include <sys/cdefs.h> +# endif /* SM_CONF_SYS_CDEFS_H */ + +/* +** Define the standard C language portability macros +** for platforms that lack <sys/cdefs.h>. +*/ + +# if !SM_CONF_SYS_CDEFS_H +# if defined(__cplusplus) +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS }; +# else /* defined(__cplusplus) */ +# define __BEGIN_DECLS +# define __END_DECLS +# endif /* defined(__cplusplus) */ +# if defined(__STDC__) || defined(__cplusplus) +# define __P(protos) protos +# define __CONCAT(x,y) x ## y +# define __STRING(x) #x +# else /* defined(__STDC__) || defined(__cplusplus) */ +# define __P(protos) () +# define __CONCAT(x,y) x/**/y +# define __STRING(x) "x" +# define const +# define signed +# define volatile +# endif /* defined(__STDC__) || defined(__cplusplus) */ +# endif /* !SM_CONF_SYS_CDEFS_H */ + +/* +** Define SM_DEAD, a macro used to declare functions that do not return +** to their caller. +*/ + +# ifndef SM_DEAD +# if __GNUC__ >= 2 +# if __GNUC__ == 2 && __GNUC_MINOR__ < 5 +# define SM_DEAD(proto) volatile proto +# else /* __GNUC__ == 2 && __GNUC_MINOR__ < 5 */ +# define SM_DEAD(proto) proto __attribute__((__noreturn__)) +# endif /* __GNUC__ == 2 && __GNUC_MINOR__ < 5 */ +# else /* __GNUC__ >= 2 */ +# define SM_DEAD(proto) proto +# endif /* __GNUC__ >= 2 */ +# endif /* SM_DEAD */ + +/* +** Define SM_UNUSED, a macro used to declare variables that may be unused. +*/ + +# ifndef SM_UNUSED +# if __GNUC__ >= 2 +# if __GNUC__ == 2 && __GNUC_MINOR__ < 7 +# define SM_UNUSED(decl) decl +# else /* __GNUC__ == 2 && __GNUC_MINOR__ < 7 */ +# define SM_UNUSED(decl) decl __attribute__((__unused__)) +# endif /* __GNUC__ == 2 && __GNUC_MINOR__ < 7 */ +# else /* __GNUC__ >= 2 */ +# define SM_UNUSED(decl) decl +# endif /* __GNUC__ >= 2 */ +# endif /* SM_UNUSED */ + +/* +** The SM_NONVOLATILE macro is used to declare variables that are not +** volatile, but which must be declared volatile when compiling with +** gcc -O -Wall in order to suppress bogus warning messages. +** +** Variables that actually are volatile should be declared volatile +** using the "volatile" keyword. If a variable actually is volatile, +** then SM_NONVOLATILE should not be used. +** +** To compile sendmail with gcc and see all non-bogus warnings, +** you should use +** gcc -O -Wall -DSM_OMIT_BOGUS_WARNINGS ... +** Do not use -DSM_OMIT_BOGUS_WARNINGS when compiling the production +** version of sendmail, because there is a performance hit. +*/ + +# ifdef SM_OMIT_BOGUS_WARNINGS +# define SM_NONVOLATILE volatile +# else /* SM_OMIT_BOGUS_WARNINGS */ +# define SM_NONVOLATILE +# endif /* SM_OMIT_BOGUS_WARNINGS */ + +/* +** Turn on format string argument checking. +*/ + +# ifndef SM_CONF_FORMAT_TEST +# if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 +# define SM_CONF_FORMAT_TEST 1 +# else /* __GNUC__ == 2 && __GNUC_MINOR__ >= 7 */ +# define SM_CONF_FORMAT_TEST 0 +# endif /* __GNUC__ == 2 && __GNUC_MINOR__ >= 7 */ +# endif /* SM_CONF_FORMAT_TEST */ + +# ifndef PRINTFLIKE +# if SM_CONF_FORMAT_TEST +# define PRINTFLIKE(x,y) __attribute__ ((__format__ (__printf__, x, y))) +# else /* SM_CONF_FORMAT_TEST */ +# define PRINTFLIKE(x,y) +# endif /* SM_CONF_FORMAT_TEST */ +# endif /* ! PRINTFLIKE */ + +# ifndef SCANFLIKE +# if SM_CONF_FORMAT_TEST +# define SCANFLIKE(x,y) __attribute__ ((__format__ (__scanf__, x, y))) +# else /* SM_CONF_FORMAT_TEST */ +# define SCANFLIKE(x,y) +# endif /* SM_CONF_FORMAT_TEST */ +# endif /* ! SCANFLIKE */ + +#endif /* ! SM_CDEFS_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/cf.h b/gnu/usr.sbin/sendmail/include/sm/cf.h new file mode 100644 index 00000000000..85bdafa7b60 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/cf.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: cf.h,v 1.2 2001/03/08 03:23:07 ca Exp $ + */ + +#ifndef SM_CF_H +# define SM_CF_H + +#include <sm/gen.h> + +typedef struct +{ + char *opt_name; + char *opt_val; +} SM_CF_OPT_T; + +extern int +sm_cf_getopt __P(( + char *path, + int optc, + SM_CF_OPT_T *optv)); + +#endif /* ! SM_CF_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/clock.h b/gnu/usr.sbin/sendmail/include/sm/clock.h new file mode 100644 index 00000000000..64222849920 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/clock.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: clock.h,v 1.11 2001/05/14 23:25:37 gshapiro Exp $ + */ + +/* +** CLOCK.H -- for co-ordinating timed events +*/ + +#ifndef _SM_CLOCK_H +# define _SM_CLOCK_H 1 + +# include <sm/signal.h> +# if SM_CONF_SETITIMER +# include <sys/time.h> +# endif /* SM_CONF_SETITIMER */ + +/* +** STRUCT SM_EVENT -- event queue. +** +** Maintained in sorted order. +** +** We store the pid of the process that set this event to insure +** that when we fork we will not take events intended for the parent. +*/ + +struct sm_event +{ +# if SM_CONF_SETITIMER + struct timeval ev_time; /* time of the call (microseconds) */ +# else /* SM_CONF_SETITIMER */ + time_t ev_time; /* time of the call (seconds) */ +# endif /* SM_CONF_SETITIMER */ + void (*ev_func)__P((int)); + /* function to call */ + int ev_arg; /* argument to ev_func */ + pid_t ev_pid; /* pid that set this event */ + struct sm_event *ev_link; /* link to next item */ +}; + +typedef struct sm_event SM_EVENT; + +/* functions */ +extern void sm_clrevent __P((SM_EVENT *)); +extern void sm_clear_events __P((void)); +extern SM_EVENT *sm_setevent __P((time_t, void(*)(), int)); +extern SM_EVENT *sm_seteventm __P((int, void(*)(), int)); +extern SM_EVENT *sm_sigsafe_seteventm __P((int, void(*)(), int)); +extern SIGFUNC_DECL sm_tick __P((int)); + +/* +** SM_SETEVENT -- set an event to happen at a specific time in seconds. +** +** Translates the seconds into millseconds and calls sm_seteventm() +** to get a specific event to happen in the future at a specific time. +** +** Parameters: +** t -- intvl until next event occurs (seconds). +** f -- function to call on event. +** a -- argument to func on event. +** +** Returns: +** result of sm_seteventm(). +** +** Side Effects: +** Any that sm_seteventm() have. +*/ + +#define sm_setevent(t, f, a) sm_seteventm((int)((t) * 1000), (f), (a)) +#define sm_sigsafe_setevent(t, f, a) sm_sigsafe_seteventm((int)((t) * 1000), (f), (a)) + +#endif /* _SM_CLOCK_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/conf.h b/gnu/usr.sbin/sendmail/include/sm/conf.h new file mode 100644 index 00000000000..582a383decd --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/conf.h @@ -0,0 +1,2712 @@ +/* + * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * + * $Sendmail: conf.h,v 1.76 2001/08/31 23:03:11 gshapiro Exp $ + */ + +/* +** CONF.H -- All user-configurable parameters for sendmail +** +** Send updates to sendmail@Sendmail.ORG so they will be +** included in the next release. +*/ + +#ifndef SM_CONF_H +# define SM_CONF_H 1 + + +# include <sm/config.h> +# include <sm/varargs.h> + +/* +** General "standard C" defines. +** +** These may be undone later, to cope with systems that claim to +** be Standard C but aren't. Gcc is the biggest offender -- it +** doesn't realize that the library is part of the language. +** +** Life would be much easier if we could get rid of this sort +** of bozo problems. +*/ + +# ifdef __STDC__ +# define HASSETVBUF 1 /* we have setvbuf(3) in libc */ +# endif /* __STDC__ */ + +/* +** Assume you have standard calls; can be #undefed below if necessary. +*/ + +# ifndef HASLSTAT +# define HASLSTAT 1 /* has lstat(2) call */ +# endif /* ! HASLSTAT */ + +/********************************************************************** +** "Hard" compilation options. +** #define these if they are available; comment them out otherwise. +** These cannot be overridden from the Makefile, and should really not +** be turned off unless absolutely necessary. +**********************************************************************/ + +#define LOG 1 /* enable logging -- don't turn off */ + +/********************************************************************** +** Operating system configuration. +** +** Unless you are porting to a new OS, you shouldn't have to +** change these. +**********************************************************************/ + +/* +** HP-UX -- tested for 8.07, 9.00, and 9.01. +** +** If V4FS is defined, compile for HP-UX 10.0. +** 11.x support from Richard Allen <ra@hp.is>. +*/ + +# ifdef __hpux + /* common definitions for HP-UX 9.x and 10.x */ +# undef m_flags /* conflict between Berkeley DB 1.85 db.h & sys/sysmacros.h on HP 300 */ +# define SYSTEM5 1 /* include all the System V defines */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define USESETEUID 1 /* has usable seteuid(2) call */ +# define BOGUS_O_EXCL 1 /* exclusive open follows symlinks */ +# define seteuid(e) setresuid(-1, e, -1) +# define IP_SRCROUTE 1 /* can check IP source routing */ +# define LA_TYPE LA_HPUX +# define SPT_TYPE SPT_PSTAT +# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */ +# define GIDSET_T gid_t +# define LDA_USE_LOCKF 1 +# ifndef HASGETUSERSHELL +# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps */ +# endif /* ! HASGETUSERSHELL */ +# ifdef HPUX10 +# define _PATH_SENDMAIL "/usr/sbin/sendmail" +# define SMRSH_CMDDIR "/var/adm/sm.bin" +# endif /* HPUX10 */ +# ifdef HPUX11 +# define HASFCHOWN 1 /* has fchown(2) */ +# ifndef BROKEN_RES_SEARCH +# define BROKEN_RES_SEARCH 1 /* res_search(unknown) returns h_errno=0 */ +# endif /* ! BROKEN_RES_SEARCH */ +# define SMRSH_CMDDIR "/var/adm/sm.bin" +# define _PATH_SENDMAIL "/usr/sbin/sendmail" +# else /* HPUX11 */ +# ifndef NOT_SENDMAIL +# define syslog hard_syslog +# endif /* ! NOT_SENDMAIL */ +# endif /* HPUX11 */ +# define SAFENFSPATHCONF 1 /* pathconf(2) pessimizes on NFS filesystems */ + +# ifdef V4FS + /* HP-UX 10.x */ +# define _PATH_UNIX "/stand/vmunix" +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/etc/mail/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# ifndef IDENTPROTO +# define IDENTPROTO 1 /* TCP/IP implementation fixed in 10.0 */ +# endif /* ! IDENTPROTO */ +# include <sys/mpctl.h> /* for mpctl() in get_num_procs_online() */ +# else /* V4FS */ + /* HP-UX 9.x */ +# define _PATH_UNIX "/hp-ux" +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef IDENTPROTO +# define IDENTPROTO 0 /* TCP/IP implementation is broken */ +# endif /* ! IDENTPROTO */ +# ifdef __STDC__ +extern void hard_syslog(int, char *, ...); +# else /* __STDC__ */ +extern void hard_syslog(); +# endif /* __STDC__ */ +# define FDSET_CAST (int *) /* cast for fd_set parameters to select */ +# endif /* V4FS */ + +# endif /* __hpux */ + +/* +** IBM AIX 5.x +*/ + +# ifdef _AIX5 +# define _AIX4 40300 +# endif /* _AIX5 */ + +/* +** IBM AIX 4.x +*/ + +# ifdef _AIX4 +# define _AIX3 1 /* pull in AIX3 stuff */ +# define BSD4_4_SOCKADDR /* has sa_len */ +# define USESETEUID 1 /* seteuid(2) works */ +# define TZ_TYPE TZ_NAME /* use tzname[] vector */ +# define SOCKOPT_LEN_T size_t /* arg#5 to getsockopt */ +# if _AIX4 >= 40200 +# define HASSETREUID 1 /* setreuid(2) works as of AIX 4.2 */ +# define SOCKADDR_LEN_T size_t /* e.g., arg#3 to accept, getsockname */ +# endif /* _AIX4 >= 40200 */ +# if defined(_ILS_MACROS) /* IBM versions aren't side-effect clean */ +# undef isascii +# define isascii(c) !(c & ~0177) +# undef isdigit +# define isdigit(__a) (_IS(__a,_ISDIGIT)) +# undef isspace +# define isspace(__a) (_IS(__a,_ISSPACE)) +# endif /* defined(_ILS_MACROS) */ +# endif /* _AIX4 */ + + +/* +** IBM AIX 3.x -- actually tested for 3.2.3 +*/ + +# ifdef _AIX3 +# include <paths.h> +# include <sys/machine.h> /* to get byte order */ +# include <sys/select.h> +# define HASFCHOWN 1 /* has fchown(2) */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASUNAME 1 /* use System V uname(2) system call */ +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define IP_SRCROUTE 0 /* Something is broken with getsockopt() */ +# define GIDSET_T gid_t +# define SFS_TYPE SFS_STATFS /* use <sys/statfs.h> statfs() impl */ +# define SPT_PADCHAR '\0' /* pad process title with nulls */ +# define LA_TYPE LA_INT +# define FSHIFT 16 +# define LA_AVENRUN "avenrun" +# ifndef _AIX4 +# ifndef __BIT_TYPES_DEFINED__ +# define SM_INT32 int +# endif /* __BIT_TYPES_DEFINED__ */ +# endif /* ! _AIX4 */ +# endif /* _AIX3 */ + + +/* +** IBM AIX 2.2.1 -- actually tested for osupdate level 2706+1773 +** +** From Mark Whetzel <markw@wg.waii.com>. +*/ + +# ifdef AIX /* AIX/RT compiler pre-defines this */ +# include <paths.h> +# include <sys/time.h> /* AIX/RT resource.h does NOT include this */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASUNAME 1 /* use System V uname(2) system call */ +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# define HASFCHMOD 0 /* does not have fchmod(2) syscall */ +# define HASSETREUID 1 /* use setreuid(2) -lbsd system call */ +# define HASSETVBUF 1 /* use setvbuf(2) system call */ +# define HASSETRLIMIT 0 /* does not have setrlimit call */ +# define HASFLOCK 0 /* does not have flock call - use fcntl */ +# define HASULIMIT 1 /* use ulimit instead of setrlimit call */ +# define SM_CONF_GETOPT 0 /* Do we need theirs or ours */ +# define SYS5SETPGRP 1 /* don't have setpgid on AIX/RT */ +# define IP_SRCROUTE 0 /* Something is broken with getsockopt() */ +# define BSD4_3 1 /* NOT bsd 4.4 or posix signals */ +# define GIDSET_T int +# define SFS_TYPE SFS_STATFS /* use <sys/statfs.h> statfs() impl */ +# define SPT_PADCHAR '\0' /* pad process title with nulls */ +# define LA_TYPE LA_SUBR /* use our ported loadavgd daemon */ +# define TZ_TYPE TZ_TZNAME /* use tzname[] vector */ +# define ARBPTR_T int * +# define void int +typedef int pid_t; +/* RTisms for BSD compatibility, specified in the Makefile + define BSD 1 + define BSD_INCLUDES 1 + define BSD_REMAP_SIGNAL_TO_SIGVEC + RTisms needed above */ +/* make this sendmail in a completely different place */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/local/newmail/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/usr/local/newmail/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# endif /* AIX */ + +# if defined(_AIX) +# define LDA_USE_LOCKF 1 +# define LDA_USE_SETEUID 1 +# endif /* defined(_AIX) */ + +/* +** Silicon Graphics IRIX +** +** Compiles on 4.0.1. +** +** Use IRIX64 instead of IRIX for 64-bit IRIX (6.0). +** Use IRIX5 instead of IRIX for IRIX 5.x. +** +** IRIX64 changes from Mark R. Levinson <ml@cvdev.rochester.edu>. +** IRIX5 changes from Kari E. Hurtta <Kari.Hurtta@fmi.fi>. +*/ + +# ifdef IRIX +# define SYSTEM5 1 /* this is a System-V derived system */ +# define HASSETREUID 1 /* has setreuid(2) call */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# define IP_SRCROUTE 1 /* can check IP source routing */ +# define setpgid BSDsetpgrp +# define GIDSET_T gid_t +# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */ +# define SFS_BAVAIL f_bfree /* alternate field name */ +# define SYSLOG_BUFSIZE 512 +# ifdef IRIX6 +# define STAT64 1 +# define QUAD_T unsigned long long +# define LA_TYPE LA_IRIX6 /* figure out at run time */ +# define SAFENFSPATHCONF 0 /* pathconf(2) lies on NFS filesystems */ +# else /* IRIX6 */ +# define LA_TYPE LA_INT + +# ifdef IRIX64 +# define STAT64 1 +# define QUAD_T unsigned long long +# define NAMELISTMASK 0x7fffffffffffffff /* mask for nlist() values */ +# else /* IRIX64 */ +# define STAT64 0 +# define NAMELISTMASK 0x7fffffff /* mask for nlist() values */ +# endif /* IRIX64 */ +# endif /* IRIX6 */ +# if defined(IRIX64) || defined(IRIX5) || defined(IRIX6) +# include <sys/cdefs.h> +# include <paths.h> +# define ARGV_T char *const * +# define HASFCHOWN 1 /* has fchown(2) */ +# define HASSETRLIMIT 1 /* has setrlimit(2) syscall */ +# define HASGETDTABLESIZE 1 /* has getdtablesize(2) syscall */ +# define HASSTRERROR 1 /* has strerror(3) */ +# else /* defined(IRIX64) || defined(IRIX5) || defined(IRIX6) */ +# define ARGV_T const char ** +# define WAITUNION 1 /* use "union wait" as wait argument type */ +# endif /* defined(IRIX64) || defined(IRIX5) || defined(IRIX6) */ +# endif /* IRIX */ + + +/* +** SunOS and Solaris +** +** Tested on SunOS 4.1.x (a.k.a. Solaris 1.1.x) and +** Solaris 2.4 (a.k.a. SunOS 5.4). +*/ + +# if defined(sun) && !defined(BSD) + +# include <sys/time.h> +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASUNAME 1 /* use System V uname(2) system call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define IP_SRCROUTE 1 /* can check IP source routing */ +# define SAFENFSPATHCONF 1 /* pathconf(2) pessimizes on NFS filesystems */ +# ifndef HASFCHOWN +# define HASFCHOWN 1 /* fchown(2) */ +# endif /* ! HASFCHOWN */ + +# ifdef __svr4__ +# define LDA_USE_LOCKF 1 +# define LDA_USE_SETEUID 1 +# define _PATH_MAILDIR "/var/mail" +# endif /* __svr4__ */ + +# ifdef SOLARIS_2_3 +# define SOLARIS 20300 /* for back compat only -- use -DSOLARIS=20300 */ +# endif /* SOLARIS_2_3 */ + +# if defined(NOT_SENDMAIL) && !defined(SOLARIS) && defined(sun) && (defined(__svr4__) || defined(__SVR4)) +# define SOLARIS 1 /* unknown Solaris version */ +# endif /* defined(NOT_SENDMAIL) && !defined(SOLARIS) && defined(sun) && (defined(__svr4__) || defined(__SVR4)) */ + +# ifdef SOLARIS + /* Solaris 2.x (a.k.a. SunOS 5.x) */ +# ifndef __svr4__ +# define __svr4__ /* use all System V Release 4 defines below */ +# endif /* ! __svr4__ */ +# define GIDSET_T gid_t +# define USE_SA_SIGACTION 1 /* use sa_sigaction field */ +# define BROKEN_PTHREAD_SLEEP 1 /* sleep after pthread_create() fails */ +# define HASSTRERROR 1 /* has strerror(3) */ +# ifndef _PATH_UNIX +# define _PATH_UNIX "/dev/ksyms" +# endif /* ! _PATH_UNIX */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/etc/mail/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# ifndef _PATH_HOSTS +# define _PATH_HOSTS "/etc/inet/hosts" +# endif /* ! _PATH_HOSTS */ +# ifndef SYSLOG_BUFSIZE +# define SYSLOG_BUFSIZE 1024 /* allow full size syslog buffer */ +# endif /* ! SYSLOG_BUFSIZE */ +# ifndef TZ_TYPE +# define TZ_TYPE TZ_TZNAME +# endif /* ! TZ_TYPE */ +# if SOLARIS >= 20300 || (SOLARIS < 10000 && SOLARIS >= 203) +# define USESETEUID 1 /* seteuid works as of 2.3 */ +# define LDA_CONTENTLENGTH 1 /* Needs the Content-Length header */ +# endif /* SOLARIS >= 20300 || (SOLARIS < 10000 && SOLARIS >= 203) */ +# if SOLARIS >= 20500 || (SOLARIS < 10000 && SOLARIS >= 205) +# define HASSETREUID 1 /* setreuid works as of 2.5 */ +# if SOLARIS < 207 || (SOLARIS > 10000 && SOLARIS < 20700) +# ifndef LA_TYPE +# define LA_TYPE LA_KSTAT /* use kstat(3k) -- may work in < 2.5 */ +# endif /* ! LA_TYPE */ +# ifndef RANDOMSHIFT /* random() doesn't work well (sometimes) */ +# define RANDOMSHIFT 8 +# endif /* ! RANDOMSHIFT */ +# endif /* SOLARIS < 207 || (SOLARIS > 10000 && SOLARIS < 20700) */ +# else /* SOLARIS >= 20500 || (SOLARIS < 10000 && SOLARIS >= 205) */ +# ifndef HASRANDOM +# define HASRANDOM 0 /* doesn't have random(3) */ +# endif /* ! HASRANDOM */ +# endif /* SOLARIS >= 20500 || (SOLARIS < 10000 && SOLARIS >= 205) */ +# if (SOLARIS > 10000 && SOLARIS < 20600) || SOLARIS < 206 +# define SM_INT32 int /* 32bit integer */ +# endif /* (SOLARIS > 10000 && SOLARIS < 20600) || SOLARIS < 206 */ +# if SOLARIS >= 20700 || (SOLARIS < 10000 && SOLARIS >= 207) +# ifndef LA_TYPE +# include <sys/loadavg.h> +# if SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209) +# include <sys/pset.h> +# define LA_TYPE LA_PSET /* pset_getloadavg(3c) appears in 2.9 */ +# else /* SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209) */ +# define LA_TYPE LA_SUBR /* getloadavg(3c) appears in 2.7 */ +# endif /* SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209) */ +# endif /* ! LA_TYPE */ +# define HASGETUSERSHELL 1 /* getusershell(3c) bug fixed in 2.7 */ +# endif /* SOLARIS >= 20700 || (SOLARIS < 10000 && SOLARIS >= 207) */ +# if SOLARIS >= 20800 || (SOLARIS < 10000 && SOLARIS >= 208) +# undef _PATH_SENDMAILPID /* tmpfs /var/run added in 2.8 */ +# define _PATH_SENDMAILPID "/var/run/sendmail.pid" +# define SMRSH_CMDDIR "/var/adm/sm.bin" +# define SL_FUDGE 34 /* fudge offset for SyslogPrefixLen */ +# endif /* SOLARIS >= 20800 || (SOLARIS < 10000 && SOLARIS >= 208) */ +# if SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209) +# define HASURANDOMDEV 1 /* /dev/[u]random added in S9 */ +# endif /* SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209) */ +# ifndef HASGETUSERSHELL +# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps pre-2.7 */ +# endif /* ! HASGETUSERSHELL */ + +# else /* SOLARIS */ + /* SunOS 4.0.3 or 4.1.x */ +# define HASGETUSERSHELL 1 /* DOES have getusershell(3) call in libc */ +# define HASSETREUID 1 /* has setreuid(2) call */ +# ifndef HASFLOCK +# define HASFLOCK 1 /* has flock(2) call */ +# endif /* ! HASFLOCK */ +# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */ +# define TZ_TYPE TZ_TM_ZONE /* use tm->tm_zone */ +# include <memory.h> +# include <vfork.h> +# ifdef __GNUC__ +# define strtoul strtol /* gcc library bogosity */ +# endif /* __GNUC__ */ +# define memmove(d, s, l) (bcopy((s), (d), (l))) +# define atexit(f) on_exit((f), 0) /* ugly hack for SunOS */ +# define SM_INT32 int /* 32bit integer */ +# define SM_ALIGN_SIZE (sizeof(long)) +# define GIDSET_T int +# define SM_CONF_SYSLOG 0 + +# ifdef SUNOS403 + /* special tweaking for SunOS 4.0.3 */ +# include <malloc.h> +# define BSD4_3 1 /* 4.3 BSD-based */ +# define NEEDSTRSTR 1 /* need emulation of strstr(3) routine */ +# define WAITUNION 1 /* use "union wait" as wait argument type */ +# undef WIFEXITED +# undef WEXITSTATUS +# undef HASUNAME +# define setpgid setpgrp +# define MODE_T int +typedef int pid_t; +extern char *getenv(); + +# else /* SUNOS403 */ + /* 4.1.x specifics */ +# define HASSETSID 1 /* has Posix setsid(2) call */ +# define HASSETVBUF 1 /* we have setvbuf(3) in libc */ + +# endif /* SUNOS403 */ +# endif /* SOLARIS */ + +# ifndef LA_TYPE +# define LA_TYPE LA_INT +# endif /* ! LA_TYPE */ + +# endif /* defined(sun) && !defined(BSD) */ + +/* +** DG/UX +** +** Tested on 5.4.2 and 5.4.3. Use DGUX_5_4_2 to get the +** older support. +** 5.4.3 changes from Mark T. Robinson <mtr@ornl.gov>. +*/ + +# ifdef DGUX_5_4_2 +# define DGUX 1 +# endif /* DGUX_5_4_2 */ + +# ifdef DGUX +# define SYSTEM5 1 +# define LA_TYPE LA_DGUX +# define HASSETREUID 1 /* has setreuid(2) call */ +# define HASUNAME 1 /* use System V uname(2) system call */ +# define HASSETSID 1 /* has Posix setsid(2) call */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define IP_SRCROUTE 0 /* does not have <netinet/ip_var.h> */ +# define HASGETUSERSHELL 0 /* does not have getusershell(3) */ +# ifndef IDENTPROTO +# define IDENTPROTO 0 /* TCP/IP implementation is broken */ +# endif /* ! IDENTPROTO */ +# define SPT_TYPE SPT_NONE /* don't use setproctitle */ +# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */ +# define LDA_USE_LOCKF 1 + +/* these include files must be included early on DG/UX */ +# include <netinet/in.h> +# include <arpa/inet.h> + +/* compiler doesn't understand const? */ +# define const + +# ifdef DGUX_5_4_2 +# define inet_addr dgux_inet_addr +extern long dgux_inet_addr(); +# endif /* DGUX_5_4_2 */ +# endif /* DGUX */ + + +/* +** Digital Ultrix 4.2 - 4.5 +** +** Apparently, fcntl locking is broken on 4.2A, in that locks are +** not dropped when the process exits. This causes major problems, +** so flock is the only alternative. +*/ + +# ifdef ultrix +# define HASSETREUID 1 /* has setreuid(2) call */ +# define HASUNSETENV 1 /* has unsetenv(3) call */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASUNAME 1 /* use System V uname(2) system call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define HASFCHOWN 1 /* has fchown(2) syscall */ +# ifndef HASFLOCK +# define HASFLOCK 1 /* has flock(2) call */ +# endif /* ! HASFLOCK */ +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# ifndef BROKEN_RES_SEARCH +# define BROKEN_RES_SEARCH 1 /* res_search(unknown) returns h_errno=0 */ +# endif /* ! BROKEN_RES_SEARCH */ +# if !defined(NEEDLOCAL_HOSTNAME_LENGTH) && NAMED_BIND && __RES >= 19931104 && __RES < 19950621 +# define NEEDLOCAL_HOSTNAME_LENGTH 1 /* see sendmail/README */ +# endif /* !defined(NEEDLOCAL_HOSTNAME_LENGTH) && NAMED_BIND && __RES >= 19931104 && __RES < 19950621 */ +# ifdef vax +# define LA_TYPE LA_FLOAT +# else /* vax */ +# define LA_TYPE LA_INT +# define LA_AVENRUN "avenrun" +# endif /* vax */ +# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */ +# ifndef IDENTPROTO +# define IDENTPROTO 0 /* pre-4.4 TCP/IP implementation is broken */ +# endif /* ! IDENTPROTO */ +# define SYSLOG_BUFSIZE 256 +# define SM_CONF_SYSLOG 0 +# endif /* ultrix */ + + +/* +** OSF/1 for KSR. +** +** Contributed by Todd C. Miller <Todd.Miller@cs.colorado.edu> +*/ + +# ifdef __ksr__ +# define __osf__ 1 /* get OSF/1 defines below */ +# ifndef TZ_TYPE +# define TZ_TYPE TZ_TZNAME /* use tzname[] vector */ +# endif /* ! TZ_TYPE */ +# endif /* __ksr__ */ + + +/* +** OSF/1 for Intel Paragon. +** +** Contributed by Jeff A. Earickson <jeff@ssd.intel.com> +** of Intel Scalable Systems Divison. +*/ + +# ifdef __PARAGON__ +# define __osf__ 1 /* get OSF/1 defines below */ +# ifndef TZ_TYPE +# define TZ_TYPE TZ_TZNAME /* use tzname[] vector */ +# endif /* ! TZ_TYPE */ +# define GIDSET_T gid_t +# define MAXNAMLEN NAME_MAX +# endif /* __PARAGON__ */ + + +/* +** Tru64 UNIX, formerly known as Digital UNIX, formerly known as DEC OSF/1 +** +** Tested for 3.2 and 4.0. +*/ + +# ifdef __osf__ +# define HASUNAME 1 /* has uname(2) call */ +# define HASUNSETENV 1 /* has unsetenv(3) call */ +# define USESETEUID 1 /* has usable seteuid(2) call */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define HASFCHOWN 1 /* has fchown(2) syscall */ +# define HASSETLOGIN 1 /* has setlogin(2) */ +# define IP_SRCROUTE 1 /* can check IP source routing */ +# define HAS_ST_GEN 1 /* has st_gen field in stat struct */ +# define GIDSET_T gid_t +# define SM_INT32 int /* 32bit integer */ +# ifndef HASFLOCK +# define HASFLOCK 1 /* has flock(2) call */ +# endif /* ! HASFLOCK */ +# define LA_TYPE LA_ALPHAOSF +# define SFS_TYPE SFS_STATVFS /* use <sys/statvfs.h> statfs() impl */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/var/adm/sendmail/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/var/run/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# endif /* __osf__ */ + + +/* +** NeXTstep +*/ + +# ifdef NeXT +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define NEEDPUTENV 2 /* need putenv(3) call; no setenv(3) call */ +# ifndef HASFLOCK +# define HASFLOCK 1 /* has flock(2) call */ +# endif /* ! HASFLOCK */ +# define UID_T int /* compiler gripes on uid_t */ +# define GID_T int /* ditto for gid_t */ +# define MODE_T int /* and mode_t */ +# define setpgid setpgrp +# ifndef NOT_SENDMAIL +# define sleep sleepX +# endif /* ! NOT_SENDMAIL */ +# ifndef LA_TYPE +# define LA_TYPE LA_MACH +# endif /* ! LA_TYPE */ +# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */ +# ifdef _POSIX_SOURCE +extern struct passwd *getpwent(); +# else /* _POSIX_SOURCE */ +# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */ +# define WAITUNION 1 /* use "union wait" as wait argument type */ +typedef int pid_t; +# undef WEXITSTATUS +# undef WIFEXITED +# undef WIFSTOPPED +# undef WTERMSIG +# endif /* _POSIX_SOURCE */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/etc/sendmail/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/etc/sendmail/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# define SM_INT32 int /* 32bit integer */ + +# ifdef TCPWRAPPERS +# ifndef HASUNSETENV +# define HASUNSETENV 1 +# endif /* ! HASUNSETENV */ +# undef NEEDPUTENV +# endif /* TCPWRAPPERS */ +# ifndef __APPLE__ +# include <libc.h> +# ifndef S_IRUSR +# define S_IRUSR S_IREAD +# endif /* ! S_IRUSR */ +# ifndef S_IWUSR +# define S_IWUSR S_IWRITE +# endif /* ! S_IWUSR */ +# define _PATH_MAILDIR "/usr/spool/mail" +# endif /* ! __APPLE__ */ +# ifndef isascii +# define isascii(c) ((unsigned)(c) <= 0177) +# endif /* ! isascii */ +# endif /* NeXT */ + +/* +** Apple Rhapsody +** Contributed by Wilfredo Sanchez <wsanchez@apple.com> +** +** Also used for Apple Darwin support. +*/ + +# if defined(DARWIN) +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define HASFLOCK 1 /* has flock(2) syscall */ +# define HASUNAME 1 /* has uname(2) syscall */ +# define HASUNSETENV 1 +# define HASSETSID 1 /* has the setsid(2) POSIX syscall */ +# define HASINITGROUPS 1 +# define HASSETVBUF 1 +# define HASSETREUID 1 +# define USESETEUID 1 /* has usable seteuid(2) call */ +# define HASLSTAT 1 +# define HASSETRLIMIT 1 +# define HASWAITPID 1 +# define HASSTRERROR 1 /* has strerror(3) */ +# define HASGETDTABLESIZE 1 +# define HASGETUSERSHELL 1 +# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */ +# define BSD4_4_SOCKADDR /* has sa_len */ +# define NETLINK 1 /* supports AF_LINK */ +# define HAS_ST_GEN 1 /* has st_gen field in stat struct */ +# define GIDSET_T gid_t +# define LA_TYPE LA_SUBR /* use getloadavg(3) */ +# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */ +# define SPT_TYPE SPT_PSSTRINGS +# define SPT_PADCHAR '\0' /* pad process title with nulls */ +# define ERRLIST_PREDEFINED /* don't declare sys_errlist */ +# endif /* defined(DARWIN) */ + + +/* +** 4.4 BSD +** +** See also BSD defines. +*/ + +# if defined(BSD4_4) && !defined(__bsdi__) && !defined(__GNU__) +# include <paths.h> +# define HASUNSETENV 1 /* has unsetenv(3) call */ +# define USESETEUID 1 /* has usable seteuid(2) call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define HASFCHOWN 1 /* has fchown(2) syscall */ +# define HASSTRERROR 1 /* has strerror(3) */ +# define HAS_ST_GEN 1 /* has st_gen field in stat struct */ +# include <sys/cdefs.h> +# define ERRLIST_PREDEFINED /* don't declare sys_errlist */ +# define BSD4_4_SOCKADDR /* has sa_len */ +# define NEED_PRINTF_PERCENTQ 1 /* doesn't have %lld */ +# define NETLINK 1 /* supports AF_LINK */ +# ifndef LA_TYPE +# define LA_TYPE LA_SUBR +# endif /* ! LA_TYPE */ +# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */ +# define SPT_TYPE SPT_PSSTRINGS /* use PS_STRINGS pointer */ +# endif /* defined(BSD4_4) && !defined(__bsdi__) && !defined(__GNU__) */ + + +/* +** BSD/OS (was BSD/386) (all versions) +** From Tony Sanders, BSDI +*/ + +# ifdef __bsdi__ +# include <paths.h> +# define HASUNSETENV 1 /* has the unsetenv(3) call */ +# define HASSETREUID 0 /* BSD-OS has broken setreuid(2) emulation */ +# define HASSETSID 1 /* has the setsid(2) POSIX syscall */ +# define USESETEUID 1 /* has usable seteuid(2) call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define HASSETLOGIN 1 /* has setlogin(2) */ +# define HASUNAME 1 /* has uname(2) syscall */ +# define HASSTRERROR 1 /* has strerror(3) */ +# define HAS_ST_GEN 1 /* has st_gen field in stat struct */ +# include <sys/cdefs.h> +# define ERRLIST_PREDEFINED /* don't declare sys_errlist */ +# define BSD4_4_SOCKADDR /* has sa_len */ +# define NETLINK 1 /* supports AF_LINK */ +# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */ +# ifndef LA_TYPE +# define LA_TYPE LA_SUBR +# endif /* ! LA_TYPE */ +# define GIDSET_T gid_t +# define QUAD_T quad_t +# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199312 + /* version 1.1 or later */ +# undef SPT_TYPE +# define SPT_TYPE SPT_BUILTIN /* setproctitle is in libc */ +# else /* defined(_BSDI_VERSION) && _BSDI_VERSION >= 199312 */ + /* version 1.0 or earlier */ +# define SPT_PADCHAR '\0' /* pad process title with nulls */ +# endif /* defined(_BSDI_VERSION) && _BSDI_VERSION >= 199312 */ +# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199701 /* on 3.x */ +# define HASSETUSERCONTEXT 1 /* has setusercontext */ +# endif /* defined(_BSDI_VERSION) && _BSDI_VERSION >= 199701 */ +# if defined(_BSDI_VERSION) && _BSDI_VERSION <= 199701 /* 3.1 and earlier */ +# define MODE_T int /* va_arg() can't handle less than int */ +# endif /* defined(_BSDI_VERSION) && _BSDI_VERSION <= 199701 */ +# if defined(_BSDI_VERSION) && _BSDI_VERSION >= 199910 /* on 4.x */ +# define HASURANDOMDEV 1 /* has /dev/urandom(4) */ +# endif /* defined(_BSDI_VERSION) && _BSDI_VERSION >= 199910 */ +# endif /* __bsdi__ */ + + +/* +** QNX 4.2x +** Contributed by Glen McCready <glen@qnx.com>. +** +** Should work with all versions of QNX. +*/ + +# if defined(__QNX__) +# include <unix.h> +# include <sys/select.h> +# undef NGROUPS_MAX +# define HASSETSID 1 /* has the setsid(2) POSIX syscall */ +# define USESETEUID 1 /* has usable seteuid(2) call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define HASGETDTABLESIZE 1 /* has getdtablesize(2) call */ +# define HASSETREUID 1 /* has setreuid(2) call */ +# define HASSTRERROR 1 /* has strerror(3) */ +# define HASFLOCK 0 +# undef HASINITGROUPS /* has initgroups(3) call */ +# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */ +# define IP_SRCROUTE 1 /* can check IP source routing */ +# define TZ_TYPE TZ_TMNAME /* use tmname variable */ +# define GIDSET_T gid_t +# define LA_TYPE LA_ZERO +# define SFS_TYPE SFS_NONE +# define SPT_TYPE SPT_REUSEARGV +# define SPT_PADCHAR '\0' /* pad process title with nulls */ +# define HASGETUSERSHELL 0 +# define E_PSEUDOBASE 512 +# define _FILE_H_INCLUDED +# endif /* defined(__QNX__) */ + + +/* +** FreeBSD / NetBSD / OpenBSD (all architectures, all versions) +** +** 4.3BSD clone, closer to 4.4BSD for FreeBSD 1.x and NetBSD 0.9x +** 4.4BSD-Lite based for FreeBSD 2.x and NetBSD 1.x +** +** See also BSD defines. +*/ + +# if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) +# include <paths.h> +# define HASUNSETENV 1 /* has unsetenv(3) call */ +# define HASSETSID 1 /* has the setsid(2) POSIX syscall */ +# define USESETEUID 1 /* has usable seteuid(2) call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define HASFCHOWN 1 /* fchown(2) */ +# define HASUNAME 1 /* has uname(2) syscall */ +# define HASSTRERROR 1 /* has strerror(3) */ +# define HAS_ST_GEN 1 /* has st_gen field in stat struct */ +# define NEED_PRINTF_PERCENTQ 1 /* doesn't have %lld */ +# include <sys/cdefs.h> +# define ERRLIST_PREDEFINED /* don't declare sys_errlist */ +# define BSD4_4_SOCKADDR /* has sa_len */ +# define NETLINK 1 /* supports AF_LINK */ +# define SAFENFSPATHCONF 1 /* pathconf(2) pessimizes on NFS filesystems */ +# define GIDSET_T gid_t +# define QUAD_T unsigned long long +# ifndef LA_TYPE +# define LA_TYPE LA_SUBR +# endif /* ! LA_TYPE */ +# define SFS_TYPE SFS_MOUNT /* use <sys/mount.h> statfs() impl */ +# if defined(__NetBSD__) && (NetBSD > 199307 || NetBSD0_9 > 1) +# undef SPT_TYPE +# define SPT_TYPE SPT_BUILTIN /* setproctitle is in libc */ +# endif /* defined(__NetBSD__) && (NetBSD > 199307 || NetBSD0_9 > 1) */ +# if defined(__NetBSD__) && ((__NetBSD_Version__ > 102070000) || (NetBSD1_2 > 8) || defined(NetBSD1_4) || defined(NetBSD1_3)) +# define HASURANDOMDEV 1 /* has /dev/urandom(4) */ +# endif /* defined(__NetBSD__) && ((__NetBSD_Version__ > 102070000) || (NetBSD1_2 > 8) || defined(NetBSD1_4) || defined(NetBSD1_3)) */ +# if defined(__FreeBSD__) +# define HASSETLOGIN 1 /* has setlogin(2) */ +# if __FreeBSD_version >= 227001 +# define HASSRANDOMDEV 1 /* has srandomdev(3) */ +# define HASURANDOMDEV 1 /* has /dev/urandom(4) */ +# endif /* __FreeBSD_version >= 227001 */ +# undef SPT_TYPE +# if __FreeBSD__ >= 2 +# include <osreldate.h> +# if __FreeBSD_version >= 199512 /* 2.2-current when it appeared */ +# include <libutil.h> +# define SPT_TYPE SPT_BUILTIN +# endif /* __FreeBSD_version >= 199512 */ +# if __FreeBSD_version >= 222000 /* 2.2.2-release and later */ +# define HASSETUSERCONTEXT 1 /* BSDI-style login classes */ +# endif /* __FreeBSD_version >= 222000 */ +# if __FreeBSD_version >= 330000 /* 3.3.0-release and later */ +# define SMRSH_CMDDIR "/usr/libexec/sm.bin" +# define SMRSH_PATH "/bin:/usr/bin" +# endif /* __FreeBSD_version >= 330000 */ +# define USESYSCTL 1 /* use sysctl(3) for getting ncpus */ +# include <sys/sysctl.h> +# endif /* __FreeBSD__ >= 2 */ +# ifndef SPT_TYPE +# define SPT_TYPE SPT_REUSEARGV +# define SPT_PADCHAR '\0' /* pad process title with nulls */ +# endif /* ! SPT_TYPE */ +# endif /* defined(__FreeBSD__) */ +# if defined(__OpenBSD__) +# undef SPT_TYPE +# define SPT_TYPE SPT_BUILTIN /* setproctitle is in libc */ +# define HASSETLOGIN 1 /* has setlogin(2) */ +# define HASSETREUID 0 /* OpenBSD has broken setreuid(2) emulation */ +# define HASURANDOMDEV 1 /* has /dev/urandom(4) */ +# if OpenBSD >= 200006 +# define HASSRANDOMDEV 1 /* has srandomdev(3) */ +# endif /* OpenBSD >= 200006 */ +# if OpenBSD >= 200012 +# define HASSETUSERCONTEXT 1 /* BSDI-style login classes */ +# endif /* OpenBSD >= 200012 */ +# endif /* defined(__OpenBSD__) */ +# endif /* defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) */ + + +/* +** Mach386 +** +** For mt Xinu's Mach386 system. +*/ + +# if defined(MACH) && defined(i386) && !defined(__GNU__) +# define MACH386 1 +# define HASUNSETENV 1 /* has unsetenv(3) call */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# ifndef HASFLOCK +# define HASFLOCK 1 /* has flock(2) call */ +# endif /* ! HASFLOCK */ +# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */ +# define NEEDSTRTOL 1 /* need the strtol() function */ +# define setpgid setpgrp +# ifndef LA_TYPE +# define LA_TYPE LA_FLOAT +# endif /* ! LA_TYPE */ +# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */ +# undef HASSETVBUF /* don't actually have setvbuf(3) */ +# undef WEXITSTATUS +# undef WIFEXITED +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/etc/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# endif /* defined(MACH) && defined(i386) && !defined(__GNU__) */ + + + +/* +** GNU OS (hurd) +** Largely BSD & posix compatible. +** Port contributed by Miles Bader <miles@gnu.ai.mit.edu>. +** Updated by Mark Kettenis <kettenis@wins.uva.nl>. +*/ + +# if defined(__GNU__) && !defined(NeXT) +# include <paths.h> +# define HASFCHMOD 1 /* has fchmod(2) call */ +# define HASFCHOWN 1 /* has fchown(2) call */ +# define HASUNAME 1 /* has uname(2) call */ +# define HASUNSETENV 1 /* has unsetenv(3) call */ +# define HAS_ST_GEN 1 /* has st_gen field in stat struct */ +# define HASSTRERROR 1 /* has strerror(3) */ +# define GIDSET_T gid_t +# define SOCKADDR_LEN_T socklen_t +# define SOCKOPT_LEN_T socklen_t +# if (__GLIBC__ == 2 && __GLIBC_MINOR__ > 1) || __GLIBC__ > 2 +# define LA_TYPE LA_SUBR +# else /* (__GLIBC__ == 2 && __GLIBC_MINOR__ > 1) || __GLIBC__ > 2 */ +# define LA_TYPE LA_MACH + /* GNU uses mach[34], which renames some rpcs from mach2.x. */ +# define host_self mach_host_self +# endif /* (__GLIBC__ == 2 && __GLIBC_MINOR__ > 1) || __GLIBC__ > 2 */ +# define SFS_TYPE SFS_STATFS +# define SPT_TYPE SPT_CHANGEARGV +# define ERRLIST_PREDEFINED 1 /* don't declare sys_errlist */ +# define BSD4_4_SOCKADDR 1 /* has sa_len */ +# define SIOCGIFCONF_IS_BROKEN 1 /* SIOCGFCONF doesn't work */ +# define HAS_IN_H 1 /* GNU has netinet/in.h. */ +/* GNU has no MAXPATHLEN; ideally the code should be changed to not use it. */ +# define MAXPATHLEN 2048 +# endif /* defined(__GNU__) && !defined(NeXT) */ + +/* +** 4.3 BSD -- this is for very old systems +** +** Should work for mt Xinu MORE/BSD and Mips UMIPS-BSD 2.1. +** +** You'll also have to install a new resolver library. +** I don't guarantee that support for this environment is complete. +*/ + +# if defined(oldBSD43) || defined(MORE_BSD) || defined(umipsbsd) +# define NEEDVPRINTF 1 /* need a replacement for vprintf(3) */ +# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */ +# define ARBPTR_T char * +# define setpgid setpgrp +# ifndef LA_TYPE +# define LA_TYPE LA_FLOAT +# endif /* ! LA_TYPE */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef IDENTPROTO +# define IDENTPROTO 0 /* TCP/IP implementation is broken */ +# endif /* ! IDENTPROTO */ +# undef WEXITSTATUS +# undef WIFEXITED +typedef short pid_t; +# endif /* defined(oldBSD43) || defined(MORE_BSD) || defined(umipsbsd) */ + + +/* +** SCO Unix +** +** This includes three parts: +** +** The first is for SCO OpenServer 5. +** (Contributed by Keith Reynolds <keithr@sco.COM>). +** +** SCO OpenServer 5 has a compiler version number macro, +** which we can use to figure out what version we're on. +** This may have to change in future releases. +** +** The second is for SCO UNIX 3.2v4.2/Open Desktop 3.0. +** (Contributed by Philippe Brand <phb@colombo.telesys-innov.fr>). +** +** The third is for SCO UNIX 3.2v4.0/Open Desktop 2.0 and earlier. +*/ + +/* SCO OpenServer 5 */ +# if _SCO_DS >= 1 +# include <paths.h> +# define SIOCGIFNUM_IS_BROKEN 1 /* SIOCGIFNUM returns bogus value */ +# define HASFCHMOD 1 /* has fchmod(2) call */ +# define HASFCHOWN 1 /* has fchown(2) call */ +# define HASSETRLIMIT 1 /* has setrlimit(2) call */ +# define USESETEUID 1 /* has seteuid(2) call */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASGETDTABLESIZE 1 /* has getdtablesize(2) call */ +# define RLIMIT_NEEDS_SYS_TIME_H 1 +# define LDA_USE_LOCKF 1 +# ifndef LA_TYPE +# define LA_TYPE LA_DEVSHORT +# endif /* ! LA_TYPE */ +# define _PATH_AVENRUN "/dev/table/avenrun" +# ifndef _SCO_unix_4_2 +# define _SCO_unix_4_2 +# else /* ! _SCO_unix_4_2 */ +# define SOCKADDR_LEN_T size_t /* e.g., arg#3 to accept, getsockname */ +# define SOCKOPT_LEN_T size_t /* arg#5 to getsockopt */ +# endif /* ! _SCO_unix_4_2 */ +# endif /* _SCO_DS >= 1 */ + +/* SCO UNIX 3.2v4.2/Open Desktop 3.0 */ +# ifdef _SCO_unix_4_2 +# define _SCO_unix_ +# define HASSETREUID 1 /* has setreuid(2) call */ +# endif /* _SCO_unix_4_2 */ + +/* SCO UNIX 3.2v4.0 Open Desktop 2.0 and earlier */ +# ifdef _SCO_unix_ +# include <sys/stream.h> /* needed for IP_SRCROUTE */ +# define SYSTEM5 1 /* include all the System V defines */ +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# define NOFTRUNCATE 0 /* has (simulated) ftruncate call */ +# ifndef USE_SIGLONGJMP +# define USE_SIGLONGJMP 1 /* sigsetjmp needed for signal handling */ +# endif /* ! USE_SIGLONGJMP */ +# define MAXPATHLEN PATHSIZE +# define SFS_TYPE SFS_4ARGS /* use <sys/statfs.h> 4-arg impl */ +# define SFS_BAVAIL f_bfree /* alternate field name */ +# define SPT_TYPE SPT_SCO /* write kernel u. area */ +# define TZ_TYPE TZ_TM_NAME /* use tm->tm_name */ +# define UID_T uid_t +# define GID_T gid_t +# define GIDSET_T gid_t +# define _PATH_UNIX "/unix" +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/etc/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ + +/* stuff fixed in later releases */ +# ifndef _SCO_unix_4_2 +# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */ +# endif /* ! _SCO_unix_4_2 */ + +# ifndef _SCO_DS +# define ftruncate chsize /* use chsize(2) to emulate ftruncate */ +# define NEEDFSYNC 1 /* needs the fsync(2) call stub */ +# define NETUNIX 0 /* no unix domain socket support */ +# define LA_TYPE LA_SHORT +# endif /* ! _SCO_DS */ + +# endif /* _SCO_unix_ */ + +/* +** ISC (SunSoft) Unix. +** +** Contributed by J.J. Bailey <jjb@jagware.bcc.com> +*/ + +# ifdef ISC_UNIX +# include <net/errno.h> +# include <sys/stream.h> /* needed for IP_SRCROUTE */ +# include <sys/bsdtypes.h> +# define SYSTEM5 1 /* include all the System V defines */ +# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */ +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# define HASSETREUID 1 /* has setreuid(2) call */ +# define NEEDFSYNC 1 /* needs the fsync(2) call stub */ +# define NETUNIX 0 /* no unix domain socket support */ +# define MAXPATHLEN 1024 +# define LA_TYPE LA_SHORT +# define SFS_TYPE SFS_STATFS /* use <sys/statfs.h> statfs() impl */ +# define SFS_BAVAIL f_bfree /* alternate field name */ +# define _PATH_UNIX "/unix" +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/etc/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# endif /* ISC_UNIX */ + + +/* +** Altos System V (5.3.1) +** Contributed by Tim Rice <tim@trr.metro.net>. +*/ + +# ifdef ALTOS_SYSTEM_V +# include <sys/stream.h> +# include <limits.h> +# define SYSTEM5 1 /* include all the System V defines */ +# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */ +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# define WAITUNION 1 /* use "union wait" as wait argument type */ +# define NEEDFSYNC 1 /* no fsync(2) in system library */ +# define NEEDSTRSTR 1 /* need emulation of the strstr(3) call */ +# define NOFTRUNCATE 1 /* do not have ftruncate(2) */ +# define MAXPATHLEN PATH_MAX +# define LA_TYPE LA_SHORT +# define SFS_TYPE SFS_STATFS /* use <sys/statfs.h> statfs() impl */ +# define SFS_BAVAIL f_bfree /* alternate field name */ +# define TZ_TYPE TZ_TZNAME /* use tzname[] vector */ +# define NETUNIX 0 /* no unix domain socket support */ +# undef WIFEXITED +# undef WEXITSTATUS +# define strtoul strtol /* gcc library bogosity */ + +typedef unsigned short uid_t; +typedef unsigned short gid_t; +typedef short pid_t; +typedef unsigned long mode_t; + +/* some stuff that should have been in the include files */ +extern char *malloc(); +extern struct passwd *getpwent(); +extern struct passwd *getpwnam(); +extern struct passwd *getpwuid(); +extern char *getenv(); +extern struct group *getgrgid(); +extern struct group *getgrnam(); + +# endif /* ALTOS_SYSTEM_V */ + + +/* +** ConvexOS 11.0 and later +** +** "Todd C. Miller" <millert@mroe.cs.colorado.edu> claims this +** works on 9.1 as well. +** +** ConvexOS 11.5 and later, should work on 11.0 as defined. +** For pre-ConvexOOS 11.0, define SM_CONF_GETOPT=0, undef IDENTPROTO +** +** Eric Schnoebelen (eric@cirr.com) For CONVEX Computer Corp. +** (now the CONVEX Technologies Center of Hewlett Packard) +*/ + +# ifdef _CONVEX_SOURCE +# define HASGETDTABLESIZE 1 /* has getdtablesize(2) */ +# define HASINITGROUPS 1 /* has initgroups(3) */ +# define HASUNAME 1 /* use System V uname(2) system call */ +# define HASSETSID 1 /* has POSIX setsid(2) call */ +# define HASUNSETENV 1 /* has unsetenv(3) */ +# define HASFLOCK 1 /* has flock(2) */ +# define HASSETRLIMIT 1 /* has setrlimit(2) */ +# define HASSETREUID 1 /* has setreuid(2) */ +# define BROKEN_RES_SEARCH 1 /* res_search(unknown) returns h_error=0 */ +# define NEEDPUTENV 1 /* needs putenv (written in terms of setenv) */ +# define SM_CONF_GETOPT 1 /* need a replacement for getopt(3) */ +# define IP_SRCROUTE 0 /* Something is broken with getsockopt() */ +# define LA_TYPE LA_FLOAT +# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef S_IREAD +# define S_IREAD _S_IREAD +# define S_IWRITE _S_IWRITE +# define S_IEXEC _S_IEXEC +# define S_IFMT _S_IFMT +# define S_IFCHR _S_IFCHR +# define S_IFBLK _S_IFBLK +# endif /* ! S_IREAD */ +# ifndef TZ_TYPE +# define TZ_TYPE TZ_TIMEZONE +# endif /* ! TZ_TYPE */ +# ifndef IDENTPROTO +# define IDENTPROTO 1 +# endif /* ! IDENTPROTO */ +# ifndef SHARE_V1 +# define SHARE_V1 1 /* version 1 of the fair share scheduler */ +# endif /* ! SHARE_V1 */ +# if !defined(__GNUC__ ) +# define UID_T int /* GNUC gets it right, ConvexC botches */ +# define GID_T int /* GNUC gets it right, ConvexC botches */ +# endif /* !defined(__GNUC__ ) */ +# if SECUREWARE +# define FORK fork /* SecureWare wants the real fork! */ +# else /* SECUREWARE */ +# define FORK vfork /* the rest of the OS versions don't care */ +# endif /* SECUREWARE */ +# endif /* _CONVEX_SOURCE */ + + +/* +** RISC/os 4.52 +** +** Gives a ton of warning messages, but otherwise compiles. +*/ + +# ifdef RISCOS + +# define HASUNSETENV 1 /* has unsetenv(3) call */ +# ifndef HASFLOCK +# define HASFLOCK 1 /* has flock(2) call */ +# endif /* ! HASFLOCK */ +# define WAITUNION 1 /* use "union wait" as wait argument type */ +# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */ +# define NEEDPUTENV 1 /* need putenv(3) call */ +# define NEEDSTRSTR 1 /* need emulation of the strstr(3) call */ +# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */ +# define LA_TYPE LA_INT +# define LA_AVENRUN "avenrun" +# define _PATH_UNIX "/unix" +# undef WIFEXITED + +# define setpgid setpgrp + +typedef int pid_t; +# define SIGFUNC_DEFINED +# define SIGFUNC_RETURN (0) +# define SIGFUNC_DECL int +typedef int (*sigfunc_t)(); +extern char *getenv(); +extern void *malloc(); + +/* added for RISC/os 4.01...which is dumber than 4.50 */ +# ifdef RISCOS_4_0 +# ifndef ARBPTR_T +# define ARBPTR_T char * +# endif /* ! ARBPTR_T */ +# undef HASFLOCK +# define HASFLOCK 0 +# endif /* RISCOS_4_0 */ + +# include <sys/time.h> + +# endif /* RISCOS */ + + +/* +** Linux 0.99pl10 and above... +** +** Thanks to, in reverse order of contact: +** +** John Kennedy <warlock@csuchico.edu> +** Andrew Pam <avatar@aus.xanadu.com> +** Florian La Roche <rzsfl@rz.uni-sb.de> +** Karl London <karl@borg.demon.co.uk> +** +** Last compiled against: [07/21/98 @ 11:47:34 AM (Tuesday)] +** sendmail 8.9.1 bind-8.1.2 db-2.4.14 +** gcc-2.8.1 glibc-2.0.94 linux-2.1.109 +** +** NOTE: Override HASFLOCK as you will but, as of 1.99.6, mixed-style +** file locking is no longer allowed. In particular, make sure +** your DBM library and sendmail are both using either flock(2) +** *or* fcntl(2) file locking, but not both. +*/ + +# ifdef __linux__ +# include <linux/version.h> +# if !defined(KERNEL_VERSION) /* not defined in 2.0.x kernel series */ +# define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) +# endif /* !defined(KERNEL_VERSION) */ +# define BSD 1 /* include BSD defines */ +# ifndef REQUIRES_DIR_FSYNC +# define REQUIRES_DIR_FSYNC 1 /* requires fsync() on directory */ +# endif /* REQUIRES_DIR_FSYNC */ +# ifndef USESETEUID +# define USESETEUID 0 /* has it due to POSIX, but doesn't work */ +# endif /* USESETEUID */ +# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */ +# define HASUNAME 1 /* use System V uname(2) system call */ +# define HASUNSETENV 1 /* has unsetenv(3) call */ +# define ERRLIST_PREDEFINED /* don't declare sys_errlist */ +# define GIDSET_T gid_t /* from <linux/types.h> */ +# ifndef HASGETUSERSHELL +# define HASGETUSERSHELL 0 /* getusershell(3) broken in Slackware 2.0 */ +# endif /* HASGETUSERSHELL */ +# ifndef IP_SRCROUTE +# define IP_SRCROUTE 0 /* linux <= 1.2.8 doesn't support IP_OPTIONS */ +# endif /* ! IP_SRCROUTE */ +# ifndef HAS_IN_H +# define HAS_IN_H 1 /* use netinet/in.h */ +# endif /* ! HAS_IN_H */ +# ifndef USE_SIGLONGJMP +# define USE_SIGLONGJMP 1 /* sigsetjmp needed for signal handling */ +# endif /* ! USE_SIGLONGJMP */ +# ifndef HASFLOCK +# if LINUX_VERSION_CODE < 66399 +# define HASFLOCK 0 /* flock(2) is broken after 0.99.13 */ +# else /* LINUX_VERSION_CODE < 66399 */ +# define HASFLOCK 1 /* flock(2) fixed after 1.3.95 */ +# endif /* LINUX_VERSION_CODE < 66399 */ +# endif /* ! HASFLOCK */ +# ifndef LA_TYPE +# define LA_TYPE LA_PROCSTR +# endif /* ! LA_TYPE */ +# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() impl */ +# define SPT_PADCHAR '\0' /* pad process title with nulls */ +# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0)) +# ifndef HASURANDOMDEV +# define HASURANDOMDEV 1 /* 2.0 (at least) has linux/drivers/char/random.c */ +# endif /* ! HASURANDOMDEV */ +# endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0)) */ +# ifndef TZ_TYPE +# define TZ_TYPE TZ_NONE /* no standard for Linux */ +# endif /* ! TZ_TYPE */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/var/run/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# include <sys/sysmacros.h> +# undef atol /* wounded in <stdlib.h> */ +# if NETINET6 + /* + ** Linux doesn't have a good way to tell userland what interfaces are + ** IPv6-capable. Therefore, the BIND resolver can not determine if there + ** are IPv6 interfaces to honor AI_ADDRCONFIG. Unfortunately, it assumes + ** that none are present. (Excuse the macro name ADDRCONFIG_IS_BROKEN.) + */ +# define ADDRCONFIG_IS_BROKEN 1 + + /* + ** Indirectly included from glibc's <feature.h>. IPv6 support is native + ** in 2.1 and later, but the APIs appear before the functions. + */ +# if defined(__GLIBC__) && defined(__GLIBC_MINOR__) +# define HASSTRERROR 1 /* has strerror(3) */ +# define GLIBC_VERSION ((__GLIBC__ << 8) + __GLIBC_MINOR__) +# if (GLIBC_VERSION >= 0x201) +# undef IPPROTO_ICMPV6 /* linux #defines, glibc enums */ +# else /* (GLIBC_VERSION >= 0x201) */ +# include <linux/in6.h> /* IPv6 support */ +# endif /* (GLIBC_VERSION >= 0x201) */ +# if (GLIBC_VERSION >= 0x201 && !defined(NEEDSGETIPNODE)) + /* Have APIs in <netdb.h>, but no support in glibc */ +# define NEEDSGETIPNODE 1 +# endif /* (GLIBC_VERSION >= 0x201 && !defined(NEEDSGETIPNODE)) */ +# undef GLIBC_VERSION +# endif /* defined(__GLIBC__) && defined(__GLIBC_MINOR__) */ +# endif /* NETINET6 */ +# ifndef HASFCHOWN +# define HASFCHOWN 1 /* fchown(2) */ +# endif /* ! HASFCHOWN */ +# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,36)) && !defined(HASFCHMOD) +# define HASFCHMOD 1 /* fchmod(2) */ +# endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,36)) && !defined(HASFCHMOD) */ +# endif /* __linux__ */ + + +/* +** DELL SVR4 Issue 2.2, and others +** From Kimmo Suominen <kim@grendel.lut.fi> +** +** It's on #ifdef DELL_SVR4 because Solaris also gets __svr4__ +** defined, and the definitions conflict. +** +** Peter Wemm <peter@perth.DIALix.oz.au> claims that the setreuid +** trick works on DELL 2.2 (SVR4.0/386 version 4.0) and ESIX 4.0.3A +** (SVR4.0/386 version 3.0). +*/ + +# ifdef DELL_SVR4 + /* no changes necessary */ + /* see general __svr4__ defines below */ +# endif /* DELL_SVR4 */ + + +/* +** Apple A/UX 3.0 +*/ + +# ifdef _AUX_SOURCE +# include <sys/sysmacros.h> +# define BSD /* has BSD routines */ +# define HASSETRLIMIT 0 /* ... but not setrlimit(2) */ +# define BROKEN_RES_SEARCH 1 /* res_search(unknown) returns h_errno=0 */ +# define BOGUS_O_EXCL 1 /* exclusive open follows symlinks */ +# define HASUNAME 1 /* use System V uname(2) system call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASSETVBUF 1 /* has setvbuf(3) in libc */ +# define HASSTRERROR 1 /* has strerror(3) */ +# define SIGFUNC_DEFINED /* sigfunc_t already defined */ +# define SIGFUNC_RETURN /* POSIX-mode */ +# define SIGFUNC_DECL void /* POSIX-mode */ +# define ERRLIST_PREDEFINED 1 +# ifndef IDENTPROTO +# define IDENTPROTO 0 /* TCP/IP implementation is broken */ +# endif /* ! IDENTPROTO */ +# ifndef LA_TYPE +# define LA_TYPE LA_INT +# define FSHIFT 16 +# endif /* ! LA_TYPE */ +# define LA_AVENRUN "avenrun" +# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */ +# define TZ_TYPE TZ_TZNAME +# ifndef _PATH_UNIX +# define _PATH_UNIX "/unix" /* should be in <paths.h> */ +# endif /* ! _PATH_UNIX */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# undef WIFEXITED +# undef WEXITSTATUS +# endif /* _AUX_SOURCE */ + + +/* +** Encore UMAX V +** +** Not extensively tested. +*/ + +# ifdef UMAXV +# define HASUNAME 1 /* use System V uname(2) system call */ +# define HASSETVBUF 1 /* we have setvbuf(3) in libc */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */ +# define SYS5SETPGRP 1 /* use System V setpgrp(2) syscall */ +# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */ +# define MAXPATHLEN PATH_MAX +extern struct passwd *getpwent(), *getpwnam(), *getpwuid(); +extern struct group *getgrent(), *getgrnam(), *getgrgid(); +# undef WIFEXITED +# undef WEXITSTATUS +# endif /* UMAXV */ + + +/* +** Stardent Titan 3000 running TitanOS 4.2. +** +** Must be compiled in "cc -43" mode. +** +** From Kate Hedstrom <kate@ahab.rutgers.edu>. +** +** Note the tweaking below after the BSD defines are set. +*/ + +# ifdef titan +# define setpgid setpgrp +typedef int pid_t; +# undef WIFEXITED +# undef WEXITSTATUS +# endif /* titan */ + + +/* +** Sequent DYNIX 3.2.0 +** +** From Jim Davis <jdavis@cs.arizona.edu>. +*/ + +# ifdef sequent + +# define BSD 1 +# define HASUNSETENV 1 +# define BSD4_3 1 /* to get signal() in conf.c */ +# define WAITUNION 1 +# define LA_TYPE LA_FLOAT +# ifdef _POSIX_VERSION +# undef _POSIX_VERSION /* set in <unistd.h> */ +# endif /* _POSIX_VERSION */ +# undef HASSETVBUF /* don't actually have setvbuf(3) */ +# define setpgid setpgrp + +/* Have to redefine WIFEXITED to take an int, to work with waitfor() */ +# undef WIFEXITED +# define WIFEXITED(s) (((union wait*)&(s))->w_stopval != WSTOPPED && \ + ((union wait*)&(s))->w_termsig == 0) +# define WEXITSTATUS(s) (((union wait*)&(s))->w_retcode) +typedef int pid_t; +# define isgraph(c) (isprint(c) && (c != ' ')) + +# ifndef IDENTPROTO +# define IDENTPROTO 0 /* TCP/IP implementation is broken */ +# endif /* ! IDENTPROTO */ + +# ifndef _PATH_UNIX +# define _PATH_UNIX "/dynix" +# endif /* ! _PATH_UNIX */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# endif /* sequent */ + + +/* +** Sequent DYNIX/ptx v2.0 (and higher) +** +** For DYNIX/ptx v1.x, undefine HASSETREUID. +** +** From Tim Wright <timw@sequent.com>. +** Update from Jack Woolley <jwoolley@sctcorp.com>, 26 Dec 1995, +** for DYNIX/ptx 4.0.2. +*/ + +# ifdef _SEQUENT_ +# include <sys/stream.h> +# define SYSTEM5 1 /* include all the System V defines */ +# define HASSETSID 1 /* has POSIX setsid(2) call */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASSETREUID 1 /* has setreuid(2) call */ +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# define GIDSET_T gid_t +# define LA_TYPE LA_INT +# define SFS_TYPE SFS_STATFS /* use <sys/statfs.h> statfs() impl */ +# define SPT_TYPE SPT_NONE /* don't use setproctitle */ +# ifndef IDENTPROTO +# define IDENTPROTO 0 /* TCP/IP implementation is broken */ +# endif /* ! IDENTPROTO */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/etc/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# endif /* _SEQUENT_ */ + + +/* +** Cray Unicos +** +** Ported by David L. Kensiski, Sterling Sofware <kensiski@nas.nasa.gov> +*/ + +# ifdef UNICOS +# define SYSTEM5 1 /* include all the System V defines */ +# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */ +# define MAXPATHLEN PATHSIZE +# define LA_TYPE LA_ZERO +# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */ +# define SFS_BAVAIL f_bfree /* alternate field name */ +# endif /* UNICOS */ + + +/* +** Apollo DomainOS +** +** From Todd Martin <tmartint@tus.ssi1.com> & Don Lewis <gdonl@gv.ssi1.com> +** +** 15 Jan 1994; updated 2 Aug 1995 +** +*/ + +# ifdef apollo +# define HASSETREUID 1 /* has setreuid(2) call */ +# define HASINITGROUPS 1 /* has initgroups(2) call */ +# define IP_SRCROUTE 0 /* does not have <netinet/ip_var.h> */ +# define SPT_TYPE SPT_NONE /* don't use setproctitle */ +# define LA_TYPE LA_SUBR /* use getloadavg.c */ +# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */ +# define SFS_BAVAIL f_bfree /* alternate field name */ +# define TZ_TYPE TZ_TZNAME +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/etc/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# undef S_IFSOCK /* S_IFSOCK and S_IFIFO are the same */ +# undef S_IFIFO +# define S_IFIFO 0010000 +# ifndef IDENTPROTO +# define IDENTPROTO 0 /* TCP/IP implementation is broken */ +# endif /* ! IDENTPROTO */ +# define RLIMIT_NEEDS_SYS_TIME_H 1 +# if defined(NGROUPS_MAX) && !NGROUPS_MAX +# undef NGROUPS_MAX +# endif /* defined(NGROUPS_MAX) && !NGROUPS_MAX */ +# endif /* apollo */ + +/* +** System V Rel 5.x (a.k.a Unixware7 w/o BSD-Compatibility Libs ie. native) +** +** Contributed by Paul Gampe <paulg@apnic.net> +*/ + +# ifdef __svr5__ +# include <sys/mkdev.h> +# define __svr4__ +# define SYS5SIGNALS 1 +# define HASFCHOWN 1 /* has fchown(2) call */ +# define HASSETSID 1 +# define HASSETREUID 1 +# define HASWAITPID 1 +# define HASGETDTABLESIZE 1 +# define GIDSET_T gid_t +# define SOCKADDR_LEN_T size_t +# define SOCKOPT_LEN_T size_t +# ifndef _PATH_UNIX +# define _PATH_UNIX "/stand/unix" +# endif /* ! _PATH_UNIX */ +# define SPT_PADCHAR '\0' /* pad process title with nulls */ +# ifndef SYSLOG_BUFSIZE +# define SYSLOG_BUFSIZE 1024 /* unsure */ +# endif /* ! SYSLOG_BUFSIZE */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/etc/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/etc/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# undef offsetof /* avoid stddefs.h, sys/sysmacros.h conflict */ +#if !defined(SM_SET_H_ERRNO) && defined(_REENTRANT) +# define SM_SET_H_ERRNO(err) set_h_errno((err)) +#endif /* ! SM_SET_H_ERRNO && _REENTRANT */ +# endif /* __svr5__ */ + +/* ###################################################################### */ + +/* +** UnixWare 2.x +*/ + +# ifdef UNIXWARE2 +# define UNIXWARE 1 +# undef offsetof /* avoid stddefs.h, sys/sysmacros.h conflict */ +# endif /* UNIXWARE2 */ + + +/* +** UnixWare 1.1.2. +** +** Updated by Petr Lampa <lampa@fee.vutbr.cz>. +** From Evan Champion <evanc@spatial.synapse.org>. +*/ + +# ifdef UNIXWARE +# include <sys/mkdev.h> +# define SYSTEM5 1 +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# define HASSETREUID 1 +# define HASSETSID 1 +# define HASINITGROUPS 1 +# define GIDSET_T gid_t +# define SLEEP_T unsigned +# define SFS_TYPE SFS_STATVFS +# define LA_TYPE LA_ZERO +# undef WIFEXITED +# undef WEXITSTATUS +# ifndef _PATH_UNIX +# define _PATH_UNIX "/unix" +# endif /* ! _PATH_UNIX */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/ucblib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# define SYSLOG_BUFSIZE 128 +# endif /* UNIXWARE */ + + +/* +** Intergraph CLIX 3.1 +** +** From Paul Southworth <pauls@locust.cic.net> +*/ + +# ifdef CLIX +# define SYSTEM5 1 /* looks like System V */ +# ifndef HASGETUSERSHELL +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# endif /* ! HASGETUSERSHELL */ +# define DEV_BSIZE 512 /* device block size not defined */ +# define GIDSET_T gid_t +# undef LOG /* syslog not available */ +# define NEEDFSYNC 1 /* no fsync in system library */ +# define GETSHORT _getshort +# endif /* CLIX */ + + +/* +** NCR MP-RAS 2.x (SysVr4) with Wollongong TCP/IP +** +** From Kevin Darcy <kevin@tech.mis.cfc.com>. +*/ + +# ifdef NCR_MP_RAS2 +# include <sys/sockio.h> +# define __svr4__ +# define IP_SRCROUTE 0 /* Something is broken with getsockopt() */ +# define SYSLOG_BUFSIZE 1024 +# define SPT_TYPE SPT_NONE +# endif /* NCR_MP_RAS2 */ + + +/* +** NCR MP-RAS 3.x (SysVr4) with STREAMware TCP/IP +** +** From Tom Moore <Tom.Moore@DaytonOH.NCR.COM> +*/ + +# ifdef NCR_MP_RAS3 +# define __svr4__ +# define HASFCHOWN 1 /* has fchown(2) call */ +# define LDA_USE_LOCKF 1 +# define SIOCGIFNUM_IS_BROKEN 1 /* SIOCGIFNUM has non-std interface */ +# define SO_REUSEADDR_IS_BROKEN 1 /* doesn't work if accept() fails */ +# define SYSLOG_BUFSIZE 1024 +# define SPT_TYPE SPT_NONE +# define _PATH_MAILDIR "/var/mail" +# ifndef _XOPEN_SOURCE +# define _XOPEN_SOURCE +# define _XOPEN_SOURCE_EXTENDED 1 +# include <sys/resource.h> +# undef _XOPEN_SOURCE +# undef _XOPEN_SOURCE_EXTENDED +# endif /* ! _XOPEN_SOURCE */ +# endif /* NCR_MP_RAS3 */ + + +/* +** Tandem NonStop-UX SVR4 +** +** From Rick McCarty <mccarty@mpd.tandem.com>. +*/ + +# ifdef NonStop_UX_BXX +# define __svr4__ +# endif /* NonStop_UX_BXX */ + + +/* +** Hitachi 3050R/3050RX and 3500 Workstations running HI-UX/WE2. +** +** Tested for 1.04, 1.03 +** From Akihiro Hashimoto ("Hash") <hash@dominic.ipc.chiba-u.ac.jp>. +** +** Tested for 4.02, 6.10 and 7.10 +** From Motonori NAKAMURA <motonori@media.kyoto-u.ac.jp>. +*/ + +# if !defined(__hpux) && (defined(_H3050R) || defined(_HIUX_SOURCE)) +# define SYSTEM5 1 /* include all the System V defines */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define HASFCHMOD 1 /* has fchmod(2) syscall */ +# define setreuid(r, e) setresuid(r, e, -1) +# define LA_TYPE LA_FLOAT +# define SPT_TYPE SPT_PSTAT +# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */ +# ifndef HASSETVBUF +# define HASSETVBUF /* HI-UX has no setlinebuf */ +# endif /* ! HASSETVBUF */ +# ifndef GIDSET_T +# define GIDSET_T gid_t +# endif /* ! GIDSET_T */ +# ifndef _PATH_UNIX +# define _PATH_UNIX "/HI-UX" +# endif /* ! _PATH_UNIX */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef IDENTPROTO +# define IDENTPROTO 0 /* TCP/IP implementation is broken */ +# endif /* ! IDENTPROTO */ +# ifndef HASGETUSERSHELL +# define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps */ +# endif /* ! HASGETUSERSHELL */ +# define FDSET_CAST (int *) /* cast for fd_set parameters to select */ + +/* +** avoid m_flags conflict between Berkeley DB 1.85 db.h & sys/sysmacros.h +** on HIUX 3050 +*/ +# undef m_flags + +# define SM_CONF_SYSLOG 0 + +# endif /* !defined(__hpux) && (defined(_H3050R) || defined(_HIUX_SOURCE)) */ + + +/* +** Amdahl UTS System V 2.1.5 (SVr3-based) +** +** From: Janet Jackson <janet@dialix.oz.au>. +*/ + +# ifdef _UTS +# include <sys/sysmacros.h> +# undef HASLSTAT /* has symlinks, but they cause problems */ +# define NEEDFSYNC 1 /* system fsync(2) fails on non-EFS filesys */ +# define SYS5SIGNALS 1 /* System V signal semantics */ +# define SYS5SETPGRP 1 /* use System V setpgrp(2) syscall */ +# define HASUNAME 1 /* use System V uname(2) system call */ +# define HASINITGROUPS 1 /* has initgroups(3) function */ +# define HASSETVBUF 1 /* has setvbuf(3) function */ +# ifndef HASGETUSERSHELL +# define HASGETUSERSHELL 0 /* does not have getusershell(3) function */ +# endif /* ! HASGETUSERSHELL */ +# define GIDSET_T gid_t /* type of 2nd arg to getgroups(2) isn't int */ +# define LA_TYPE LA_ZERO /* doesn't have load average */ +# define SFS_TYPE SFS_4ARGS /* use 4-arg statfs() */ +# define SFS_BAVAIL f_bfree /* alternate field name */ +# define _PATH_UNIX "/unix" +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# endif /* _UTS */ + +/* +** Cray Computer Corporation's CSOS +** +** From Scott Bolte <scott@craycos.com>. +*/ + +# ifdef _CRAYCOM +# define SYSTEM5 1 /* include all the System V defines */ +# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */ +# define NEEDFSYNC 1 /* no fsync in system library */ +# define MAXPATHLEN PATHSIZE +# define LA_TYPE LA_ZERO +# define SFS_TYPE SFS_4ARGS /* four argument statfs() call */ +# define SFS_BAVAIL f_bfree /* alternate field name */ +# define _POSIX_CHOWN_RESTRICTED -1 +extern struct group *getgrent(), *getgrnam(), *getgrgid(); +# endif /* _CRAYCOM */ + + +/* +** Sony NEWS-OS 4.2.1R and 6.0.3 +** +** From Motonori NAKAMURA <motonori@cs.ritsumei.ac.jp>. +*/ + +# ifdef sony_news +# ifndef __svr4 + /* NEWS-OS 4.2.1R */ +# ifndef BSD +# define BSD /* has BSD routines */ +# endif /* ! BSD */ +# define HASUNSETENV 1 /* has unsetenv(2) call */ +# undef HASSETVBUF /* don't actually have setvbuf(3) */ +# define WAITUNION 1 /* use "union wait" as wait argument type */ +# define LA_TYPE LA_INT +# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */ +# ifndef HASFLOCK +# define HASFLOCK 1 /* has flock(2) call */ +# endif /* ! HASFLOCK */ +# define setpgid setpgrp +# undef WIFEXITED +# undef WEXITSTATUS +# define MODE_T int /* system include files have no mode_t */ +typedef int pid_t; +typedef int (*sigfunc_t)(); +# define SIGFUNC_DEFINED +# define SIGFUNC_RETURN (0) +# define SIGFUNC_DECL int + +# else /* ! __svr4 */ + /* NEWS-OS 6.0.3 with /bin/cc */ +# ifndef __svr4__ +# define __svr4__ /* use all System V Release 4 defines below */ +# endif /* ! __svr4__ */ +# define HASSETSID 1 /* has Posix setsid(2) call */ +# define HASGETUSERSHELL 1 /* DOES have getusershell(3) call in libc */ +# define LA_TYPE LA_READKSYM /* use MIOC_READKSYM ioctl */ +# ifndef SPT_TYPE +# define SPT_TYPE SPT_SYSMIPS /* use sysmips() (OS 6.0.2 or later) */ +# endif /* ! SPT_TYPE */ +# define GIDSET_T gid_t +# undef WIFEXITED +# undef WEXITSTATUS +# ifndef SYSLOG_BUFSIZE +# define SYSLOG_BUFSIZE 256 +# endif /* ! SYSLOG_BUFSIZE */ +# define _PATH_UNIX "/stand/unix" +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/etc/mail/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ + +# endif /* ! __svr4 */ +# endif /* sony_news */ + + +/* +** Omron LUNA/UNIOS-B 3.0, LUNA2/Mach and LUNA88K Mach +** +** From Motonori NAKAMURA <motonori@cs.ritsumei.ac.jp>. +*/ + +# ifdef luna +# ifndef IDENTPROTO +# define IDENTPROTO 0 /* TCP/IP implementation is broken */ +# endif /* ! IDENTPROTO */ +# define HASUNSETENV 1 /* has unsetenv(2) call */ +# define NEEDPUTENV 1 /* need putenv(3) call */ +# define SM_CONF_GETOPT 0 /* need a replacement for getopt(3) */ +# define NEEDSTRSTR 1 /* need emulation of the strstr(3) call */ +# define WAITUNION 1 /* use "union wait" as wait argument type */ +# ifdef uniosb +# include <sys/time.h> +# define NEEDVPRINTF 1 /* need a replacement for vprintf(3) */ +# define LA_TYPE LA_INT +# define TZ_TYPE TZ_TM_ZONE /* use tm->tm_zone */ +# endif /* uniosb */ +# ifdef luna2 +# define LA_TYPE LA_SUBR +# define TZ_TYPE TZ_TM_ZONE /* use tm->tm_zone */ +# endif /* luna2 */ +# ifdef luna88k +# define LA_TYPE LA_INT +# endif /* luna88k */ +# define SFS_TYPE SFS_VFS /* use <sys/vfs.h> statfs() implementation */ +# define setpgid setpgrp +# undef WIFEXITED +# undef WEXITSTATUS +typedef int pid_t; +typedef int (*sigfunc_t)(); +# define SIGFUNC_DEFINED +# define SIGFUNC_RETURN (0) +# define SIGFUNC_DECL int +extern char *getenv(); +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/lib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# endif /* luna */ + + +/* +** NEC EWS-UX/V 4.2 (with /usr/ucb/cc) +** +** From Motonori NAKAMURA <motonori@cs.ritsumei.ac.jp>. +*/ + +# if defined(nec_ews_svr4) || defined(_nec_ews_svr4) +# ifndef __svr4__ +# define __svr4__ /* use all System V Release 4 defines below */ +# endif /* ! __svr4__ */ +# define SYS5SIGNALS 1 /* SysV signal semantics -- reset on each sig */ +# define HASSETSID 1 /* has Posix setsid(2) call */ +# define LA_TYPE LA_READKSYM /* use MIOC_READSYM ioctl */ +# define SFS_TYPE SFS_USTAT /* use System V ustat(2) syscall */ +# define GIDSET_T gid_t +# undef WIFEXITED +# undef WEXITSTATUS +# define NAMELISTMASK 0x7fffffff /* mask for nlist() values */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/ucblib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# ifndef SYSLOG_BUFSIZE +# define SYSLOG_BUFSIZE 1024 /* allow full size syslog buffer */ +# endif /* ! SYSLOG_BUFSIZE */ +# endif /* defined(nec_ews_svr4) || defined(_nec_ews_svr4) */ + + +/* +** Fujitsu/ICL UXP/DS (For the DS/90 Series) +** +** From Diego R. Lopez <drlopez@cica.es>. +** Additional changes from Fumio Moriya and Toshiaki Nomura of the +** Fujitsu Fresoftware group <dsfrsoft@oai6.yk.fujitsu.co.jp>. +*/ + +# ifdef __uxp__ +# include <arpa/nameser.h> +# include <sys/sysmacros.h> +# include <sys/mkdev.h> +# define __svr4__ +# define HASGETUSERSHELL 0 +# define HASFLOCK 0 +# define _PATH_UNIX "/stand/unix" +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/ucblib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# endif /* __uxp__ */ + +/* +** Pyramid DC/OSx +** +** From Earle Ake <akee@wpdiss1.wpafb.af.mil>. +*/ + +# ifdef DCOSx +# define GIDSET_T gid_t +# ifndef IDENTPROTO +# define IDENTPROTO 0 /* TCP/IP implementation is broken */ +# endif /* ! IDENTPROTO */ +# endif /* DCOSx */ + +/* +** Concurrent Computer Corporation Maxion +** +** From Donald R. Laster Jr. <laster@access.digex.net>. +*/ + +# ifdef __MAXION__ + +# include <sys/stream.h> +# define __svr4__ 1 /* SVR4.2MP */ +# define HASSETREUID 1 /* have setreuid(2) */ +# define HASLSTAT 1 /* have lstat(2) */ +# define HASSETRLIMIT 1 /* have setrlimit(2) */ +# define HASGETDTABLESIZE 1 /* have getdtablesize(2) */ +# define HASGETUSERSHELL 1 /* have getusershell(3) */ +# define NOFTRUNCATE 1 /* do not have ftruncate(2) */ +# define SLEEP_T unsigned +# define SFS_TYPE SFS_STATVFS +# define SFS_BAVAIL f_bavail +# ifndef SYSLOG_BUFSIZE +# define SYSLOG_BUFSIZE 256 /* Use 256 bytes */ +# endif /* ! SYSLOG_BUFSIZE */ + +# undef WUNTRACED +# undef WIFEXITED +# undef WIFSIGNALED +# undef WIFSTOPPED +# undef WEXITSTATUS +# undef WTERMSIG +# undef WSTOPSIG + +# endif /* __MAXION__ */ + +/* +** Harris Nighthawk PowerUX (nh6000 box) +** +** Contributed by Bob Miorelli, Pratt & Whitney <miorelli@pweh.com> +*/ + +# ifdef _PowerUX +# ifndef __svr4__ +# define __svr4__ +# endif /* ! __svr4__ */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/etc/mail/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/etc/mail/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# define SYSLOG_BUFSIZE 1024 +# define LA_TYPE LA_ZERO +typedef struct msgb mblk_t; +# undef offsetof /* avoid stddefs.h and sys/sysmacros.h conflict */ +# endif /* _PowerUX */ + +/* +** Siemens Nixdorf Informationssysteme AG SINIX +** +** Contributed by Gerald Rinske <Gerald.Rinske@mch.sni.de> +** of Siemens Business Services VAS. +*/ +# ifdef sinix +# define HASRANDOM 0 /* has random(3) */ +# define SYSLOG_BUFSIZE 1024 +# endif /* sinix */ + +/* +** CRAY T3E +** +** Contributed by Manu Mahonen <mailadm@csc.fi> +** of Center for Scientific Computing. +*/ +# ifdef _CRAY +# define GET_IPOPT_DST(dst) *(struct in_addr *)&(dst) +# define _PATH_MAILDIR "/usr/spool/mail" +# if !defined(MAXPATHLEN) +# define MAXPATHLEN PATHSIZE +# endif /* !defined(MAXPATHLEN) */ +# endif /* _CRAY */ + +/* +** Motorola 922, MC88110, UNIX SYSTEM V/88 Release 4.0 Version 4.3 +** +** Contributed by Sergey Rusanov <rsm@utfoms.udmnet.ru> +*/ + +# ifdef MOTO +# define HASFCHMOD 1 +# define HASSETRLIMIT 0 +# define HASSETSID 1 +# define HASSETREUID 1 +# define HASULIMIT 1 +# define HASWAITPID 1 +# define HASGETDTABLESIZE 1 +# define HASGETUSERSHELL 1 +# define IP_SRCROUTE 0 +# define IDENTPROTO 0 +# define RES_DNSRCH_VARIABLE _res_dnsrch +# define _PATH_UNIX "/unix" +# define _PATH_VENDOR_CF "/etc/sendmail.cf" +# define _PATH_SENDMAILPID "/var/run/sendmail.pid" +# endif /* MOTO */ + + +/********************************************************************** +** End of Per-Operating System defines +**********************************************************************/ +/********************************************************************** +** More general defines +**********************************************************************/ + +/* general BSD defines */ +# ifdef BSD +# define HASGETDTABLESIZE 1 /* has getdtablesize(2) call */ +# ifndef HASSETREUID +# define HASSETREUID 1 /* has setreuid(2) call */ +# endif /* ! HASSETREUID */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# ifndef IP_SRCROUTE +# define IP_SRCROUTE 1 /* can check IP source routing */ +# endif /* ! IP_SRCROUTE */ +# ifndef HASSETRLIMIT +# define HASSETRLIMIT 1 /* has setrlimit(2) call */ +# endif /* ! HASSETRLIMIT */ +# ifndef HASFLOCK +# define HASFLOCK 1 /* has flock(2) call */ +# endif /* ! HASFLOCK */ +# ifndef TZ_TYPE +# define TZ_TYPE TZ_TM_ZONE /* use tm->tm_zone variable */ +# endif /* ! TZ_TYPE */ +# endif /* BSD */ + +/* general System V Release 4 defines */ +# ifdef __svr4__ +# define SYSTEM5 1 +# define USESETEUID 1 /* has usable seteuid(2) call */ +# define HASINITGROUPS 1 /* has initgroups(3) call */ +# define BSD_COMP 1 /* get BSD ioctl calls */ +# ifndef HASSETRLIMIT +# define HASSETRLIMIT 1 /* has setrlimit(2) call */ +# endif /* ! HASSETRLIMIT */ +# ifndef HASGETUSERSHELL +# define HASGETUSERSHELL 0 /* does not have getusershell(3) call */ +# endif /* ! HASGETUSERSHELL */ +# ifndef HASFCHMOD +# define HASFCHMOD 1 /* most (all?) SVr4s seem to have fchmod(2) */ +# endif /* ! HASFCHMOD */ + +# ifndef _PATH_UNIX +# define _PATH_UNIX "/unix" +# endif /* ! _PATH_UNIX */ +# ifndef _PATH_VENDOR_CF +# define _PATH_VENDOR_CF "/usr/ucblib/sendmail.cf" +# endif /* ! _PATH_VENDOR_CF */ +# ifndef _PATH_SENDMAILPID +# define _PATH_SENDMAILPID "/usr/ucblib/sendmail.pid" +# endif /* ! _PATH_SENDMAILPID */ +# ifndef SYSLOG_BUFSIZE +# define SYSLOG_BUFSIZE 128 +# endif /* ! SYSLOG_BUFSIZE */ +# ifndef SFS_TYPE +# define SFS_TYPE SFS_STATVFS +# endif /* ! SFS_TYPE */ + +# ifndef USE_SIGLONGJMP +# define USE_SIGLONGJMP 1 /* sigsetjmp needed for signal handling */ +# endif /* ! USE_SIGLONGJMP */ +# endif /* __svr4__ */ + +# ifdef __SVR4 +# define LDA_USE_LOCKF 1 +# define LDA_USE_SETEUID 1 +# define _PATH_MAILDIR "/var/mail" +# endif /* __SVR4 */ + +/* general System V defines */ +# ifdef SYSTEM5 +# include <sys/sysmacros.h> +# define HASUNAME 1 /* use System V uname(2) system call */ +# define SYS5SETPGRP 1 /* use System V setpgrp(2) syscall */ +# define HASSETVBUF 1 /* we have setvbuf(3) in libc */ +# ifndef HASULIMIT +# define HASULIMIT 1 /* has the ulimit(2) syscall */ +# endif /* ! HASULIMIT */ +# ifndef LA_TYPE +# ifdef MIOC_READKSYM +# define LA_TYPE LA_READKSYM /* use MIOC_READKSYM ioctl */ +# else /* MIOC_READKSYM */ +# define LA_TYPE LA_INT /* assume integer load average */ +# endif /* MIOC_READKSYM */ +# endif /* ! LA_TYPE */ +# ifndef SFS_TYPE +# define SFS_TYPE SFS_USTAT /* use System V ustat(2) syscall */ +# endif /* ! SFS_TYPE */ +# ifndef TZ_TYPE +# define TZ_TYPE TZ_TZNAME /* use tzname[] vector */ +# endif /* ! TZ_TYPE */ +# endif /* SYSTEM5 */ + +/* general POSIX defines */ +# ifdef _POSIX_VERSION +# define HASSETSID 1 /* has Posix setsid(2) call */ +# define HASWAITPID 1 /* has Posix waitpid(2) call */ +# if _POSIX_VERSION >= 199500 && !defined(USESETEUID) +# define USESETEUID 1 /* has usable seteuid(2) call */ +# endif /* _POSIX_VERSION >= 199500 && !defined(USESETEUID) */ +# endif /* _POSIX_VERSION */ +/* +** Tweaking for systems that (for example) claim to be BSD or POSIX +** but don't have all the standard BSD or POSIX routines (boo hiss). +*/ + +# ifdef titan +# undef HASINITGROUPS /* doesn't have initgroups(3) call */ +# endif /* titan */ + +# ifdef _CRAYCOM +# undef HASSETSID /* despite POSIX claim, doesn't have setsid */ +# endif /* _CRAYCOM */ + +# ifdef MOTO +# undef USESETEUID +# endif /* MOTO */ + +/* +** Due to a "feature" in some operating systems such as Ultrix 4.3 and +** HPUX 8.0, if you receive a "No route to host" message (ICMP message +** ICMP_UNREACH_HOST) on _any_ connection, all connections to that host +** are closed. Some firewalls return this error if you try to connect +** to the IDENT port (113), so you can't receive email from these hosts +** on these systems. The firewall really should use a more specific +** message such as ICMP_UNREACH_PROTOCOL or _PORT or _FILTER_PROHIB. If +** not explicitly set to zero above, default it on. +*/ + +# ifndef IDENTPROTO +# define IDENTPROTO 1 /* use IDENT proto (RFC 1413) */ +# endif /* ! IDENTPROTO */ + +# ifndef IP_SRCROUTE +# define IP_SRCROUTE 1 /* Detect IP source routing */ +# endif /* ! IP_SRCROUTE */ + +# ifndef HASGETUSERSHELL +# define HASGETUSERSHELL 1 /* libc has getusershell(3) call */ +# endif /* ! HASGETUSERSHELL */ + +# ifndef NETUNIX +# define NETUNIX 1 /* include unix domain support */ +# endif /* ! NETUNIX */ + +# ifndef HASRANDOM +# define HASRANDOM 1 /* has random(3) support */ +# endif /* ! HASRANDOM */ + +# ifndef HASFLOCK +# define HASFLOCK 0 /* assume no flock(2) support */ +# endif /* ! HASFLOCK */ + +# ifndef HASSETREUID +# define HASSETREUID 0 /* assume no setreuid(2) call */ +# endif /* ! HASSETREUID */ + +# ifndef HASFCHMOD +# define HASFCHMOD 0 /* assume no fchmod(2) syscall */ +# endif /* ! HASFCHMOD */ + +# ifndef USESETEUID +# define USESETEUID 0 /* assume no seteuid(2) call or no saved ids */ +# endif /* ! USESETEUID */ + +# ifndef HASSETRLIMIT +# define HASSETRLIMIT 0 /* assume no setrlimit(2) support */ +# endif /* ! HASSETRLIMIT */ + +# ifndef HASULIMIT +# define HASULIMIT 0 /* assume no ulimit(2) support */ +# endif /* ! HASULIMIT */ + +# ifndef SECUREWARE +# define SECUREWARE 0 /* assume no SecureWare C2 auditing hooks */ +# endif /* ! SECUREWARE */ + +# ifndef USE_SIGLONGJMP +# define USE_SIGLONGJMP 0 /* assume setjmp handles signals properly */ +# endif /* ! USE_SIGLONGJMP */ + +# ifndef FDSET_CAST +# define FDSET_CAST /* (empty) cast for fd_set arg to select */ +# endif /* ! FDSET_CAST */ + +/* +** Pick a mailer setuid method for changing the current uid +*/ + +# define USE_SETEUID 0 +# define USE_SETREUID 1 +# define USE_SETUID 2 + +# if USESETEUID +# define MAILER_SETUID_METHOD USE_SETEUID +# else /* USESETEUID */ +# if HASSETREUID +# define MAILER_SETUID_METHOD USE_SETREUID +# else /* HASSETREUID */ +# define MAILER_SETUID_METHOD USE_SETUID +# endif /* HASSETREUID */ +# endif /* USESETEUID */ + +/* +** If no type for argument two of getgroups call is defined, assume +** it's an integer -- unfortunately, there seem to be several choices +** here. +*/ + +# ifndef GIDSET_T +# define GIDSET_T int +# endif /* ! GIDSET_T */ + +# ifndef UID_T +# define UID_T uid_t +# endif /* ! UID_T */ + +# ifndef GID_T +# define GID_T gid_t +# endif /* ! GID_T */ + +# ifndef MODE_T +# define MODE_T mode_t +# endif /* ! MODE_T */ + +# ifndef ARGV_T +# define ARGV_T char ** +# endif /* ! ARGV_T */ + +# ifndef SOCKADDR_LEN_T +# define SOCKADDR_LEN_T int +# endif /* ! SOCKADDR_LEN_T */ + +# ifndef SOCKOPT_LEN_T +# define SOCKOPT_LEN_T int +# endif /* ! SOCKOPT_LEN_T */ + +# ifndef QUAD_T +# define QUAD_T unsigned long +# endif /* ! QUAD_T */ +/********************************************************************** +** Remaining definitions should never have to be changed. They are +** primarily to provide back compatibility for older systems -- for +** example, it includes some POSIX compatibility definitions +**********************************************************************/ + +/* System 5 compatibility */ +# ifndef S_ISREG +# define S_ISREG(foo) ((foo & S_IFMT) == S_IFREG) +# endif /* ! S_ISREG */ +# ifndef S_ISDIR +# define S_ISDIR(foo) ((foo & S_IFMT) == S_IFDIR) +# endif /* ! S_ISDIR */ +# if !defined(S_ISLNK) && defined(S_IFLNK) +# define S_ISLNK(foo) ((foo & S_IFMT) == S_IFLNK) +# endif /* !defined(S_ISLNK) && defined(S_IFLNK) */ +# if !defined(S_ISFIFO) +# if defined(S_IFIFO) +# define S_ISFIFO(foo) ((foo & S_IFMT) == S_IFIFO) +# else /* defined(S_IFIFO) */ +# define S_ISFIFO(foo) false +# endif /* defined(S_IFIFO) */ +# endif /* !defined(S_ISFIFO) */ +# ifndef S_IRUSR +# define S_IRUSR 0400 +# endif /* ! S_IRUSR */ +# ifndef S_IWUSR +# define S_IWUSR 0200 +# endif /* ! S_IWUSR */ +# ifndef S_IRGRP +# define S_IRGRP 0040 +# endif /* ! S_IRGRP */ +# ifndef S_IWGRP +# define S_IWGRP 0020 +# endif /* ! S_IWGRP */ +# ifndef S_IROTH +# define S_IROTH 0004 +# endif /* ! S_IROTH */ +# ifndef S_IWOTH +# define S_IWOTH 0002 +# endif /* ! S_IWOTH */ + +/* close-on-exec flag */ +# ifndef FD_CLOEXEC +# define FD_CLOEXEC 1 +# endif /* ! FD_CLOEXEC */ + +/* +** Older systems don't have this error code -- it should be in +** /usr/include/sysexits.h. +*/ + +# ifndef EX_CONFIG +# define EX_CONFIG 78 /* configuration error */ +# endif /* ! EX_CONFIG */ + +/* pseudo-codes */ +# define EX_QUIT 22 /* drop out of server immediately */ +# define EX_RESTART 23 /* restart sendmail daemon */ +# define EX_SHUTDOWN 24 /* shutdown sendmail daemon */ + +#ifndef EX_NOTFOUND +# define EX_NOTFOUND EX_NOHOST +#endif /* ! EX_NOTFOUND */ + +/* pseudo-code used for mci_setstat */ +# define EX_NOTSTICKY -5 /* don't save persistent status */ + + +/* +** An "impossible" file mode to indicate that the file does not exist. +*/ + +# define ST_MODE_NOFILE 0171147 /* unlikely to occur */ + + +/* type of arbitrary pointer */ +# ifndef ARBPTR_T +# define ARBPTR_T void * +# endif /* ! ARBPTR_T */ + +# ifndef __P +# include "sm/cdefs.h" +# endif /* ! __P */ + +# if HESIOD && !defined(NAMED_BIND) +# define NAMED_BIND 1 /* not one without the other */ +# endif /* HESIOD && !defined(NAMED_BIND) */ + +# if NAMED_BIND && !defined( __ksr__ ) && !defined( h_errno ) +extern int h_errno; +# endif /* NAMED_BIND && !defined( __ksr__ ) && !defined( h_errno ) */ + +# if NEEDPUTENV +extern int putenv __P((char *)); +# endif /* NEEDPUTENV */ + +#if !HASUNSETENV +extern void unsetenv __P((char *)); +#endif /* !HASUNSETENV */ + +# ifdef LDAPMAP +# include <sys/time.h> +# include <lber.h> +# include <ldap.h> + +/* Some LDAP constants */ +# define LDAPMAP_FALSE 0 +# define LDAPMAP_TRUE 1 + +/* +** ldap_init(3) is broken in Umich 3.x and OpenLDAP 1.0/1.1. +** Use the lack of LDAP_OPT_SIZELIMIT to detect old API implementations +** and assume (falsely) that all old API implementations are broken. +** (OpenLDAP 1.2 and later have a working ldap_init(), add -DUSE_LDAP_INIT) +*/ + +# if defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_INIT) +# define USE_LDAP_INIT 1 +# endif /* defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_INIT) */ + +/* +** LDAP_OPT_SIZELIMIT is not defined under Umich 3.x nor OpenLDAP 1.x, +** hence ldap_set_option() must not exist. +*/ + +# if defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_SET_OPTION) +# define USE_LDAP_SET_OPTION 1 +# endif /* defined(LDAP_OPT_SIZELIMIT) && !defined(USE_LDAP_SET_OPTION) */ + +# endif /* LDAPMAP */ + +# if HASUNAME +# include <sys/utsname.h> +# ifdef newstr +# undef newstr +# endif /* newstr */ +# else /* HASUNAME */ +# define NODE_LENGTH 32 +struct utsname +{ + char nodename[NODE_LENGTH + 1]; +}; +# endif /* HASUNAME */ + +# if !defined(MAXHOSTNAMELEN) && !defined(_SCO_unix_) && !defined(NonStop_UX_BXX) && !defined(ALTOS_SYSTEM_V) +# define MAXHOSTNAMELEN 256 +# endif /* !defined(MAXHOSTNAMELEN) && !defined(_SCO_unix_) && !defined(NonStop_UX_BXX) && !defined(ALTOS_SYSTEM_V) */ + +# if !defined(SIGCHLD) && defined(SIGCLD) +# define SIGCHLD SIGCLD +# endif /* !defined(SIGCHLD) && defined(SIGCLD) */ + +# ifndef STDIN_FILENO +# define STDIN_FILENO 0 +# endif /* ! STDIN_FILENO */ + +# ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +# endif /* ! STDOUT_FILENO */ + +# ifndef STDERR_FILENO +# define STDERR_FILENO 2 +# endif /* ! STDERR_FILENO */ + +# ifndef LOCK_SH +# define LOCK_SH 0x01 /* shared lock */ +# define LOCK_EX 0x02 /* exclusive lock */ +# define LOCK_NB 0x04 /* non-blocking lock */ +# define LOCK_UN 0x08 /* unlock */ +# endif /* ! LOCK_SH */ + +# ifndef S_IXOTH +# define S_IXOTH (S_IEXEC >> 6) +# endif /* ! S_IXOTH */ + +# ifndef S_IXGRP +# define S_IXGRP (S_IEXEC >> 3) +# endif /* ! S_IXGRP */ + +# ifndef S_IXUSR +# define S_IXUSR (S_IEXEC) +# endif /* ! S_IXUSR */ + +#ifndef O_ACCMODE +# define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR) +#endif /* ! O_ACCMODE */ + +# ifndef SEEK_SET +# define SEEK_SET 0 +# define SEEK_CUR 1 +# define SEEK_END 2 +# endif /* ! SEEK_SET */ + +# ifndef SIG_ERR +# define SIG_ERR ((void (*)()) -1) +# endif /* ! SIG_ERR */ + +# ifndef WEXITSTATUS +# define WEXITSTATUS(st) (((st) >> 8) & 0377) +# endif /* ! WEXITSTATUS */ +# ifndef WIFEXITED +# define WIFEXITED(st) (((st) & 0377) == 0) +# endif /* ! WIFEXITED */ +# ifndef WIFSTOPPED +# define WIFSTOPPED(st) (((st) & 0100) == 0) +# endif /* ! WIFSTOPPED */ +# ifndef WCOREDUMP +# define WCOREDUMP(st) (((st) & 0200) != 0) +# endif /* ! WCOREDUMP */ +# ifndef WTERMSIG +# define WTERMSIG(st) (((st) & 0177)) +# endif /* ! WTERMSIG */ + +# ifndef SIGFUNC_DEFINED +typedef void (*sigfunc_t) __P((int)); +# endif /* ! SIGFUNC_DEFINED */ +# ifndef SIGFUNC_RETURN +# define SIGFUNC_RETURN +# endif /* ! SIGFUNC_RETURN */ +# ifndef SIGFUNC_DECL +# define SIGFUNC_DECL void +# endif /* ! SIGFUNC_DECL */ + +/* size of syslog buffer */ +# ifndef SYSLOG_BUFSIZE +# define SYSLOG_BUFSIZE 1024 +# endif /* ! SYSLOG_BUFSIZE */ + +/* +** Size of prescan buffer. +** Despite comments in the _sendmail_ book, this probably should +** not be changed; there are some hard-to-define dependencies. +*/ + +# define PSBUFSIZE (MAXNAME + MAXATOM) /* size of prescan buffer */ + +/* fork routine -- set above using #ifdef _osname_ or in Makefile */ +# ifndef FORK +# define FORK fork /* function to call to fork mailer */ +# endif /* ! FORK */ + +/* setting h_errno */ +# ifndef SM_SET_H_ERRNO +# define SM_SET_H_ERRNO(err) h_errno = (err) +# endif /* SM_SET_H_ERRNO */ + +# ifndef SM_CONF_GETOPT +# define SM_CONF_GETOPT 1 +# endif /* ! SM_CONF_GETOPT */ + +/* random routine -- set above using #ifdef _osname_ or in Makefile */ +# if HASRANDOM +# define get_random() random() +# else /* HASRANDOM */ +# define get_random() ((long) rand()) +# ifndef RANDOMSHIFT +# define RANDOMSHIFT 8 +# endif /* ! RANDOMSHIFT */ +# endif /* HASRANDOM */ + +/* +** Default to using scanf in readcf. +*/ + +# ifndef SCANF +# define SCANF 1 +# endif /* ! SCANF */ + +/* XXX 32 bit type */ +# ifndef SM_INT32 +# define SM_INT32 int32_t +# endif /* ! SM_INT32 */ + +/* +** SVr4 and similar systems use different routines for setjmp/longjmp +** with signal support +*/ + +# if USE_SIGLONGJMP +# ifdef jmp_buf +# undef jmp_buf +# endif /* jmp_buf */ +# define jmp_buf sigjmp_buf +# ifdef setjmp +# undef setjmp +# endif /* setjmp */ +# define setjmp(env) sigsetjmp(env, 1) +# ifdef longjmp +# undef longjmp +# endif /* longjmp */ +# define longjmp(env, val) siglongjmp(env, val) +# endif /* USE_SIGLONGJMP */ + +# if !defined(NGROUPS_MAX) && defined(NGROUPS) +# define NGROUPS_MAX NGROUPS /* POSIX naming convention */ +# endif /* !defined(NGROUPS_MAX) && defined(NGROUPS) */ + +/* +** Some snprintf() implementations are rumored not to NUL terminate. +*/ +# if SNPRINTF_IS_BROKEN +# ifdef snprintf +# undef snprintf +# endif /* snprintf */ +# define snprintf sm_snprintf +# ifdef vsnprintf +# undef vsnprintf +# endif /* vsnprintf */ +# define vsnprintf sm_vsnprintf +# endif /* SNPRINTF_IS_BROKEN */ + +/* +** If we don't have a system syslog, simulate it. +*/ + +# if !LOG +# define LOG_EMERG 0 /* system is unusable */ +# define LOG_ALERT 1 /* action must be taken immediately */ +# define LOG_CRIT 2 /* critical conditions */ +# define LOG_ERR 3 /* error conditions */ +# define LOG_WARNING 4 /* warning conditions */ +# define LOG_NOTICE 5 /* normal but significant condition */ +# define LOG_INFO 6 /* informational */ +# define LOG_DEBUG 7 /* debug-level messages */ +# endif /* !LOG */ + +# ifndef SM_CONF_SYSLOG +# define SM_CONF_SYSLOG 1 /* syslog.h has prototype for syslog() */ +# endif /* SM_CONF_SYSLOG */ + +# if !SM_CONF_SYSLOG +# ifdef __STDC__ +extern void syslog(int, const char *, ...); +# else /* __STDC__ */ +extern void syslog(); +# endif /* __STDC__ */ +# endif /* !SM_CONF_SYSLOG */ + +/* portable(?) definition for alignment */ +# ifndef SM_ALIGN_SIZE +struct sm_align +{ + char al_c; + union + { + long al_l; + void *al_p; + double al_d; + void (*al_f)(); + } al_u; +}; +# define SM_ALIGN_SIZE offsetof(struct sm_align, al_u) +# endif /* ! SM_ALIGN_SIZE */ +# define SM_ALIGN_BITS (SM_ALIGN_SIZE - 1) + +#endif /* ! SM_CONF_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/config.h b/gnu/usr.sbin/sendmail/include/sm/config.h new file mode 100644 index 00000000000..0ab78a9a10b --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/config.h @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: config.h,v 1.42 2001/06/17 21:31:11 ca Exp $ + */ + +/* +** libsm configuration macros. +** The values of these macros are platform dependent. +** The default values are given here. +** If the default is incorrect, then the correct value can be specified +** in the m4 configuration file in devtools/OS. +*/ + +#ifndef SM_CONFIG_H +# define SM_CONFIG_H + +# include "sm_os.h" + +/* +** SM_CONF_STDBOOL_H is 1 if <stdbool.h> exists +*/ + +# ifndef SM_CONF_STDBOOL_H +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +# define SM_CONF_STDBOOL_H 1 +# else /* defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L */ +# define SM_CONF_STDBOOL_H 0 +# endif /* defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L */ +# endif /* ! SM_CONF_STDBOOL_H */ + +/* +** Configuration macros that specify how __P is defined. +*/ + +# ifndef SM_CONF_SYS_CDEFS_H +# define SM_CONF_SYS_CDEFS_H 0 +# endif /* ! SM_CONF_SYS_CDEFS_H */ + +/* +** SM_CONF_STDDEF_H is 1 if <stddef.h> exists +*/ + +# ifndef SM_CONF_STDDEF_H +# define SM_CONF_STDDEF_H 1 +# endif /* ! SM_CONF_STDDEF_H */ + +/* +** Configuration macro that specifies whether strlcpy/strlcat are available. +** Note: this is the default so that the libsm version (optimized) will +** be used by default (sm_strlcpy/sm_strlcat). +*/ + +# ifndef SM_CONF_STRL +# define SM_CONF_STRL 0 +# endif /* ! SM_CONF_STRL */ + +/* +** Configuration macro indicating that setitimer is available +*/ + +# ifndef SM_CONF_SETITIMER +# define SM_CONF_SETITIMER 1 +# endif /* ! SM_CONF_SETITIMER */ + +/* +** Does <sys/types.h> define uid_t and gid_t? +*/ + +# ifndef SM_CONF_UID_GID +# define SM_CONF_UID_GID 1 +# endif /* ! SM_CONF_UID_GID */ + +/* +** Does <sys/types.h> define ssize_t? +*/ +# ifndef SM_CONF_SSIZE_T +# define SM_CONF_SSIZE_T 1 +# endif /* ! SM_CONF_SSIZE_T */ + +/* +** Does the C compiler support long long? +*/ + +# ifndef SM_CONF_LONGLONG +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +# define SM_CONF_LONGLONG 1 +# else /* defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L */ +# if defined(__GNUC__) +# define SM_CONF_LONGLONG 1 +# else /* defined(__GNUC__) */ +# define SM_CONF_LONGLONG 0 +# endif /* defined(__GNUC__) */ +# endif /* defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L */ +# endif /* ! SM_CONF_LONGLONG */ + +/* +** Does <sys/types.h> define quad_t and u_quad_t? +** We only care if long long is not available. +*/ + +# ifndef SM_CONF_QUAD_T +# define SM_CONF_QUAD_T 0 +# endif /* ! SM_CONF_QUAD_T */ + +/* +** Configuration macro indicating that shared memory is available +*/ + +# ifndef SM_CONF_SHM +# define SM_CONF_SHM 0 +# endif /* ! SM_CONF_SHM */ + +/* +** Does <setjmp.h> define sigsetjmp? +*/ + +# ifndef SM_CONF_SIGSETJMP +# define SM_CONF_SIGSETJMP 1 +# endif /* ! SM_CONF_SIGSETJMP */ + +/* +** Does <sysexits.h> exist, and define the EX_* macros with values +** that differ from the default BSD values in <sm/sysexits.h>? +*/ + +# ifndef SM_CONF_SYSEXITS_H +# define SM_CONF_SYSEXITS_H 0 +# endif /* ! SM_CONF_SYSEXITS_H */ + +/* has memchr() prototype? (if not: needs memory.h) */ +# ifndef SM_CONF_MEMCHR +# define SM_CONF_MEMCHR 1 +# endif /* ! SM_CONF_MEMCHR */ + +/* try LLONG tests in libsm/t-types.c? */ +# ifndef SM_CONF_TEST_LLONG +# define SM_CONF_TEST_LLONG 1 +# endif /* !SM_CONF_TEST_LLONG */ + +#endif /* ! SM_CONFIG_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/debug.h b/gnu/usr.sbin/sendmail/include/sm/debug.h new file mode 100644 index 00000000000..62b5dfbaae1 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/debug.h @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: debug.h,v 1.15 2001/03/08 03:23:07 ca Exp $ + */ + +/* +** libsm debugging and tracing +** See libsm/debug.html for documentation. +*/ + +#ifndef SM_DEBUG_H +# define SM_DEBUG_H + +# include <sm/gen.h> +# include <sm/io.h> + +/* +** abstractions for printing trace messages +*/ + +extern SM_FILE_T * +sm_debug_file __P((void)); + +extern void +sm_debug_setfile __P(( + SM_FILE_T *)); + +extern void PRINTFLIKE(1, 2) +sm_dprintf __P(( + char *_fmt, + ...)); + +extern void +sm_dflush __P((void)); + +/* +** abstractions for setting and testing debug activation levels +*/ + +extern void +sm_debug_addsettings_x __P(( + const char *)); + +extern void +sm_debug_addsetting_x __P(( + const char *, + int)); + +# define SM_DEBUG_UNKNOWN ((SM_ATOMIC_UINT_T)(-1)) + +extern const char SmDebugMagic[]; + +typedef struct sm_debug SM_DEBUG_T; +struct sm_debug +{ + const char *sm_magic; /* points to SmDebugMagic */ + + /* + ** debug_level is the activation level of this debug + ** object. Level 0 means no debug activity. + ** It is initialized to SM_DEBUG_UNKNOWN, which indicates + ** that the true value is unknown. If debug_level == + ** SM_DEBUG_UNKNOWN, then the access functions will look up + ** its true value in the internal table of debug settings. + */ + + SM_ATOMIC_UINT_T debug_level; + + /* + ** debug_name is the name used to reference this SM_DEBUG + ** structure via the sendmail -d option. + */ + + char *debug_name; + + /* + ** debug_desc is a literal character string of the form + ** "@(#)$Debug: <name> - <short description> $" + */ + + char *debug_desc; + + /* + ** We keep a linked list of initialized SM_DEBUG structures + ** so that when sm_debug_addsetting is called, we can reset + ** them all back to the uninitialized state. + */ + + SM_DEBUG_T *debug_next; +}; + +# ifndef SM_DEBUG_CHECK +# define SM_DEBUG_CHECK 1 +# endif /* ! SM_DEBUG_CHECK */ + +# if SM_DEBUG_CHECK +/* +** This macro is cleverly designed so that if the debug object is below +** the specified level, then the only overhead is a single comparison +** (except for the first time this macro is invoked). +*/ + +# define sm_debug_active(debug, level) \ + ((debug)->debug_level >= (level) && \ + ((debug)->debug_level != SM_DEBUG_UNKNOWN || \ + sm_debug_loadactive(debug, level))) + +# define sm_debug_level(debug) \ + ((debug)->debug_level == SM_DEBUG_UNKNOWN \ + ? sm_debug_loadlevel(debug) : (debug)->debug_level) + +# define sm_debug_unknown(debug) ((debug)->debug_level == SM_DEBUG_UNKNOWN) +# else /* SM_DEBUG_CHECK */ +# define sm_debug_active(debug, level) 0 +# define sm_debug_level(debug) 0 +# define sm_debug_unknown(debug) 0 +# endif /* SM_DEBUG_CHECK */ + +extern bool +sm_debug_loadactive __P(( + SM_DEBUG_T *, + int)); + +extern int +sm_debug_loadlevel __P(( + SM_DEBUG_T *)); + +# define SM_DEBUG_INITIALIZER(name, desc) { \ + SmDebugMagic, \ + SM_DEBUG_UNKNOWN, \ + name, \ + desc, \ + NULL} + +#endif /* ! SM_DEBUG_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/errstring.h b/gnu/usr.sbin/sendmail/include/sm/errstring.h new file mode 100644 index 00000000000..2dde92ec987 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/errstring.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * + * $Sendmail: errstring.h,v 1.4 2001/06/07 20:04:53 ca Exp $ + */ + +/* +** Error codes. +*/ + +#ifndef SM_ERRSTRING_H +# define SM_ERRSTRING_H + +#include <errno.h> +extern int errno; + +/* +** These are used in a few cases where we need some special +** error codes, but where the system doesn't provide something +** reasonable. They are printed in sm_errstring. +*/ + +#ifndef E_PSEUDOBASE +# define E_PSEUDOBASE 256 +#endif /* ! E_PSEUDOBASE */ + +#define E_SM_OPENTIMEOUT (E_PSEUDOBASE + 0) /* Timeout on file open */ +#define E_SM_NOSLINK (E_PSEUDOBASE + 1) /* Symbolic links not allowed */ +#define E_SM_NOHLINK (E_PSEUDOBASE + 2) /* Hard links not allowed */ +#define E_SM_REGONLY (E_PSEUDOBASE + 3) /* Regular files only */ +#define E_SM_ISEXEC (E_PSEUDOBASE + 4) /* Executable files not allowed */ +#define E_SM_WWDIR (E_PSEUDOBASE + 5) /* World writable directory */ +#define E_SM_GWDIR (E_PSEUDOBASE + 6) /* Group writable directory */ +#define E_SM_FILECHANGE (E_PSEUDOBASE + 7) /* File changed after open */ +#define E_SM_WWFILE (E_PSEUDOBASE + 8) /* World writable file */ +#define E_SM_GWFILE (E_PSEUDOBASE + 9) /* Group writable file */ +#define E_SM_GRFILE (E_PSEUDOBASE + 10) /* g readable file */ +#define E_SM_WRFILE (E_PSEUDOBASE + 11) /* o readable file */ +#define E_DNSBASE (E_PSEUDOBASE + 20) /* base for DNS h_errno */ +#define E_SMDBBASE (E_PSEUDOBASE + 40) /* base for libsmdb errors */ +#define E_LDAPBASE (E_PSEUDOBASE + 70) /* base for LDAP errors */ + +/* libsmdb */ +#define SMDBE_OK 0 +#define SMDBE_MALLOC (E_SMDBBASE + 1) +#define SMDBE_GDBM_IS_BAD (E_SMDBBASE + 2) +#define SMDBE_UNSUPPORTED (E_SMDBBASE + 3) +#define SMDBE_DUPLICATE (E_SMDBBASE + 4) +#define SMDBE_BAD_OPEN (E_SMDBBASE + 5) +#define SMDBE_NOT_FOUND (E_SMDBBASE + 6) +#define SMDBE_UNKNOWN_DB_TYPE (E_SMDBBASE + 7) +#define SMDBE_UNSUPPORTED_DB_TYPE (E_SMDBBASE + 8) +#define SMDBE_INCOMPLETE (E_SMDBBASE + 9) +#define SMDBE_KEY_EMPTY (E_SMDBBASE + 10) +#define SMDBE_KEY_EXIST (E_SMDBBASE + 11) +#define SMDBE_LOCK_DEADLOCK (E_SMDBBASE + 12) +#define SMDBE_LOCK_NOT_GRANTED (E_SMDBBASE + 13) +#define SMDBE_LOCK_NOT_HELD (E_SMDBBASE + 14) +#define SMDBE_RUN_RECOVERY (E_SMDBBASE + 15) +#define SMDBE_IO_ERROR (E_SMDBBASE + 16) +#define SMDBE_READ_ONLY (E_SMDBBASE + 17) +#define SMDBE_DB_NAME_TOO_LONG (E_SMDBBASE + 18) +#define SMDBE_INVALID_PARAMETER (E_SMDBBASE + 19) +#define SMDBE_ONLY_SUPPORTS_ONE_CURSOR (E_SMDBBASE + 20) +#define SMDBE_NOT_A_VALID_CURSOR (E_SMDBBASE + 21) +#define SMDBE_LAST_ENTRY (E_SMDBBASE + 22) +#define SMDBE_OLD_VERSION (E_SMDBBASE + 23) + +extern const char * +sm_errstring __P(( + int _errno)); + +#endif /* SM_ERRSTRING_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/exc.h b/gnu/usr.sbin/sendmail/include/sm/exc.h new file mode 100644 index 00000000000..3139b0dba89 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/exc.h @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: exc.h,v 1.23 2001/06/07 20:04:53 ca Exp $ + */ + +/* +** libsm exception handling +** See libsm/exc.html for documentation. +*/ + +#ifndef SM_EXC_H +# define SM_EXC_H + +#include <sm/setjmp.h> +#include <sm/io.h> +#include <sm/gen.h> +#include <sm/assert.h> + +typedef struct sm_exc SM_EXC_T; +typedef struct sm_exc_type SM_EXC_TYPE_T; +typedef union sm_val SM_VAL_T; + +/* +** Exception types +*/ + +extern const char SmExcTypeMagic[]; + +struct sm_exc_type +{ + const char *sm_magic; + const char *etype_category; + const char *etype_argformat; + void (*etype_print) __P((SM_EXC_T *, SM_FILE_T *)); + const char *etype_printcontext; +}; + +extern const SM_EXC_TYPE_T SmEtypeOs; +extern const SM_EXC_TYPE_T SmEtypeErr; + +extern void +sm_etype_printf __P(( + SM_EXC_T *_exc, + SM_FILE_T *_stream)); + +/* +** Exception objects +*/ + +extern const char SmExcMagic[]; + +union sm_val +{ + int v_int; + long v_long; + char *v_str; + SM_EXC_T *v_exc; +}; + +struct sm_exc +{ + const char *sm_magic; + size_t exc_refcount; + const SM_EXC_TYPE_T *exc_type; + SM_VAL_T *exc_argv; +}; + +# define SM_EXC_INITIALIZER(type, argv) \ + { \ + SmExcMagic, \ + 0, \ + type, \ + argv, \ + } + +extern SM_EXC_T * +sm_exc_new_x __P(( + const SM_EXC_TYPE_T *_type, + ...)); + +extern SM_EXC_T * +sm_exc_addref __P(( + SM_EXC_T *_exc)); + +extern void +sm_exc_free __P(( + SM_EXC_T *_exc)); + +extern bool +sm_exc_match __P(( + SM_EXC_T *_exc, + const char *_pattern)); + +extern void +sm_exc_write __P(( + SM_EXC_T *_exc, + SM_FILE_T *_stream)); + +extern void +sm_exc_print __P(( + SM_EXC_T *_exc, + SM_FILE_T *_stream)); + +extern SM_DEAD(void +sm_exc_raise_x __P(( + SM_EXC_T *_exc))); + +extern SM_DEAD(void +sm_exc_raisenew_x __P(( + const SM_EXC_TYPE_T *_type, + ...))); + +/* +** Exception handling +*/ + +typedef void (*SM_EXC_DEFAULT_HANDLER_T) __P((SM_EXC_T *)); + +extern void +sm_exc_newthread __P(( + SM_EXC_DEFAULT_HANDLER_T _handle)); + +typedef struct sm_exc_handler SM_EXC_HANDLER_T; +struct sm_exc_handler +{ + SM_EXC_T *eh_value; + SM_JMPBUF_T eh_context; + SM_EXC_HANDLER_T *eh_parent; + int eh_state; +}; + +/* values for eh_state */ +enum +{ + SM_EH_PUSHED = 2, + SM_EH_POPPED = 0, + SM_EH_HANDLED = 1 +}; + +extern SM_EXC_HANDLER_T *SmExcHandler; + +# define SM_TRY { SM_EXC_HANDLER_T _h; \ + do { \ + _h.eh_value = NULL; \ + _h.eh_parent = SmExcHandler; \ + _h.eh_state = SM_EH_PUSHED; \ + SmExcHandler = &_h; \ + if (sm_setjmp_nosig(_h.eh_context) == 0) { + +# define SM_FINALLY SM_ASSERT(SmExcHandler == &_h); \ + } \ + if (sm_setjmp_nosig(_h.eh_context) == 0) { + +# define SM_EXCEPT(e,pat) } \ + if (_h.eh_state == SM_EH_HANDLED) \ + break; \ + if (_h.eh_state == SM_EH_PUSHED) { \ + SM_ASSERT(SmExcHandler == &_h); \ + SmExcHandler = _h.eh_parent; \ + } \ + _h.eh_state = sm_exc_match(_h.eh_value,pat) \ + ? SM_EH_HANDLED : SM_EH_POPPED; \ + if (_h.eh_state == SM_EH_HANDLED) { \ + SM_UNUSED(SM_EXC_T *e) = _h.eh_value; + +# define SM_END_TRY } \ + } while (0); \ + if (_h.eh_state == SM_EH_PUSHED) { \ + SM_ASSERT(SmExcHandler == &_h); \ + SmExcHandler = _h.eh_parent; \ + if (_h.eh_value != NULL) \ + sm_exc_raise_x(_h.eh_value); \ + } else if (_h.eh_state == SM_EH_POPPED) { \ + if (_h.eh_value != NULL) \ + sm_exc_raise_x(_h.eh_value); \ + } else \ + sm_exc_free(_h.eh_value); \ + } + +#endif /* SM_EXC_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/fdset.h b/gnu/usr.sbin/sendmail/include/sm/fdset.h new file mode 100644 index 00000000000..4ed50f1c04e --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/fdset.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: fdset.h,v 1.3 2001/03/30 23:45:31 geir Exp $ + */ + +#ifndef SM_FDSET_H +# define SM_FDSET_H + +# define SM_FD_SET(fd, pfdset) FD_SET(fd, pfdset) +# define SM_FD_ISSET(fd, pfdset) FD_ISSET(fd, pfdset) +# define SM_FD_SETSIZE FD_SETSIZE + +#endif /* SM_FDSET_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/gen.h b/gnu/usr.sbin/sendmail/include/sm/gen.h new file mode 100644 index 00000000000..55bacb593a7 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/gen.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: gen.h,v 1.17 2001/07/19 21:13:19 gshapiro Exp $ + */ + +/* +** libsm general definitions +** See libsm/gen.html for documentation. +*/ + +#ifndef SM_GEN_H +# define SM_GEN_H + +# include <sm/config.h> +# include <sm/cdefs.h> +# include <sm/types.h> + +/* +** Define SM_RCSID and SM_IDSTR, +** macros used to embed RCS and SCCS identification strings in object files. +*/ + +# ifdef lint +# define SM_RCSID(str) +# define SM_IDSTR(id,str) +# else /* lint */ +# define SM_RCSID(str) SM_UNUSED(static const char RcsId[]) = str; +# define SM_IDSTR(id,str) SM_UNUSED(static const char id[]) = str; +# endif /* lint */ + +/* +** Define NULL and offsetof (from the C89 standard) +*/ + +# if SM_CONF_STDDEF_H +# include <stddef.h> +# else /* SM_CONF_STDDEF_H */ +# ifndef NULL +# define NULL 0 +# endif +# define offsetof(type, member) ((size_t)(&((type *)0)->member)) +# endif /* SM_CONF_STDDEF_H */ + +/* +** Define bool, true, false (from the C99 standard) +*/ + +# if SM_CONF_STDBOOL_H +# include <stdbool.h> +# else /* SM_CONF_STDBOOL_H */ +# ifndef __cplusplus + typedef int bool; +# define false 0 +# define true 1 +# endif +# endif /* SM_CONF_STDBOOL_H */ + +/* +** Define SM_MAX and SM_MIN +*/ + +# define SM_MAX(a, b) ((a) > (b) ? (a) : (b)) +# define SM_MIN(a, b) ((a) < (b) ? (a) : (b)) + +/* Define SM_SUCCESS and SM_FAILURE */ +# define SM_SUCCESS 0 +# define SM_FAILURE (-1) + +/* XXX This needs to be fixed when we start to use threads: */ +typedef int SM_ATOMIC_INT_T; +typedef unsigned int SM_ATOMIC_UINT_T; + +#endif /* SM_GEN_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/heap.h b/gnu/usr.sbin/sendmail/include/sm/heap.h new file mode 100644 index 00000000000..aed260685df --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/heap.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: heap.h,v 1.22 2001/09/04 22:41:55 ca Exp $ + */ + +/* +** Sendmail debugging memory allocation package. +** See libsm/heap.html for documentation. +*/ + +#ifndef SM_HEAP_H +# define SM_HEAP_H + +# include <sm/io.h> +# include <stdlib.h> +# include <sm/debug.h> +# include <sm/exc.h> + +/* change default to 0 for production? */ +# ifndef SM_HEAP_CHECK +# define SM_HEAP_CHECK 1 +# endif /* ! SM_HEAP_CHECK */ + +# if SM_HEAP_CHECK +# define sm_malloc_x(sz) sm_malloc_tagged_x(sz, __FILE__, __LINE__, SmHeapGroup) +# define sm_malloc(size) sm_malloc_tagged(size, __FILE__, __LINE__, SmHeapGroup) +# define sm_free(ptr) sm_free_tagged(ptr, __FILE__, __LINE__) + +extern void *sm_malloc_tagged __P((size_t, char *, int, int)); +extern void *sm_malloc_tagged_x __P((size_t, char *, int, int)); +extern void sm_free_tagged __P((void *, char *, int)); +extern void *sm_realloc_x __P((void *, size_t)); +extern bool sm_heap_register __P((void *, size_t, char *, int, int)); +extern void sm_heap_checkptr_tagged __P((void *, char *, int)); +extern void sm_heap_report __P((SM_FILE_T *, int)); + +# else /* SM_HEAP_CHECK */ +# define sm_malloc_tagged(size, file, line, grp) sm_malloc(size) +# define sm_malloc_tagged_x(size, file, line, grp) sm_malloc_x(size) +# define sm_free_tagged(ptr, file, line) sm_free(ptr) +# define sm_heap_register(ptr, size, file, line, grp) (true) +# define sm_heap_checkptr_tagged(ptr, tag, num) ((void)0) +# define sm_heap_report(file, verbose) ((void)0) + +extern void *sm_malloc __P((size_t)); +extern void *sm_malloc_x __P((size_t)); +extern void *sm_realloc_x __P((void *, size_t)); +extern void sm_free __P((void *)); +# endif /* SM_HEAP_CHECK */ + +extern void *sm_realloc __P((void *, size_t)); + +# define sm_heap_checkptr(ptr) sm_heap_checkptr_tagged(ptr, __FILE__, __LINE__) + +#if 0 +/* +** sm_f[mc]alloc are plug in replacements for malloc and calloc +** which can be used in a context requiring a function pointer, +** and which are compatible with sm_free. Warning: sm_heap_report +** cannot report where storage leaked by sm_f[mc]alloc was allocated. +*/ + +/* XXX unused right now */ + +extern void * +sm_fmalloc __P(( + size_t)); + +extern void * +sm_fcalloc __P(( + size_t, + size_t)); +#endif /* 0 */ + +/* +** Allocate 'permanent' storage that can be freed but may still be +** allocated when the process exits. sm_heap_report will not complain +** about a storage leak originating from a call to sm_pmalloc. +*/ + +# define sm_pmalloc(size) sm_malloc_tagged(size, __FILE__, __LINE__, 0) +# define sm_pmalloc_x(size) sm_malloc_tagged_x(size, __FILE__, __LINE__, 0) + +# define sm_heap_group() SmHeapGroup +# define sm_heap_setgroup(g) (SmHeapGroup = (g)) +# define sm_heap_newgroup() (SmHeapGroup = ++SmHeapMaxGroup) + +extern int SmHeapGroup; +extern int SmHeapMaxGroup; + +extern SM_DEBUG_T SmHeapTrace; +extern SM_DEBUG_T SmHeapCheck; +extern SM_EXC_T SmHeapOutOfMemory; + +#endif /* ! SM_HEAP_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/io.h b/gnu/usr.sbin/sendmail/include/sm/io.h new file mode 100644 index 00000000000..9d019f727fe --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/io.h @@ -0,0 +1,382 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * Copyright (c) 1990 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Chris Torek. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: io.h,v 1.19 2001/07/10 21:56:46 gshapiro Exp $ + */ + +/*- + * @(#)stdio.h 5.17 (Berkeley) 6/3/91 + */ + +#ifndef SM_IO_H +#define SM_IO_H + +#include <stdio.h> +#include <sm/gen.h> +#include <sm/varargs.h> + +/* mode for sm io (exposed) */ +#define SM_IO_RDWR 1 /* read-write */ +#define SM_IO_RDONLY 2 /* read-only */ +#define SM_IO_WRONLY 3 /* write-only */ +#define SM_IO_APPEND 4 /* write-only from eof */ +#define SM_IO_APPENDRW 5 /* read-write from eof */ +#define SM_IO_RDWRTR 6 /* read-write with truncation indicated */ + +/* for sm_io_fseek, et al api's (exposed) */ +#define SM_IO_SEEK_SET 0 +#define SM_IO_SEEK_CUR 1 +#define SM_IO_SEEK_END 2 + +/* flags for info what's with different types (exposed) */ +#define SM_IO_WHAT_MODE 1 +#define SM_IO_WHAT_VECTORS 2 +#define SM_IO_WHAT_FD 3 +#define SM_IO_WHAT_TYPE 4 +#define SM_IO_WHAT_ISTYPE 5 +#define SM_IO_IS_READABLE 6 +#define SM_IO_WHAT_TIMEOUT 7 + +/* info flags (exposed) */ +#define SM_IO_FTYPE_CREATE 1 +#define SM_IO_FTYPE_MODIFY 2 +#define SM_IO_FTYPE_DELETE 3 + +#define SM_IO_SL_PRIO 1 + +#define SM_IO_OPEN_MAX 20 + +/* for internal buffers */ +struct smbuf +{ + unsigned char *smb_base; + int smb_size; +}; + +/* +** sm I/O state variables (internal only). +** +** The following always hold: +** +** if (flags&(SMLBF|SMWR)) == (SMLBF|SMWR), +** lbfsize is -bf.size, else lbfsize is 0 +** if flags&SMRD, w is 0 +** if flags&SMWR, r is 0 +** +** This ensures that the getc and putc macros (or inline functions) never +** try to write or read from a file that is in `read' or `write' mode. +** (Moreover, they can, and do, automatically switch from read mode to +** write mode, and back, on "r+" and "w+" files.) +** +** lbfsize is used only to make the inline line-buffered output stream +** code as compact as possible. +** +** ub, up, and ur are used when ungetc() pushes back more characters +** than fit in the current bf, or when ungetc() pushes back a character +** that does not match the previous one in bf. When this happens, +** ub.base becomes non-nil (i.e., a stream has ungetc() data iff +** ub.base!=NULL) and up and ur save the current values of p and r. +*/ + +typedef struct sm_file SM_FILE_T; + +struct sm_file +{ + const char *sm_magic; /* This SM_FILE_T is free when NULL */ + unsigned char *f_p; /* current position in (some) buffer */ + int f_r; /* read space left for getc() */ + int f_w; /* write space left for putc() */ + long f_flags; /* flags, below */ + short f_file; /* fileno, if Unix fd, else -1 */ + struct smbuf f_bf; /* the buffer (>= 1 byte, if !NULL) */ + int f_lbfsize; /* 0 or -bf.size, for inline putc */ + + /* These can be used for any purpose by a file type implementation: */ + void *f_cookie; + int f_ival; + + /* operations */ + int (*f_close) __P((SM_FILE_T *)); + ssize_t (*f_read) __P((SM_FILE_T *, char *, size_t)); + off_t (*f_seek) __P((SM_FILE_T *, off_t, int)); + ssize_t (*f_write) __P((SM_FILE_T *, const char *, size_t)); + int (*f_open) __P((SM_FILE_T *, const void *, int, + const void *)); + int (*f_setinfo) __P((SM_FILE_T *, int , void *)); + int (*f_getinfo) __P((SM_FILE_T *, int , void *)); + int f_timeout; + int f_timeoutstate; /* either blocking or non-blocking */ + char *f_type; /* for by-type lookups */ + void *f_self; /* self for reference */ + struct sm_file *f_flushfp; /* flush this before reading parent */ + struct sm_file *f_modefp; /* sync mode with this fp */ + + /* separate buffer for long sequences of ungetc() */ + struct smbuf f_ub; /* ungetc buffer */ + unsigned char *f_up; /* saved f_p when f_p is doing ungetc */ + int f_ur; /* saved f_r when f_r is counting ungetc */ + + /* tricks to meet minimum requirements even when malloc() fails */ + unsigned char f_ubuf[3]; /* guarantee an ungetc() buffer */ + unsigned char f_nbuf[1]; /* guarantee a getc() buffer */ + + /* separate buffer for fgetln() when line crosses buffer boundary */ + struct smbuf f_lb; /* buffer for fgetln() */ + + /* Unix stdio files get aligned to block boundaries on fseek() */ + int f_blksize; /* stat.st_blksize (may be != bf.size) */ + off_t f_lseekoff; /* current lseek offset */ + int f_dup_cnt; /* count file dup'd */ +}; + +__BEGIN_DECLS +extern SM_FILE_T SmIoF[]; +extern const char SmFileMagic[]; +extern SM_FILE_T SmFtStdio_def; +extern SM_FILE_T SmFtStdiofd_def; +extern SM_FILE_T SmFtString_def; +extern SM_FILE_T SmFtSyslog_def; +extern SM_FILE_T SmFtRealStdio_def; + +#define SMIOIN_FILENO 0 +#define SMIOOUT_FILENO 1 +#define SMIOERR_FILENO 2 +#define SMIOSTDIN_FILENO 3 +#define SMIOSTDOUT_FILENO 4 +#define SMIOSTDERR_FILENO 5 + +/* Common predefined and already (usually) open files (exposed) */ +#define smioin (&SmIoF[SMIOIN_FILENO]) +#define smioout (&SmIoF[SMIOOUT_FILENO]) +#define smioerr (&SmIoF[SMIOERR_FILENO]) +#define smiostdin (&SmIoF[SMIOSTDIN_FILENO]) +#define smiostdout (&SmIoF[SMIOSTDOUT_FILENO]) +#define smiostderr (&SmIoF[SMIOSTDERR_FILENO]) + +#define SmFtStdio (&SmFtStdio_def) +#define SmFtStdiofd (&SmFtStdiofd_def) +#define SmFtString (&SmFtString_def) +#define SmFtSyslog (&SmFtSyslog_def) +#define SmFtRealStdio (&SmFtRealStdio_def) + +#ifdef __STDC__ +# define SM_IO_SET_TYPE(f, name, open, close, read, write, seek, get, set, timeout) \ + (f) = {SmFileMagic, (unsigned char *) 0, 0, 0, 0L, -1, {0}, 0, (void *) 0,\ + 0, (close), (read), (seek), (write), (open), (set), (get), (timeout),\ + 0, (name)} +# define SM_IO_INIT_TYPE(f, name, open, close, read, write, seek, get, set, timeout) + +#else /* __STDC__ */ +# define SM_IO_SET_TYPE(f, name, open, close, read, write, seek, get, set, timeout) (f) +# define SM_IO_INIT_TYPE(f, name, open, close, read, write, seek, get, set, timeout) \ + (f).sm_magic = SmFileMagic; \ + (f).f_p = (unsigned char *) 0; \ + (f).f_r = 0; \ + (f).f_w = 0; \ + (f).f_flags = 0L; \ + (f).f_file = 0; \ + (f).f_bf.smb_base = (unsigned char *) 0; \ + (f).f_bf.smb_size = 0; \ + (f).f_lbfsize = 0; \ + (f).f_cookie = (void *) 0; \ + (f).f_ival = 0; \ + (f).f_close = (close); \ + (f).f_read = (read); \ + (f).f_seek = (seek); \ + (f).f_write = (write); \ + (f).f_open = (open); \ + (f).f_setinfo = (set); \ + (f).f_getinfo = (get); \ + (f).f_timeout = (timeout); \ + (f).f_timeoutstate = 0; \ + (f).f_type = (name); + +#endif /* __STDC__ */ + +__END_DECLS + +/* Internal flags */ +#define SMFBF 0x000001 /* XXXX fully buffered */ +#define SMLBF 0x000002 /* line buffered */ +#define SMNBF 0x000004 /* unbuffered */ +#define SMNOW 0x000008 /* Flush each write; take read now */ +#define SMRD 0x000010 /* OK to read */ +#define SMWR 0x000020 /* OK to write */ + /* RD and WR are never simultaneously asserted */ +#define SMRW 0x000040 /* open for reading & writing */ +#define SMFEOF 0x000080 /* found EOF */ +#define SMERR 0x000100 /* found error */ +#define SMMBF 0x000200 /* buf is from malloc */ +#define SMAPP 0x000400 /* fdopen()ed in append mode */ +#define SMSTR 0x000800 /* this is an snprintf string */ +#define SMOPT 0x001000 /* do fseek() optimisation */ +#define SMNPT 0x002000 /* do not do fseek() optimisation */ +#define SMOFF 0x004000 /* set iff offset is in fact correct */ +#define SMALC 0x010000 /* allocate string space dynamically */ + +#define SMACCESSMASK 0x0070 +#define SMMODEMASK 0x011C + +/* defines for timeout constants */ +#define SM_TIME_IMMEDIATE (0) +#define SM_TIME_FOREVER (-1) +#define SM_TIME_DEFAULT (-2) + +/* timeout state for blocking */ +#define SM_TIME_BLOCK (0) /* XXX just bool? */ +#define SM_TIME_NONBLOCK (1) + +/* Exposed buffering type flags */ +#define SM_IO_FBF 0 /* setvbuf should set fully buffered */ +#define SM_IO_LBF 1 /* setvbuf should set line buffered */ +#define SM_IO_NBF 2 /* setvbuf should set unbuffered */ + +/* setvbuf buffered, but through at lower file type layers */ +#define SM_IO_NOW 3 + +/* +** size of buffer used by setbuf. +** If underlying filesystem blocksize is discoverable that is used instead +*/ + +#define SM_IO_BUFSIZ 4096 + +#define SM_IO_EOF (-1) + +/* Functions defined in ANSI C standard. */ +__BEGIN_DECLS +SM_FILE_T *sm_io_autoflush __P((SM_FILE_T *, SM_FILE_T *)); +void sm_io_automode __P((SM_FILE_T *, SM_FILE_T *)); +void sm_io_clearerr __P((SM_FILE_T *)); +int sm_io_close __P((SM_FILE_T *, int SM_NONVOLATILE)); +SM_FILE_T *sm_io_dup __P((SM_FILE_T *)); +int sm_io_eof __P((SM_FILE_T *)); +int sm_io_error __P((SM_FILE_T *)); +char *sm_io_fgets __P((SM_FILE_T *, int, char *, int)); +int sm_io_flush __P((SM_FILE_T *, int SM_NONVOLATILE)); + +int PRINTFLIKE(3, 4) +sm_io_fprintf __P((SM_FILE_T *, int, const char *, ...)); + +int sm_io_fputs __P((SM_FILE_T *, int, const char *)); + +int SCANFLIKE(3, 4) +sm_io_fscanf __P((SM_FILE_T *, int, const char *, ...)); + +int sm_io_getc __P((SM_FILE_T *, int)); +int sm_io_getinfo __P((SM_FILE_T *, int, void *)); +SM_FILE_T *sm_io_open __P((const SM_FILE_T *, int SM_NONVOLATILE, const void *, + int, const void *)); +int sm_io_purge __P((SM_FILE_T *)); +int sm_io_putc __P((SM_FILE_T *, int, int)); +size_t sm_io_read __P((SM_FILE_T *, int, void *, size_t)); +SM_FILE_T *sm_io_reopen __P((const SM_FILE_T *, int SM_NONVOLATILE, + const void *, int, const void *, SM_FILE_T *)); +void sm_io_rewind __P((SM_FILE_T *, int)); +int sm_io_seek __P((SM_FILE_T *, int SM_NONVOLATILE, long SM_NONVOLATILE, + int SM_NONVOLATILE)); +int sm_io_setinfo __P((SM_FILE_T *, int, void *)); +int sm_io_setvbuf __P((SM_FILE_T *, int, char *, int, size_t)); + +int SCANFLIKE(2, 3) +sm_io_sscanf __P((const char *, char const *, ...)); + +long sm_io_tell __P((SM_FILE_T *, int SM_NONVOLATILE)); +int sm_io_ungetc __P((SM_FILE_T *, int, int)); +int sm_io_vfprintf __P((SM_FILE_T *, int, const char *, va_list)); +size_t sm_io_write __P((SM_FILE_T *, int, const void *, size_t)); + +void sm_strio_init __P((SM_FILE_T *, char *, size_t)); + +extern SM_FILE_T * +sm_io_fopen __P(( + char *_pathname, + int _flags, + ...)); + +extern SM_FILE_T * +sm_io_stdioopen __P(( + FILE *_stream, + char *_mode)); + +extern int +sm_vasprintf __P(( + char **_str, + const char *_fmt, + va_list _ap)); + +extern int +sm_vsnprintf __P(( + char *, + size_t, + const char *, + va_list)); + +extern void +sm_perror __P(( + const char *)); + +__END_DECLS + +/* +** Functions internal to the implementation. +*/ + +__BEGIN_DECLS +int sm_rget __P((SM_FILE_T *, int)); +int sm_vfscanf __P((SM_FILE_T *, int SM_NONVOLATILE, const char *, + va_list SM_NONVOLATILE)); +int sm_wbuf __P((SM_FILE_T *, int, int)); +__END_DECLS + +/* +** The macros are here so that we can +** define function versions in the library. +*/ + +#define sm_getc(f, t) \ + (--(f)->f_r < 0 ? \ + sm_rget(f, t) : \ + (int)(*(f)->f_p++)) + +/* +** This has been tuned to generate reasonable code on the vax using pcc. +** (It also generates reasonable x86 code using gcc.) +*/ + +#define sm_putc(f, t, c) \ + (--(f)->f_w < 0 ? \ + (f)->f_w >= (f)->f_lbfsize ? \ + (*(f)->f_p = (c)), *(f)->f_p != '\n' ? \ + (int)*(f)->f_p++ : \ + sm_wbuf(f, t, '\n') : \ + sm_wbuf(f, t, (int)(c)) : \ + (*(f)->f_p = (c), (int)*(f)->f_p++)) + +#define sm_eof(p) (((p)->f_flags & SMFEOF) != 0) +#define sm_error(p) (((p)->f_flags & SMERR) != 0) +#define sm_clearerr(p) ((void)((p)->f_flags &= ~(SMERR|SMFEOF))) + +#define sm_io_eof(p) sm_eof(p) +#define sm_io_error(p) sm_error(p) + +#define sm_io_clearerr(p) sm_clearerr(p) + +#ifndef lint +# ifndef _POSIX_SOURCE +# define sm_io_getc(fp, t) sm_getc(fp, t) +# define sm_io_putc(fp, t, x) sm_putc(fp, t, x) +# endif /* _POSIX_SOURCE */ +#endif /* lint */ + +#endif /* SM_IO_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/ldap.h b/gnu/usr.sbin/sendmail/include/sm/ldap.h new file mode 100644 index 00000000000..062e957df4e --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/ldap.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: ldap.h,v 1.4 2001/04/18 07:06:52 gshapiro Exp $ + */ + +#ifndef SM_LDAP_H +# define SM_LDAP_H + +# include <sm/conf.h> + +# ifndef LDAPMAP_MAX_ATTR +# define LDAPMAP_MAX_ATTR 64 +# endif /* ! LDAPMAP_MAX_ATTR */ +# ifndef LDAPMAP_MAX_FILTER +# define LDAPMAP_MAX_FILTER 1024 +# endif /* ! LDAPMAP_MAX_FILTER */ +# ifndef LDAPMAP_MAX_PASSWD +# define LDAPMAP_MAX_PASSWD 256 +# endif /* ! LDAPMAP_MAX_PASSWD */ + +# if LDAPMAP +struct sm_ldap_struct +{ + /* needed for ldap_open or ldap_init */ + char *ldap_host; + int ldap_port; + pid_t ldap_pid; + + /* options set in ld struct before ldap_bind_s */ + int ldap_deref; + time_t ldap_timelimit; + int ldap_sizelimit; + int ldap_options; + + /* args for ldap_bind_s */ + LDAP *ldap_ld; + char *ldap_binddn; + char *ldap_secret; + int ldap_method; + + /* args for ldap_search */ + char *ldap_base; + int ldap_scope; + char *ldap_filter; + char *ldap_attr[LDAPMAP_MAX_ATTR + 1]; + bool ldap_attrsonly; + + /* args for ldap_result */ + struct timeval ldap_timeout; + LDAPMessage *ldap_res; + + /* ldapmap_lookup options */ + char ldap_attrsep; + + /* Linked list of maps sharing the same LDAP binding */ + void *ldap_next; +}; + +typedef struct sm_ldap_struct SM_LDAP_STRUCT; + +/* functions */ +extern void sm_ldap_clear __P((SM_LDAP_STRUCT *)); +extern bool sm_ldap_start __P((char *, SM_LDAP_STRUCT *)); +extern int sm_ldap_search __P((SM_LDAP_STRUCT *, char *)); +extern void sm_ldap_setopts __P((LDAP *, SM_LDAP_STRUCT *)); +extern int sm_ldap_geterrno __P((LDAP *)); +extern void sm_ldap_close __P((SM_LDAP_STRUCT *)); +# endif /* LDAPMAP */ + +#endif /* ! SM_LDAP_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/limits.h b/gnu/usr.sbin/sendmail/include/sm/limits.h new file mode 100644 index 00000000000..18079da1fb2 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/limits.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: limits.h,v 1.6 2001/03/08 03:23:08 ca Exp $ + */ + +/* +** <sm/limits.h> +** This header file is a portability wrapper for <limits.h>. +** It includes <limits.h>, then it ensures that the following macros +** from the C 1999 standard for <limits.h> are defined: +** LLONG_MIN, LLONG_MAX +** ULLONG_MAX +*/ + +#ifndef SM_LIMITS_H +# define SM_LIMITS_H + +# include <limits.h> +# include <sm/types.h> +# include <sys/param.h> + +/* +** The following assumes two's complement binary arithmetic. +*/ + +# ifndef LLONG_MIN +# define LLONG_MIN ((LONGLONG_T)(~(ULLONG_MAX >> 1))) +# endif /* ! LLONG_MIN */ +# ifndef LLONG_MAX +# define LLONG_MAX ((LONGLONG_T)(ULLONG_MAX >> 1)) +# endif /* ! LLONG_MAX */ +# ifndef ULLONG_MAX +# define ULLONG_MAX ((ULONGLONG_T)(-1)) +# endif /* ! ULLONG_MAX */ + +/* +** PATH_MAX is defined by the POSIX standard. All modern systems +** provide it. Older systems define MAXPATHLEN in <sys/param.h> instead. +*/ + +# ifndef PATH_MAX +# ifdef MAXPATHLEN +# define PATH_MAX MAXPATHLEN +# else /* MAXPATHLEN */ +# define PATH_MAX 2048 +# endif /* MAXPATHLEN */ +# endif /* ! PATH_MAX */ + +#endif /* ! SM_LIMITS_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/mbdb.h b/gnu/usr.sbin/sendmail/include/sm/mbdb.h new file mode 100644 index 00000000000..f25d85c713d --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/mbdb.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: mbdb.h,v 1.4 2001/03/08 03:23:08 ca Exp $ + */ + +#ifndef SM_MBDB_H +# define SM_MBDB_H + +#include <pwd.h> +#include <sm/types.h> +#include <sm/limits.h> + +/* +** This is an abstract interface for looking up local mail recipients. +*/ + +#define MBDB_MAXNAME 256 +#define SM_NO_UID ((uid_t)(-1)) +#define SM_NO_GID ((gid_t)(-1)) + +typedef struct +{ + uid_t mbdb_uid; + gid_t mbdb_gid; + char mbdb_name[MBDB_MAXNAME]; + char mbdb_fullname[MBDB_MAXNAME]; + char mbdb_homedir[PATH_MAX + 1]; + char mbdb_shell[PATH_MAX + 1]; +} SM_MBDB_T; + +extern int sm_mbdb_initialize __P((char *)); +extern void sm_mbdb_terminate __P((void)); +extern int sm_mbdb_lookup __P((char *, SM_MBDB_T *)); +extern void sm_mbdb_frompw __P((SM_MBDB_T *, struct passwd *)); +extern void sm_pwfullname __P((char *, char *, char *, size_t)); + +#endif /* ! SM_MBDB_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_aix.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_aix.h new file mode 100644 index 00000000000..f4472cccbda --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_aix.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_aix.h,v 1.7 2001/04/20 17:04:23 ca Exp $ + */ + +/* +** sm_os_aix.h -- platform definitions for AIX +*/ + +#define SM_OS_NAME "aix" + +#ifndef SM_CONF_SHM +# define SM_CONF_SHM 1 +#endif /* SM_CONF_SHM */ +#ifndef SM_CONF_SEM +# define SM_CONF_SEM 2 +#endif /* SM_CONF_SEM */ +#ifndef SM_CONF_MSG +# define SM_CONF_MSG 1 +#endif /* SM_CONF_MSG */ + +/* AIX 3 doesn't have a prototype for syslog()? */ +#ifdef _AIX3 +# ifndef _AIX4 +# ifndef SM_CONF_SYSLOG +# define SM_CONF_SYSLOG 0 +# endif /* SM_CONF_SYSLOG */ +# endif /* ! _AIX4 */ +#endif /* _AIX3 */ diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_freebsd.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_freebsd.h new file mode 100644 index 00000000000..84055e6ca55 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_freebsd.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_freebsd.h,v 1.9 2001/06/27 21:46:48 gshapiro Exp $ + */ + +/* +** Platform definitions for FreeBSD +*/ + +#define SM_OS_NAME "freebsd" + +#define SM_CONF_SYS_CDEFS_H 1 + +#if __FreeBSD__ >= 2 +# include <osreldate.h> /* defines __FreeBSD_version */ +# if __FreeBSD_version >= 199512 /* 2.2-current when it appeared */ +# define MI_SOMAXCONN -1 /* listen() max backlog for milter */ +# endif /* __FreeBSD_version >= 199512 */ +# if __FreeBSD_version >= 330000 + /* 3.3.0-release and later have strlcpy()/strlcat() */ +# ifndef SM_CONF_STRL +# define SM_CONF_STRL 1 +# endif +# endif +#endif + +#ifndef SM_CONF_SHM +# define SM_CONF_SHM 1 +#endif /* SM_CONF_SHM */ +#ifndef SM_CONF_SEM +# define SM_CONF_SEM 1 +#endif /* SM_CONF_SEM */ +#ifndef SM_CONF_MSG +# define SM_CONF_MSG 1 +#endif /* SM_CONF_MSG */ diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_hp.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_hp.h new file mode 100644 index 00000000000..6615d541570 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_hp.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2000 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_hp.h,v 1.6 2000/12/05 19:00:47 dmoen Exp $ + */ + +/* +** sm_os_hp.h -- platform definitions for HP +*/ + +#define SM_OS_NAME "hp" + +#ifndef SM_CONF_SHM +# define SM_CONF_SHM 1 +#endif /* SM_CONF_SHM */ +#ifndef SM_CONF_SEM +# define SM_CONF_SEM 2 +#endif /* SM_CONF_SEM */ +#ifndef SM_CONF_MSG +# define SM_CONF_MSG 1 +#endif /* SM_CONF_MSG */ diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_irix.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_irix.h new file mode 100644 index 00000000000..7151c477fc4 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_irix.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_irix.h,v 1.5 2001/03/18 18:07:25 ca Exp $ + */ + +/* +** Silicon Graphics IRIX +** +** Compiles on 4.0.1. +** +** Use IRIX64 instead of IRIX for 64-bit IRIX (6.0). +** Use IRIX5 instead of IRIX for IRIX 5.x. +** +** This version tries to be adaptive using _MIPS_SIM: +** _MIPS_SIM == _ABIO32 (= 1) Abi: -32 on IRIX 6.2 +** _MIPS_SIM == _ABIN32 (= 2) Abi: -n32 on IRIX 6.2 +** _MIPS_SIM == _ABI64 (= 3) Abi: -64 on IRIX 6.2 +** +** _MIPS_SIM is 1 also on IRIX 5.3 +** +** IRIX64 changes from Mark R. Levinson <ml@cvdev.rochester.edu>. +** IRIX5 changes from Kari E. Hurtta <Kari.Hurtta@fmi.fi>. +** Adaptive changes from Kari E. Hurtta <Kari.Hurtta@fmi.fi>. +*/ + +#ifndef IRIX +# define IRIX +#endif /* ! IRIX */ +#if _MIPS_SIM > 0 && !defined(IRIX5) +# define IRIX5 /* IRIX5 or IRIX6 */ +#endif /* _MIPS_SIM > 0 && !defined(IRIX5) */ +#if _MIPS_SIM > 1 && !defined(IRIX6) && !defined(IRIX64) +# define IRIX6 /* IRIX6 */ +#endif /* _MIPS_SIM > 1 && !defined(IRIX6) && !defined(IRIX64) */ + +#define SM_OS_NAME "irix" + +#if defined(IRIX6) || defined(IRIX64) +# define SM_CONF_LONGLONG 1 +#endif /* defined(IRIX6) || defined(IRIX64) */ + +#if defined(IRIX64) || defined(IRIX5) || defined(IRIX6) +# define SM_CONF_SYS_CDEFS_H 1 +#endif /* defined(IRIX64) || defined(IRIX5) || defined(IRIX6) */ + +/* try LLONG tests in libsm/t-types.c? */ +#ifndef SM_CONF_TEST_LLONG +# define SM_CONF_TEST_LLONG 0 +#endif /* !SM_CONF_TEST_LLONG */ diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_linux.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_linux.h new file mode 100644 index 00000000000..ce7e0cc79ce --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_linux.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_linux.h,v 1.11 2001/03/15 22:39:43 ca Exp $ + */ + +/* +** Platform definitions for Linux +*/ + +#define SM_OS_NAME "linux" + +# if !defined(KERNEL_VERSION) /* not defined in 2.0.x kernel series */ +# define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) +# endif /* ! KERNEL_VERSION */ + +/* doesn't seem to work on Linux */ +#ifndef SM_CONF_SETITIMER +# define SM_CONF_SETITIMER 0 +#endif /* SM_CONF_SETITIMER */ + +#ifndef SM_CONF_SHM +# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,19)) +# define SM_CONF_SHM 1 +# endif /* LINUX_VERSION_CODE */ +#endif /* SM_CONF_SHM */ + +#define SM_CONF_SYS_CDEFS_H 1 +#ifndef SM_CONF_SEM +# define SM_CONF_SEM 2 +#endif /* SM_CONF_SEM */ +#ifndef SM_CONF_MSG +# define SM_CONF_MSG 1 +#endif /* SM_CONF_MSG */ diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_next.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_next.h new file mode 100644 index 00000000000..2afaa777136 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_next.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_next.h,v 1.7 2001/04/03 01:53:06 gshapiro Exp $ + */ + +/* +** Platform definitions for NeXT +*/ + +#define SM_OS_NAME "next" + +#define SM_CONF_SIGSETJMP 0 +#define SM_CONF_SSIZE_T 0 +#define SM_CONF_FORMAT_TEST 0 + +/* doesn't seem to work on NeXT 3.x */ +#define SM_DEAD(proto) proto +#define SM_UNUSED(decl) decl + +/* try LLONG tests in libsm/t-types.c? */ +#ifndef SM_CONF_TEST_LLONG +# define SM_CONF_TEST_LLONG 0 +#endif /* !SM_CONF_TEST_LLONG */ diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_openbsd.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_openbsd.h new file mode 100644 index 00000000000..02119511739 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_openbsd.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2000 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_openbsd.h,v 1.7 2000/12/05 19:00:47 dmoen Exp $ + */ + +/* +** sm_os_openbsd.h -- platform definitions for OpenBSD +** +** Note: this header file cannot be called OpenBSD.h +** because <sys/param.h> defines the macro OpenBSD. +*/ + +#define SM_OS_NAME "openbsd" + +#define SM_CONF_SYS_CDEFS_H 1 +#ifndef SM_CONF_SHM +# define SM_CONF_SHM 1 +#endif /* SM_CONF_SHM */ +#ifndef SM_CONF_SEM +# define SM_CONF_SEM 1 +#endif /* SM_CONF_SEM */ +#ifndef SM_CONF_MSG +# define SM_CONF_MSG 1 +#endif /* SM_CONF_MSG */ diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_openunix.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_openunix.h new file mode 100644 index 00000000000..3fa3721bea5 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_openunix.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_openunix.h,v 1.1 2001/08/22 17:22:34 ca Exp $ + */ + +#define SM_OS_NAME "openunix" + +/* needs alarm(), our sleep() otherwise hangs. */ +#define SM_CONF_SETITIMER 0 + +/* long long seems to work */ +#define SM_CONF_LONGLONG 1 + +#ifndef SM_CONF_SHM +# define SM_CONF_SHM 1 +#endif /* SM_CONF_SHM */ diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_osf1.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_osf1.h new file mode 100644 index 00000000000..9d6f76af904 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_osf1.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_osf1.h,v 1.1 2001/02/22 22:07:14 gshapiro Exp $ + */ + +/* +** platform definitions for Digital UNIX +*/ + +#define SM_OS_NAME "osf1" + +#define SM_CONF_SETITIMER 0 diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_sunos.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_sunos.h new file mode 100644 index 00000000000..b2d747aa2ce --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_sunos.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_sunos.h,v 1.14 2001/08/14 18:09:42 ca Exp $ + */ + +/* +** platform definitions for SunOS 4.0.3, SunOS 4.1.x and Solaris 2.x +*/ + +#define SM_OS_NAME "sunos" + +#ifdef SOLARIS +/* +** Solaris 2.x (aka SunOS 5.x) +** M4 config file is devtools/OS/SunOS.5.x, which defines the SOLARIS macro. +*/ + +# define SM_CONF_LONGLONG 1 +# ifndef SM_CONF_SHM +# define SM_CONF_SHM 1 +# endif /* SM_CONF_SHM */ +# ifndef SM_CONF_SEM +# define SM_CONF_SEM 2 +# endif /* SM_CONF_SEM */ +# ifndef SM_CONF_MSG +# define SM_CONF_MSG 1 +# endif /* SM_CONF_MSG */ + +#else /* SOLARIS */ + +/* +** SunOS 4.0.3 or 4.1.x +*/ + +# define SM_CONF_SSIZE_T 0 +# ifndef SM_CONF_BROKEN_SIZE_T +# define SM_CONF_BROKEN_SIZE_T 1 /* size_t is signed? */ +# endif /* SM_CONF_BROKEN_SIZE_T */ + +# ifndef SM_CONF_BROKEN_STRTOD +# define SM_CONF_BROKEN_STRTOD 1 +# endif /* ! SM_CONF_BROKEN_STRTOD */ + +/* has memchr() prototype? (if not: needs memory.h) */ +# ifndef SM_CONF_MEMCHR +# define SM_CONF_MEMCHR 0 +# endif /* ! SM_CONF_MEMCHR */ + +# ifdef SUNOS403 + +/* +** SunOS 4.0.3 +** M4 config file is devtools/OS/SunOS4.0, which defines the SUNOS403 macro. +*/ + +# else /* SUNOS403 */ + +/* +** SunOS 4.1.x +** M4 config file is devtools/OS/SunOS, which defines no macros. +*/ + +# endif /* SUNOS403 */ +#endif /* SOLARIS */ diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_ultrix.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_ultrix.h new file mode 100644 index 00000000000..17cab48ce9f --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_ultrix.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_ultrix.h,v 1.1 2001/01/29 21:07:31 gshapiro Exp $ + */ + +/* +** platform definitions for Ultrix +*/ + +#define SM_OS_NAME "ultrix" + +#define SM_CONF_SSIZE_T 0 diff --git a/gnu/usr.sbin/sendmail/include/sm/os/sm_os_unixware.h b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_unixware.h new file mode 100644 index 00000000000..eb88d532ea3 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/os/sm_os_unixware.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sm_os_unixware.h,v 1.4 2001/08/22 02:58:20 ca Exp $ + */ + +#define SM_OS_NAME "unixware" + +/* try LLONG tests in libsm/t-types.c? */ +#ifndef SM_CONF_TEST_LLONG +# define SM_CONF_TEST_LLONG 0 +#endif /* !SM_CONF_TEST_LLONG */ + +/* needs alarm(), our sleep() otherwise hangs. */ +#define SM_CONF_SETITIMER 0 + +#ifndef SM_CONF_SHM +# define SM_CONF_SHM 1 +#endif /* SM_CONF_SHM */ + +/* size_t seems to be signed */ +#define SM_CONF_BROKEN_SIZE_T 1 diff --git a/gnu/usr.sbin/sendmail/include/sm/path.h b/gnu/usr.sbin/sendmail/include/sm/path.h new file mode 100644 index 00000000000..aa530c6adfb --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/path.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: path.h,v 1.6 2001/04/03 01:53:00 gshapiro Exp $ + */ + +/* +** Portable names for standard filesystem paths +** and macros for directories. +*/ + +#ifndef SM_PATH_H +# define SM_PATH_H + +# include <sm/gen.h> + +# define SM_PATH_DEVNULL "/dev/null" +# define SM_IS_DIR_DELIM(c) ((c) == '/') +# define SM_FIRST_DIR_DELIM(s) strchr(s, '/') +# define SM_LAST_DIR_DELIM(s) strrchr(s, '/') + +/* Warning: this must be accessible as array */ +# define SM_IS_DIR_START(s) ((s)[0] == '/') + +# define sm_path_isdevnull(path) (strcmp(path, "/dev/null") == 0) + +#endif /* ! SM_PATH_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/rpool.h b/gnu/usr.sbin/sendmail/include/sm/rpool.h new file mode 100644 index 00000000000..cf8628fca68 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/rpool.h @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: rpool.h,v 1.15 2001/09/04 22:41:55 ca Exp $ + */ + +/* +** libsm resource pools +** See libsm/rpool.html for documentation. +*/ + +#ifndef SM_RPOOL_H +# define SM_RPOOL_H + +# include <sm/gen.h> +# include <sm/heap.h> +# include <sm/string.h> + +/* +** Each memory pool object consists of an SM_POOLLINK_T, +** followed by a platform specific amount of padding, +** followed by 'poolsize' bytes of pool data, +** where 'poolsize' is the value of rpool->sm_poolsize at the time +** the pool is allocated. +*/ + +typedef struct sm_poollink SM_POOLLINK_T; +struct sm_poollink +{ + SM_POOLLINK_T *sm_pnext; +}; + +typedef void (*SM_RPOOL_RFREE_T) __P((void *_rcontext)); + +typedef SM_RPOOL_RFREE_T *SM_RPOOL_ATTACH_T; + +typedef struct sm_resource SM_RESOURCE_T; +struct sm_resource +{ + /* + ** Function for freeing this resource. It may be NULL, + ** meaning that this resource has already been freed. + */ + + SM_RPOOL_RFREE_T sm_rfree; + void *sm_rcontext; /* resource data */ +}; + +# define SM_RLIST_MAX 511 + +typedef struct sm_rlist SM_RLIST_T; +struct sm_rlist +{ + SM_RESOURCE_T sm_rvec[SM_RLIST_MAX]; + SM_RLIST_T *sm_rnext; +}; + +typedef struct +{ + /* Points to SmRpoolMagic, or is NULL if rpool is freed. */ + const char *sm_magic; + + /* + ** If this rpool object has no parent, then sm_parentlink + ** is NULL. Otherwise, we set *sm_parentlink = NULL + ** when this rpool is freed, so that it isn't freed a + ** second time when the parent is freed. + */ + + SM_RPOOL_RFREE_T *sm_parentlink; + + /* + ** Memory pools + */ + + /* Size of the next pool to be allocated, not including the header. */ + size_t sm_poolsize; + + /* + ** If an sm_rpool_malloc_x request is too big to fit + ** in the current pool, and the request size > bigobjectsize, + ** then the object will be given its own malloc'ed block. + ** sm_bigobjectsize <= sm_poolsize. The maximum wasted space + ** at the end of a pool is maxpooledobjectsize - 1. + */ + + size_t sm_bigobjectsize; + + /* Points to next free byte in the current pool. */ + char *sm_poolptr; + + /* + ** Number of bytes available in the current pool. + ** Initially 0. Set to 0 by sm_rpool_free. + */ + + size_t sm_poolavail; + + /* Linked list of memory pools. Initially NULL. */ + SM_POOLLINK_T *sm_pools; + + /* + ** Resource lists + */ + + SM_RESOURCE_T *sm_rptr; /* Points to next free resource slot. */ + + /* + ** Number of available resource slots in current list. + ** Initially 0. Set to 0 by sm_rpool_free. + */ + + size_t sm_ravail; + + /* Linked list of resource lists. Initially NULL. */ + SM_RLIST_T *sm_rlists; + +#if _FFR_PERF_RPOOL + int sm_nbigblocks; + int sm_npools; +#endif /* _FFR_PERF_RPOOL */ + +} SM_RPOOL_T; + +extern SM_RPOOL_T * +sm_rpool_new_x __P(( + SM_RPOOL_T *_parent)); + +extern void +sm_rpool_free __P(( + SM_RPOOL_T *_rpool)); + +# if SM_HEAP_CHECK +extern void * +sm_rpool_malloc_tagged_x __P(( + SM_RPOOL_T *_rpool, + size_t _size, + char *_file, + int _line, + int _group)); +# define sm_rpool_malloc_x(rpool, size) \ + sm_rpool_malloc_tagged_x(rpool, size, __FILE__, __LINE__, SmHeapGroup) +extern void * +sm_rpool_malloc_tagged __P(( + SM_RPOOL_T *_rpool, + size_t _size, + char *_file, + int _line, + int _group)); +# define sm_rpool_malloc(rpool, size) \ + sm_rpool_malloc_tagged(rpool, size, __FILE__, __LINE__, SmHeapGroup) +# else /* SM_HEAP_CHECK */ +extern void * +sm_rpool_malloc_x __P(( + SM_RPOOL_T *_rpool, + size_t _size)); +extern void * +sm_rpool_malloc __P(( + SM_RPOOL_T *_rpool, + size_t _size)); +# endif /* SM_HEAP_CHECK */ + +# define sm_rpool_strdup_x(rpool, str) \ + strcpy(sm_rpool_malloc_x(rpool, strlen(str) + 1), str) + +extern SM_RPOOL_ATTACH_T +sm_rpool_attach_x __P(( + SM_RPOOL_T *_rpool, + SM_RPOOL_RFREE_T _rfree, + void *_rcontext)); + +# define sm_rpool_detach(a) ((void)(*(a) = NULL)) + +extern void +sm_rpool_setsizes __P(( + SM_RPOOL_T *_rpool, + size_t _poolsize, + size_t _bigobjectsize)); + +#endif /* ! SM_RPOOL_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/setjmp.h b/gnu/usr.sbin/sendmail/include/sm/setjmp.h new file mode 100644 index 00000000000..8bb43738515 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/setjmp.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: setjmp.h,v 1.3 2001/03/08 03:23:08 ca Exp $ + */ + +#ifndef SM_SETJMP_H +# define SM_SETJMP_H + +# include <sm/config.h> +# include <setjmp.h> + +/* +** sm_setjmp_sig is a setjmp that saves the signal mask. +** sm_setjmp_nosig is a setjmp that does *not* save the signal mask. +** SM_JMPBUF_T is used with both of the above macros. +** +** On most systems, these can be implemented using sigsetjmp. +** Some old BSD systems do not have sigsetjmp, but they do have +** setjmp and _setjmp, which are just as good. +*/ + +# if SM_CONF_SIGSETJMP + +typedef sigjmp_buf SM_JMPBUF_T; +# define sm_setjmp_sig(buf) sigsetjmp(buf, 1) +# define sm_setjmp_nosig(buf) sigsetjmp(buf, 0) +# define sm_longjmp_sig(buf, val) siglongjmp(buf, val) +# define sm_longjmp_nosig(buf, val) siglongjmp(buf, val) + +# else /* SM_CONF_SIGSETJMP */ + +typedef jmp_buf SM_JMPBUF_T; +# define sm_setjmp_sig(buf) setjmp(buf) +# define sm_longjmp_sig(buf, val) longjmp(buf, val) +# define sm_setjmp_nosig(buf) _setjmp(buf) +# define sm_longjmp_nosig(buf, val) _longjmp(buf, val) + +# endif /* SM_CONF_SIGSETJMP */ + +#endif /* ! SM_SETJMP_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/shm.h b/gnu/usr.sbin/sendmail/include/sm/shm.h new file mode 100644 index 00000000000..6efbfbc57e6 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/shm.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: shm.h,v 1.7 2001/04/20 15:21:55 ca Exp $ + */ + +#ifndef SM_SHM_H +# define SM_SHM_H + +# if SM_CONF_SHM +# include <sys/types.h> +# include <sys/ipc.h> +# include <sys/shm.h> + +/* # include "def.h" */ + +/* key for shared memory */ +# define SM_SHM_KEY ((key_t) 42) + +/* return value for failed shmget() */ +# define SM_SHM_NULL ((void *) -1) +# define SM_SHM_NO_ID (-1) +# define SM_NO_SHM(id) ((id) < 0) + +extern void *sm_shmstart __P((key_t, int , int , int *, bool)); +extern int sm_shmstop __P((void *, int, bool)); + +/* for those braindead systems... (e.g., SunOS 4) */ +# ifndef SHM_R +# define SHM_R 0400 +# endif /* SHM_R */ +# ifndef SHM_W +# define SHM_W 0200 +# endif /* SHM_W */ + +# endif /* SM_CONF_SHM */ +#endif /* ! SM_SHM_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/signal.h b/gnu/usr.sbin/sendmail/include/sm/signal.h new file mode 100644 index 00000000000..b059b745242 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/signal.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: signal.h,v 1.16 2001/07/20 19:48:21 gshapiro Exp $ + */ + +/* +** SIGNAL.H -- libsm (and sendmail) signal facilities +** Extracted from sendmail/conf.h and focusing +** on signal configuration. +*/ + +#ifndef SM_SIGNAL_H +#define SM_SIGNAL_H 1 + +#include <sys/types.h> +#include <limits.h> +#include <signal.h> +#include <sm/cdefs.h> +#include <sm/conf.h> + +/* +** Critical signal sections +*/ + +#define PEND_SIGHUP 0x0001 +#define PEND_SIGINT 0x0002 +#define PEND_SIGTERM 0x0004 +#define PEND_SIGUSR1 0x0008 + +#define ENTER_CRITICAL() InCriticalSection++ + +#define LEAVE_CRITICAL() \ +do \ +{ \ + if (InCriticalSection > 0) \ + InCriticalSection--; \ +} while (0) + +#define CHECK_CRITICAL(sig) \ +do \ +{ \ + if (InCriticalSection > 0 && (sig) != 0) \ + { \ + pend_signal((sig)); \ + return SIGFUNC_RETURN; \ + } \ +} while (0) + +/* variables */ +extern unsigned int volatile InCriticalSection; /* >0 if in critical section */ +extern int volatile PendingSignal; /* pending signal to resend */ + +/* functions */ +extern void pend_signal __P((int)); + +/* reset signal in case System V semantics */ +#ifdef SYS5SIGNALS +# define FIX_SYSV_SIGNAL(sig, handler) \ +{ \ + if ((sig) != 0) \ + (void) sm_signal((sig), (handler)); \ +} +#else /* SYS5SIGNALS */ +# define FIX_SYSV_SIGNAL(sig, handler) { /* EMPTY */ } +#endif /* SYS5SIGNALS */ + +extern void sm_allsignals __P((bool)); +extern int sm_blocksignal __P((int)); +extern int sm_releasesignal __P((int)); +extern sigfunc_t sm_signal __P((int, sigfunc_t)); +extern SIGFUNC_DECL sm_signal_noop __P((int)); +#endif /* SM_SIGNAL_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/stdio.h b/gnu/usr.sbin/sendmail/include/sm/stdio.h new file mode 100644 index 00000000000..d4f5189b724 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/stdio.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: stdio.h,v 1.16 2001/03/08 03:23:08 ca Exp $ + */ + +#ifndef SM_STDIO_H +#define SM_STDIO_H + +#include <sm/gen.h> +#include <sm/io.h> + +/* +** We include <stdio.h> here for several reasons: +** - To force the <stdio.h> idempotency macro to be defined so that +** any future includes of <stdio.h> will have no effect; +** - To declare functions like rename() which we do not and can not override. +** Note that all of the following redefinitions of standard stdio +** apis are macros. +*/ + +#include <stdio.h> +#undef FILE +#undef _IOFBF +#undef _IOLBF +#undef EOF +#undef BUFSIZ +#undef getc +#undef putc + +/* +** Temporary for transition from stdio to sm_io. +*/ + +#define FILE SM_FILE_T +#define _IOFBF SM_IO_FBF +#define _IOLBF SM_IO_LBF +#define _SMIONBF SM_IO_NBF +#define EOF SM_IO_EOF +#define BUFSIZ SM_IO_BUFSIZ +#define fpos_t off_t + +#undef stdin +#undef stdout +#undef stderr +#undef clearerr +#undef feof +#undef ferror +#undef getc_unlocked +#undef getchar +#undef putc_unlocked +#undef putchar +#undef fileno + +#define stdin smioin +#define stdout smioout +#define stderr smioerr + +#define clearerr(f) sm_io_clearerr(f) +#define fclose(f) sm_io_close(f) +#define feof(f) sm_io_eof(f) +#define ferror(f) sm_io_error(f) +#define fflush(f) sm_io_flush(f) +#define fgetc(f) sm_io_fgetc(f) +#define fgetln(f, x) sm_io_getln(f, x) +#define fgetpos(f, p) sm_io_getpos(f, p) +#define fgets(b, n, f) sm_io_fgets(f, b, n) +#define fpurge(f) sm_io_purge(f) +#define fputc(c, f) sm_io_fputc(f, c) +#define fread(b, s, c, f) sm_io_read(f, b, s, c) +#define fseek(f, o, w) sm_io_seek(f, o, w) +#define fsetpos(f, p) sm_io_setpos(f, p) +#define ftell(f) sm_io_tell(f) +#define fwrite(b, s, c, f) sm_io_write(f, b, s, c) +#define getc(f) sm_io_getc(f) +#define getc_unlocked(f) sm_io_getc_unlocked(f) +#define getchar() sm_io_getc(smioout) +#define putc(c, f) sm_io_putc(f, c) +#define putc_unlocked(c, f) sm_io_putc_unlocked(f, c) +#define putchar(c) sm_io_putc(smioout, c) +#define rewind(f) sm_io_rewind(f) +#define setbuf(f, b) (void)sm_io_setvbuf(f, b, b ? SM_IO_FBF : \ + SM_IO_NBF, SM_IO_BUFSIZ); +#define setbuffer(f, b, size) (void)sm_io_setvbuf(f, b, b ? SM_IO_FBF : \ + SM_IO_NBF, size); +#define setlinebuf(f) sm_io_setvbuf(f, (char *)NULL, SM_IO_LBF, (size_t)0); +#define setvbuf(f, b, m, size) sm_io_setvbuf(f, b, m, size) +#define ungetc(c, f) sm_io_ungetc(f, c) + +#define fileno(fp) sm_io_getinfo(fp, SM_IO_WHAT_FD, NULL) +#define fopen(path, mode) ((FILE *)sm_io_open(SmFtStdio, (void *)(fd), (strcmp((mode), "r")==0?SM_IO_RDONLY:strcmp((mode), "w")==0?SM_IO_WRONLY:SM_IO_RDWR), NULL)) +#define freopen(path, mode, fp) ((FILE *)sm_io_reopen(SmFtStdio, (path), (strcmp((mode), "w")==0?SM_IO_WRONLY:SM_IO_RDONLY), NULL, (fp)) +#define fdopen(fd, mode) ((FILE *)sm_io_open(SmFtStdiofd, (void *)(fd), (strcmp((mode), "r")==0?SM_IO_RDONLY:strcmp((mode), "w")==0?SM_IO_WRONLY:SM_IO_RDWR), NULL)) + +/* the following have variable arg counts */ +#define fscanf sm_io_fscanf +#define fprintf sm_io_fprintf +#define printf( sm_io_printf(smioout, +#define snprintf sm_io_snprintf +#define vsnprintf sm_io_vsnprintf +#define vfprintf sm_io_vfprintf + +#endif /* SM_STDIO_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/string.h b/gnu/usr.sbin/sendmail/include/sm/string.h new file mode 100644 index 00000000000..5cf078a1303 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/string.h @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: string.h,v 1.36 2001/06/17 21:31:11 ca Exp $ + */ + +/* +** libsm string manipulation +*/ + +#ifndef SM_STRING_H +# define SM_STRING_H + +# include <sm/gen.h> +# include <sm/varargs.h> +# include <string.h> /* strlc{py,at}, strerror */ + +/* return number of bytes left in a buffer */ +#define SPACELEFT(buf, ptr) (sizeof buf - ((ptr) - buf)) + +extern int PRINTFLIKE(3, 4) +sm_snprintf __P(( + char *, + size_t, + const char *, + ...)); + +extern bool +sm_match __P(( + const char *_str, + const char *_pattern)); + +extern char * +sm_strdup __P(( + char *)); + +extern char * +sm_strndup_x __P(( + const char *_str, + size_t _len)); + +/* for "normal" data (free'd before end of process) */ +# define sm_strdup_x(str) strcpy(sm_malloc_x(strlen(str) + 1), str) + +/* for data that is supposed to be persistent. */ +# define sm_pstrdup_x(str) strcpy(sm_pmalloc_x(strlen(str) + 1), str) + +# define sm_strdup_tagged_x(str, file, line, group) \ + strcpy(sm_malloc_tagged_x(strlen(str) + 1, file, line, group), str) + +extern char * +sm_stringf_x __P(( + const char *_fmt, + ...)); + +extern char * +sm_vstringf_x __P(( + const char *_fmt, + va_list _ap)); + +extern size_t +sm_strlcpy __P(( + char *_dst, + const char *_src, + ssize_t _len)); + +extern size_t +sm_strlcat __P(( + char *_dst, + const char *_src, + ssize_t _len)); + +extern size_t +sm_strlcat2 __P(( + char *, + const char *, + const char *, + ssize_t)); + +extern size_t +#ifdef __STDC__ +sm_strlcpyn(char *dst, ssize_t len, int n, ...); +#else /* __STDC__ */ +sm_strlcpyn __P((char *, + ssize_t, + int, + va_dcl)); +#endif /* __STDC__ */ + +# if !HASSTRERROR +extern char * +strerror __P(( + int _errno)); +# endif /* !HASSTRERROR */ + +extern int +sm_strrevcmp __P(( + const char *, + const char *)); + +extern int +sm_strrevcasecmp __P(( + const char *, + const char *)); + +extern int +sm_strcasecmp __P(( + const char *, + const char *)); + +extern int +sm_strncasecmp __P(( + const char *, + const char *, + size_t)); + +extern LONGLONG_T +sm_strtoll __P(( + const char *, + char**, int)); + +extern ULONGLONG_T +sm_strtoull __P(( + const char *, + char**, int)); + +extern void +stripquotes __P((char *)); + +#endif /* SM_STRING_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/sysexits.h b/gnu/usr.sbin/sendmail/include/sm/sysexits.h new file mode 100644 index 00000000000..dffb26f769b --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/sysexits.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * Copyright (c) 1987, 1993 + * The Regents of the University of California. All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sysexits.h,v 1.5 2001/03/10 17:30:01 ca Exp $ + * @(#)sysexits.h 8.1 (Berkeley) 6/2/93 + */ + +#ifndef SM_SYSEXITS_H +# define SM_SYSEXITS_H + +# include <sm/gen.h> + +/* +** SYSEXITS.H -- Exit status codes for system programs. +** +** This include file attempts to categorize possible error +** exit statuses for system programs, notably delivermail +** and the Berkeley network. +** +** Error numbers begin at EX__BASE to reduce the possibility of +** clashing with other exit statuses that random programs may +** already return. The meaning of the codes is approximately +** as follows: +** +** EX_USAGE -- The command was used incorrectly, e.g., with +** the wrong number of arguments, a bad flag, a bad +** syntax in a parameter, or whatever. +** EX_DATAERR -- The input data was incorrect in some way. +** This should only be used for user's data & not +** system files. +** EX_NOINPUT -- An input file (not a system file) did not +** exist or was not readable. This could also include +** errors like "No message" to a mailer (if it cared +** to catch it). +** EX_NOUSER -- The user specified did not exist. This might +** be used for mail addresses or remote logins. +** EX_NOHOST -- The host specified did not exist. This is used +** in mail addresses or network requests. +** EX_UNAVAILABLE -- A service is unavailable. This can occur +** if a support program or file does not exist. This +** can also be used as a catchall message when something +** you wanted to do doesn't work, but you don't know +** why. +** EX_SOFTWARE -- An internal software error has been detected. +** This should be limited to non-operating system related +** errors as possible. +** EX_OSERR -- An operating system error has been detected. +** This is intended to be used for such things as "cannot +** fork", "cannot create pipe", or the like. It includes +** things like getuid returning a user that does not +** exist in the passwd file. +** EX_OSFILE -- Some system file (e.g., /etc/passwd, /etc/utmp, +** etc.) does not exist, cannot be opened, or has some +** sort of error (e.g., syntax error). +** EX_CANTCREAT -- A (user specified) output file cannot be +** created. +** EX_IOERR -- An error occurred while doing I/O on some file. +** EX_TEMPFAIL -- temporary failure, indicating something that +** is not really an error. In sendmail, this means +** that a mailer (e.g.) could not create a connection, +** and the request should be reattempted later. +** EX_PROTOCOL -- the remote system returned something that +** was "not possible" during a protocol exchange. +** EX_NOPERM -- You did not have sufficient permission to +** perform the operation. This is not intended for +** file system problems, which should use NOINPUT or +** CANTCREAT, but rather for higher level permissions. +*/ + +# if SM_CONF_SYSEXITS_H +# include <sysexits.h> +# else /* SM_CONF_SYSEXITS_H */ + +# define EX_OK 0 /* successful termination */ + +# define EX__BASE 64 /* base value for error messages */ + +# define EX_USAGE 64 /* command line usage error */ +# define EX_DATAERR 65 /* data format error */ +# define EX_NOINPUT 66 /* cannot open input */ +# define EX_NOUSER 67 /* addressee unknown */ +# define EX_NOHOST 68 /* host name unknown */ +# define EX_UNAVAILABLE 69 /* service unavailable */ +# define EX_SOFTWARE 70 /* internal software error */ +# define EX_OSERR 71 /* system error (e.g., can't fork) */ +# define EX_OSFILE 72 /* critical OS file missing */ +# define EX_CANTCREAT 73 /* can't create (user) output file */ +# define EX_IOERR 74 /* input/output error */ +# define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */ +# define EX_PROTOCOL 76 /* remote error in protocol */ +# define EX_NOPERM 77 /* permission denied */ +# define EX_CONFIG 78 /* configuration error */ + +# define EX__MAX 78 /* maximum listed value */ + +# endif /* SM_CONF_SYSEXITS_H */ + +extern char *sm_strexit __P((int)); +extern char *sm_sysexitmsg __P((int)); +extern char *sm_sysexmsg __P((int)); + +#endif /* ! SM_SYSEXITS_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/sysstat.h b/gnu/usr.sbin/sendmail/include/sm/sysstat.h new file mode 100644 index 00000000000..28e1d388a03 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/sysstat.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: sysstat.h,v 1.5 2001/04/03 01:53:01 gshapiro Exp $ + */ + +/* +** This is a wrapper for <sys/stat.h> that fixes portability problems. +*/ + +#ifndef SM_SYSSTAT_H +# define SM_SYSSTAT_H + +# include <sys/stat.h> + +/* +** Some platforms lack lstat() +*/ + +# ifndef S_ISLNK +# define lstat(fn, st) stat(fn, st) +# endif /* ! S_ISLNK */ + +#endif /* ! SM_SYSSTAT_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/test.h b/gnu/usr.sbin/sendmail/include/sm/test.h new file mode 100644 index 00000000000..1ae9e14ee43 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/test.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: test.h,v 1.6 2001/04/03 01:53:01 gshapiro Exp $ + */ + +/* +** Abstractions for writing a libsm test program. +*/ + +#ifndef SM_TEST_H +# define SM_TEST_H + +# include <sm/gen.h> + +# if defined(__STDC__) || defined(__cplusplus) +# define SM_TEST(cond) sm_test(cond, #cond, __FILE__, __LINE__) +# else /* defined(__STDC__) || defined(__cplusplus) */ +# define SM_TEST(cond) sm_test(cond, "cond", __FILE__, __LINE__) +# endif /* defined(__STDC__) || defined(__cplusplus) */ + +extern int SmTestIndex; +extern int SmTestNumErrors; + +extern void +sm_test_begin __P(( + int _argc, + char **_argv, + char *_testname)); + +extern bool +sm_test __P(( + bool _success, + char *_expr, + char *_filename, + int _lineno)); + +extern int +sm_test_end __P((void)); + +#endif /* ! SM_TEST_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/types.h b/gnu/usr.sbin/sendmail/include/sm/types.h new file mode 100644 index 00000000000..e98dbb332df --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/types.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: types.h,v 1.13 2001/04/03 01:53:01 gshapiro Exp $ + */ + +/* +** This header file defines standard integral types. +** - It includes <sys/types.h>, and fixes portability problems that +** exist on older Unix platforms. +** - It defines LONGLONG_T and ULONGLONG_T, which are portable locutions +** for 'long long' and 'unsigned long long'. +*/ + +#ifndef SM_TYPES_H +# define SM_TYPES_H + +# include <sm/config.h> + +/* +** On BSD 4.2 systems, <sys/types.h> was not idempotent. +** This problem is circumvented by replacing all occurrences +** of <sys/types.h> with <sm/types.h>, which is idempotent. +*/ + +# include <sys/types.h> + +/* +** On some old Unix platforms, some of the standard types are missing. +** We fix that here. +*/ + +# if !SM_CONF_UID_GID +# define uid_t int +# define gid_t int +# endif /* !SM_CONF_UID_GID */ + +# if !SM_CONF_SSIZE_T +# define ssize_t int +# endif /* !SM_CONF_SSIZE_T */ + +/* +** Define LONGLONG_T and ULONGLONG_T, which are portable locutions +** for 'long long' and 'unsigned long long' from the C 1999 standard. +*/ + +# if SM_CONF_LONGLONG + typedef long long LONGLONG_T; + typedef unsigned long long ULONGLONG_T; +# else /* SM_CONF_LONGLONG */ +# if SM_CONF_QUAD_T + typedef quad_t LONGLONG_T; + typedef u_quad_t ULONGLONG_T; +# else /* SM_CONF_QUAD_T */ + typedef long LONGLONG_T; + typedef unsigned long ULONGLONG_T; +# endif /* SM_CONF_QUAD_T */ +# endif /* SM_CONF_LONGLONG */ + +#endif /* ! SM_TYPES_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/varargs.h b/gnu/usr.sbin/sendmail/include/sm/varargs.h new file mode 100644 index 00000000000..6857b307a6d --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/varargs.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: varargs.h,v 1.6 2001/04/23 17:58:27 ca Exp $ + */ + +/* +** libsm variable argument lists +** See libsm/varargs.html for documentation. +*/ + +#ifndef SM_VARARGS_H +# define SM_VARARGS_H + +# if defined(__STDC__) || defined(__cplusplus) +# define SM_VA_STD 1 +# include <stdarg.h> +# define SM_VA_START(ap, f) va_start(ap, f) +# else /* defined(__STDC__) || defined(__cplusplus) */ +# define SM_VA_STD 0 +# include <varargs.h> +# define SM_VA_START(ap, f) va_start(ap) +# endif /* defined(__STDC__) || defined(__cplusplus) */ + +# if defined(va_copy) +# define SM_VA_COPY(dst, src) va_copy((dst), (src)) +# elif defined(__va_copy) +# define SM_VA_COPY(dst, src) __va_copy((dst), (src)) +# else +# define SM_VA_COPY(dst, src) (dst) = (src) +# endif + +/* +** The following macros are useless, but are provided for symmetry. +*/ + +# define SM_VA_LOCAL_DECL va_list ap; +# define SM_VA_ARG(ap, type) va_arg(ap, type) +# define SM_VA_END(ap) va_end(ap) + +#endif /* ! SM_VARARGS_H */ diff --git a/gnu/usr.sbin/sendmail/include/sm/xtrap.h b/gnu/usr.sbin/sendmail/include/sm/xtrap.h new file mode 100644 index 00000000000..e03d19ae762 --- /dev/null +++ b/gnu/usr.sbin/sendmail/include/sm/xtrap.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + * + * $Sendmail: xtrap.h,v 1.7 2001/04/03 01:53:01 gshapiro Exp $ + */ + +/* +** scaffolding for testing exception handler code +*/ + +#ifndef SM_XTRAP_H +# define SM_XTRAP_H + +# include <sm/debug.h> +# include <sm/exc.h> + +extern SM_ATOMIC_UINT_T SmXtrapCount; +extern SM_DEBUG_T SmXtrapDebug; +extern SM_DEBUG_T SmXtrapReport; + +# if SM_DEBUG_CHECK +# define sm_xtrap_check() (++SmXtrapCount == sm_debug_level(&SmXtrapDebug)) +# else /* SM_DEBUG_CHECK */ +# define sm_xtrap_check() (0) +# endif /* SM_DEBUG_CHECK */ + +# define sm_xtrap_raise_x(exc) \ + if (sm_xtrap_check()) \ + { \ + sm_exc_raise_x(exc); \ + } else + +#endif /* ! SM_XTRAP_H */ |