/src/dovecot/src/lib-smtp/smtp-common.h
Line | Count | Source |
1 | | #ifndef SMTP_COMMON_H |
2 | | #define SMTP_COMMON_H |
3 | | |
4 | | #include "net.h" |
5 | | |
6 | | /* |
7 | | * Limits |
8 | | */ |
9 | | |
10 | | #define SMTP_BASE_LINE_LENGTH_LIMIT (512 - 2) |
11 | | |
12 | | /* |
13 | | * SMTP protocols |
14 | | */ |
15 | | |
16 | | enum smtp_protocol { |
17 | | SMTP_PROTOCOL_SMTP = 0, |
18 | | SMTP_PROTOCOL_LMTP |
19 | | }; |
20 | | |
21 | | static inline const char * |
22 | | smtp_protocol_name(enum smtp_protocol proto) |
23 | 12.3k | { |
24 | 12.3k | switch (proto) { |
25 | 12.3k | case SMTP_PROTOCOL_SMTP: |
26 | 12.3k | return "smtp"; |
27 | 0 | case SMTP_PROTOCOL_LMTP: |
28 | 0 | return "lmtp"; |
29 | 0 | default: |
30 | 0 | break; |
31 | 12.3k | } |
32 | 0 | i_unreached(); |
33 | 12.3k | } Unexecuted instantiation: fuzz-smtp-server.c:smtp_protocol_name Unexecuted instantiation: smtp-server-cmd-data.c:smtp_protocol_name Unexecuted instantiation: smtp-server-reply.c:smtp_protocol_name Unexecuted instantiation: smtp-server-command.c:smtp_protocol_name Unexecuted instantiation: smtp-server-recipient.c:smtp_protocol_name Unexecuted instantiation: smtp-server-transaction.c:smtp_protocol_name smtp-server-connection.c:smtp_protocol_name Line | Count | Source | 23 | 6.16k | { | 24 | 6.16k | switch (proto) { | 25 | 6.16k | case SMTP_PROTOCOL_SMTP: | 26 | 6.16k | return "smtp"; | 27 | 0 | case SMTP_PROTOCOL_LMTP: | 28 | 0 | return "lmtp"; | 29 | 0 | default: | 30 | 0 | break; | 31 | 6.16k | } | 32 | 0 | i_unreached(); | 33 | 6.16k | } |
smtp-server.c:smtp_protocol_name Line | Count | Source | 23 | 6.16k | { | 24 | 6.16k | switch (proto) { | 25 | 6.16k | case SMTP_PROTOCOL_SMTP: | 26 | 6.16k | return "smtp"; | 27 | 0 | case SMTP_PROTOCOL_LMTP: | 28 | 0 | return "lmtp"; | 29 | 0 | default: | 30 | 0 | break; | 31 | 6.16k | } | 32 | 0 | i_unreached(); | 33 | 6.16k | } |
Unexecuted instantiation: smtp-common.c:smtp_protocol_name Unexecuted instantiation: smtp-params.c:smtp_protocol_name Unexecuted instantiation: smtp-server-cmd-helo.c:smtp_protocol_name Unexecuted instantiation: smtp-server-cmd-starttls.c:smtp_protocol_name Unexecuted instantiation: smtp-server-cmd-auth.c:smtp_protocol_name Unexecuted instantiation: smtp-server-cmd-mail.c:smtp_protocol_name Unexecuted instantiation: smtp-server-cmd-rcpt.c:smtp_protocol_name Unexecuted instantiation: smtp-server-cmd-rset.c:smtp_protocol_name Unexecuted instantiation: smtp-server-cmd-noop.c:smtp_protocol_name Unexecuted instantiation: smtp-server-cmd-quit.c:smtp_protocol_name Unexecuted instantiation: smtp-server-cmd-vrfy.c:smtp_protocol_name Unexecuted instantiation: smtp-server-cmd-xclient.c:smtp_protocol_name |
34 | | |
35 | | /* SMTP capabilities */ |
36 | | |
37 | | enum smtp_capability { |
38 | | SMTP_CAPABILITY_NONE = 0, |
39 | | |
40 | | SMTP_CAPABILITY_AUTH = BIT(0), |
41 | | SMTP_CAPABILITY_STARTTLS = BIT(1), |
42 | | SMTP_CAPABILITY_PIPELINING = BIT(2), |
43 | | SMTP_CAPABILITY_SIZE = BIT(3), |
44 | | SMTP_CAPABILITY_ENHANCEDSTATUSCODES = BIT(4), |
45 | | SMTP_CAPABILITY_8BITMIME = BIT(5), |
46 | | SMTP_CAPABILITY_CHUNKING = BIT(6), |
47 | | SMTP_CAPABILITY_BINARYMIME = BIT(7), |
48 | | SMTP_CAPABILITY_BURL = BIT(8), |
49 | | SMTP_CAPABILITY_DSN = BIT(9), |
50 | | SMTP_CAPABILITY_VRFY = BIT(10), |
51 | | SMTP_CAPABILITY_ETRN = BIT(11), |
52 | | SMTP_CAPABILITY_XCLIENT = BIT(12), |
53 | | #ifdef EXPERIMENTAL_MAIL_UTF8 |
54 | | SMTP_CAPABILITY_SMTPUTF8 = BIT(13), |
55 | | #endif |
56 | | SMTP_CAPABILITY__ORCPT = BIT(24), |
57 | | }; |
58 | | |
59 | | #ifndef EXPERIMENTAL_MAIL_UTF8 |
60 | | # define SMTP_CAPABILITY_SMTPUTF8 0 |
61 | | #endif |
62 | | |
63 | | struct smtp_capability_name { |
64 | | const char *name; |
65 | | enum smtp_capability capability; |
66 | | }; |
67 | | |
68 | | struct smtp_capability_extra { |
69 | | const char *name; |
70 | | const char *const *params; |
71 | | }; |
72 | | |
73 | | extern const struct smtp_capability_name smtp_capability_names[]; |
74 | | |
75 | | enum smtp_capability smtp_capability_find_by_name(const char *cap_name); |
76 | | |
77 | | /* |
78 | | * SMTP proxy data |
79 | | */ |
80 | | |
81 | | enum smtp_proxy_protocol { |
82 | | SMTP_PROXY_PROTOCOL_UNKNOWN = 0, |
83 | | SMTP_PROXY_PROTOCOL_SMTP, |
84 | | SMTP_PROXY_PROTOCOL_ESMTP, |
85 | | SMTP_PROXY_PROTOCOL_LMTP |
86 | | }; |
87 | | |
88 | | struct smtp_proxy_data_field { |
89 | | const char *name; |
90 | | const char *value; |
91 | | }; |
92 | | ARRAY_DEFINE_TYPE(smtp_proxy_data_field, struct smtp_proxy_data_field); |
93 | | |
94 | | struct smtp_proxy_data { |
95 | | /* PROTO */ |
96 | | enum smtp_proxy_protocol proto; |
97 | | /* ADDR */ |
98 | | struct ip_addr source_ip; |
99 | | /* PORT */ |
100 | | in_port_t source_port; |
101 | | /* DESTADDR */ |
102 | | struct ip_addr dest_ip; |
103 | | /* DESTPORT */ |
104 | | in_port_t dest_port; |
105 | | /* HELO, LOGIN */ |
106 | | const char *helo, *login; |
107 | | /* SESSION */ |
108 | | const char *session; |
109 | | /* CLIENT-TRANSPORT */ |
110 | | const char *client_transport; |
111 | | /* DESTNAME */ |
112 | | const char *local_name; |
113 | | |
114 | | /* TTL: send as this -1, so the default 0 means "don't send it" */ |
115 | | unsigned int ttl_plus_1; |
116 | | /* TIMEOUT: remote is notified that the connection is going to be closed |
117 | | after this many seconds, so it should try to keep lock waits and such |
118 | | lower than this. */ |
119 | | unsigned int timeout_secs; |
120 | | |
121 | | /* additional fields */ |
122 | | const struct smtp_proxy_data_field *extra_fields; |
123 | | unsigned int extra_fields_count; |
124 | | }; |
125 | | |
126 | | void smtp_proxy_data_merge(pool_t pool, struct smtp_proxy_data *dst, |
127 | | const struct smtp_proxy_data *src); |
128 | | |
129 | | #endif |