annotate src/mail/ngx_mail_pop3_module.c @ 9300:5be23505292b default tip

SSI: fixed incorrect or duplicate stub output. Following 3518:eb3aaf8bd2a9 (0.8.37), r->request_output is only set if there are data in the first buffer sent in the subrequest. As a result, following the change mentioned this flag cannot be used to prevent duplicate ngx_http_ssi_stub_output() calls, since it is not set if there was already some output, but the first buffer was empty. Still, when there are multiple subrequests, even an empty subrequest response might be delayed by the postpone filter, leading to a second call of ngx_http_ssi_stub_output() during finalization from ngx_http_writer() the subreqest buffers are released by the postpone filter. Since r->request_output is not set after the first call, this resulted in duplicate stub output. Additionally, checking only the first buffer might be wrong in some unusual cases. For example, the first buffer might be empty if $r->flush() is called before printing any data in the embedded Perl module. Depending on the postpone_output value and corresponding sizes, this issue can result in either duplicate or unexpected stub output, or "zero size buf in writer" alerts. Following 8124:f5515e727656 (1.23.4), it became slightly easier to reproduce the issue, as empty static files and empty cache items now result in a response with an empty buffer. Before the change, an empty proxied response can be used to reproduce the issue. Fix is check all buffers and set r->request_output if any non-empty buffers are sent. This ensures that all unusual cases of non-empty responses are covered, and also that r->request_output will be set after the first stub output, preventing duplicate output. Reported by Jan Gassen.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 04 Jul 2024 17:41:28 +0300
parents 4538c1ffb0f8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 2049
diff changeset
4 * Copyright (C) Nginx, Inc.
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_event.h>
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
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
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
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
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 void *child);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
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
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
21 ngx_string("TOP"),
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
22 ngx_string("USER"),
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
23 ngx_string("UIDL"),
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
24 ngx_null_string
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
25 };
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
26
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
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
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
29 { ngx_string("plain"), NGX_MAIL_AUTH_PLAIN_ENABLED },
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
30 { ngx_string("apop"), NGX_MAIL_AUTH_APOP_ENABLED },
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
31 { ngx_string("cram-md5"), NGX_MAIL_AUTH_CRAM_MD5_ENABLED },
6774
bcb107bb89cd Mail: support SASL EXTERNAL (RFC 4422).
Rob N ★ <robn@fastmail.com>
parents: 6773
diff changeset
32 { ngx_string("external"), NGX_MAIL_AUTH_EXTERNAL_ENABLED },
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7938
diff changeset
33 { ngx_string("xoauth2"), NGX_MAIL_AUTH_XOAUTH2_ENABLED },
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7938
diff changeset
34 { ngx_string("oauthbearer"), NGX_MAIL_AUTH_OAUTHBEARER_ENABLED },
800
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
35 { ngx_null_string, 0 }
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
36 };
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
37
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
38
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
39 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
40 ngx_string("PLAIN"),
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
41 ngx_string("LOGIN"),
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
42 ngx_null_string, /* APOP */
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
43 ngx_string("CRAM-MD5"),
6774
bcb107bb89cd Mail: support SASL EXTERNAL (RFC 4422).
Rob N ★ <robn@fastmail.com>
parents: 6773
diff changeset
44 ngx_string("EXTERNAL"),
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7938
diff changeset
45 ngx_string("XOAUTH2"),
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7938
diff changeset
46 ngx_string("OAUTHBEARER"),
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
47 ngx_null_string /* NONE */
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
48 };
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
49
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
50
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
51 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
52 ngx_string("pop3"),
7938
dc955d274130 Mail: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 6924
diff changeset
53 ngx_string("\x04pop3"),
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
54 { 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
55 NGX_MAIL_POP3_PROTOCOL,
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
57 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
58 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
59 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
60 ngx_mail_pop3_auth_state,
1481
b58ce1cf66da smtp_client_buffer and smtp_greeting_delay
Igor Sysoev <igor@sysoev.ru>
parents: 1323
diff changeset
61
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
62 ngx_string("-ERR internal server error" CRLF),
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
63 ngx_string("-ERR SSL certificate error" CRLF),
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
64 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
65 };
1481
b58ce1cf66da smtp_client_buffer and smtp_greeting_delay
Igor Sysoev <igor@sysoev.ru>
parents: 1323
diff changeset
66
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
67
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
68 static ngx_command_t ngx_mail_pop3_commands[] = {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
70 { ngx_string("pop3_capabilities"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
71 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
72 ngx_mail_capabilities,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
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, capabilities),
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
75 NULL },
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
76
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
77 { ngx_string("pop3_auth"),
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
78 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_1MORE,
800
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
79 ngx_conf_set_bitmask_slot,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
80 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
81 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
82 &ngx_mail_pop3_auth_methods },
800
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
83
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84 ngx_null_command
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 };
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
88 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
89 &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
90
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
91 NULL, /* create main configuration */
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 NULL, /* init main configuration */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93
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_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
95 ngx_mail_pop3_merge_srv_conf /* merge server configuration */
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 };
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
99 ngx_module_t ngx_mail_pop3_module = {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 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
101 &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
102 ngx_mail_pop3_commands, /* module directives */
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
103 NGX_MAIL_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
104 NULL, /* init master */
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
106 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
107 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
108 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
109 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
110 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
111 NGX_MODULE_V1_PADDING
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112 };
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 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
116 ngx_mail_pop3_create_srv_conf(ngx_conf_t *cf)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
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 ngx_mail_pop3_srv_conf_t *pscf;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
119
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
120 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
121 if (pscf == NULL) {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
122 return NULL;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
125 if (ngx_array_init(&pscf->capabilities, cf->pool, 4, sizeof(ngx_str_t))
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
126 != NGX_OK)
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
127 {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
128 return NULL;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
129 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
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 return pscf;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135 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
136 ngx_mail_pop3_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137 {
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
138 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
139 ngx_mail_pop3_srv_conf_t *conf = child;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
141 u_char *p;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
142 size_t size, stls_only_size;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
143 ngx_str_t *c, *d;
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
144 ngx_uint_t i, m;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
145
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
146 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
147 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
148 (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
149 |NGX_MAIL_AUTH_PLAIN_ENABLED));
800
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
150
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
151 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
152 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
153 }
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
154
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
155 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
156 conf->capabilities = prev->capabilities;
800
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
157 }
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
158
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
159 if (conf->capabilities.nelts == 0) {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
160
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
161 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
162 c = ngx_array_push(&conf->capabilities);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
163 if (c == NULL) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
164 return NGX_CONF_ERROR;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
165 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
166
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
167 *c = *d;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
168 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
169 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
170
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
171 size = sizeof("+OK Capability list follows" CRLF) - 1
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
172 + sizeof("." CRLF) - 1;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
173
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
174 stls_only_size = size + sizeof("STLS" CRLF) - 1;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
175
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
176 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
177 for (i = 0; i < conf->capabilities.nelts; i++) {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
178 size += c[i].len + sizeof(CRLF) - 1;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
179
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
180 if (ngx_strcasecmp(c[i].data, (u_char *) "USER") == 0) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
181 continue;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
182 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
183
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
184 stls_only_size += c[i].len + sizeof(CRLF) - 1;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
185 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
186
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
187 size += sizeof("SASL") - 1 + sizeof(CRLF) - 1;
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
188
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
189 for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7938
diff changeset
190 m < NGX_MAIL_AUTH_NONE_ENABLED;
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
191 m <<= 1, i++)
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
192 {
6924
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
193 if (ngx_mail_pop3_auth_methods_names[i].len == 0) {
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
194 continue;
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
195 }
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
196
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
197 if (m & conf->auth_methods) {
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
198 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
199 }
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
200 }
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
201
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1487
diff changeset
202 p = ngx_pnalloc(cf->pool, size);
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
203 if (p == NULL) {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
204 return NGX_CONF_ERROR;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
205 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
206
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
207 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
208 conf->capability.data = p;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
209
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
210 p = ngx_cpymem(p, "+OK Capability list follows" CRLF,
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
211 sizeof("+OK Capability list follows" CRLF) - 1);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
212
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
213 for (i = 0; i < conf->capabilities.nelts; i++) {
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
214 p = ngx_cpymem(p, c[i].data, c[i].len);
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
215 *p++ = CR; *p++ = LF;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
216 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
217
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
218 p = ngx_cpymem(p, "SASL", sizeof("SASL") - 1);
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
219
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
220 for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7938
diff changeset
221 m < NGX_MAIL_AUTH_NONE_ENABLED;
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
222 m <<= 1, i++)
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
223 {
6924
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
224 if (ngx_mail_pop3_auth_methods_names[i].len == 0) {
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
225 continue;
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
226 }
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
227
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
228 if (m & conf->auth_methods) {
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
229 *p++ = ' ';
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
230 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
231 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
232 }
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
233 }
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
234
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
235 *p++ = CR; *p++ = LF;
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
236
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
237 *p++ = '.'; *p++ = CR; *p = LF;
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
238
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
239
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
240 size += sizeof("STLS" CRLF) - 1;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
241
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1487
diff changeset
242 p = ngx_pnalloc(cf->pool, size);
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
243 if (p == NULL) {
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
244 return NGX_CONF_ERROR;
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
245 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
246
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
247 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
248 conf->starttls_capability.data = p;
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
249
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
250 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
251 conf->capability.len - (sizeof("." CRLF) - 1));
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
252
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
253 p = ngx_cpymem(p, "STLS" CRLF, sizeof("STLS" CRLF) - 1);
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
254 *p++ = '.'; *p++ = CR; *p = LF;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
255
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
256
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
257 size = sizeof("+OK methods supported:" CRLF) - 1
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
258 + sizeof("." CRLF) - 1;
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
259
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
260 for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7938
diff changeset
261 m < NGX_MAIL_AUTH_NONE_ENABLED;
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
262 m <<= 1, i++)
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
263 {
6924
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
264 if (ngx_mail_pop3_auth_methods_names[i].len == 0) {
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
265 continue;
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
266 }
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
267
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
268 if (m & conf->auth_methods) {
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
269 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
270 + sizeof(CRLF) - 1;
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
271 }
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
272 }
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
273
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
274 p = ngx_pnalloc(cf->pool, size);
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
275 if (p == NULL) {
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
276 return NGX_CONF_ERROR;
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
277 }
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
278
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
279 conf->auth_capability.data = p;
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
280 conf->auth_capability.len = size;
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
281
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
282 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
283 sizeof("+OK methods supported:" CRLF) - 1);
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
284
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
285 for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0;
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7938
diff changeset
286 m < NGX_MAIL_AUTH_NONE_ENABLED;
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
287 m <<= 1, i++)
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
288 {
6924
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
289 if (ngx_mail_pop3_auth_methods_names[i].len == 0) {
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
290 continue;
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
291 }
03735fef08da Mail: don't emit separator in capability lists for APOP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6774
diff changeset
292
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
293 if (m & conf->auth_methods) {
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
294 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
295 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
296 *p++ = CR; *p++ = LF;
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
297 }
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
298 }
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
299
6773
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
300 *p++ = '.'; *p++ = CR; *p = LF;
73b451d304c0 Mail: extensible auth methods in pop3 module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5989
diff changeset
301
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 804
diff changeset
302
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1487
diff changeset
303 p = ngx_pnalloc(cf->pool, stls_only_size);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
304 if (p == NULL) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
305 return NGX_CONF_ERROR;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
306 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
307
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
308 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
309 conf->starttls_only_capability.data = p;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
310
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
311 p = ngx_cpymem(p, "+OK Capability list follows" CRLF,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
312 sizeof("+OK Capability list follows" CRLF) - 1);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
313
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
314 for (i = 0; i < conf->capabilities.nelts; i++) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
315 if (ngx_strcasecmp(c[i].data, (u_char *) "USER") == 0) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
316 continue;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
317 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
318
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
319 p = ngx_cpymem(p, c[i].data, c[i].len);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
320 *p++ = CR; *p++ = LF;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
321 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
322
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
323 p = ngx_cpymem(p, "STLS" CRLF, sizeof("STLS" CRLF) - 1);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
324 *p++ = '.'; *p++ = CR; *p = LF;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
325
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
326 return NGX_CONF_OK;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
327 }