Postfix3.3.1
mail_proto.h
[詳解]
1 #ifndef _MAIL_PROTO_H_INCLUDED_
2 #define _MAIL_PROTO_H_INCLUDED_
3 
4 /*++
5 /* NAME
6 /* mail_proto 3h
7 /* SUMMARY
8 /* mail internal and external protocol support
9 /* SYNOPSIS
10 /* #include <mail_proto.h>
11 /* DESCRIPTION
12 /* .nf
13 
14  /*
15  * System library.
16  */
17 #include <stdarg.h>
18 #include <string.h>
19 
20  /*
21  * Utility library.
22  */
23 #include <vstream.h>
24 #include <iostuff.h>
25 #include <attr.h>
26 
27  /*
28  * External protocols.
29  */
30 #define MAIL_PROTO_SMTP "SMTP"
31 #define MAIL_PROTO_ESMTP "ESMTP"
32 #define MAIL_PROTO_QMQP "QMQP"
33 
34  /*
35  * Names of services: these are the names of the UNIX-domain socket or or
36  * FIFO that a service listens on.
37  */
38 #define MAIL_SERVICE_BOUNCE "bounce"
39 #define MAIL_SERVICE_CLEANUP "cleanup"
40 #define MAIL_SERVICE_DEFER "defer"
41 #define MAIL_SERVICE_FORWARD "forward"
42 #define MAIL_SERVICE_LOCAL "local"
43 #define MAIL_SERVICE_PICKUP "pickup"
44 #define MAIL_SERVICE_QUEUE "qmgr"
45 #define MAIL_SERVICE_TLSMGR "tlsmgr"
46 #define MAIL_SERVICE_RESOLVE "resolve"
47 #define MAIL_SERVICE_REWRITE "rewrite"
48 #define MAIL_SERVICE_VIRTUAL "virtual"
49 #define MAIL_SERVICE_SMTP "smtp"
50 #define MAIL_SERVICE_SMTPD "smtpd"
51 #define MAIL_SERVICE_SHOWQ "showq"
52 #define MAIL_SERVICE_ERROR "error"
53 #define MAIL_SERVICE_RETRY "retry"
54 #define MAIL_SERVICE_FLUSH "flush"
55 #define MAIL_SERVICE_VERIFY "verify"
56 #define MAIL_SERVICE_TRACE "trace"
57 #define MAIL_SERVICE_RELAY "relay"
58 #define MAIL_SERVICE_PROXYMAP "proxymap"
59 #define MAIL_SERVICE_PROXYWRITE "proxywrite"
60 #define MAIL_SERVICE_SCACHE "scache"
61 #define MAIL_SERVICE_DNSBLOG "dnsblog"
62 #define MAIL_SERVICE_TLSPROXY "tlsproxy"
63 
64  /*
65  * Mail source classes. Used to specify policy decisions for content
66  * inspection and SMTPUTF8 detection.
67  */
68 #define MAIL_SRC_NAME_SENDMAIL "sendmail" /* sendmail(1) */
69 #define MAIL_SRC_NAME_SMTPD "smtpd" /* smtpd(8) */
70 #define MAIL_SRC_NAME_QMQPD "qmqpd" /* qmqpd(8) */
71 #define MAIL_SRC_NAME_FORWARD "forward" /* local(8) forward/alias */
72 #define MAIL_SRC_NAME_BOUNCE "bounce"/* bounce(8) */
73 #define MAIL_SRC_NAME_NOTIFY "notify"/* protocol etc. errors */
74 #define MAIL_SRC_NAME_VERIFY "verify"/* protocol etc. errors */
75 #define MAIL_SRC_NAME_ALL "all" /* all sources */
76 
77 #define MAIL_SRC_MASK_SENDMAIL (1<<0) /* sendmail(1) */
78 #define MAIL_SRC_MASK_SMTPD (1<<1) /* smtpd(8) */
79 #define MAIL_SRC_MASK_QMQPD (1<<2) /* qmqpd(8) */
80 #define MAIL_SRC_MASK_FORWARD (1<<3) /* local(8) forward/alias */
81 #define MAIL_SRC_MASK_BOUNCE (1<<4) /* bounce(8) */
82 #define MAIL_SRC_MASK_NOTIFY (1<<5) /* protocol etc. errors */
83 #define MAIL_SRC_MASK_VERIFY (1<<6) /* protocol etc. errors */
84 
85 #define MAIL_SRC_MASK_ALL \
86  ( MAIL_SRC_MASK_SENDMAIL | MAIL_SRC_MASK_SMTPD \
87  | MAIL_SRC_MASK_QMQPD | MAIL_SRC_MASK_FORWARD \
88  | MAIL_SRC_MASK_BOUNCE | MAIL_SRC_MASK_NOTIFY \
89  | MAIL_SRC_MASK_VERIFY)
90 
91  /*
92  * Well-known socket or FIFO directories. The main difference is in file
93  * access permissions.
94  */
95 #define MAIL_CLASS_PUBLIC "public"
96 #define MAIL_CLASS_PRIVATE "private"
97 
98  /*
99  * Generic triggers.
100  */
101 #define TRIGGER_REQ_WAKEUP 'W' /* wakeup */
102 
103  /*
104  * Queue manager requests.
105  */
106 #define QMGR_REQ_SCAN_DEFERRED 'D' /* scan deferred queue */
107 #define QMGR_REQ_SCAN_INCOMING 'I' /* scan incoming queue */
108 #define QMGR_REQ_FLUSH_DEAD 'F' /* flush dead xport/site */
109 #define QMGR_REQ_SCAN_ALL 'A' /* ignore time stamps */
110 
111  /*
112  * Functional interface.
113  */
114 extern VSTREAM *mail_connect(const char *, const char *, int);
115 extern VSTREAM *mail_connect_wait(const char *, const char *);
116 extern int mail_command_client(const char *, const char *,...);
117 extern int mail_command_server(VSTREAM *,...);
118 extern int mail_trigger(const char *, const char *, const char *, ssize_t);
119 extern char *mail_pathname(const char *, const char *);
120 
121  /*
122  * Attribute names.
123  */
124 #define MAIL_ATTR_REQ "request"
125 #define MAIL_ATTR_NREQ "nrequest"
126 #define MAIL_ATTR_STATUS "status"
127 
128 #define MAIL_ATTR_FLAGS "flags"
129 #define MAIL_ATTR_QUEUE "queue_name"
130 #define MAIL_ATTR_QUEUEID "queue_id"
131 #define MAIL_ATTR_SENDER "sender"
132 #define MAIL_ATTR_RCPT_COUNT "recipient_count"
133 #define MAIL_ATTR_ORCPT "original_recipient"
134 #define MAIL_ATTR_RECIP "recipient"
135 #define MAIL_ATTR_WHY "reason"
136 #define MAIL_ATTR_VERPDL "verp_delimiters"
137 #define MAIL_ATTR_SITE "site"
138 #define MAIL_ATTR_OFFSET "offset"
139 #define MAIL_ATTR_SIZE "size"
140 #define MAIL_ATTR_ERRTO "errors-to"
141 #define MAIL_ATTR_RRCPT "return-receipt"
142 #define MAIL_ATTR_TIME "time"
143 #define MAIL_ATTR_LOCALTIME "localtime"
144 #define MAIL_ATTR_CREATE_TIME "create_time"
145 #define MAIL_ATTR_RULE "rule"
146 #define MAIL_ATTR_ADDR "address"
147 #define MAIL_ATTR_TRANSPORT "transport"
148 #define MAIL_ATTR_NEXTHOP "nexthop"
149 #define MAIL_ATTR_TRACE_FLAGS "trace_flags"
150 #define MAIL_ATTR_ADDR_STATUS "recipient_status"
151 #define MAIL_ATTR_ACTION "action"
152 #define MAIL_ATTR_TABLE "table"
153 #define MAIL_ATTR_KEY "key"
154 #define MAIL_ATTR_VALUE "value"
155 #define MAIL_ATTR_INSTANCE "instance"
156 #define MAIL_ATTR_SASL_METHOD "sasl_method"
157 #define MAIL_ATTR_SASL_USERNAME "sasl_username"
158 #define MAIL_ATTR_SASL_SENDER "sasl_sender"
159 #define MAIL_ATTR_ETRN_DOMAIN "etrn_domain"
160 #define MAIL_ATTR_DUMMY "dummy"
161 #define MAIL_ATTR_STRESS "stress"
162 #define MAIL_ATTR_LOG_IDENT "log_ident"
163 #define MAIL_ATTR_RWR_CONTEXT "rewrite_context"
164 #define MAIL_ATTR_POL_CONTEXT "policy_context"
165 
166 #define MAIL_ATTR_RWR_LOCAL "local"
167 #define MAIL_ATTR_RWR_REMOTE "remote"
168 
169 #define MAIL_ATTR_TTL "ttl"
170 #define MAIL_ATTR_LABEL "label"
171 #define MAIL_ATTR_PROP "property"
172 #define MAIL_ATTR_FUNC "function"
173 #define MAIL_ATTR_CCERT_SUBJECT "ccert_subject"
174 #define MAIL_ATTR_CCERT_ISSUER "ccert_issuer"
175 #define MAIL_ATTR_CCERT_CERT_FPRINT "ccert_fingerprint"
176 #define MAIL_ATTR_CCERT_PKEY_FPRINT "ccert_pubkey_fingerprint"
177 #define MAIL_ATTR_CRYPTO_PROTOCOL "encryption_protocol"
178 #define MAIL_ATTR_CRYPTO_CIPHER "encryption_cipher"
179 #define MAIL_ATTR_CRYPTO_KEYSIZE "encryption_keysize"
180 
181  /*
182  * Suffixes for sender_name, sender_domain etc.
183  */
184 #define MAIL_ATTR_S_NAME "_name"
185 #define MAIL_ATTR_S_DOMAIN "_domain"
186 
187  /*
188  * Special names for RBL results.
189  */
190 #define MAIL_ATTR_RBL_WHAT "rbl_what"
191 #define MAIL_ATTR_RBL_DOMAIN "rbl_domain"
192 #define MAIL_ATTR_RBL_REASON "rbl_reason"
193 #define MAIL_ATTR_RBL_TXT "rbl_txt" /* LaMont compatibility */
194 #define MAIL_ATTR_RBL_CLASS "rbl_class"
195 #define MAIL_ATTR_RBL_CODE "rbl_code"
196 #define MAIL_ATTR_RBL_ADDR "rbl_addr"
197 
198  /*
199  * The following attribute names are stored in queue files. Changing this
200  * means lots of work to maintain backwards compatibility with queued mail.
201  */
202 #define MAIL_ATTR_ENCODING "encoding" /* internal encoding */
203 #define MAIL_ATTR_ENC_8BIT "8bit" /* 8BITMIME equivalent */
204 #define MAIL_ATTR_ENC_7BIT "7bit" /* 7BIT equivalent */
205 #define MAIL_ATTR_ENC_NONE "" /* encoding unknown */
206 
207 #define MAIL_ATTR_LOG_CLIENT_NAME "log_client_name" /* client hostname */
208 #define MAIL_ATTR_LOG_CLIENT_ADDR "log_client_address" /* client address */
209 #define MAIL_ATTR_LOG_CLIENT_PORT "log_client_port" /* client port */
210 #define MAIL_ATTR_LOG_HELO_NAME "log_helo_name" /* SMTP helo name */
211 #define MAIL_ATTR_LOG_PROTO_NAME "log_protocol_name" /* SMTP/ESMTP/QMQP */
212 #define MAIL_ATTR_LOG_ORIGIN "log_message_origin" /* name[addr]:port */
213 
214 #define MAIL_ATTR_ACT_CLIENT "client"/* client name addr */
215 #define MAIL_ATTR_ACT_CLIENT_NAME "client_name" /* client name */
216 #define MAIL_ATTR_ACT_CLIENT_ADDR "client_address" /* client address */
217 #define MAIL_ATTR_ACT_CLIENT_PORT "client_port" /* client TCP port */
218 #define MAIL_ATTR_ACT_CLIENT_AF "client_address_type" /* AF_INET etc. */
219 #define MAIL_ATTR_ACT_HELO_NAME "helo_name" /* SMTP helo name */
220 #define MAIL_ATTR_ACT_PROTO_NAME "protocol_name" /* SMTP/ESMTP/QMQP */
221 #define MAIL_ATTR_ACT_REVERSE_CLIENT_NAME "reverse_client_name"
222 #define MAIL_ATTR_ACT_FORWARD_CLIENT_NAME "forward_client_name"
223 
224 #define MAIL_ATTR_ACT_SERVER_ADDR "server_address" /* server address */
225 #define MAIL_ATTR_ACT_SERVER_PORT "server_port" /* server TCP port */
226 
227 #define MAIL_ATTR_PROTO_STATE "protocol_state" /* MAIL/RCPT/... */
228 #define MAIL_ATTR_ORG_NONE "unknown" /* origin unknown */
229 #define MAIL_ATTR_ORG_LOCAL "local" /* local submission */
230 
231  /*
232  * XCLIENT/XFORWARD in SMTP.
233  */
234 #define XCLIENT_CMD "XCLIENT" /* XCLIENT command */
235 #define XCLIENT_NAME "NAME" /* client name */
236 #define XCLIENT_REVERSE_NAME "REVERSE_NAME" /* reverse client name */
237 #ifdef FORWARD_CLIENT_NAME
238 #define XCLIENT_FORWARD_NAME "FORWARD_NAME" /* forward client name */
239 #endif
240 #define XCLIENT_ADDR "ADDR" /* client address */
241 #define XCLIENT_PORT "PORT" /* client port */
242 #define XCLIENT_PROTO "PROTO" /* client protocol */
243 #define XCLIENT_HELO "HELO" /* client helo */
244 #define XCLIENT_LOGIN "LOGIN" /* SASL login name */
245 #define XCLIENT_DESTADDR "DESTADDR" /* server address */
246 #define XCLIENT_DESTPORT "DESTPORT" /* server port */
247 
248 #define XCLIENT_UNAVAILABLE "[UNAVAILABLE]" /* permanently unavailable */
249 #define XCLIENT_TEMPORARY "[TEMPUNAVAIL]" /* temporarily unavailable */
250 
251 #define XFORWARD_CMD "XFORWARD" /* XFORWARD command */
252 #define XFORWARD_NAME "NAME" /* client name */
253 #define XFORWARD_ADDR "ADDR" /* client address */
254 #define XFORWARD_PORT "PORT" /* client port */
255 #define XFORWARD_PROTO "PROTO" /* client protocol */
256 #define XFORWARD_HELO "HELO" /* client helo */
257 #define XFORWARD_IDENT "IDENT" /* message identifier */
258 #define XFORWARD_DOMAIN "SOURCE"/* origin type */
259 #define XFORWARD_DOM_LOCAL "LOCAL" /* local origin */
260 #define XFORWARD_DOM_REMOTE "REMOTE"/* remote origin */
261 
262 #define XFORWARD_UNAVAILABLE "[UNAVAILABLE]" /* attribute unavailable */
263 
264  /*
265  * DSN support.
266  */
267 #define MAIL_ATTR_DSN_STATUS "status"/* XXX Postfix <2.3 compat */
268 #define MAIL_ATTR_DSN_DTYPE "diag_type" /* dsn diagnostic code */
269 #define MAIL_ATTR_DSN_DTEXT "diag_text" /* dsn diagnostic code */
270 #define MAIL_ATTR_DSN_MTYPE "mta_type" /* dsn remote MTA */
271 #define MAIL_ATTR_DSN_MNAME "mta_mname" /* dsn remote MTA */
272 #define MAIL_ATTR_DSN_ACTION "action"/* XXX Postfix <2.3 compat */
273 #define MAIL_ATTR_DSN_ENVID "envelope_id" /* dsn envelope id */
274 #define MAIL_ATTR_DSN_RET "ret_flags" /* dsn full/headers */
275 #define MAIL_ATTR_DSN_NOTIFY "notify_flags" /* dsn notify flags */
276 #define MAIL_ATTR_DSN_ORCPT "dsn_orig_rcpt" /* dsn original recipient */
277 #define MAIL_ATTR_SMTPUTF8 "smtputf8" /* RFC6531 support */
278 
279  /*
280  * TLSPROXY support.
281  */
282 #define MAIL_ATTR_REMOTE_ENDPT "remote_endpoint" /* name[addr]:port */
283 #define MAIL_ATTR_ROLE "role" /* requested role */
284 #define MAIL_ATTR_ROLE_SERVER "server"
285 #define MAIL_ATTR_ROLE_CLIENT "client"
286 #define MAIL_ATTR_TIMEOUT "timeout"
287 #define MAIL_ATTR_PEER_CN "peer_CN"
288 #define MAIL_ATTR_ISSUER_CN "issuer_CN"
289 #define MAIL_ATTR_PEER_CERT_FPT "peer_fingerprint"
290 #define MAIL_ATTR_PEER_PKEY_FPT "peer_pubkey_fingerprint"
291 #define MAIL_ATTR_PEER_STATUS "peer_status"
292 #define MAIL_ATTR_CIPHER_PROTOCOL "cipher_protocol"
293 #define MAIL_ATTR_CIPHER_NAME "cipher_name"
294 #define MAIL_ATTR_CIPHER_USEBITS "cipher_usebits"
295 #define MAIL_ATTR_CIPHER_ALGBITS "cipher_algbits"
296 #define MAIL_ATTR_SERVER_ID "server_id"
297 
298  /*
299  * SMTP reply footer support.
300  */
301 #define MAIL_ATTR_SERVER_NAME "server_name"
302 
303 /* LICENSE
304 /* .ad
305 /* .fi
306 /* The Secure Mailer license must be distributed with this software.
307 /* AUTHOR(S)
308 /* Wietse Venema
309 /* IBM T.J. Watson Research
310 /* P.O. Box 704
311 /* Yorktown Heights, NY 10598, USA
312 /*
313 /* Wietse Venema
314 /* Google, Inc.
315 /* 111 8th Avenue
316 /* New York, NY 10011, USA
317 /*--*/
318 
319 #endif
int mail_trigger(const char *, const char *, const char *, ssize_t)
Definition: mail_trigger.c:72
char * mail_pathname(const char *, const char *)
Definition: mail_pathname.c:41
VSTREAM * mail_connect_wait(const char *, const char *)
Definition: mail_connect.c:108
int mail_command_client(const char *, const char *,...)
int mail_command_server(VSTREAM *,...)
VSTREAM * mail_connect(const char *, const char *, int)
Definition: mail_connect.c:79