diff options
Diffstat (limited to 'contrib/sendmail/include')
| -rw-r--r-- | contrib/sendmail/include/libmilter/mfapi.h | 124 | ||||
| -rw-r--r-- | contrib/sendmail/include/libmilter/mfdef.h | 141 | ||||
| -rw-r--r-- | contrib/sendmail/include/libmilter/milter.h | 31 | ||||
| -rw-r--r-- | contrib/sendmail/include/sm/conf.h | 89 | ||||
| -rw-r--r-- | contrib/sendmail/include/sm/errstring.h | 6 | ||||
| -rw-r--r-- | contrib/sendmail/include/sm/heap.h | 14 | ||||
| -rw-r--r-- | contrib/sendmail/include/sm/ldap.h | 31 | ||||
| -rw-r--r-- | contrib/sendmail/include/sm/misc.h | 19 | ||||
| -rw-r--r-- | contrib/sendmail/include/sm/os/sm_os_qnx.h | 20 | ||||
| -rw-r--r-- | contrib/sendmail/include/sm/sendmail.h | 24 | ||||
| -rw-r--r-- | contrib/sendmail/include/sm/tailq.h | 153 | 
11 files changed, 505 insertions, 147 deletions
| diff --git a/contrib/sendmail/include/libmilter/mfapi.h b/contrib/sendmail/include/libmilter/mfapi.h index 6b85403d0e7f9..4338645dc85a1 100644 --- a/contrib/sendmail/include/libmilter/mfapi.h +++ b/contrib/sendmail/include/libmilter/mfapi.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 1999-2004 Sendmail, Inc. and its suppliers. + * Copyright (c) 1999-2004, 2006 Sendmail, Inc. and its suppliers.   *	All rights reserved.   *   * By using this file, you agree to the terms and conditions set @@ -7,7 +7,7 @@   * the sendmail distribution.   *   * - *	$Id: mfapi.h,v 8.61 2006/05/04 17:02:01 ca Exp $ + *	$Id: mfapi.h,v 8.77 2006/11/02 02:44:07 ca Exp $   */  /* @@ -18,9 +18,13 @@  # define _LIBMILTER_MFAPI_H	1  #ifndef SMFI_VERSION -# define SMFI_VERSION	2		/* version number */ +# define SMFI_VERSION	0x01000000	/* libmilter version number */  #endif /* ! SMFI_VERSION */ +#define SM_LM_VRS_MAJOR(v)	(((v) & 0x7f000000) >> 24) +#define SM_LM_VRS_MINOR(v)	(((v) & 0x007fff00) >> 8) +#define SM_LM_VRS_PLVL(v)	((v) & 0x0000007f) +  # include <sys/types.h>  # include <sys/socket.h> @@ -40,11 +44,14 @@ extern "C" {  /*  **  libmilter functions return one of the following to indicate -**  success/failure: +**  success/failure(/continue):  */  #define MI_SUCCESS	0  #define MI_FAILURE	(-1) +#if _FFR_WORKERS_POOL +# define MI_CONTINUE	1 +#endif /* _FFR_WORKERS_POOL */  /* "forward" declarations */  typedef struct smfi_str SMFICTX; @@ -128,15 +135,24 @@ struct smfiDesc  	/* connection cleanup */  	sfsistat	(*xxfi_close) SM__P((SMFICTX *)); -#if SMFI_VERSION > 2  	/* any unrecognized or unimplemented command filter */ -	sfsistat	(*xxfi_unknown) SM__P((SMFICTX *, char *)); -#endif /* SMFI_VERSION > 2 */ +	sfsistat	(*xxfi_unknown) SM__P((SMFICTX *, const char *)); -#if SMFI_VERSION > 3  	/* SMTP DATA command filter */  	sfsistat	(*xxfi_data) SM__P((SMFICTX *)); -#endif /* SMFI_VERSION > 3 */ + +	/* negotiation callback */ +	sfsistat	(*xxfi_negotiate) SM__P((SMFICTX *, +					unsigned long, unsigned long, +					unsigned long, unsigned long, +					unsigned long *, unsigned long *, +					unsigned long *, unsigned long *)); + +#if 0 +	/* signal handler callback, not yet implemented. */ +	int		(*xxfi_signal) SM__P((int)); +#endif +  };  LIBMILTER_API int smfi_opensocket __P((bool)); @@ -150,6 +166,7 @@ LIBMILTER_API int smfi_stop __P((void));  #if _FFR_MAXDATASIZE  LIBMILTER_API size_t smfi_setmaxdatasize __P((size_t));  #endif /* _FFR_MAXDATASIZE */ +LIBMILTER_API int smfi_version __P((unsigned int *, unsigned int *, unsigned int *));  /*  **  What the filter might do -- values to be ORed together for @@ -165,6 +182,33 @@ LIBMILTER_API size_t smfi_setmaxdatasize __P((size_t));  #define SMFIF_CHGHDRS	0x00000010L	/* filter may change/delete headers */  #define SMFIF_QUARANTINE 0x00000020L	/* filter may quarantine envelope */ +/* filter may change "from" (envelope sender) */ +#define SMFIF_CHGFROM	0x00000040L +#define SMFIF_ADDRCPT_PAR	0x00000080L	/* add recipients incl. args */ + +/* filter can send set of symbols (macros) that it wants */ +#define SMFIF_SETSYMLIST	0x00000100L + + +/* +**  Macro "places"; +**  Notes: +**  - must be coordinated with libmilter/engine.c and sendmail/milter.c +**  - the order MUST NOT be changed as it would break compatibility between +**	different versions. It's ok to append new entries however +**	(hence the list is not sorted by the SMT protocol steps). +*/ + +#define SMFIM_FIRST	0	/* Do NOT use, internal marker only */ +#define SMFIM_CONNECT	0	/* connect */ +#define SMFIM_HELO	1	/* HELO/EHLO */ +#define SMFIM_ENVFROM	2	/* MAIL From */ +#define SMFIM_ENVRCPT	3	/* RCPT To */ +#define SMFIM_DATA	4	/* DATA */ +#define SMFIM_EOM	5	/* end of message (final dot) */ +#define SMFIM_EOH	6	/* end of header */ +#define SMFIM_LAST	6	/* Do NOT use, internal marker only */ +  /*  **  Continue processing message/connection.  */ @@ -209,6 +253,21 @@ LIBMILTER_API size_t smfi_setmaxdatasize __P((size_t));  #define SMFIS_TEMPFAIL	4 +/* +**  Do not send a reply to the MTA +*/ + +#define SMFIS_NOREPLY	7 + +/* +**  Skip over rest of same callbacks, e.g., body. +*/ + +#define SMFIS_SKIP	8 + +/* xxfi_negotiate: use all existing protocol options/actions */ +#define SMFIS_ALL_OPTS	10 +  #if 0  /*  **  Filter Routine Details @@ -261,12 +320,12 @@ extern sfsistat	xxfi_envrcpt __P((SMFICTX *, char **));  /* unknown command filter */ -extern sfsistat	*xxfi_unknown __P((SMFICTX *, char *)); +extern sfsistat	*xxfi_unknown __P((SMFICTX *, const char *));  /*  **  xxfi_unknown(ctx, arg) Invoked when SMTP command is not recognized or not  **  implemented. -**	char *arg; Null-terminated SMTP command +**	const char *arg; Null-terminated SMTP command  */  /* header filter */ @@ -414,6 +473,17 @@ LIBMILTER_API int smfi_insheader __P((SMFICTX *, int, char *, char *));  **	char *headerv; Header field value  */ +LIBMILTER_API int smfi_chgfrom __P((SMFICTX *, char *, char *)); + +/* +**  Modify envelope sender address +** +**	SMFICTX *ctx; Opaque context structure +**	char *mail; New envelope sender address +**	char *args; ESMTP arguments +*/ + +  LIBMILTER_API int smfi_addrcpt __P((SMFICTX *, char *));  /* @@ -423,6 +493,17 @@ LIBMILTER_API int smfi_addrcpt __P((SMFICTX *, char *));  **	char *rcpt; Recipient to be added  */ +LIBMILTER_API int smfi_addrcpt_par __P((SMFICTX *, char *, char *)); + +/* +**  Add a recipient to the envelope +** +**	SMFICTX *ctx; Opaque context structure +**	char *rcpt; Recipient to be added +**	char *args; ESMTP arguments +*/ + +  LIBMILTER_API int smfi_delrcpt __P((SMFICTX *, char *));  /* @@ -486,6 +567,27 @@ LIBMILTER_API int smfi_setpriv __P((SMFICTX *, void *));  LIBMILTER_API void *smfi_getpriv __P((SMFICTX *)); +/* +**  Get the private data pointer +** +**	SMFICTX *ctx; Opaque context structure +**	void *privatedata; Pointer to private data area +*/ + +LIBMILTER_API int smfi_setsymlist __P((SMFICTX *, int, char *)); + +/* +**  Set list of symbols (macros) to receive +** +**	SMFICTX *ctx; Opaque context structure +**	int where; where in the SMTP dialogue should the macros be sent +**	char *macros; list of macros (space separated) +*/ + +#if _FFR_THREAD_MONITOR +LIBMILTER_API int smfi_set_max_exec_time __P((unsigned int)); +#endif /* _FFR_THREAD_MONITOR */ +  #ifdef __cplusplus  }  #endif /* __cplusplus */ diff --git a/contrib/sendmail/include/libmilter/mfdef.h b/contrib/sendmail/include/libmilter/mfdef.h index 5b1ddff4e1c8e..674856707de4d 100644 --- a/contrib/sendmail/include/libmilter/mfdef.h +++ b/contrib/sendmail/include/libmilter/mfdef.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 1999-2005 Sendmail, Inc. and its suppliers. + * Copyright (c) 1999-2007 Sendmail, Inc. and its suppliers.   *	All rights reserved.   *   * By using this file, you agree to the terms and conditions set @@ -7,7 +7,7 @@   * the sendmail distribution.   *   * - *	$Id: mfdef.h,v 8.22 2005/08/05 21:49:04 ca Exp $ + *	$Id: mfdef.h,v 8.38 2007/03/27 18:53:48 ca Exp $   */  /* @@ -17,83 +17,94 @@  #ifndef _LIBMILTER_MFDEF_H  # define _LIBMILTER_MFDEF_H	1 +#ifndef SMFI_PROT_VERSION +# define SMFI_PROT_VERSION	6	/* MTA - libmilter protocol version */ +#endif /* SMFI_PROT_VERSION */ +  /* Shared protocol constants */ -# define MILTER_LEN_BYTES	4	/* length of 32 bit integer in bytes */ -# define MILTER_OPTLEN	(MILTER_LEN_BYTES * 3) /* length of options */ -# define MILTER_CHUNK_SIZE	65535	/* body chunk size */ -# define MILTER_MAX_DATA_SIZE	65535	/* default milter command data limit */ +#define MILTER_LEN_BYTES	4	/* length of 32 bit integer in bytes */ +#define MILTER_OPTLEN	(MILTER_LEN_BYTES * 3) /* length of options */ +#define MILTER_CHUNK_SIZE	65535	/* body chunk size */ +#define MILTER_MAX_DATA_SIZE	65535	/* default milter command data limit */  /* These apply to SMFIF_* flags */  #define SMFI_V1_ACTS	0x0000000FL	/* The actions of V1 filter */  #define SMFI_V2_ACTS	0x0000003FL	/* The actions of V2 filter */ -#define SMFI_CURR_ACTS	SMFI_V2_ACTS	/* The current version */ +#define SMFI_CURR_ACTS	0x000001FFL	/* actions of current version */  /* address families */ -# define SMFIA_UNKNOWN		'U'	/* unknown */ -# define SMFIA_UNIX		'L'	/* unix/local */ -# define SMFIA_INET		'4'	/* inet */ -# define SMFIA_INET6		'6'	/* inet6 */ +#define SMFIA_UNKNOWN		'U'	/* unknown */ +#define SMFIA_UNIX		'L'	/* unix/local */ +#define SMFIA_INET		'4'	/* inet */ +#define SMFIA_INET6		'6'	/* inet6 */  /* commands: don't use anything smaller than ' ' */ -# define SMFIC_ABORT		'A'	/* Abort */ -# define SMFIC_BODY		'B'	/* Body chunk */ -# define SMFIC_CONNECT		'C'	/* Connection information */ -# define SMFIC_MACRO		'D'	/* Define macro */ -# define SMFIC_BODYEOB		'E'	/* final body chunk (End) */ -# define SMFIC_HELO		'H'	/* HELO/EHLO */ -# define SMFIC_HEADER		'L'	/* Header */ -# define SMFIC_MAIL		'M'	/* MAIL from */ -# define SMFIC_EOH		'N'	/* EOH */ -# define SMFIC_OPTNEG		'O'	/* Option negotiation */ -# define SMFIC_QUIT		'Q'	/* QUIT */ -# define SMFIC_RCPT		'R'	/* RCPT to */ -# if SMFI_VERSION > 3 -#  define SMFIC_DATA		'T'	/* DATA */ -# endif /* SMFI_VERSION > 3 */ -# if SMFI_VERSION > 2 -#  define SMFIC_UNKNOWN		'U'	/* Any unknown command */ -# endif /* SMFI_VERSION > 2 */ +#define SMFIC_ABORT		'A'	/* Abort */ +#define SMFIC_BODY		'B'	/* Body chunk */ +#define SMFIC_CONNECT		'C'	/* Connection information */ +#define SMFIC_MACRO		'D'	/* Define macro */ +#define SMFIC_BODYEOB		'E'	/* final body chunk (End) */ +#define SMFIC_HELO		'H'	/* HELO/EHLO */ +#define SMFIC_QUIT_NC		'K'	/* QUIT but new connection follows */ +#define SMFIC_HEADER		'L'	/* Header */ +#define SMFIC_MAIL		'M'	/* MAIL from */ +#define SMFIC_EOH		'N'	/* EOH */ +#define SMFIC_OPTNEG		'O'	/* Option negotiation */ +#define SMFIC_QUIT		'Q'	/* QUIT */ +#define SMFIC_RCPT		'R'	/* RCPT to */ +#define SMFIC_DATA		'T'	/* DATA */ +#define SMFIC_UNKNOWN		'U'	/* Any unknown command */  /* actions (replies) */ -# define SMFIR_ADDRCPT		'+'	/* add recipient */ -# define SMFIR_DELRCPT		'-'	/* remove recipient */ -# define SMFIR_ACCEPT		'a'	/* accept */ -# define SMFIR_REPLBODY		'b'	/* replace body (chunk) */ -# define SMFIR_CONTINUE		'c'	/* continue */ -# define SMFIR_DISCARD		'd'	/* discard */ -# define SMFIR_CONN_FAIL	'f'	/* cause a connection failure */ -# define SMFIR_CHGHEADER	'm'	/* change header */ -# define SMFIR_PROGRESS		'p'	/* progress */ -# define SMFIR_REJECT		'r'	/* reject */ -# define SMFIR_TEMPFAIL		't'	/* tempfail */ -# define SMFIR_SHUTDOWN		'4'	/* 421: shutdown (internal to MTA) */ -# define SMFIR_ADDHEADER	'h'	/* add header */ -# define SMFIR_INSHEADER	'i'	/* insert header */ -# define SMFIR_REPLYCODE	'y'	/* reply code etc */ -# define SMFIR_QUARANTINE	'q'	/* quarantine */ +#define SMFIR_ADDRCPT		'+'	/* add recipient */ +#define SMFIR_DELRCPT		'-'	/* remove recipient */ +#define SMFIR_ADDRCPT_PAR	'2'	/* add recipient (incl. ESMTP args) */ +#define SMFIR_SHUTDOWN		'4'	/* 421: shutdown (internal to MTA) */ +#define SMFIR_ACCEPT		'a'	/* accept */ +#define SMFIR_REPLBODY		'b'	/* replace body (chunk) */ +#define SMFIR_CONTINUE		'c'	/* continue */ +#define SMFIR_DISCARD		'd'	/* discard */ +#define SMFIR_CHGFROM		'e'	/* change envelope sender (from) */ +#define SMFIR_CONN_FAIL		'f'	/* cause a connection failure */ +#define SMFIR_ADDHEADER		'h'	/* add header */ +#define SMFIR_INSHEADER		'i'	/* insert header */ +#define SMFIR_SETSYMLIST	'l'	/* set list of symbols (macros) */ +#define SMFIR_CHGHEADER		'm'	/* change header */ +#define SMFIR_PROGRESS		'p'	/* progress */ +#define SMFIR_QUARANTINE	'q'	/* quarantine */ +#define SMFIR_REJECT		'r'	/* reject */ +#define SMFIR_SKIP		's'	/* skip */ +#define SMFIR_TEMPFAIL		't'	/* tempfail */ +#define SMFIR_REPLYCODE		'y'	/* reply code etc */  /* What the MTA can send/filter wants in protocol */ -# define SMFIP_NOCONNECT 0x00000001L	/* MTA should not send connect info */ -# define SMFIP_NOHELO	0x00000002L	/* MTA should not send HELO info */ -# define SMFIP_NOMAIL	0x00000004L	/* MTA should not send MAIL info */ -# define SMFIP_NORCPT	0x00000008L	/* MTA should not send RCPT info */ -# define SMFIP_NOBODY	0x00000010L	/* MTA should not send body */ -# define SMFIP_NOHDRS	0x00000020L	/* MTA should not send headers */ -# define SMFIP_NOEOH	0x00000040L	/* MTA should not send EOH */ -# if _FFR_MILTER_NOHDR_RESP -#  define SMFIP_NOHREPL  0x00000080L	/* No reply for headers */ -# endif /* _FFR_MILTER_NOHDR_RESP */ -# define SMFIP_NOUNKNOWN 0x00000100L	/* MTA should not send unknown command */ -# define SMFIP_NODATA    0x00000200L	/* MTA should not send DATA */ +#define SMFIP_NOCONNECT 0x00000001L	/* MTA should not send connect info */ +#define SMFIP_NOHELO	0x00000002L	/* MTA should not send HELO info */ +#define SMFIP_NOMAIL	0x00000004L	/* MTA should not send MAIL info */ +#define SMFIP_NORCPT	0x00000008L	/* MTA should not send RCPT info */ +#define SMFIP_NOBODY	0x00000010L	/* MTA should not send body */ +#define SMFIP_NOHDRS	0x00000020L	/* MTA should not send headers */ +#define SMFIP_NOEOH	0x00000040L	/* MTA should not send EOH */ +#define SMFIP_NR_HDR	0x00000080L	/* No reply for headers */ +#define SMFIP_NOHREPL	SMFIP_NR_HDR	/* No reply for headers */ +#define SMFIP_NOUNKNOWN 0x00000100L /* MTA should not send unknown commands */ +#define SMFIP_NODATA    0x00000200L	/* MTA should not send DATA */ +#define SMFIP_SKIP	0x00000400L	/* MTA understands SMFIS_SKIP */ +#define SMFIP_RCPT_REJ	0x00000800L /* MTA should also send rejected RCPTs */ +#define SMFIP_NR_CONN	0x00001000L	/* No reply for connect */ +#define SMFIP_NR_HELO	0x00002000L	/* No reply for HELO */ +#define SMFIP_NR_MAIL	0x00004000L	/* No reply for MAIL */ +#define SMFIP_NR_RCPT	0x00008000L	/* No reply for RCPT */ +#define SMFIP_NR_DATA	0x00010000L	/* No reply for DATA */ +#define SMFIP_NR_UNKN	0x00020000L	/* No reply for UNKN */ +#define SMFIP_NR_EOH	0x00040000L	/* No reply for eoh */ +#define SMFIP_NR_BODY	0x00080000L	/* No reply for body chunk */ +#define SMFIP_HDR_LEADSPC 0x00100000L	/* header value leading space */ -# define SMFI_V1_PROT	0x0000003FL	/* The protocol of V1 filter */ -# define SMFI_V2_PROT	0x0000007FL	/* The protocol of V2 filter */ +#define SMFI_V1_PROT	0x0000003FL	/* The protocol of V1 filter */ +#define SMFI_V2_PROT	0x0000007FL	/* The protocol of V2 filter */ -/* Note: the "current" version is now determined dynamically in milter.c */ -# if _FFR_MILTER_NOHDR_RESP -#  define SMFI_CURR_PROT 0x000000FFL -# else /* _FFR_MILTER_NOHDR_RESP */ -#  define SMFI_CURR_PROT SMFI_V2_PROT -# endif /* _FFR_MILTER_NOHDR_RESP */ +/* all defined protocol bits */ +#define SMFI_CURR_PROT	0x001FFFFFL  #endif /* !_LIBMILTER_MFDEF_H */ diff --git a/contrib/sendmail/include/libmilter/milter.h b/contrib/sendmail/include/libmilter/milter.h index 5178f75620fa3..061a4dbb8597b 100644 --- a/contrib/sendmail/include/libmilter/milter.h +++ b/contrib/sendmail/include/libmilter/milter.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 1999-2003 Sendmail, Inc. and its suppliers. + * Copyright (c) 1999-2003, 2006 Sendmail, Inc. and its suppliers.   *	All rights reserved.   *   * By using this file, you agree to the terms and conditions set @@ -7,7 +7,7 @@   * the sendmail distribution.   *   * - *	$Id: milter.h,v 8.39 2003/12/02 00:21:42 msk Exp $ + *	$Id: milter.h,v 8.41 2006/05/22 23:23:55 ca Exp $   */  /* @@ -25,31 +25,4 @@  typedef pthread_t	sthread_t;  typedef int		socket_t; -# define MAX_MACROS_ENTRIES	5	/* max size of macro pointer array */ - -/* -**  context for milter -**  implementation hint: -**  macros are stored in mac_buf[] as sequence of: -**  macro_name \0 macro_value -**  (just as read from the MTA) -**  mac_ptr is a list of pointers into mac_buf to the beginning of each -**  entry, i.e., macro_name, macro_value, ... -*/ - -struct smfi_str -{ -	sthread_t	ctx_id;		/* thread id */ -	socket_t	ctx_sd;		/* socket descriptor */ -	int		ctx_dbg;	/* debug level */ -	time_t		ctx_timeout;	/* timeout */ -	int		ctx_state;	/* state */ -	smfiDesc_ptr	ctx_smfi;	/* filter description */ -	unsigned long	ctx_pflags;	/* protocol flags */ -	char		**ctx_mac_ptr[MAX_MACROS_ENTRIES]; -	char		*ctx_mac_buf[MAX_MACROS_ENTRIES]; -	char		*ctx_reply;	/* reply code */ -	void		*ctx_privdata;	/* private data */ -}; -  #endif /* ! _LIBMILTER_MILTER_H */ diff --git a/contrib/sendmail/include/sm/conf.h b/contrib/sendmail/include/sm/conf.h index 919ff0db8e3d2..4f05f33ccedfc 100644 --- a/contrib/sendmail/include/sm/conf.h +++ b/contrib/sendmail/include/sm/conf.h @@ -1,5 +1,5 @@  /* - * Copyright (c) 1998-2006 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers.   *	All rights reserved.   * Copyright (c) 1983, 1995-1997 Eric P. Allman.  All rights reserved.   * Copyright (c) 1988, 1993 @@ -10,14 +10,16 @@   * the sendmail distribution.   *   * - *	$Id: conf.h,v 1.128 2006/01/27 18:43:44 ca Exp $ + *	$Id: conf.h,v 1.132 2007/03/21 23:56:18 ca Exp $   */  /*  **  CONF.H -- All user-configurable parameters for sendmail  ** -**	Send updates to sendmail@Sendmail.ORG so they will be -**	included in the next release. +**	Send updates to Sendmail.ORG so they will be +**	included in the next release; see +**	http://www.sendmail.org/email-addresses.html +**	for current e-mail address.  */  #ifndef SM_CONF_H @@ -160,6 +162,8 @@ extern void	hard_syslog();  */  # ifdef _AIX5 +#  include <sys/signal.h> +#  include <sys/wait.h>  #  define _AIX4		40300  #  define SOCKADDR_LEN_T socklen_t /* e.g., arg#3 to accept, getsockname */  #  define SOCKOPT_LEN_T	socklen_t /* arg#5 to getsockopt */ @@ -444,6 +448,7 @@ typedef int		pid_t;  #     define SMRSH_CMDDIR	"/var/adm/sm.bin"  #    endif /* ! SMRSH_CMDDIR */  #    define SL_FUDGE	34	/* fudge offset for SyslogPrefixLen */ +#    define HASLDAPGETALIASBYNAME	1	/* added in S8 */  #   endif /* SOLARIS >= 20800 || (SOLARIS < 10000 && SOLARIS >= 208) */  #   if SOLARIS >= 20900 || (SOLARIS < 10000 && SOLARIS >= 209)  #    define HASURANDOMDEV	1	/* /dev/[u]random added in S9 */ @@ -852,36 +857,64 @@ extern unsigned int sleepX __P((unsigned int seconds));  # endif /* __bsdi__ */ +# if defined(__QNX__) +#  if defined(__QNXNTO__) +/* QNX 6 */ +#   include <unix.h> +#   define HASUNSETENV	1	/* has unsetenv(3) call */ +#   define HASINITGROUPS	1	/* has initgroups(3) call */ +#   define HASSETSID	1	/* has POSIX setsid(2) call */ +#   define USESETEUID	1	/* has usable seteuid(2) call */ +#   define HASFCHMOD	1	/* has fchmod(2) syscall */ +#   define HASFCHOWN	1	/* has fchown(2) syscall */ +#   define HASUNAME	1	/* has uname(2) syscall */ +#   define HASSTRERROR	1	/* has strerror(3) */ +#   define BSD4_4_SOCKADDR	/* has sa_len */ +#   define ERRLIST_PREDEFINED	/* don't declare sys_errlist */ +#   define NETLINK	1	/* supports AF_LINK */ +#   define GIDSET_T	gid_t +#   define QUAD_T	uint64_t +#   define HASSNPRINTF	1	/* has snprintf(3) (all versions?) */ +#   define HASGETUSERSHELL 0 + +/* +**  We have a strrev() that doesn't allocate anything. +**  Make sure the one here is used. +*/ + +#   define strrev strrev_sendmail + +#  else /* defined(__QNXNTO__) */ +  /*  **  QNX 4.2x  **	Contributed by Glen McCready <glen@qnx.com>.  ** -**	Should work with all versions of QNX. +**	Should work with all versions of QNX 4.  */ -# if defined(__QNX__) -#  include <unix.h> -#  include <sys/select.h> -#  undef NGROUPS_MAX -#  define HASSETSID	1	/* has POSIX setsid(2) call */ -#  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 +#   include <unix.h> +#   include <sys/select.h> +#   undef NGROUPS_MAX +#   define HASSETSID	1	/* has POSIX setsid(2) call */ +#   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 _FILE_H_INCLUDED +#  endif /* defined(__QNXNTO__) */  # endif /* defined(__QNX__) */ diff --git a/contrib/sendmail/include/sm/errstring.h b/contrib/sendmail/include/sm/errstring.h index 2b937328fd729..1d415260c6d3e 100644 --- a/contrib/sendmail/include/sm/errstring.h +++ b/contrib/sendmail/include/sm/errstring.h @@ -6,7 +6,7 @@   * forth in the LICENSE file which can be found at the top level of   * the sendmail distribution.   * - *	$Id: errstring.h,v 1.9 2003/12/10 03:19:06 gshapiro Exp $ + *	$Id: errstring.h,v 1.10 2007/03/21 23:56:19 ca Exp $   */  /* @@ -16,6 +16,10 @@  #ifndef SM_ERRSTRING_H  # define SM_ERRSTRING_H +#if defined(__QNX__) +# define E_PSEUDOBASE	512 +#endif /* defined(__QNX__) */ +  #include <errno.h>  #if NEEDINTERRNO  extern int errno; diff --git a/contrib/sendmail/include/sm/heap.h b/contrib/sendmail/include/sm/heap.h index 8b56370153759..cd346b3553d5e 100644 --- a/contrib/sendmail/include/sm/heap.h +++ b/contrib/sendmail/include/sm/heap.h @@ -1,12 +1,12 @@  /* - * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * Copyright (c) 2000-2001, 2006 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.   * - *	$Id: heap.h,v 1.22 2001/09/04 22:41:55 ca Exp $ + *	$Id: heap.h,v 1.23 2006/08/15 00:53:46 ca Exp $   */  /* @@ -91,6 +91,16 @@ sm_fcalloc __P((  # define sm_heap_setgroup(g)	(SmHeapGroup = (g))  # define sm_heap_newgroup()	(SmHeapGroup = ++SmHeapMaxGroup) +#define SM_FREE(ptr)			\ +	do				\ +	{				\ +		if ((ptr) != NULL)	\ +		{			\ +			sm_free(ptr);	\ +			(ptr) = NULL;	\ +		}			\ +	} while (0) +  extern int SmHeapGroup;  extern int SmHeapMaxGroup; diff --git a/contrib/sendmail/include/sm/ldap.h b/contrib/sendmail/include/sm/ldap.h index 7db8355be8b71..63292f1f58450 100644 --- a/contrib/sendmail/include/sm/ldap.h +++ b/contrib/sendmail/include/sm/ldap.h @@ -1,12 +1,12 @@  /* - * Copyright (c) 2001-2003, 2005 Sendmail, Inc. and its suppliers. + * Copyright (c) 2001-2003, 2005, 2006 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.   * - *	$Id: ldap.h,v 1.28 2005/06/23 23:11:21 ca Exp $ + *	$Id: ldap.h,v 1.32 2006/08/30 22:56:58 ca Exp $   */  #ifndef	SM_LDAP_H @@ -17,7 +17,7 @@  /*  **  NOTE: These should be changed from LDAPMAP_* to SM_LDAP_* -**        in the next major release (8.13) of sendmail. +**	in the next major release (8.x+1) of sendmail.  */  # ifndef LDAPMAP_MAX_ATTR @@ -32,6 +32,13 @@  # if LDAPMAP +/* maximum number of arguments in a map lookup, see sendmail.h: MAX_MAP_ARGS */ +#  define SM_LDAP_ARGS		10 + +/* error codes from sm_ldap_search*() */ +#  define SM_LDAP_ERR		(-1)	/* generic error: ldap_search(3) */ +#  define SM_LDAP_ERR_ARG_MISS	(-2)	/* an argument is missing */ +  /* Attribute types */  #  define SM_LDAP_ATTR_NONE		(-1)  #  define SM_LDAP_ATTR_OBJCLASS	0 @@ -75,6 +82,7 @@ struct sm_ldap_struct  	int		ldap_attr_type[LDAPMAP_MAX_ATTR + 1];  	char		*ldap_attr_needobjclass[LDAPMAP_MAX_ATTR + 1];  	bool		ldap_attrsonly; +	bool		ldap_multi_args;  	/* args for ldap_result */  	struct timeval	ldap_timeout; @@ -91,18 +99,18 @@ typedef struct sm_ldap_struct		SM_LDAP_STRUCT;  struct sm_ldap_recurse_entry  { -	char *lr_search; -	int lr_type; -	LDAPURLDesc *lr_ludp; -	char **lr_attrs; -	bool lr_done; +	char		*lr_search; +	int		lr_type; +	LDAPURLDesc	*lr_ludp; +	char		**lr_attrs; +	bool		lr_done;  };  struct sm_ldap_recurse_list  { -	int lr_size; -	int lr_cnt; -	struct sm_ldap_recurse_entry **lr_data; +	int				lrl_size; +	int				lrl_cnt; +	struct sm_ldap_recurse_entry	**lrl_data;  };  typedef struct sm_ldap_recurse_entry	SM_LDAP_RECURSE_ENTRY; @@ -112,6 +120,7 @@ typedef struct sm_ldap_recurse_list	SM_LDAP_RECURSE_LIST;  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 int	sm_ldap_search_m __P((SM_LDAP_STRUCT *, char **));  extern int	sm_ldap_results __P((SM_LDAP_STRUCT *, int, int, int,  				     SM_RPOOL_T *, char **, int *, int *,  				     SM_LDAP_RECURSE_LIST *)); diff --git a/contrib/sendmail/include/sm/misc.h b/contrib/sendmail/include/sm/misc.h new file mode 100644 index 0000000000000..a9d66379bcf22 --- /dev/null +++ b/contrib/sendmail/include/sm/misc.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2006 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. + * + *	$Id: misc.h,v 1.1 2006/06/28 23:57:59 ca Exp $ + */ + +#ifndef SM_MISC_H +# define SM_MISC_H 1 + +int sm_memstat_open __P((void)); +int sm_memstat_close __P((void)); +int sm_memstat_get __P((char *, long *)); + +#endif /* ! SM_MISC_H */ diff --git a/contrib/sendmail/include/sm/os/sm_os_qnx.h b/contrib/sendmail/include/sm/os/sm_os_qnx.h new file mode 100644 index 0000000000000..9769827683933 --- /dev/null +++ b/contrib/sendmail/include/sm/os/sm_os_qnx.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2007 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. + * + *	$Id: sm_os_qnx.h,v 1.1 2007/03/21 23:56:20 ca Exp $ + */ + +/* +**  sm_os_qnx.h -- platform definitions for QNX +*/ + +#define SM_CONF_SYS_CDEFS_H	1 + +#ifndef SM_CONF_SETITIMER +# define SM_CONF_SETITIMER	0 +#endif /* SM_CONF_SETITIMER */ diff --git a/contrib/sendmail/include/sm/sendmail.h b/contrib/sendmail/include/sm/sendmail.h new file mode 100644 index 0000000000000..3008934a94b66 --- /dev/null +++ b/contrib/sendmail/include/sm/sendmail.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2006 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.H -- MTA-specific definitions for sendmail. +*/ + +#ifndef _SM_SENDMAIL_H +# define _SM_SENDMAIL_H 1 + +/* "out of band" indicator */ +#define METAQUOTE	((unsigned char)0377)	/* quotes the next octet */ + +extern int	dequote_internal_chars __P((char *, char *, int)); +extern char	*quote_internal_chars __P((char *, char *, int *)); +extern char	*str2prt __P((char *)); + +#endif /* ! _SM_SENDMAIL_H */ diff --git a/contrib/sendmail/include/sm/tailq.h b/contrib/sendmail/include/sm/tailq.h new file mode 100644 index 0000000000000..cfb09be8d0bbe --- /dev/null +++ b/contrib/sendmail/include/sm/tailq.h @@ -0,0 +1,153 @@ +/*	$OpenBSD: queue.h,v 1.30 2005/10/25 06:37:47 otto Exp $	*/ +/*	$NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $	*/ + +/* + * Copyright (c) 1991, 1993 + *	The Regents of the University of California.  All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + *	@(#)queue.h	8.5 (Berkeley) 8/20/94 + */ + +#ifndef	SM_TAILQ_H_ +#define	SM_TAILQ_H_ + +/* + * This file is a modified copy of queue.h from a BSD system: + * we only need tail queues here. + * + * A tail queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or + * after an existing element, at the head of the list, or at the end of + * the list. A tail queue may be traversed in either direction. + */ + +/* + * Tail queue definitions. + */ +#define SM_TAILQ_HEAD(name, type)					\ +struct name {								\ +	struct type *tqh_first;	/* first element */			\ +	struct type **tqh_last;	/* addr of last next element */		\ +} + +#define SM_TAILQ_HEAD_INITIALIZER(head)					\ +	{ NULL, &(head).tqh_first } + +#define SM_TAILQ_ENTRY(type)						\ +struct {								\ +	struct type *tqe_next;	/* next element */			\ +	struct type **tqe_prev;	/* address of previous next element */	\ +} + +/*  + * tail queue access methods  + */ +#define	SM_TAILQ_FIRST(head)		((head)->tqh_first) +#define	SM_TAILQ_END(head)		NULL +#define	SM_TAILQ_NEXT(elm, field)	((elm)->field.tqe_next) +#define SM_TAILQ_LAST(head, headname)					\ +	(*(((struct headname *)((head)->tqh_last))->tqh_last)) +/* XXX */ +#define SM_TAILQ_PREV(elm, headname, field)				\ +	(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) +#define	SM_TAILQ_EMPTY(head)						\ +	(SM_TAILQ_FIRST(head) == SM_TAILQ_END(head)) + +#define SM_TAILQ_FOREACH(var, head, field)				\ +	for((var) = SM_TAILQ_FIRST(head);				\ +	    (var) != SM_TAILQ_END(head);				\ +	    (var) = SM_TAILQ_NEXT(var, field)) + +#define SM_TAILQ_FOREACH_REVERSE(var, head, headname, field)		\ +	for((var) = SM_TAILQ_LAST(head, headname);			\ +	    (var) != SM_TAILQ_END(head);				\ +	    (var) = SM_TAILQ_PREV(var, headname, field)) + +/* + * Tail queue functions. + */ +#define	SM_TAILQ_INIT(head) do {					\ +	(head)->tqh_first = NULL;					\ +	(head)->tqh_last = &(head)->tqh_first;				\ +} while (0) + +#define SM_TAILQ_INSERT_HEAD(head, elm, field) do {			\ +	if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)	\ +		(head)->tqh_first->field.tqe_prev =			\ +		    &(elm)->field.tqe_next;				\ +	else								\ +		(head)->tqh_last = &(elm)->field.tqe_next;		\ +	(head)->tqh_first = (elm);					\ +	(elm)->field.tqe_prev = &(head)->tqh_first;			\ +} while (0) + +#define SM_TAILQ_INSERT_TAIL(head, elm, field) do {			\ +	(elm)->field.tqe_next = NULL;					\ +	(elm)->field.tqe_prev = (head)->tqh_last;			\ +	*(head)->tqh_last = (elm);					\ +	(head)->tqh_last = &(elm)->field.tqe_next;			\ +} while (0) + +#define SM_TAILQ_INSERT_AFTER(head, listelm, elm, field) do {		\ +	if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ +		(elm)->field.tqe_next->field.tqe_prev =			\ +		    &(elm)->field.tqe_next;				\ +	else								\ +		(head)->tqh_last = &(elm)->field.tqe_next;		\ +	(listelm)->field.tqe_next = (elm);				\ +	(elm)->field.tqe_prev = &(listelm)->field.tqe_next;		\ +} while (0) + +#define	SM_TAILQ_INSERT_BEFORE(listelm, elm, field) do {		\ +	(elm)->field.tqe_prev = (listelm)->field.tqe_prev;		\ +	(elm)->field.tqe_next = (listelm);				\ +	*(listelm)->field.tqe_prev = (elm);				\ +	(listelm)->field.tqe_prev = &(elm)->field.tqe_next;		\ +} while (0) + +#define SM_TAILQ_REMOVE(head, elm, field) do {				\ +	if (((elm)->field.tqe_next) != NULL)				\ +		(elm)->field.tqe_next->field.tqe_prev =			\ +		    (elm)->field.tqe_prev;				\ +	else								\ +		(head)->tqh_last = (elm)->field.tqe_prev;		\ +	*(elm)->field.tqe_prev = (elm)->field.tqe_next;			\ +} while (0) + +#define SM_TAILQ_REPLACE(head, elm, elm2, field) do {			\ +	if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL)	\ +		(elm2)->field.tqe_next->field.tqe_prev =		\ +		    &(elm2)->field.tqe_next;				\ +	else								\ +		(head)->tqh_last = &(elm2)->field.tqe_next;		\ +	(elm2)->field.tqe_prev = (elm)->field.tqe_prev;			\ +	*(elm2)->field.tqe_prev = (elm2);				\ +} while (0) + +#endif	/* !SM_TAILQ_H_ */ | 
