⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendmail.h

📁 < linux网络编程工具>>配套源码
💻 H
📖 第 1 页 / 共 5 页
字号:
/*
**  Symbol table definitions
*/

struct symtab
{
	char		*s_name;	/* name to be entered */
	short		s_type;		/* general type (see below) */
	short		s_len;		/* length of this entry */
	struct symtab	*s_next;	/* pointer to next in chain */
	union
	{
		BITMAP256	sv_class;	/* bit-map of word classes */
		ADDRESS		*sv_addr;	/* pointer to address header */
		MAILER		*sv_mailer;	/* pointer to mailer */
		char		*sv_alias;	/* alias */
		MAPCLASS	sv_mapclass;	/* mapping function class */
		MAP		sv_map;		/* mapping function */
		char		*sv_hostsig;	/* host signature */
		MCI		sv_mci;		/* mailer connection info */
		NAMECANON	sv_namecanon;	/* canonical name cache */
		int		sv_macro;	/* macro name => id mapping */
		int		sv_ruleset;	/* ruleset index */
		struct hdrinfo	sv_header;	/* header metainfo */
		char		*sv_service[MAXMAPSTACK]; /* service switch */
#ifdef LDAPMAP
		LDAP		*sv_ldap;	/* LDAP connection */
#endif /* LDAPMAP */
#if _FFR_MILTER
		struct milter	*sv_milter;	/* milter filter name */
#endif /* _FFR_MILTER */
	}	s_value;
};

typedef struct symtab	STAB;

/* symbol types */
#define ST_UNDEF	0	/* undefined type */
#define ST_CLASS	1	/* class map */
#define ST_ADDRESS	2	/* an address in parsed format */
#define ST_MAILER	3	/* a mailer header */
#define ST_ALIAS	4	/* an alias */
#define ST_MAPCLASS	5	/* mapping function class */
#define ST_MAP		6	/* mapping function */
#define ST_HOSTSIG	7	/* host signature */
#define ST_NAMECANON	8	/* cached canonical name */
#define ST_MACRO	9	/* macro name to id mapping */
#define ST_RULESET	10	/* ruleset index */
#define ST_SERVICE	11	/* service switch entry */
#define ST_HEADER	12	/* special header flags */
#ifdef LDAPMAP
# define ST_LDAP	13	/* LDAP connection */
#endif /* LDAPMAP */
#if _FFR_MILTER
# define ST_MILTER	14	/* milter filter */
#endif /* _FFR_MILTER */
#define ST_MCI		16	/* mailer connection info (offset) */

#define s_class		s_value.sv_class
#define s_address	s_value.sv_addr
#define s_mailer	s_value.sv_mailer
#define s_alias		s_value.sv_alias
#define s_mci		s_value.sv_mci
#define s_mapclass	s_value.sv_mapclass
#define s_hostsig	s_value.sv_hostsig
#define s_map		s_value.sv_map
#define s_namecanon	s_value.sv_namecanon
#define s_macro		s_value.sv_macro
#define s_ruleset	s_value.sv_ruleset
#define s_service	s_value.sv_service
#define s_header	s_value.sv_header
#ifdef LDAPMAP
# define s_ldap		s_value.sv_ldap
#endif /* LDAPMAP */
#if _FFR_MILTER
# define s_milter	s_value.sv_milter
#endif /* _FFR_MILTER */

/* opcodes to stab */
#define ST_FIND		0	/* find entry */
#define ST_ENTER	1	/* enter if not there */

/* functions */
extern STAB	*stab __P((char *, int, int));
extern void	stabapply __P((void (*)(STAB *, int), int));

/*
**  STRUCT 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 event
{
	time_t		ev_time;	/* time of the function call */
	void		(*ev_func)__P((int));
					/* function to call */
	int		ev_arg;		/* argument to ev_func */
	int		ev_pid;		/* pid that set this event */
	struct event	*ev_link;	/* link to next item */
};

typedef struct event	EVENT;

/* functions */
extern void	clrevent __P((EVENT *));
extern void	clear_events __P((void));
extern EVENT	*setevent __P((time_t, void(*)(), int));

/*
**  Operation, send, error, and MIME modes
**
**	The operation mode describes the basic operation of sendmail.
**	This can be set from the command line, and is "send mail" by
**	default.
**
**	The send mode tells how to send mail.  It can be set in the
**	configuration file.  It's setting determines how quickly the
**	mail will be delivered versus the load on your system.  If the
**	-v (verbose) flag is given, it will be forced to SM_DELIVER
**	mode.
**
**	The error mode tells how to return errors.
*/

#define MD_DELIVER	'm'		/* be a mail sender */
#define MD_SMTP		's'		/* run SMTP on standard input */
#define MD_ARPAFTP	'a'		/* obsolete ARPANET mode (Grey Book) */
#define MD_DAEMON	'd'		/* run as a daemon */
#define MD_FGDAEMON	'D'		/* run daemon in foreground */
#define MD_VERIFY	'v'		/* verify: don't collect or deliver */
#define MD_TEST		't'		/* test mode: resolve addrs only */
#define MD_INITALIAS	'i'		/* initialize alias database */
#define MD_PRINT	'p'		/* print the queue */
#define MD_FREEZE	'z'		/* freeze the configuration file */
#define MD_HOSTSTAT	'h'		/* print persistent host stat info */
#define MD_PURGESTAT	'H'		/* purge persistent host stat info */
#define MD_QUEUERUN	'q'		/* queue run */

/* values for e_sendmode -- send modes */
#define SM_DELIVER	'i'		/* interactive delivery */
#define SM_FORK		'b'		/* deliver in background */
#define SM_QUEUE	'q'		/* queue, don't deliver */
#define SM_DEFER	'd'		/* defer map lookups as well as queue */
#define SM_VERIFY	'v'		/* verify only (used internally) */


/* used only as a parameter to sendall */
#define SM_DEFAULT	'\0'		/* unspecified, use SendMode */

/* functions */
extern void	set_delivery_mode __P((int, ENVELOPE *));

/* values for e_errormode -- error handling modes */
#define EM_PRINT	'p'		/* print errors */
#define EM_MAIL		'm'		/* mail back errors */
#define EM_WRITE	'w'		/* write back errors */
#define EM_BERKNET	'e'		/* special berknet processing */
#define EM_QUIET	'q'		/* don't print messages (stat only) */


/* bit values for MimeMode */
#define MM_CVTMIME	0x0001		/* convert 8 to 7 bit MIME */
#define MM_PASS8BIT	0x0002		/* just send 8 bit data blind */
#define MM_MIME8BIT	0x0004		/* convert 8-bit data to MIME */


/* how to handle messages without any recipient addresses */
#define NRA_NO_ACTION		0	/* just leave it as is */
#define NRA_ADD_TO		1	/* add To: header */
#define NRA_ADD_APPARENTLY_TO	2	/* add Apparently-To: header */
#define NRA_ADD_BCC		3	/* add empty Bcc: header */
#define NRA_ADD_TO_UNDISCLOSED	4	/* add To: undisclosed:; header */


/* flags to putxline */
#define PXLF_NOTHINGSPECIAL	0	/* no special mapping */
#define PXLF_MAPFROM		0x0001	/* map From_ to >From_ */
#define PXLF_STRIP8BIT		0x0002	/* strip 8th bit */
#define PXLF_HEADER		0x0004	/* map newlines in headers */

/*
**  Privacy flags
**	These are bit values for the PrivacyFlags word.
*/

#define PRIV_PUBLIC		0	/* what have I got to hide? */
#define PRIV_NEEDMAILHELO	0x0001	/* insist on HELO for MAIL, at least */
#define PRIV_NEEDEXPNHELO	0x0002	/* insist on HELO for EXPN */
#define PRIV_NEEDVRFYHELO	0x0004	/* insist on HELO for VRFY */
#define PRIV_NOEXPN		0x0008	/* disallow EXPN command entirely */
#define PRIV_NOVRFY		0x0010	/* disallow VRFY command entirely */
#define PRIV_AUTHWARNINGS	0x0020	/* flag possible authorization probs */
#define PRIV_NORECEIPTS		0x0040	/* disallow return receipts */
#define PRIV_NOVERB		0x0100	/* disallow VERB command entirely */
#define PRIV_RESTRICTMAILQ	0x1000	/* restrict mailq command */
#define PRIV_RESTRICTQRUN	0x2000	/* restrict queue run */
#define PRIV_NOETRN		0x4000	/* disallow ETRN command entirely */
#define PRIV_NOBODYRETN		0x8000	/* do not return bodies on bounces */

/* don't give no info, anyway, anyhow */
#define PRIV_GOAWAY		(0x0fff & ~PRIV_NORECEIPTS)

/* struct defining such things */
struct prival
{
	char	*pv_name;	/* name of privacy flag */
	u_short	pv_flag;	/* numeric level */
};


/*
**  Flags passed to remotename, parseaddr, allocaddr, and buildaddr.
*/

#define RF_SENDERADDR		0x001	/* this is a sender address */
#define RF_HEADERADDR		0x002	/* this is a header address */
#define RF_CANONICAL		0x004	/* strip comment information */
#define RF_ADDDOMAIN		0x008	/* OK to do domain extension */
#define RF_COPYPARSE		0x010	/* copy parsed user & host */
#define RF_COPYPADDR		0x020	/* copy print address */
#define RF_COPYALL		(RF_COPYPARSE|RF_COPYPADDR)
#define RF_COPYNONE		0


/*
**  Flags passed to mime8to7 and putheader.
*/

#define M87F_OUTER		0	/* outer context */
#define M87F_NO8BIT		0x0001	/* can't have 8-bit in this section */
#define M87F_DIGEST		0x0002	/* processing multipart/digest */
#define M87F_NO8TO7		0x0004	/* don't do 8->7 bit conversions */

/* functions */
extern void	mime7to8 __P((MCI *, HDR *, ENVELOPE *));
extern int	mime8to7 __P((MCI *, HDR *, ENVELOPE *, char **, int));

/*
**  Flags passed to returntosender.
*/

#define RTSF_NO_BODY		0	/* send headers only */
#define RTSF_SEND_BODY		0x0001	/* include body of message in return */
#define RTSF_PM_BOUNCE		0x0002	/* this is a postmaster bounce */

/* functions */
extern int	returntosender __P((char *, ADDRESS *, int, ENVELOPE *));

/*
**  Regular UNIX sockaddrs are too small to handle ISO addresses, so
**  we are forced to declare a supertype here.
*/

#if NETINET || NETINET6 || NETUNIX || NETISO || NETNS || NETX25
union bigsockaddr
{
	struct sockaddr		sa;	/* general version */
# if NETUNIX
	struct sockaddr_un	sunix;	/* UNIX family */
# endif /* NETUNIX */
# if NETINET
	struct sockaddr_in	sin;	/* INET family */
# endif /* NETINET */
# if NETINET6
	struct sockaddr_in6	sin6;	/* INET/IPv6 */
# endif /* NETINET6 */
# if NETISO
	struct sockaddr_iso	siso;	/* ISO family */
# endif /* NETISO */
# if NETNS
	struct sockaddr_ns	sns;	/* XNS family */
# endif /* NETNS */
# if NETX25
	struct sockaddr_x25	sx25;	/* X.25 family */
# endif /* NETX25 */
};

# define SOCKADDR	union bigsockaddr

/* functions */
extern char	*anynet_ntoa __P((SOCKADDR *));
# if NETINET6
extern char	*anynet_ntop __P((struct in6_addr *, char *, size_t));
# endif /* NETINET6 */
extern char	*hostnamebyanyaddr __P((SOCKADDR *));
# if DAEMON
extern char	*validate_connection __P((SOCKADDR *, char *, ENVELOPE *));
# endif /* DAEMON */

#endif /* NETINET || NETINET6 || NETUNIX || NETISO || NETNS || NETX25 */

#if _FFR_MILTER
/*
**  Mail Filters (milter)
*/

#include <libmilter/milter.h>

#define SMFTO_WRITE	0		/* Timeout for sending information */
#define SMFTO_READ	1		/* Timeout waiting for a response */
#define SMFTO_EOM	2		/* Timeout for ACK/NAK to EOM */

#define SMFTO_NUM_TO	3		/* Total number of timeouts */

struct milter
{
	char		*mf_name;	/* filter name */
	BITMAP256	mf_flags;	/* MTA flags */
	u_long		mf_fvers;	/* filter version */
	u_long		mf_fflags;	/* filter flags */
	u_long		mf_pflags;	/* protocol flags */
	char		*mf_conn;	/* connection info */
	int		mf_sock;	/* connected socket */
	char		mf_state;	/* state of filter */
	time_t		mf_timeout[SMFTO_NUM_TO]; /* timeouts */
};

/* MTA flags */
# define SMF_REJECT		'R'	/* Reject connection on filter fail */
# define SMF_TEMPFAIL		'T'	/* tempfail connection on failure */

/* states */
# define SMFS_CLOSED		'C'	/* closed for all further actions */
# define SMFS_OPEN		'O'	/* connected to remote milter filter */
# define SMFS_INMSG		'M'	/* currently servicing a message */
# define SMFS_DONE		'D'	/* done with current message */
# define SMFS_ERROR		'E'	/* error state */
# define SMFS_READY		'R'	/* ready for action */

/* 32-bit type used by milter */
typedef SM_INT32	mi_int32;

EXTERN struct milter	*InputFilters[MAXFILTERS];
EXTERN char		*InputFilterList;
#endif /* _FFR_MILTER */

/*
**  Vendor codes
**
**	Vendors can customize sendmail to add special behaviour,
**	generally for back compatibility.  Ideally, this should
**	be set up in the .cf file using the "V" command.  However,
**	it's quite reasonable for some vendors to want the default
**	be their old version; this can be set using
**		-DVENDOR_DEFAULT=VENDOR_xxx

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -