📄 sendmail.h
字号:
/*
** 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 + -