74 struct timeval arrival_time;
84 struct sockaddr_storage sockaddr;
86 struct sockaddr_storage dest_sockaddr;
123 char *sasl_mechanism_list;
176 TLS_SESS_STATE *tls_context;
194 #define SMTPD_FLAG_HANGUP (1<<0)
195 #define SMTPD_FLAG_ILL_PIPELINING (1<<1)
196 #define SMTPD_FLAG_AUTH_USED (1<<2)
197 #define SMTPD_FLAG_SMTPUTF8 (1<<3)
200 #define SMTPD_MASK_MAIL_KEEP \
201 ~(SMTPD_FLAG_SMTPUTF8)
203 #define SMTPD_STATE_XFORWARD_INIT (1<<0)
204 #define SMTPD_STATE_XFORWARD_NAME (1<<1)
205 #define SMTPD_STATE_XFORWARD_ADDR (1<<2)
206 #define SMTPD_STATE_XFORWARD_PROTO (1<<3)
207 #define SMTPD_STATE_XFORWARD_HELO (1<<4)
208 #define SMTPD_STATE_XFORWARD_IDENT (1<<5)
209 #define SMTPD_STATE_XFORWARD_DOMAIN (1<<6)
210 #define SMTPD_STATE_XFORWARD_PORT (1<<7)
212 #define SMTPD_STATE_XFORWARD_CLIENT_MASK \
213 (SMTPD_STATE_XFORWARD_NAME | SMTPD_STATE_XFORWARD_ADDR \
214 | SMTPD_STATE_XFORWARD_PROTO | SMTPD_STATE_XFORWARD_HELO \
215 | SMTPD_STATE_XFORWARD_PORT)
224 #define SMTPD_AFTER_CONNECT "CONNECT"
225 #define SMTPD_AFTER_DATA "DATA content"
226 #define SMTPD_AFTER_DOT "END-OF-MESSAGE"
232 #define SMTPD_CMD_HELO "HELO"
233 #define SMTPD_CMD_EHLO "EHLO"
234 #define SMTPD_CMD_STARTTLS "STARTTLS"
235 #define SMTPD_CMD_AUTH "AUTH"
236 #define SMTPD_CMD_MAIL "MAIL"
237 #define SMTPD_CMD_RCPT "RCPT"
238 #define SMTPD_CMD_DATA "DATA"
239 #define SMTPD_CMD_EOD SMTPD_AFTER_DOT
240 #define SMTPD_CMD_RSET "RSET"
241 #define SMTPD_CMD_NOOP "NOOP"
242 #define SMTPD_CMD_VRFY "VRFY"
243 #define SMTPD_CMD_ETRN "ETRN"
244 #define SMTPD_CMD_QUIT "QUIT"
245 #define SMTPD_CMD_XCLIENT "XCLIENT"
246 #define SMTPD_CMD_XFORWARD "XFORWARD"
247 #define SMTPD_CMD_UNKNOWN "UNKNOWN"
274 #define CLIENT_ATTR_UNKNOWN "unknown"
276 #define CLIENT_NAME_UNKNOWN CLIENT_ATTR_UNKNOWN
277 #define CLIENT_ADDR_UNKNOWN CLIENT_ATTR_UNKNOWN
278 #define CLIENT_PORT_UNKNOWN CLIENT_ATTR_UNKNOWN
279 #define CLIENT_NAMADDR_UNKNOWN CLIENT_ATTR_UNKNOWN
280 #define CLIENT_HELO_UNKNOWN 0
281 #define CLIENT_PROTO_UNKNOWN CLIENT_ATTR_UNKNOWN
282 #define CLIENT_IDENT_UNKNOWN 0
283 #define CLIENT_DOMAIN_UNKNOWN 0
284 #define CLIENT_LOGIN_UNKNOWN 0
286 #define SERVER_ATTR_UNKNOWN "unknown"
288 #define SERVER_ADDR_UNKNOWN SERVER_ATTR_UNKNOWN
289 #define SERVER_PORT_UNKNOWN SERVER_ATTR_UNKNOWN
291 #define IS_AVAIL_CLIENT_ATTR(v) ((v) && strcmp((v), CLIENT_ATTR_UNKNOWN))
293 #define IS_AVAIL_CLIENT_NAME(v) IS_AVAIL_CLIENT_ATTR(v)
294 #define IS_AVAIL_CLIENT_ADDR(v) IS_AVAIL_CLIENT_ATTR(v)
295 #define IS_AVAIL_CLIENT_PORT(v) IS_AVAIL_CLIENT_ATTR(v)
296 #define IS_AVAIL_CLIENT_NAMADDR(v) IS_AVAIL_CLIENT_ATTR(v)
297 #define IS_AVAIL_CLIENT_HELO(v) ((v) != 0)
298 #define IS_AVAIL_CLIENT_PROTO(v) IS_AVAIL_CLIENT_ATTR(v)
299 #define IS_AVAIL_CLIENT_IDENT(v) ((v) != 0)
300 #define IS_AVAIL_CLIENT_DOMAIN(v) ((v) != 0)
306 #define SMTPD_STAND_ALONE_STREAM(stream) \
307 (stream == VSTREAM_IN && getuid() != var_owner_uid)
309 #define SMTPD_STAND_ALONE(state) \
310 (state->client == VSTREAM_IN && getuid() != var_owner_uid)
316 #define USE_SMTPD_PROXY(state) \
317 (SMTPD_STAND_ALONE(state) == 0 && *var_smtpd_proxy_filt)
322 #define SMTPD_IN_MAIL_TRANSACTION(state) ((state)->sender != 0)
331 #define SMTPD_PEER_CODE_OK 2
332 #define SMTPD_PEER_CODE_TEMP 4
333 #define SMTPD_PEER_CODE_PERM 5
334 #define SMTPD_PEER_CODE_FORGED 6
339 #define SMTPD_BUILD_NAMADDRPORT(name, addr, port) \
340 concatenate((name), "[", (addr), "]", \
341 var_smtpd_client_port_log ? ":" : (char *) 0, \
348 #define HAVE_FORWARDED_CLIENT_ATTR(s) \
349 ((s)->xforward.flags & SMTPD_STATE_XFORWARD_CLIENT_MASK)
351 #define FORWARD_CLIENT_ATTR(s, a) \
352 (HAVE_FORWARDED_CLIENT_ATTR(s) ? \
353 (s)->xforward.a : (s)->a)
355 #define FORWARD_ADDR(s) FORWARD_CLIENT_ATTR((s), rfc_addr)
356 #define FORWARD_NAME(s) FORWARD_CLIENT_ATTR((s), name)
357 #define FORWARD_NAMADDR(s) FORWARD_CLIENT_ATTR((s), namaddr)
358 #define FORWARD_PROTO(s) FORWARD_CLIENT_ATTR((s), protocol)
359 #define FORWARD_HELO(s) FORWARD_CLIENT_ATTR((s), helo_name)
360 #define FORWARD_PORT(s) FORWARD_CLIENT_ATTR((s), port)
365 #define HAVE_FORWARDED_IDENT(s) \
366 ((s)->xforward.ident != 0)
368 #define FORWARD_IDENT(s) \
369 (HAVE_FORWARDED_IDENT(s) ? \
370 (s)->xforward.ident : (s)->queue_id)
375 #define FORWARD_DOMAIN(s) \
376 (((s)->xforward.flags & SMTPD_STATE_XFORWARD_DOMAIN) ? \
377 (s)->xforward.domain : (s)->rewrite_context)
SMTPD_XFORWARD_ATTR xforward
int defer_if_permit_sender
void smtpd_peer_init(SMTPD_STATE *state)
int sender_rcptmap_checked
struct SMTPD_DEFER SMTPD_DEFER
SMTPD_DEFER defer_if_permit
const char * milter_reject_text
int smtpd_input_transp_mask
void smtpd_peer_reset(SMTPD_STATE *state)
SOCKADDR_SIZE dest_sockaddr_len
void smtpd_xforward_init(SMTPD_STATE *)
SMTPD_DEFER defer_if_reject
int defer_if_permit_client
const char ** milter_argv
struct SMTPD_PROXY * proxy
SOCKADDR_SIZE sockaddr_len
void smtpd_xforward_reset(SMTPD_STATE *)
void smtpd_state_init(SMTPD_STATE *, VSTREAM *, const char *)
void smtpd_xforward_preset(SMTPD_STATE *)
int smtpd_peer_from_haproxy(SMTPD_STATE *state)
int recipient_rcptmap_checked
void smtpd_state_reset(SMTPD_STATE *)