Mercurial > hg > nginx
annotate src/mail/ngx_mail_pop3_module.c @ 6773:73b451d304c0
Mail: extensible auth methods in pop3 module.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 18 Oct 2016 19:38:46 +0300 |
parents | ec01b1d1fff1 |
children | bcb107bb89cd |
rev | line source |
---|---|
521 | 1 |
2 /* | |
3 * Copyright (C) Igor Sysoev | |
4412 | 4 * Copyright (C) Nginx, Inc. |
521 | 5 */ |
6 | |
7 | |
8 #include <ngx_config.h> | |
9 #include <ngx_core.h> | |
10 #include <ngx_event.h> | |
1136 | 11 #include <ngx_mail.h> |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
12 #include <ngx_mail_pop3_module.h> |
521 | 13 |
14 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
15 static void *ngx_mail_pop3_create_srv_conf(ngx_conf_t *cf); |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
16 static char *ngx_mail_pop3_merge_srv_conf(ngx_conf_t *cf, void *parent, |
521 | 17 void *child); |
18 | |
19 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
20 static ngx_str_t ngx_mail_pop3_default_capabilities[] = { |
527 | 21 ngx_string("TOP"), |
22 ngx_string("USER"), | |
23 ngx_string("UIDL"), | |
24 ngx_null_string | |
25 }; | |
26 | |
27 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
28 static ngx_conf_bitmask_t ngx_mail_pop3_auth_methods[] = { |
1136 | 29 { ngx_string("plain"), NGX_MAIL_AUTH_PLAIN_ENABLED }, |
30 { ngx_string("apop"), NGX_MAIL_AUTH_APOP_ENABLED }, | |
31 { ngx_string("cram-md5"), NGX_MAIL_AUTH_CRAM_MD5_ENABLED }, | |
800 | 32 { ngx_null_string, 0 } |
33 }; | |
34 | |
35 | |
6773
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
36 static ngx_str_t ngx_mail_pop3_auth_methods_names[] = { |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
37 ngx_string("PLAIN"), |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
38 ngx_string("LOGIN"), |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
39 ngx_null_string, /* APOP */ |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
40 ngx_string("CRAM-MD5"), |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
41 ngx_null_string /* NONE */ |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
42 }; |
809 | 43 |
44 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
45 static ngx_mail_protocol_t ngx_mail_pop3_protocol = { |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
46 ngx_string("pop3"), |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
47 { 110, 995, 0, 0 }, |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
48 NGX_MAIL_POP3_PROTOCOL, |
521 | 49 |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
50 ngx_mail_pop3_init_session, |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
51 ngx_mail_pop3_init_protocol, |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
52 ngx_mail_pop3_parse_command, |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
53 ngx_mail_pop3_auth_state, |
1481
b58ce1cf66da
smtp_client_buffer and smtp_greeting_delay
Igor Sysoev <igor@sysoev.ru>
parents:
1323
diff
changeset
|
54 |
5989
ec01b1d1fff1
Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4412
diff
changeset
|
55 ngx_string("-ERR internal server error" CRLF), |
ec01b1d1fff1
Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4412
diff
changeset
|
56 ngx_string("-ERR SSL certificate error" CRLF), |
ec01b1d1fff1
Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4412
diff
changeset
|
57 ngx_string("-ERR No required SSL certificate" CRLF) |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
58 }; |
1481
b58ce1cf66da
smtp_client_buffer and smtp_greeting_delay
Igor Sysoev <igor@sysoev.ru>
parents:
1323
diff
changeset
|
59 |
587 | 60 |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
61 static ngx_command_t ngx_mail_pop3_commands[] = { |
521 | 62 |
527 | 63 { ngx_string("pop3_capabilities"), |
1136 | 64 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_1MORE, |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
65 ngx_mail_capabilities, |
1136 | 66 NGX_MAIL_SRV_CONF_OFFSET, |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
67 offsetof(ngx_mail_pop3_srv_conf_t, capabilities), |
527 | 68 NULL }, |
69 | |
1136 | 70 { ngx_string("pop3_auth"), |
71 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_1MORE, | |
800 | 72 ngx_conf_set_bitmask_slot, |
1136 | 73 NGX_MAIL_SRV_CONF_OFFSET, |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
74 offsetof(ngx_mail_pop3_srv_conf_t, auth_methods), |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
75 &ngx_mail_pop3_auth_methods }, |
800 | 76 |
521 | 77 ngx_null_command |
78 }; | |
79 | |
80 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
81 static ngx_mail_module_t ngx_mail_pop3_module_ctx = { |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
82 &ngx_mail_pop3_protocol, /* protocol */ |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
83 |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
84 NULL, /* create main configuration */ |
521 | 85 NULL, /* init main configuration */ |
86 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
87 ngx_mail_pop3_create_srv_conf, /* create server configuration */ |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
88 ngx_mail_pop3_merge_srv_conf /* merge server configuration */ |
521 | 89 }; |
90 | |
91 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
92 ngx_module_t ngx_mail_pop3_module = { |
521 | 93 NGX_MODULE_V1, |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
94 &ngx_mail_pop3_module_ctx, /* module context */ |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
95 ngx_mail_pop3_commands, /* module directives */ |
1136 | 96 NGX_MAIL_MODULE, /* module type */ |
541 | 97 NULL, /* init master */ |
521 | 98 NULL, /* init module */ |
541 | 99 NULL, /* init process */ |
100 NULL, /* init thread */ | |
101 NULL, /* exit thread */ | |
102 NULL, /* exit process */ | |
103 NULL, /* exit master */ | |
104 NGX_MODULE_V1_PADDING | |
521 | 105 }; |
106 | |
107 | |
108 static void * | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
109 ngx_mail_pop3_create_srv_conf(ngx_conf_t *cf) |
577 | 110 { |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
111 ngx_mail_pop3_srv_conf_t *pscf; |
641 | 112 |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
113 pscf = ngx_pcalloc(cf->pool, sizeof(ngx_mail_pop3_srv_conf_t)); |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
114 if (pscf == NULL) { |
527 | 115 return NULL; |
521 | 116 } |
117 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
118 if (ngx_array_init(&pscf->capabilities, cf->pool, 4, sizeof(ngx_str_t)) |
1136 | 119 != NGX_OK) |
120 { | |
121 return NULL; | |
122 } | |
123 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
124 return pscf; |
521 | 125 } |
126 | |
127 | |
128 static char * | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
129 ngx_mail_pop3_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) |
521 | 130 { |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
131 ngx_mail_pop3_srv_conf_t *prev = parent; |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
132 ngx_mail_pop3_srv_conf_t *conf = child; |
521 | 133 |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
134 u_char *p; |
1136 | 135 size_t size, stls_only_size; |
527 | 136 ngx_str_t *c, *d; |
6773
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
137 ngx_uint_t i, m; |
1136 | 138 |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
139 ngx_conf_merge_bitmask_value(conf->auth_methods, |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
140 prev->auth_methods, |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
141 (NGX_CONF_BITMASK_SET |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
142 |NGX_MAIL_AUTH_PLAIN_ENABLED)); |
800 | 143 |
6773
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
144 if (conf->auth_methods & NGX_MAIL_AUTH_PLAIN_ENABLED) { |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
145 conf->auth_methods |= NGX_MAIL_AUTH_LOGIN_ENABLED; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
146 } |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
147 |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
148 if (conf->capabilities.nelts == 0) { |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
149 conf->capabilities = prev->capabilities; |
800 | 150 } |
151 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
152 if (conf->capabilities.nelts == 0) { |
527 | 153 |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
154 for (d = ngx_mail_pop3_default_capabilities; d->len; d++) { |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
155 c = ngx_array_push(&conf->capabilities); |
527 | 156 if (c == NULL) { |
157 return NGX_CONF_ERROR; | |
158 } | |
159 | |
160 *c = *d; | |
161 } | |
162 } | |
163 | |
164 size = sizeof("+OK Capability list follows" CRLF) - 1 | |
165 + sizeof("." CRLF) - 1; | |
166 | |
1136 | 167 stls_only_size = size + sizeof("STLS" CRLF) - 1; |
168 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
169 c = conf->capabilities.elts; |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
170 for (i = 0; i < conf->capabilities.nelts; i++) { |
527 | 171 size += c[i].len + sizeof(CRLF) - 1; |
1136 | 172 |
173 if (ngx_strcasecmp(c[i].data, (u_char *) "USER") == 0) { | |
174 continue; | |
175 } | |
176 | |
177 stls_only_size += c[i].len + sizeof(CRLF) - 1; | |
527 | 178 } |
179 | |
6773
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
180 size += sizeof("SASL") - 1 + sizeof(CRLF) - 1; |
809 | 181 |
6773
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
182 for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
183 m <= NGX_MAIL_AUTH_CRAM_MD5_ENABLED; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
184 m <<= 1, i++) |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
185 { |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
186 if (m & conf->auth_methods) { |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
187 size += 1 + ngx_mail_pop3_auth_methods_names[i].len; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
188 } |
809 | 189 } |
190 | |
2049 | 191 p = ngx_pnalloc(cf->pool, size); |
583 | 192 if (p == NULL) { |
527 | 193 return NGX_CONF_ERROR; |
194 } | |
195 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
196 conf->capability.len = size; |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
197 conf->capability.data = p; |
583 | 198 |
199 p = ngx_cpymem(p, "+OK Capability list follows" CRLF, | |
200 sizeof("+OK Capability list follows" CRLF) - 1); | |
527 | 201 |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
202 for (i = 0; i < conf->capabilities.nelts; i++) { |
583 | 203 p = ngx_cpymem(p, c[i].data, c[i].len); |
204 *p++ = CR; *p++ = LF; | |
527 | 205 } |
206 | |
6773
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
207 p = ngx_cpymem(p, "SASL", sizeof("SASL") - 1); |
809 | 208 |
6773
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
209 for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
210 m <= NGX_MAIL_AUTH_CRAM_MD5_ENABLED; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
211 m <<= 1, i++) |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
212 { |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
213 if (m & conf->auth_methods) { |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
214 *p++ = ' '; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
215 p = ngx_cpymem(p, ngx_mail_pop3_auth_methods_names[i].data, |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
216 ngx_mail_pop3_auth_methods_names[i].len); |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
217 } |
809 | 218 } |
219 | |
6773
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
220 *p++ = CR; *p++ = LF; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
221 |
583 | 222 *p++ = '.'; *p++ = CR; *p = LF; |
223 | |
224 | |
225 size += sizeof("STLS" CRLF) - 1; | |
527 | 226 |
2049 | 227 p = ngx_pnalloc(cf->pool, size); |
583 | 228 if (p == NULL) { |
229 return NGX_CONF_ERROR; | |
230 } | |
231 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
232 conf->starttls_capability.len = size; |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
233 conf->starttls_capability.data = p; |
583 | 234 |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
235 p = ngx_cpymem(p, conf->capability.data, |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
236 conf->capability.len - (sizeof("." CRLF) - 1)); |
583 | 237 |
238 p = ngx_cpymem(p, "STLS" CRLF, sizeof("STLS" CRLF) - 1); | |
239 *p++ = '.'; *p++ = CR; *p = LF; | |
527 | 240 |
241 | |
6773
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
242 size = sizeof("+OK methods supported:" CRLF) - 1 |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
243 + sizeof("." CRLF) - 1; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
244 |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
245 for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
246 m <= NGX_MAIL_AUTH_CRAM_MD5_ENABLED; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
247 m <<= 1, i++) |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
248 { |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
249 if (m & conf->auth_methods) { |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
250 size += ngx_mail_pop3_auth_methods_names[i].len |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
251 + sizeof(CRLF) - 1; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
252 } |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
253 } |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
254 |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
255 p = ngx_pnalloc(cf->pool, size); |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
256 if (p == NULL) { |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
257 return NGX_CONF_ERROR; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
258 } |
809 | 259 |
6773
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
260 conf->auth_capability.data = p; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
261 conf->auth_capability.len = size; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
262 |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
263 p = ngx_cpymem(p, "+OK methods supported:" CRLF, |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
264 sizeof("+OK methods supported:" CRLF) - 1); |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
265 |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
266 for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
267 m <= NGX_MAIL_AUTH_CRAM_MD5_ENABLED; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
268 m <<= 1, i++) |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
269 { |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
270 if (m & conf->auth_methods) { |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
271 p = ngx_cpymem(p, ngx_mail_pop3_auth_methods_names[i].data, |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
272 ngx_mail_pop3_auth_methods_names[i].len); |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
273 *p++ = CR; *p++ = LF; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
274 } |
809 | 275 } |
276 | |
6773
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
277 *p++ = '.'; *p++ = CR; *p = LF; |
73b451d304c0
Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5989
diff
changeset
|
278 |
809 | 279 |
2049 | 280 p = ngx_pnalloc(cf->pool, stls_only_size); |
1136 | 281 if (p == NULL) { |
282 return NGX_CONF_ERROR; | |
283 } | |
284 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
285 conf->starttls_only_capability.len = stls_only_size; |
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
286 conf->starttls_only_capability.data = p; |
1136 | 287 |
288 p = ngx_cpymem(p, "+OK Capability list follows" CRLF, | |
289 sizeof("+OK Capability list follows" CRLF) - 1); | |
290 | |
1487
f69493e8faab
ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents:
1481
diff
changeset
|
291 for (i = 0; i < conf->capabilities.nelts; i++) { |
1136 | 292 if (ngx_strcasecmp(c[i].data, (u_char *) "USER") == 0) { |
293 continue; | |
294 } | |
295 | |
296 p = ngx_cpymem(p, c[i].data, c[i].len); | |
297 *p++ = CR; *p++ = LF; | |
298 } | |
299 | |
300 p = ngx_cpymem(p, "STLS" CRLF, sizeof("STLS" CRLF) - 1); | |
301 *p++ = '.'; *p++ = CR; *p = LF; | |
302 | |
521 | 303 return NGX_CONF_OK; |
304 } |