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