1 /* $NetBSD: mail_proto.h,v 1.1.1.2 2011/03/02 19:32:16 tron 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 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 66 /* 67 * Well-known socket or FIFO directories. The main difference is in file 68 * access permissions. 69 */ 70 #define MAIL_CLASS_PUBLIC "public" 71 #define MAIL_CLASS_PRIVATE "private" 72 73 /* 74 * Generic triggers. 75 */ 76 #define TRIGGER_REQ_WAKEUP 'W' /* wakeup */ 77 78 /* 79 * Queue manager requests. 80 */ 81 #define QMGR_REQ_SCAN_DEFERRED 'D' /* scan deferred queue */ 82 #define QMGR_REQ_SCAN_INCOMING 'I' /* scan incoming queue */ 83 #define QMGR_REQ_FLUSH_DEAD 'F' /* flush dead xport/site */ 84 #define QMGR_REQ_SCAN_ALL 'A' /* ignore time stamps */ 85 86 /* 87 * Functional interface. 88 */ 89 extern VSTREAM *mail_connect(const char *, const char *, int); 90 extern VSTREAM *mail_connect_wait(const char *, const char *); 91 extern int mail_command_client(const char *, const char *,...); 92 extern int mail_command_server(VSTREAM *,...); 93 extern int mail_trigger(const char *, const char *, const char *, ssize_t); 94 extern char *mail_pathname(const char *, const char *); 95 96 /* 97 * Attribute names. 98 */ 99 #define MAIL_ATTR_REQ "request" 100 #define MAIL_ATTR_NREQ "nrequest" 101 #define MAIL_ATTR_STATUS "status" 102 103 #define MAIL_ATTR_FLAGS "flags" 104 #define MAIL_ATTR_QUEUE "queue_name" 105 #define MAIL_ATTR_QUEUEID "queue_id" 106 #define MAIL_ATTR_SENDER "sender" 107 #define MAIL_ATTR_RCPT_COUNT "recipient_count" 108 #define MAIL_ATTR_ORCPT "original_recipient" 109 #define MAIL_ATTR_RECIP "recipient" 110 #define MAIL_ATTR_WHY "reason" 111 #define MAIL_ATTR_VERPDL "verp_delimiters" 112 #define MAIL_ATTR_SITE "site" 113 #define MAIL_ATTR_OFFSET "offset" 114 #define MAIL_ATTR_SIZE "size" 115 #define MAIL_ATTR_ERRTO "errors-to" 116 #define MAIL_ATTR_RRCPT "return-receipt" 117 #define MAIL_ATTR_TIME "time" 118 #define MAIL_ATTR_LOCALTIME "localtime" 119 #define MAIL_ATTR_CREATE_TIME "create_time" 120 #define MAIL_ATTR_RULE "rule" 121 #define MAIL_ATTR_ADDR "address" 122 #define MAIL_ATTR_TRANSPORT "transport" 123 #define MAIL_ATTR_NEXTHOP "nexthop" 124 #define MAIL_ATTR_TRACE_FLAGS "trace_flags" 125 #define MAIL_ATTR_ADDR_STATUS "recipient_status" 126 #define MAIL_ATTR_ACTION "action" 127 #define MAIL_ATTR_TABLE "table" 128 #define MAIL_ATTR_KEY "key" 129 #define MAIL_ATTR_VALUE "value" 130 #define MAIL_ATTR_INSTANCE "instance" 131 #define MAIL_ATTR_SASL_METHOD "sasl_method" 132 #define MAIL_ATTR_SASL_USERNAME "sasl_username" 133 #define MAIL_ATTR_SASL_SENDER "sasl_sender" 134 #define MAIL_ATTR_ETRN_DOMAIN "etrn_domain" 135 #define MAIL_ATTR_DUMMY "dummy" 136 #define MAIL_ATTR_STRESS "stress" 137 #define MAIL_ATTR_LOG_IDENT "log_ident" 138 #define MAIL_ATTR_RWR_CONTEXT "rewrite_context" 139 140 #define MAIL_ATTR_RWR_LOCAL "local" 141 #define MAIL_ATTR_RWR_REMOTE "remote" 142 143 #define MAIL_ATTR_TTL "ttl" 144 #define MAIL_ATTR_LABEL "label" 145 #define MAIL_ATTR_PROP "property" 146 #define MAIL_ATTR_CCERT_SUBJECT "ccert_subject" 147 #define MAIL_ATTR_CCERT_ISSUER "ccert_issuer" 148 #define MAIL_ATTR_CCERT_FINGERPRINT "ccert_fingerprint" 149 #define MAIL_ATTR_CRYPTO_PROTOCOL "encryption_protocol" 150 #define MAIL_ATTR_CRYPTO_CIPHER "encryption_cipher" 151 #define MAIL_ATTR_CRYPTO_KEYSIZE "encryption_keysize" 152 153 /* 154 * Suffixes for sender_name, sender_domain etc. 155 */ 156 #define MAIL_ATTR_S_NAME "_name" 157 #define MAIL_ATTR_S_DOMAIN "_domain" 158 159 /* 160 * Special names for RBL results. 161 */ 162 #define MAIL_ATTR_RBL_WHAT "rbl_what" 163 #define MAIL_ATTR_RBL_DOMAIN "rbl_domain" 164 #define MAIL_ATTR_RBL_REASON "rbl_reason" 165 #define MAIL_ATTR_RBL_TXT "rbl_txt" /* LaMont compatibility */ 166 #define MAIL_ATTR_RBL_CLASS "rbl_class" 167 #define MAIL_ATTR_RBL_CODE "rbl_code" 168 #define MAIL_ATTR_RBL_ADDR "rbl_addr" 169 170 /* 171 * The following attribute names are stored in queue files. Changing this 172 * means lots of work to maintain backwards compatibility with queued mail. 173 */ 174 #define MAIL_ATTR_ENCODING "encoding" /* internal encoding */ 175 #define MAIL_ATTR_ENC_8BIT "8bit" /* 8BITMIME equivalent */ 176 #define MAIL_ATTR_ENC_7BIT "7bit" /* 7BIT equivalent */ 177 #define MAIL_ATTR_ENC_NONE "" /* encoding unknown */ 178 179 #define MAIL_ATTR_LOG_CLIENT_NAME "log_client_name" /* client hostname */ 180 #define MAIL_ATTR_LOG_CLIENT_ADDR "log_client_address" /* client address */ 181 #define MAIL_ATTR_LOG_CLIENT_PORT "log_client_port" /* client port */ 182 #define MAIL_ATTR_LOG_HELO_NAME "log_helo_name" /* SMTP helo name */ 183 #define MAIL_ATTR_LOG_PROTO_NAME "log_protocol_name" /* SMTP/ESMTP/QMQP */ 184 #define MAIL_ATTR_LOG_ORIGIN "log_message_origin" /* name[addr]:port */ 185 186 #define MAIL_ATTR_ACT_CLIENT "client"/* client name addr */ 187 #define MAIL_ATTR_ACT_CLIENT_NAME "client_name" /* client name */ 188 #define MAIL_ATTR_ACT_CLIENT_ADDR "client_address" /* client address */ 189 #define MAIL_ATTR_ACT_CLIENT_PORT "client_port" /* client TCP port */ 190 #define MAIL_ATTR_ACT_CLIENT_AF "client_address_type" /* AF_INET etc. */ 191 #define MAIL_ATTR_ACT_HELO_NAME "helo_name" /* SMTP helo name */ 192 #define MAIL_ATTR_ACT_PROTO_NAME "protocol_name" /* SMTP/ESMTP/QMQP */ 193 #define MAIL_ATTR_ACT_REVERSE_CLIENT_NAME "reverse_client_name" 194 #define MAIL_ATTR_ACT_FORWARD_CLIENT_NAME "forward_client_name" 195 196 #define MAIL_ATTR_PROTO_STATE "protocol_state" /* MAIL/RCPT/... */ 197 #define MAIL_ATTR_ORG_NONE "unknown" /* origin unknown */ 198 #define MAIL_ATTR_ORG_LOCAL "local" /* local submission */ 199 200 /* 201 * XCLIENT/XFORWARD in SMTP. 202 */ 203 #define XCLIENT_CMD "XCLIENT" /* XCLIENT command */ 204 #define XCLIENT_NAME "NAME" /* client name */ 205 #define XCLIENT_REVERSE_NAME "REVERSE_NAME" /* reverse client name */ 206 #ifdef FORWARD_CLIENT_NAME 207 #define XCLIENT_FORWARD_NAME "FORWARD_NAME" /* forward client name */ 208 #endif 209 #define XCLIENT_ADDR "ADDR" /* client address */ 210 #define XCLIENT_PORT "PORT" /* client port */ 211 #define XCLIENT_PROTO "PROTO" /* client protocol */ 212 #define XCLIENT_HELO "HELO" /* client helo */ 213 214 #define XCLIENT_UNAVAILABLE "[UNAVAILABLE]" /* permanently unavailable */ 215 #define XCLIENT_TEMPORARY "[TEMPUNAVAIL]" /* temporarily unavailable */ 216 217 #define XFORWARD_CMD "XFORWARD" /* XFORWARD command */ 218 #define XFORWARD_NAME "NAME" /* client name */ 219 #define XFORWARD_ADDR "ADDR" /* client address */ 220 #define XFORWARD_PORT "PORT" /* client port */ 221 #define XFORWARD_PROTO "PROTO" /* client protocol */ 222 #define XFORWARD_HELO "HELO" /* client helo */ 223 #define XFORWARD_IDENT "IDENT" /* message identifier */ 224 #define XFORWARD_DOMAIN "SOURCE"/* origin type */ 225 #define XFORWARD_DOM_LOCAL "LOCAL" /* local origin */ 226 #define XFORWARD_DOM_REMOTE "REMOTE"/* remote origin */ 227 228 #define XFORWARD_UNAVAILABLE "[UNAVAILABLE]" /* attribute unavailable */ 229 230 /* 231 * DSN support. 232 */ 233 #define MAIL_ATTR_DSN_STATUS "status"/* XXX Postfix <2.3 compat */ 234 #define MAIL_ATTR_DSN_DTYPE "diag_type" /* dsn diagnostic code */ 235 #define MAIL_ATTR_DSN_DTEXT "diag_text" /* dsn diagnostic code */ 236 #define MAIL_ATTR_DSN_MTYPE "mta_type" /* dsn remote MTA */ 237 #define MAIL_ATTR_DSN_MNAME "mta_mname" /* dsn remote MTA */ 238 #define MAIL_ATTR_DSN_ACTION "action"/* XXX Postfix <2.3 compat */ 239 #define MAIL_ATTR_DSN_ENVID "envelope_id" /* dsn envelope id */ 240 #define MAIL_ATTR_DSN_RET "ret_flags" /* dsn full/headers */ 241 #define MAIL_ATTR_DSN_NOTIFY "notify_flags" /* dsn notify flags */ 242 #define MAIL_ATTR_DSN_ORCPT "dsn_orig_rcpt" /* dsn original recipient */ 243 244 /* 245 * TLSPROXY support. 246 */ 247 #define MAIL_ATTR_REMOTE_ENDPT "remote_endpoint" /* name[addr]:port */ 248 #define MAIL_ATTR_ROLE "role" /* requested role */ 249 #define MAIL_ATTR_ROLE_SERVER "server" 250 #define MAIL_ATTR_ROLE_CLIENT "client" 251 #define MAIL_ATTR_TIMEOUT "timeout" 252 #define MAIL_ATTR_PEER_CN "peer_CN" 253 #define MAIL_ATTR_ISSUER_CN "issuer_CN" 254 #define MAIL_ATTR_PEER_FPT "peer_fingerprint" 255 #define MAIL_ATTR_PEER_STATUS "peer_status" 256 #define MAIL_ATTR_CIPHER_PROTOCOL "cipher_protocol" 257 #define MAIL_ATTR_CIPHER_NAME "cipher_name" 258 #define MAIL_ATTR_CIPHER_USEBITS "cipher_usebits" 259 #define MAIL_ATTR_CIPHER_ALGBITS "cipher_algbits" 260 261 /* 262 * SMTP reply footer support. 263 */ 264 #define MAIL_ATTR_SERVER_NAME "server_name" 265 266 /* LICENSE 267 /* .ad 268 /* .fi 269 /* The Secure Mailer license must be distributed with this software. 270 /* AUTHOR(S) 271 /* Wietse Venema 272 /* IBM T.J. Watson Research 273 /* P.O. Box 704 274 /* Yorktown Heights, NY 10598, USA 275 /*--*/ 276 277 #endif 278