annotate src/mail/ngx_mail_core_module.c @ 6075:7fcfe113827d stable-1.6

Fixed possible buffer overrun in "too long header line" logging. Additionally, ellipsis now always added to make it clear that the header logged is incomplete. Reported by Daniil Bondarev.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 08 Oct 2014 17:16:04 +0400
parents 05ba5bce31e0
children bb26f7ceaaf1
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: 4323
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>
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
14 static void *ngx_mail_core_create_main_conf(ngx_conf_t *cf);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
15 static void *ngx_mail_core_create_srv_conf(ngx_conf_t *cf);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
16 static char *ngx_mail_core_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);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
18 static char *ngx_mail_core_server(ngx_conf_t *cf, ngx_command_t *cmd,
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 void *conf);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
20 static char *ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd,
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 void *conf);
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
22 static char *ngx_mail_core_protocol(ngx_conf_t *cf, ngx_command_t *cmd,
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
23 void *conf);
1892
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
24 static char *ngx_mail_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd,
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
25 void *conf);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
28 static ngx_conf_deprecated_t ngx_conf_deprecated_so_keepalive = {
4522
14411ee4d89f Whitespace fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4474
diff changeset
29 ngx_conf_deprecated, "so_keepalive",
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
30 "so_keepalive\" parameter of the \"listen"
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
31 };
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
32
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
33
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
34 static ngx_command_t ngx_mail_core_commands[] = {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 { ngx_string("server"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
37 NGX_MAIL_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_NOARGS,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
38 ngx_mail_core_server,
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 0,
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 0,
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 NULL },
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 { ngx_string("listen"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
44 NGX_MAIL_SRV_CONF|NGX_CONF_TAKE12,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
45 ngx_mail_core_listen,
1487
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_MAIL_SRV_CONF_OFFSET,
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47 0,
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 NULL },
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 { ngx_string("protocol"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
51 NGX_MAIL_SRV_CONF|NGX_CONF_TAKE1,
1487
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_core_protocol,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
53 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
54 0,
1481
b58ce1cf66da smtp_client_buffer and smtp_greeting_delay
Igor Sysoev <igor@sysoev.ru>
parents: 1323
diff changeset
55 NULL },
b58ce1cf66da smtp_client_buffer and smtp_greeting_delay
Igor Sysoev <igor@sysoev.ru>
parents: 1323
diff changeset
56
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
57 { ngx_string("so_keepalive"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
58 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_FLAG,
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
59 ngx_conf_set_flag_slot,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
60 NGX_MAIL_SRV_CONF_OFFSET,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
61 offsetof(ngx_mail_core_srv_conf_t, so_keepalive),
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
62 &ngx_conf_deprecated_so_keepalive },
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
63
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 { ngx_string("timeout"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
65 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE1,
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 ngx_conf_set_msec_slot,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
67 NGX_MAIL_SRV_CONF_OFFSET,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
68 offsetof(ngx_mail_core_srv_conf_t, timeout),
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 NULL },
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70
800
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
71 { ngx_string("server_name"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
72 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE1,
800
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
73 ngx_conf_set_str_slot,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
74 NGX_MAIL_SRV_CONF_OFFSET,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
75 offsetof(ngx_mail_core_srv_conf_t, server_name),
800
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
76 NULL },
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
77
1892
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
78 { ngx_string("resolver"),
4225
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
79 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_1MORE,
1892
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
80 ngx_mail_core_resolver,
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
81 NGX_MAIL_SRV_CONF_OFFSET,
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
82 0,
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
83 NULL },
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
84
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
85 { ngx_string("resolver_timeout"),
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
86 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE1,
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
87 ngx_conf_set_msec_slot,
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
88 NGX_MAIL_SRV_CONF_OFFSET,
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
89 offsetof(ngx_mail_core_srv_conf_t, resolver_timeout),
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
90 NULL },
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
91
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 ngx_null_command
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 };
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
96 static ngx_mail_module_t ngx_mail_core_module_ctx = {
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
97 NULL, /* protocol */
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
98
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
99 ngx_mail_core_create_main_conf, /* create main configuration */
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 NULL, /* init main configuration */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
102 ngx_mail_core_create_srv_conf, /* create server configuration */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
103 ngx_mail_core_merge_srv_conf /* merge server configuration */
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 };
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
107 ngx_module_t ngx_mail_core_module = {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 NGX_MODULE_V1,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
109 &ngx_mail_core_module_ctx, /* module context */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
110 ngx_mail_core_commands, /* module directives */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
111 NGX_MAIL_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
112 NULL, /* init master */
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
114 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
115 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
116 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
117 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
118 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
119 NGX_MODULE_V1_PADDING
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 };
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 static void *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
124 ngx_mail_core_create_main_conf(ngx_conf_t *cf)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
125 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
126 ngx_mail_core_main_conf_t *cmcf;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
128 cmcf = ngx_pcalloc(cf->pool, sizeof(ngx_mail_core_main_conf_t));
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 if (cmcf == NULL) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2855
diff changeset
130 return NULL;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 }
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 if (ngx_array_init(&cmcf->servers, cf->pool, 4,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
134 sizeof(ngx_mail_core_srv_conf_t *))
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
135 != NGX_OK)
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
136 {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2855
diff changeset
137 return NULL;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
138 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
139
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
140 if (ngx_array_init(&cmcf->listen, cf->pool, 4, sizeof(ngx_mail_listen_t))
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
141 != NGX_OK)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142 {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2855
diff changeset
143 return NULL;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146 return cmcf;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150 static void *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
151 ngx_mail_core_create_srv_conf(ngx_conf_t *cf)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
152 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
153 ngx_mail_core_srv_conf_t *cscf;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
154
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
155 cscf = ngx_pcalloc(cf->pool, sizeof(ngx_mail_core_srv_conf_t));
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156 if (cscf == NULL) {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
157 return NULL;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
158 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
160 /*
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
161 * set by ngx_pcalloc():
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
162 *
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
163 * cscf->protocol = NULL;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
164 */
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
166 cscf->timeout = NGX_CONF_UNSET_MSEC;
1892
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
167 cscf->resolver_timeout = NGX_CONF_UNSET_MSEC;
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
168 cscf->so_keepalive = NGX_CONF_UNSET;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
169
1896
4c060e30476b do not resolve SMTP clients by default
Igor Sysoev <igor@sysoev.ru>
parents: 1892
diff changeset
170 cscf->resolver = NGX_CONF_UNSET_PTR;
4c060e30476b do not resolve SMTP clients by default
Igor Sysoev <igor@sysoev.ru>
parents: 1892
diff changeset
171
1892
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
172 cscf->file_name = cf->conf_file->file.name.data;
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
173 cscf->line = cf->conf_file->line;
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
174
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
175 return cscf;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
179 static char *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
180 ngx_mail_core_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
181 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
182 ngx_mail_core_srv_conf_t *prev = parent;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
183 ngx_mail_core_srv_conf_t *conf = child;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185 ngx_conf_merge_msec_value(conf->timeout, prev->timeout, 60000);
1892
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
186 ngx_conf_merge_msec_value(conf->resolver_timeout, prev->resolver_timeout,
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
187 30000);
1481
b58ce1cf66da smtp_client_buffer and smtp_greeting_delay
Igor Sysoev <igor@sysoev.ru>
parents: 1323
diff changeset
188
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
189 ngx_conf_merge_value(conf->so_keepalive, prev->so_keepalive, 0);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190
800
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
191
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
192 ngx_conf_merge_str_value(conf->server_name, prev->server_name, "");
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
193
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
194 if (conf->server_name.len == 0) {
2011
b56d4b1ebac7 $hostname variable
Igor Sysoev <igor@sysoev.ru>
parents: 1918
diff changeset
195 conf->server_name = cf->cycle->hostname;
800
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
196 }
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
197
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
198 if (conf->protocol == NULL) {
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
199 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
200 "unknown mail protocol for server in %s:%ui",
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
201 conf->file_name, conf->line);
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
202 return NGX_CONF_ERROR;
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
203 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
204
1896
4c060e30476b do not resolve SMTP clients by default
Igor Sysoev <igor@sysoev.ru>
parents: 1892
diff changeset
205 ngx_conf_merge_ptr_value(conf->resolver, prev->resolver, NULL);
1892
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
206
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207 return NGX_CONF_OK;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
209
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
210
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
211 static char *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
212 ngx_mail_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
213 {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
214 char *rv;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
215 void *mconf;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
216 ngx_uint_t m;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217 ngx_conf_t pcf;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
218 ngx_mail_module_t *module;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
219 ngx_mail_conf_ctx_t *ctx, *mail_ctx;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
220 ngx_mail_core_srv_conf_t *cscf, **cscfp;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
221 ngx_mail_core_main_conf_t *cmcf;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
222
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
223 ctx = ngx_pcalloc(cf->pool, sizeof(ngx_mail_conf_ctx_t));
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
224 if (ctx == NULL) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225 return NGX_CONF_ERROR;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
226 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
227
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
228 mail_ctx = cf->ctx;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
229 ctx->main_conf = mail_ctx->main_conf;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
230
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231 /* the server{}'s srv_conf */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
233 ctx->srv_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_mail_max_module);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234 if (ctx->srv_conf == NULL) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
235 return NGX_CONF_ERROR;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
236 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
237
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
238 for (m = 0; ngx_modules[m]; m++) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
239 if (ngx_modules[m]->type != NGX_MAIL_MODULE) {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
240 continue;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
241 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
242
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243 module = ngx_modules[m]->ctx;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
244
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
245 if (module->create_srv_conf) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
246 mconf = module->create_srv_conf(cf);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247 if (mconf == NULL) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248 return NGX_CONF_ERROR;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251 ctx->srv_conf[ngx_modules[m]->ctx_index] = mconf;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
253 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
254
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
255 /* the server configuration context */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
256
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
257 cscf = ctx->srv_conf[ngx_mail_core_module.ctx_index];
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
258 cscf->ctx = ctx;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
259
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
260 cmcf = ctx->main_conf[ngx_mail_core_module.ctx_index];
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
261
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262 cscfp = ngx_array_push(&cmcf->servers);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 if (cscfp == NULL) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264 return NGX_CONF_ERROR;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267 *cscfp = cscf;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
268
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
269
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
270 /* parse inside server{} */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
271
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
272 pcf = *cf;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273 cf->ctx = ctx;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
274 cf->cmd_type = NGX_MAIL_SRV_CONF;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276 rv = ngx_conf_parse(cf, NULL);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
277
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
278 *cf = pcf;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280 return rv;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
282
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284 static char *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
285 ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
286 {
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
287 ngx_mail_core_srv_conf_t *cscf = conf;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
288
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
289 size_t len, off;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
290 in_port_t port;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
291 ngx_str_t *value;
804
472cd9768ac2 now the "listen" directives use ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
292 ngx_url_t u;
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
293 ngx_uint_t i, m;
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
294 struct sockaddr *sa;
2798
268d8d3faa34 axe imap module artifacts
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
295 ngx_mail_listen_t *ls;
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
296 ngx_mail_module_t *module;
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
297 struct sockaddr_in *sin;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
298 ngx_mail_core_main_conf_t *cmcf;
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
299 #if (NGX_HAVE_INET6)
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
300 struct sockaddr_in6 *sin6;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
301 #endif
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
303 value = cf->args->elts;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
304
804
472cd9768ac2 now the "listen" directives use ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
305 ngx_memzero(&u, sizeof(ngx_url_t));
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
306
804
472cd9768ac2 now the "listen" directives use ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
307 u.url = value[1];
472cd9768ac2 now the "listen" directives use ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
308 u.listen = 1;
619
7a16e281c01f nginx-0.3.31-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 587
diff changeset
309
1559
fe11e2a3946d use pool instead of ngx_conf_t
Igor Sysoev <igor@sysoev.ru>
parents: 1487
diff changeset
310 if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
804
472cd9768ac2 now the "listen" directives use ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
311 if (u.err) {
472cd9768ac2 now the "listen" directives use ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
312 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
472cd9768ac2 now the "listen" directives use ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
313 "%s in \"%V\" of the \"listen\" directive",
472cd9768ac2 now the "listen" directives use ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
314 u.err, &u.url);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
315 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
316
804
472cd9768ac2 now the "listen" directives use ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
317 return NGX_CONF_ERROR;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
318 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
319
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
320 cmcf = ngx_mail_conf_get_module_main_conf(cf, ngx_mail_core_module);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
321
2798
268d8d3faa34 axe imap module artifacts
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
322 ls = cmcf->listen.elts;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
323
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
324 for (i = 0; i < cmcf->listen.nelts; i++) {
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
325
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
326 sa = (struct sockaddr *) ls[i].sockaddr;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
327
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
328 if (sa->sa_family != u.family) {
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
329 continue;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
330 }
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
331
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
332 switch (sa->sa_family) {
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
333
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
334 #if (NGX_HAVE_INET6)
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
335 case AF_INET6:
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
336 off = offsetof(struct sockaddr_in6, sin6_addr);
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
337 len = 16;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
338 sin6 = (struct sockaddr_in6 *) sa;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
339 port = sin6->sin6_port;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
340 break;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
341 #endif
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
342
4819
49a3fb31a05c Mail: fixed handling of AF_UNIX addresses in "listen".
Ruslan Ermilov <ru@nginx.com>
parents: 4813
diff changeset
343 #if (NGX_HAVE_UNIX_DOMAIN)
49a3fb31a05c Mail: fixed handling of AF_UNIX addresses in "listen".
Ruslan Ermilov <ru@nginx.com>
parents: 4813
diff changeset
344 case AF_UNIX:
49a3fb31a05c Mail: fixed handling of AF_UNIX addresses in "listen".
Ruslan Ermilov <ru@nginx.com>
parents: 4813
diff changeset
345 off = offsetof(struct sockaddr_un, sun_path);
49a3fb31a05c Mail: fixed handling of AF_UNIX addresses in "listen".
Ruslan Ermilov <ru@nginx.com>
parents: 4813
diff changeset
346 len = sizeof(((struct sockaddr_un *) sa)->sun_path);
49a3fb31a05c Mail: fixed handling of AF_UNIX addresses in "listen".
Ruslan Ermilov <ru@nginx.com>
parents: 4813
diff changeset
347 port = 0;
49a3fb31a05c Mail: fixed handling of AF_UNIX addresses in "listen".
Ruslan Ermilov <ru@nginx.com>
parents: 4813
diff changeset
348 break;
49a3fb31a05c Mail: fixed handling of AF_UNIX addresses in "listen".
Ruslan Ermilov <ru@nginx.com>
parents: 4813
diff changeset
349 #endif
49a3fb31a05c Mail: fixed handling of AF_UNIX addresses in "listen".
Ruslan Ermilov <ru@nginx.com>
parents: 4813
diff changeset
350
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
351 default: /* AF_INET */
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
352 off = offsetof(struct sockaddr_in, sin_addr);
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
353 len = 4;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
354 sin = (struct sockaddr_in *) sa;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
355 port = sin->sin_port;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
356 break;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
357 }
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
358
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
359 if (ngx_memcmp(ls[i].sockaddr + off, u.sockaddr + off, len) != 0) {
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
360 continue;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
361 }
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
362
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
363 if (port != u.port) {
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
364 continue;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
365 }
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
366
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
367 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
804
472cd9768ac2 now the "listen" directives use ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
368 "duplicate \"%V\" address and port pair", &u.url);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
369 return NGX_CONF_ERROR;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
370 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
371
2798
268d8d3faa34 axe imap module artifacts
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
372 ls = ngx_array_push(&cmcf->listen);
268d8d3faa34 axe imap module artifacts
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
373 if (ls == NULL) {
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
374 return NGX_CONF_ERROR;
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
375 }
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
376
2798
268d8d3faa34 axe imap module artifacts
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
377 ngx_memzero(ls, sizeof(ngx_mail_listen_t));
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
378
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
379 ngx_memcpy(ls->sockaddr, u.sockaddr, u.socklen);
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
380
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
381 ls->socklen = u.socklen;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
382 ls->wildcard = u.wildcard;
2798
268d8d3faa34 axe imap module artifacts
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
383 ls->ctx = cf->ctx;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384
4771
bdcdbdf35b52 Core: ipv6only is now on by default.
Ruslan Ermilov <ru@nginx.com>
parents: 4522
diff changeset
385 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
bdcdbdf35b52 Core: ipv6only is now on by default.
Ruslan Ermilov <ru@nginx.com>
parents: 4522
diff changeset
386 ls->ipv6only = 1;
bdcdbdf35b52 Core: ipv6only is now on by default.
Ruslan Ermilov <ru@nginx.com>
parents: 4522
diff changeset
387 #endif
bdcdbdf35b52 Core: ipv6only is now on by default.
Ruslan Ermilov <ru@nginx.com>
parents: 4522
diff changeset
388
4813
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
389 if (cscf->protocol == NULL) {
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
390 for (m = 0; ngx_modules[m]; m++) {
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
391 if (ngx_modules[m]->type != NGX_MAIL_MODULE) {
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
392 continue;
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
393 }
4822
cf3e9e6a7624 Whitespace fix.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4819
diff changeset
394
4813
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
395 module = ngx_modules[m]->ctx;
4822
cf3e9e6a7624 Whitespace fix.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4819
diff changeset
396
4813
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
397 if (module->protocol == NULL) {
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
398 continue;
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
399 }
4822
cf3e9e6a7624 Whitespace fix.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4819
diff changeset
400
4813
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
401 for (i = 0; module->protocol->port[i]; i++) {
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
402 if (module->protocol->port[i] == u.port) {
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
403 cscf->protocol = module->protocol;
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
404 break;
5c47ecaef07a mail_core: don't let the well-known port in the "listen" directive to
Ruslan Ermilov <ru@nginx.com>
parents: 4771
diff changeset
405 }
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
406 }
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
407 }
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
408 }
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
409
2224
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
410 for (i = 2; i < cf->args->nelts; i++) {
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
411
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
412 if (ngx_strcmp(value[i].data, "bind") == 0) {
2798
268d8d3faa34 axe imap module artifacts
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
413 ls->bind = 1;
2224
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
414 continue;
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
415 }
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
416
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
417 if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) {
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
418 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
419 struct sockaddr *sa;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
420 u_char buf[NGX_SOCKADDR_STRLEN];
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
421
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
422 sa = (struct sockaddr *) ls->sockaddr;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
423
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
424 if (sa->sa_family == AF_INET6) {
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
425
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
426 if (ngx_strcmp(&value[i].data[10], "n") == 0) {
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
427 ls->ipv6only = 1;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
428
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
429 } else if (ngx_strcmp(&value[i].data[10], "ff") == 0) {
4771
bdcdbdf35b52 Core: ipv6only is now on by default.
Ruslan Ermilov <ru@nginx.com>
parents: 4522
diff changeset
430 ls->ipv6only = 0;
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
431
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
432 } else {
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
433 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
434 "invalid ipv6only flags \"%s\"",
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
435 &value[i].data[9]);
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
436 return NGX_CONF_ERROR;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
437 }
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
438
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
439 ls->bind = 1;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
440
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
441 } else {
5263
05ba5bce31e0 Core: extended ngx_sock_ntop() with socklen parameter.
Vladimir Homutov <vl@nginx.com>
parents: 4822
diff changeset
442 len = ngx_sock_ntop(sa, ls->socklen, buf,
05ba5bce31e0 Core: extended ngx_sock_ntop() with socklen parameter.
Vladimir Homutov <vl@nginx.com>
parents: 4822
diff changeset
443 NGX_SOCKADDR_STRLEN, 1);
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
444
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
445 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
446 "ipv6only is not supported "
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
447 "on addr \"%*s\", ignored", len, buf);
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
448 }
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
449
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
450 continue;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
451 #else
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
452 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
453 "bind ipv6only is not supported "
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
454 "on this platform");
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
455 return NGX_CONF_ERROR;
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
456 #endif
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
457 }
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2798
diff changeset
458
2224
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
459 if (ngx_strcmp(value[i].data, "ssl") == 0) {
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
460 #if (NGX_MAIL_SSL)
2798
268d8d3faa34 axe imap module artifacts
Igor Sysoev <igor@sysoev.ru>
parents: 2512
diff changeset
461 ls->ssl = 1;
2224
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
462 continue;
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
463 #else
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
464 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
465 "the \"ssl\" parameter requires "
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
466 "ngx_mail_ssl_module");
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
467 return NGX_CONF_ERROR;
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
468 #endif
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
469 }
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
470
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
471 if (ngx_strncmp(value[i].data, "so_keepalive=", 13) == 0) {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
472
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
473 if (ngx_strcmp(&value[i].data[13], "on") == 0) {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
474 ls->so_keepalive = 1;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
475
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
476 } else if (ngx_strcmp(&value[i].data[13], "off") == 0) {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
477 ls->so_keepalive = 2;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
478
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
479 } else {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
480
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
481 #if (NGX_HAVE_KEEPALIVE_TUNABLE)
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
482 u_char *p, *end;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
483 ngx_str_t s;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
484
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
485 end = value[i].data + value[i].len;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
486 s.data = value[i].data + 13;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
487
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
488 p = ngx_strlchr(s.data, end, ':');
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
489 if (p == NULL) {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
490 p = end;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
491 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
492
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
493 if (p > s.data) {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
494 s.len = p - s.data;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
495
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
496 ls->tcp_keepidle = ngx_parse_time(&s, 1);
4474
41f640a693de Time parsing cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
497 if (ls->tcp_keepidle == (time_t) NGX_ERROR) {
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
498 goto invalid_so_keepalive;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
499 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
500 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
501
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
502 s.data = (p < end) ? (p + 1) : end;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
503
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
504 p = ngx_strlchr(s.data, end, ':');
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
505 if (p == NULL) {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
506 p = end;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
507 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
508
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
509 if (p > s.data) {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
510 s.len = p - s.data;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
511
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
512 ls->tcp_keepintvl = ngx_parse_time(&s, 1);
4474
41f640a693de Time parsing cleanup.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4412
diff changeset
513 if (ls->tcp_keepintvl == (time_t) NGX_ERROR) {
4323
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
514 goto invalid_so_keepalive;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
515 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
516 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
517
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
518 s.data = (p < end) ? (p + 1) : end;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
519
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
520 if (s.data < end) {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
521 s.len = end - s.data;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
522
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
523 ls->tcp_keepcnt = ngx_atoi(s.data, s.len);
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
524 if (ls->tcp_keepcnt == NGX_ERROR) {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
525 goto invalid_so_keepalive;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
526 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
527 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
528
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
529 if (ls->tcp_keepidle == 0 && ls->tcp_keepintvl == 0
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
530 && ls->tcp_keepcnt == 0)
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
531 {
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
532 goto invalid_so_keepalive;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
533 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
534
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
535 ls->so_keepalive = 1;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
536
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
537 #else
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
538
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
539 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
540 "the \"so_keepalive\" parameter accepts "
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
541 "only \"on\" or \"off\" on this platform");
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
542 return NGX_CONF_ERROR;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
543
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
544 #endif
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
545 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
546
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
547 ls->bind = 1;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
548
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
549 continue;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
550
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
551 #if (NGX_HAVE_KEEPALIVE_TUNABLE)
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
552 invalid_so_keepalive:
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
553
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
554 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
555 "invalid so_keepalive value: \"%s\"",
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
556 &value[i].data[13]);
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
557 return NGX_CONF_ERROR;
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
558 #endif
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
559 }
c4513d4dd024 Added the "so_keepalive=" parameter to the "listen" directive.
Valentin Bartenev <vbart@nginx.com>
parents: 4225
diff changeset
560
2224
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
561 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
562 "the invalid \"%V\" parameter", &value[i]);
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
563 return NGX_CONF_ERROR;
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 619
diff changeset
564 }
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
565
2224
109849282793 *) listen ssl
Igor Sysoev <igor@sysoev.ru>
parents: 2203
diff changeset
566 return NGX_CONF_OK;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
567 }
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
568
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
569
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
570 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
571 ngx_mail_core_protocol(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
572 {
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
573 ngx_mail_core_srv_conf_t *cscf = conf;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
574
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
575 ngx_str_t *value;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
576 ngx_uint_t m;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
577 ngx_mail_module_t *module;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
578
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
579 value = cf->args->elts;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
580
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
581 for (m = 0; ngx_modules[m]; m++) {
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
582 if (ngx_modules[m]->type != NGX_MAIL_MODULE) {
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
583 continue;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
584 }
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
585
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
586 module = ngx_modules[m]->ctx;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
587
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
588 if (module->protocol
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
589 && ngx_strcmp(module->protocol->name.data, value[1].data) == 0)
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
590 {
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
591 cscf->protocol = module->protocol;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
592
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
593 return NGX_CONF_OK;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
594 }
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
595 }
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
596
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
597 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
598 "unknown protocol \"%V\"", &value[1]);
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
599 return NGX_CONF_ERROR;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
600 }
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
601
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
602
1892
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
603 static char *
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
604 ngx_mail_core_resolver(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
605 {
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
606 ngx_mail_core_srv_conf_t *cscf = conf;
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
607
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
608 ngx_str_t *value;
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
609
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
610 value = cf->args->elts;
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
611
1918
a47516c7065b check duplicate resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1913
diff changeset
612 if (cscf->resolver != NGX_CONF_UNSET_PTR) {
a47516c7065b check duplicate resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1913
diff changeset
613 return "is duplicate";
a47516c7065b check duplicate resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1913
diff changeset
614 }
a47516c7065b check duplicate resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1913
diff changeset
615
1896
4c060e30476b do not resolve SMTP clients by default
Igor Sysoev <igor@sysoev.ru>
parents: 1892
diff changeset
616 if (ngx_strcmp(value[1].data, "off") == 0) {
4c060e30476b do not resolve SMTP clients by default
Igor Sysoev <igor@sysoev.ru>
parents: 1892
diff changeset
617 cscf->resolver = NULL;
4c060e30476b do not resolve SMTP clients by default
Igor Sysoev <igor@sysoev.ru>
parents: 1892
diff changeset
618 return NGX_CONF_OK;
4c060e30476b do not resolve SMTP clients by default
Igor Sysoev <igor@sysoev.ru>
parents: 1892
diff changeset
619 }
4c060e30476b do not resolve SMTP clients by default
Igor Sysoev <igor@sysoev.ru>
parents: 1892
diff changeset
620
4225
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
621 cscf->resolver = ngx_resolver_create(cf, &value[1], cf->args->nelts - 1);
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 2912
diff changeset
622 if (cscf->resolver == NULL) {
1892
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
623 return NGX_CONF_ERROR;
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
624 }
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
625
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
626 return NGX_CONF_OK;
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
627 }
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
628
057d362ee50e resolver in smtp proxy module
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
629
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
630 char *
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1481
diff changeset
631 ngx_mail_capabilities(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
632 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
633 char *p = conf;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
634
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
635 ngx_str_t *c, *value;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
636 ngx_uint_t i;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
637 ngx_array_t *a;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
638
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
639 a = (ngx_array_t *) (p + cmd->offset);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
640
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
641 value = cf->args->elts;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
642
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
643 for (i = 1; i < cf->args->nelts; i++) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
644 c = ngx_array_push(a);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
645 if (c == NULL) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
646 return NGX_CONF_ERROR;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
647 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
648
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
649 *c = value[i];
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
650 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
651
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
652 return NGX_CONF_OK;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
653 }