annotate src/mail/ngx_mail_auth_http_module.c @ 5503:d049b0ea00a3

SSL: ssl_session_tickets directive. This adds support so it's possible to explicitly disable SSL Session Tickets. In order to have good Forward Secrecy support either the session ticket key has to be reloaded by using nginx' binary upgrade process or using an external key file and reloading the configuration. This directive adds another possibility to have good support by disabling session tickets altogether. If session tickets are enabled and the process lives for a long a time, an attacker can grab the session ticket from the process and use that to decrypt any traffic that occured during the entire lifetime of the process.
author Dirkjan Bussink <d.bussink@gmail.com>
date Fri, 10 Jan 2014 16:12:40 +0100
parents 2220de0521ca
children 0cbefdcf82a6
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: 4227
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>
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 #include <ngx_event_connect.h>
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
12 #include <ngx_mail.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
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 typedef struct {
3269
f0d596e84634 rename ngx_peer_addr_t to ngx_addr_t
Igor Sysoev <igor@sysoev.ru>
parents: 3267
diff changeset
16 ngx_addr_t *peer;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
18 ngx_msec_t timeout;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
20 ngx_str_t host_header;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
21 ngx_str_t uri;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
22 ngx_str_t header;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
23
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
24 ngx_array_t *headers;
1392
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
25
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
26 u_char *file;
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
27 ngx_uint_t line;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
28 } ngx_mail_auth_http_conf_t;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
31 typedef struct ngx_mail_auth_http_ctx_s ngx_mail_auth_http_ctx_t;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
32
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
33 typedef void (*ngx_mail_auth_http_handler_pt)(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
34 ngx_mail_auth_http_ctx_t *ctx);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
35
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
36 struct ngx_mail_auth_http_ctx_s {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
37 ngx_buf_t *request;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
38 ngx_buf_t *response;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
39 ngx_peer_connection_t peer;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
40
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
41 ngx_mail_auth_http_handler_pt handler;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
42
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
43 ngx_uint_t state;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
44
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
45 u_char *header_name_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
46 u_char *header_name_end;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
47 u_char *header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
48 u_char *header_end;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
49
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
50 ngx_str_t addr;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
51 ngx_str_t port;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
52 ngx_str_t err;
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
53 ngx_str_t errmsg;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
54 ngx_str_t errcode;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
55
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
56 time_t sleep;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
57
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
58 ngx_pool_t *pool;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
59 };
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
62 static void ngx_mail_auth_http_write_handler(ngx_event_t *wev);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
63 static void ngx_mail_auth_http_read_handler(ngx_event_t *rev);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
64 static void ngx_mail_auth_http_ignore_status_line(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
65 ngx_mail_auth_http_ctx_t *ctx);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
66 static void ngx_mail_auth_http_process_headers(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
67 ngx_mail_auth_http_ctx_t *ctx);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
68 static void ngx_mail_auth_sleep_handler(ngx_event_t *rev);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
69 static ngx_int_t ngx_mail_auth_http_parse_header_line(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
70 ngx_mail_auth_http_ctx_t *ctx);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
71 static void ngx_mail_auth_http_block_read(ngx_event_t *rev);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
72 static void ngx_mail_auth_http_dummy_handler(ngx_event_t *ev);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
73 static ngx_buf_t *ngx_mail_auth_http_create_request(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
74 ngx_pool_t *pool, ngx_mail_auth_http_conf_t *ahcf);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
75 static ngx_int_t ngx_mail_auth_http_escape(ngx_pool_t *pool, ngx_str_t *text,
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
76 ngx_str_t *escaped);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
78 static void *ngx_mail_auth_http_create_conf(ngx_conf_t *cf);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
79 static char *ngx_mail_auth_http_merge_conf(ngx_conf_t *cf, void *parent,
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 void *child);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
81 static char *ngx_mail_auth_http(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
82 static char *ngx_mail_auth_http_header(ngx_conf_t *cf, ngx_command_t *cmd,
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
83 void *conf);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
86 static ngx_command_t ngx_mail_auth_http_commands[] = {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88 { ngx_string("auth_http"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
89 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE1,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
90 ngx_mail_auth_http,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
91 NGX_MAIL_SRV_CONF_OFFSET,
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 0,
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 NULL },
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 { ngx_string("auth_http_timeout"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
96 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
97 ngx_conf_set_msec_slot,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
98 NGX_MAIL_SRV_CONF_OFFSET,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
99 offsetof(ngx_mail_auth_http_conf_t, timeout),
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 NULL },
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
102 { ngx_string("auth_http_header"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
103 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE2,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
104 ngx_mail_auth_http_header,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
105 NGX_MAIL_SRV_CONF_OFFSET,
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
106 0,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
107 NULL },
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
108
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109 ngx_null_command
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 };
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
113 static ngx_mail_module_t ngx_mail_auth_http_module_ctx = {
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
114 NULL, /* protocol */
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
115
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 NULL, /* create main configuration */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 NULL, /* init main configuration */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
119 ngx_mail_auth_http_create_conf, /* create server configuration */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
120 ngx_mail_auth_http_merge_conf /* merge server configuration */
521
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
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
124 ngx_module_t ngx_mail_auth_http_module = {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 NGX_MODULE_V1,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
126 &ngx_mail_auth_http_module_ctx, /* module context */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
127 ngx_mail_auth_http_commands, /* module directives */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
128 NGX_MAIL_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
129 NULL, /* init master */
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
131 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
132 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
133 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
134 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
135 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
136 NGX_MODULE_V1_PADDING
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137 };
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
138
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
139
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
140 static ngx_str_t ngx_mail_auth_http_method[] = {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
141 ngx_string("plain"),
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 805
diff changeset
142 ngx_string("plain"),
2748
2477b28eaccb fix Auth-Method, the bug has been introduced in r2496
Igor Sysoev <igor@sysoev.ru>
parents: 2388
diff changeset
143 ngx_string("plain"),
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 805
diff changeset
144 ngx_string("apop"),
2309
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
145 ngx_string("cram-md5"),
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
146 ngx_string("none")
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
147 };
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
149 static ngx_str_t ngx_mail_smtp_errcode = ngx_string("535 5.7.0");
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150
1477
59e1caf2be94 style fix and optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
151
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152 void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
153 ngx_mail_auth_http_init(ngx_mail_session_t *s)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154 {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
155 ngx_int_t rc;
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
156 ngx_pool_t *pool;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
157 ngx_mail_auth_http_ctx_t *ctx;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
158 ngx_mail_auth_http_conf_t *ahcf;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
160 s->connection->log->action = "in http auth state";
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
161
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
162 pool = ngx_create_pool(2048, s->connection->log);
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
163 if (pool == NULL) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
164 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165 return;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
168 ctx = ngx_pcalloc(pool, sizeof(ngx_mail_auth_http_ctx_t));
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
169 if (ctx == NULL) {
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
170 ngx_destroy_pool(pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
171 ngx_mail_session_internal_server_error(s);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
172 return;
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
173 }
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
174
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
175 ctx->pool = pool;
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
176
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
177 ahcf = ngx_mail_get_module_srv_conf(s, ngx_mail_auth_http_module);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
179 ctx->request = ngx_mail_auth_http_create_request(s, pool, ahcf);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
180 if (ctx->request == NULL) {
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
181 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
182 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
183 return;
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
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
186 ngx_mail_set_ctx(s, ctx, ngx_mail_auth_http_module);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
187
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
188 ctx->peer.sockaddr = ahcf->peer->sockaddr;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
189 ctx->peer.socklen = ahcf->peer->socklen;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
190 ctx->peer.name = &ahcf->peer->name;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
191 ctx->peer.get = ngx_event_get_peer;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
192 ctx->peer.log = s->connection->log;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
193 ctx->peer.log_error = NGX_ERROR_ERR;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
194
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
195 rc = ngx_event_connect_peer(&ctx->peer);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
197 if (rc == NGX_ERROR || rc == NGX_BUSY || rc == NGX_DECLINED) {
862
6044cea025fa fix segfault when connect() failed
Igor Sysoev <igor@sysoev.ru>
parents: 856
diff changeset
198 if (ctx->peer.connection) {
6044cea025fa fix segfault when connect() failed
Igor Sysoev <igor@sysoev.ru>
parents: 856
diff changeset
199 ngx_close_connection(ctx->peer.connection);
6044cea025fa fix segfault when connect() failed
Igor Sysoev <igor@sysoev.ru>
parents: 856
diff changeset
200 }
6044cea025fa fix segfault when connect() failed
Igor Sysoev <igor@sysoev.ru>
parents: 856
diff changeset
201
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
202 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
203 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
204 return;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207 ctx->peer.connection->data = s;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208 ctx->peer.connection->pool = s->connection->pool;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
209
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
210 s->connection->read->handler = ngx_mail_auth_http_block_read;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
211 ctx->peer.connection->read->handler = ngx_mail_auth_http_read_handler;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
212 ctx->peer.connection->write->handler = ngx_mail_auth_http_write_handler;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
213
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
214 ctx->handler = ngx_mail_auth_http_ignore_status_line;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
215
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
216 ngx_add_timer(ctx->peer.connection->read, ahcf->timeout);
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
217 ngx_add_timer(ctx->peer.connection->write, ahcf->timeout);
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
218
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219 if (rc == NGX_OK) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
220 ngx_mail_auth_http_write_handler(ctx->peer.connection->write);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
221 return;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
222 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
223 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
224
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
226 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
227 ngx_mail_auth_http_write_handler(ngx_event_t *wev)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228 {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
229 ssize_t n, size;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
230 ngx_connection_t *c;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
231 ngx_mail_session_t *s;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
232 ngx_mail_auth_http_ctx_t *ctx;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
233 ngx_mail_auth_http_conf_t *ahcf;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
235 c = wev->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
236 s = c->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
237
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
238 ctx = ngx_mail_get_module_ctx(s, ngx_mail_auth_http_module);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
239
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
240 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, wev->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
241 "mail auth http write handler");
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
242
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
243 if (wev->timedout) {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
244 ngx_log_error(NGX_LOG_ERR, wev->log, NGX_ETIMEDOUT,
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
245 "auth http server %V timed out", ctx->peer.name);
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
246 ngx_close_connection(c);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
247 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
248 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 return;
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
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 size = ctx->request->last - ctx->request->pos;
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 n = ngx_send(c, ctx->request->pos, size);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
255
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
256 if (n == NGX_ERROR) {
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
257 ngx_close_connection(c);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
258 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
259 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
260 return;
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
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 if (n > 0) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264 ctx->request->pos += n;
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 if (n == size) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
267 wev->handler = ngx_mail_auth_http_dummy_handler;
521
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 if (wev->timer_set) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
270 ngx_del_timer(wev);
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
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2310
diff changeset
273 if (ngx_handle_write_event(wev, 0) != NGX_OK) {
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
274 ngx_close_connection(c);
799
9737d6fb1ac6 disable write level event while waiting auth server response
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
275 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
276 ngx_mail_session_internal_server_error(s);
799
9737d6fb1ac6 disable write level event while waiting auth server response
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
277 }
9737d6fb1ac6 disable write level event while waiting auth server response
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
278
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279 return;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280 }
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 if (!wev->timer_set) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
284 ahcf = ngx_mail_get_module_srv_conf(s, ngx_mail_auth_http_module);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285 ngx_add_timer(wev, ahcf->timeout);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
286 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
291 ngx_mail_auth_http_read_handler(ngx_event_t *rev)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 {
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
293 ssize_t n, size;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294 ngx_connection_t *c;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
295 ngx_mail_session_t *s;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
296 ngx_mail_auth_http_ctx_t *ctx;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
297
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298 c = rev->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299 s = c->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
301 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, rev->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
302 "mail auth http read handler");
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
303
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
304 ctx = ngx_mail_get_module_ctx(s, ngx_mail_auth_http_module);
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
305
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
306 if (rev->timedout) {
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
307 ngx_log_error(NGX_LOG_ERR, rev->log, NGX_ETIMEDOUT,
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
308 "auth http server %V timed out", ctx->peer.name);
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
309 ngx_close_connection(c);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
310 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
311 ngx_mail_session_internal_server_error(s);
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
312 return;
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
313 }
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
314
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
315 if (ctx->response == NULL) {
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
316 ctx->response = ngx_create_temp_buf(ctx->pool, 1024);
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
317 if (ctx->response == NULL) {
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
318 ngx_close_connection(c);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
319 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
320 ngx_mail_session_internal_server_error(s);
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
321 return;
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
322 }
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
323 }
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
324
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
325 size = ctx->response->end - ctx->response->last;
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
326
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
327 n = ngx_recv(c, ctx->response->pos, size);
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
328
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
329 if (n > 0) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
330 ctx->response->last += n;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
331
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
332 ctx->handler(s, ctx);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
333 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
334 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
335
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
336 if (n == NGX_AGAIN) {
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
337 return;
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
338 }
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
339
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
340 ngx_close_connection(c);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
341 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
342 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
343 }
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
344
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
345
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
346 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
347 ngx_mail_auth_http_ignore_status_line(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
348 ngx_mail_auth_http_ctx_t *ctx)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
349 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
350 u_char *p, ch;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
351 enum {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
352 sw_start = 0,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
353 sw_H,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
354 sw_HT,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
355 sw_HTT,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
356 sw_HTTP,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
357 sw_skip,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
358 sw_almost_done
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
359 } state;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
360
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
361 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, s->connection->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
362 "mail auth http process status line");
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
363
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
364 state = ctx->state;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
365
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
366 for (p = ctx->response->pos; p < ctx->response->last; p++) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
367 ch = *p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
368
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
369 switch (state) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
370
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
371 /* "HTTP/" */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
372 case sw_start:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
373 if (ch == 'H') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
374 state = sw_H;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
375 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
376 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
377 goto next;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
378
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
379 case sw_H:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
380 if (ch == 'T') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
381 state = sw_HT;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
382 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
383 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
384 goto next;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
385
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
386 case sw_HT:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
387 if (ch == 'T') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
388 state = sw_HTT;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
389 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
390 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
391 goto next;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
392
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
393 case sw_HTT:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
394 if (ch == 'P') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
395 state = sw_HTTP;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
396 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
397 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
398 goto next;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
399
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
400 case sw_HTTP:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
401 if (ch == '/') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
402 state = sw_skip;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
403 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
404 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
405 goto next;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
406
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
407 /* any text until end of line */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
408 case sw_skip:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
409 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
410 case CR:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
411 state = sw_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
412
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
413 break;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
414 case LF:
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
415 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
416 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
417 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
418
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
419 /* end of status line */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
420 case sw_almost_done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
421 if (ch == LF) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
422 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
423 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
424
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
425 ngx_log_error(NGX_LOG_ERR, s->connection->log, 0,
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
426 "auth http server &V sent invalid response",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
427 ctx->peer.name);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
428 ngx_close_connection(ctx->peer.connection);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
429 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
430 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
431 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
432 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
433 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
434
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
435 ctx->response->pos = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
436 ctx->state = state;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
437
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
438 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
439
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
440 next:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
441
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
442 p = ctx->response->start - 1;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
443
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
444 done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
445
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
446 ctx->response->pos = p + 1;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
447 ctx->state = 0;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
448 ctx->handler = ngx_mail_auth_http_process_headers;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
449 ctx->handler(s, ctx);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
450 }
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
451
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
452
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
453 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
454 ngx_mail_auth_http_process_headers(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
455 ngx_mail_auth_http_ctx_t *ctx)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
456 {
5134
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
457 u_char *p;
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
458 time_t timer;
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
459 size_t len, size;
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
460 ngx_int_t rc, port, n;
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
461 ngx_addr_t *peer;
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
462 struct sockaddr_in *sin;
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
463 #if (NGX_HAVE_INET6)
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
464 struct sockaddr_in6 *sin6;
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
465 #endif
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
466
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
467 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, s->connection->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
468 "mail auth http process headers");
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
469
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
470 for ( ;; ) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
471 rc = ngx_mail_auth_http_parse_header_line(s, ctx);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
472
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
473 if (rc == NGX_OK) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
474
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
475 #if (NGX_DEBUG)
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
476 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
477 ngx_str_t key, value;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
478
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
479 key.len = ctx->header_name_end - ctx->header_name_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
480 key.data = ctx->header_name_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
481 value.len = ctx->header_end - ctx->header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
482 value.data = ctx->header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
483
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
484 ngx_log_debug2(NGX_LOG_DEBUG_MAIL, s->connection->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
485 "mail auth http header: \"%V: %V\"",
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
486 &key, &value);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
487 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
488 #endif
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
489
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
490 len = ctx->header_name_end - ctx->header_name_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
491
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
492 if (len == sizeof("Auth-Status") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
493 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
494 (u_char *) "Auth-Status",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
495 sizeof("Auth-Status") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
496 == 0)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
497 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
498 len = ctx->header_end - ctx->header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
499
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
500 if (len == 2
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
501 && ctx->header_start[0] == 'O'
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
502 && ctx->header_start[1] == 'K')
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
503 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
504 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
505 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
506
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
507 if (len == 4
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
508 && ctx->header_start[0] == 'W'
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
509 && ctx->header_start[1] == 'A'
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
510 && ctx->header_start[2] == 'I'
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
511 && ctx->header_start[3] == 'T')
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
512 {
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
513 s->auth_wait = 1;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
514 continue;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
515 }
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
516
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
517 ctx->errmsg.len = len;
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
518 ctx->errmsg.data = ctx->header_start;
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
519
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
520 switch (s->protocol) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
521
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
522 case NGX_MAIL_POP3_PROTOCOL:
854
1673f197bc62 fix segfault when many auth failures occurred
Igor Sysoev <igor@sysoev.ru>
parents: 809
diff changeset
523 size = sizeof("-ERR ") - 1 + len + sizeof(CRLF) - 1;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
524 break;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
525
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
526 case NGX_MAIL_IMAP_PROTOCOL:
854
1673f197bc62 fix segfault when many auth failures occurred
Igor Sysoev <igor@sysoev.ru>
parents: 809
diff changeset
527 size = s->tag.len + sizeof("NO ") - 1 + len
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
528 + sizeof(CRLF) - 1;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
529 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
530
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
531 default: /* NGX_MAIL_SMTP_PROTOCOL */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
532 ctx->err = ctx->errmsg;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
533 continue;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
534 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
535
2061
b0a1c84725cf change useless ngx_pcalloc() to ngx_pnalloc()
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
536 p = ngx_pnalloc(s->connection->pool, size);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
537 if (p == NULL) {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
538 ngx_close_connection(ctx->peer.connection);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
539 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
540 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
541 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
542 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
543
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
544 ctx->err.data = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
545
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
546 switch (s->protocol) {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
547
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
548 case NGX_MAIL_POP3_PROTOCOL:
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
549 *p++ = '-'; *p++ = 'E'; *p++ = 'R'; *p++ = 'R'; *p++ = ' ';
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
550 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
551
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
552 case NGX_MAIL_IMAP_PROTOCOL:
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
553 p = ngx_cpymem(p, s->tag.data, s->tag.len);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
554 *p++ = 'N'; *p++ = 'O'; *p++ = ' ';
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
555 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
556
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
557 default: /* NGX_MAIL_SMTP_PROTOCOL */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
558 break;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
559 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
560
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
561 p = ngx_cpymem(p, ctx->header_start, len);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
562 *p++ = CR; *p++ = LF;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
563
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
564 ctx->err.len = p - ctx->err.data;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
565
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
566 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
567 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
568
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
569 if (len == sizeof("Auth-Server") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
570 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
571 (u_char *) "Auth-Server",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
572 sizeof("Auth-Server") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
573 == 0)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
574 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
575 ctx->addr.len = ctx->header_end - ctx->header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
576 ctx->addr.data = ctx->header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
577
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
578 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
579 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
580
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
581 if (len == sizeof("Auth-Port") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
582 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
583 (u_char *) "Auth-Port",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
584 sizeof("Auth-Port") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
585 == 0)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
586 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
587 ctx->port.len = ctx->header_end - ctx->header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
588 ctx->port.data = ctx->header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
589
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
590 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
591 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
592
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
593 if (len == sizeof("Auth-User") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
594 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
595 (u_char *) "Auth-User",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
596 sizeof("Auth-User") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
597 == 0)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
598 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
599 s->login.len = ctx->header_end - ctx->header_start;
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
600
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
601 s->login.data = ngx_pnalloc(s->connection->pool, s->login.len);
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
602 if (s->login.data == NULL) {
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
603 ngx_close_connection(ctx->peer.connection);
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
604 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
605 ngx_mail_session_internal_server_error(s);
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
606 return;
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
607 }
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
608
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
609 ngx_memcpy(s->login.data, ctx->header_start, s->login.len);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
610
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
611 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
612 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
613
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
614 if (len == sizeof("Auth-Pass") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
615 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
616 (u_char *) "Auth-Pass",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
617 sizeof("Auth-Pass") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
618 == 0)
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
619 {
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
620 s->passwd.len = ctx->header_end - ctx->header_start;
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
621
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
622 s->passwd.data = ngx_pnalloc(s->connection->pool,
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
623 s->passwd.len);
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
624 if (s->passwd.data == NULL) {
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
625 ngx_close_connection(ctx->peer.connection);
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
626 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
627 ngx_mail_session_internal_server_error(s);
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
628 return;
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
629 }
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
630
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
631 ngx_memcpy(s->passwd.data, ctx->header_start, s->passwd.len);
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
632
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
633 continue;
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
634 }
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
635
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
636 if (len == sizeof("Auth-Wait") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
637 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
638 (u_char *) "Auth-Wait",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
639 sizeof("Auth-Wait") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
640 == 0)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
641 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
642 n = ngx_atoi(ctx->header_start,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
643 ctx->header_end - ctx->header_start);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
644
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
645 if (n != NGX_ERROR) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
646 ctx->sleep = n;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
647 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
648
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
649 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
650 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
651
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
652 if (len == sizeof("Auth-Error-Code") - 1
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
653 && ngx_strncasecmp(ctx->header_name_start,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
654 (u_char *) "Auth-Error-Code",
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
655 sizeof("Auth-Error-Code") - 1)
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
656 == 0)
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
657 {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
658 ctx->errcode.len = ctx->header_end - ctx->header_start;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
659
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
660 ctx->errcode.data = ngx_pnalloc(s->connection->pool,
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
661 ctx->errcode.len);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
662 if (ctx->errcode.data == NULL) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
663 ngx_close_connection(ctx->peer.connection);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
664 ngx_destroy_pool(ctx->pool);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
665 ngx_mail_session_internal_server_error(s);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
666 return;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
667 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
668
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
669 ngx_memcpy(ctx->errcode.data, ctx->header_start,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
670 ctx->errcode.len);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
671
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
672 continue;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
673 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
674
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
675 /* ignore other headers */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
676
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
677 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
678 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
679
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
680 if (rc == NGX_DONE) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
681 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, s->connection->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
682 "mail auth http header done");
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
683
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
684 ngx_close_connection(ctx->peer.connection);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
685
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
686 if (ctx->err.len) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
687
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
688 ngx_log_error(NGX_LOG_INFO, s->connection->log, 0,
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
689 "client login failed: \"%V\"", &ctx->errmsg);
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
690
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
691 if (s->protocol == NGX_MAIL_SMTP_PROTOCOL) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
692
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
693 if (ctx->errcode.len == 0) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
694 ctx->errcode = ngx_mail_smtp_errcode;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
695 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
696
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
697 ctx->err.len = ctx->errcode.len + ctx->errmsg.len
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
698 + sizeof(" " CRLF) - 1;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
699
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
700 p = ngx_pnalloc(s->connection->pool, ctx->err.len);
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
701 if (p == NULL) {
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
702 ngx_destroy_pool(ctx->pool);
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
703 ngx_mail_session_internal_server_error(s);
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
704 return;
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
705 }
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
706
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
707 ctx->err.data = p;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
708
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
709 p = ngx_cpymem(p, ctx->errcode.data, ctx->errcode.len);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
710 *p++ = ' ';
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
711 p = ngx_cpymem(p, ctx->errmsg.data, ctx->errmsg.len);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
712 *p++ = CR; *p = LF;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
713 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
714
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
715 s->out = ctx->err;
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
716 timer = ctx->sleep;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
717
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
718 ngx_destroy_pool(ctx->pool);
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
719
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
720 if (timer == 0) {
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
721 s->quit = 1;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
722 ngx_mail_send(s->connection->write);
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
723 return;
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
724 }
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
725
1640
02a22cd5282a 64-bit time_t compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
726 ngx_add_timer(s->connection->read, (ngx_msec_t) (timer * 1000));
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
727
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
728 s->connection->read->handler = ngx_mail_auth_sleep_handler;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
729
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
730 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
731 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
732
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
733 if (s->auth_wait) {
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
734 timer = ctx->sleep;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
735
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
736 ngx_destroy_pool(ctx->pool);
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
737
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
738 if (timer == 0) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
739 ngx_mail_auth_http_init(s);
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
740 return;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
741 }
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
742
1640
02a22cd5282a 64-bit time_t compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
743 ngx_add_timer(s->connection->read, (ngx_msec_t) (timer * 1000));
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
744
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
745 s->connection->read->handler = ngx_mail_auth_sleep_handler;
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
746
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
747 return;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
748 }
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
749
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
750 if (ctx->addr.len == 0 || ctx->port.len == 0) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
751 ngx_log_error(NGX_LOG_ERR, s->connection->log, 0,
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
752 "auth http server %V did not send server or port",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
753 ctx->peer.name);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
754 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
755 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
756 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
757 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
758
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
759 if (s->passwd.data == NULL
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
760 && s->protocol != NGX_MAIL_SMTP_PROTOCOL)
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
761 {
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
762 ngx_log_error(NGX_LOG_ERR, s->connection->log, 0,
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
763 "auth http server %V did not send password",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
764 ctx->peer.name);
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
765 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
766 ngx_mail_session_internal_server_error(s);
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
767 return;
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
768 }
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
769
3269
f0d596e84634 rename ngx_peer_addr_t to ngx_addr_t
Igor Sysoev <igor@sysoev.ru>
parents: 3267
diff changeset
770 peer = ngx_pcalloc(s->connection->pool, sizeof(ngx_addr_t));
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
771 if (peer == NULL) {
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
772 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
773 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
774 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
775 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
776
5134
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
777 rc = ngx_parse_addr(s->connection->pool, peer,
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
778 ctx->addr.data, ctx->addr.len);
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
779
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
780 switch (rc) {
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
781 case NGX_OK:
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
782 break;
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2748
diff changeset
783
5134
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
784 case NGX_DECLINED:
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
785 ngx_log_error(NGX_LOG_ERR, s->connection->log, 0,
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
786 "auth http server %V sent invalid server "
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
787 "address:\"%V\"",
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
788 ctx->peer.name, &ctx->addr);
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
789 /* fall through */
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
790
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
791 default:
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
792 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
793 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
794 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
795 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
796
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
797 port = ngx_atoi(ctx->port.data, ctx->port.len);
4227
4af8ea9c3a86 Fixed port range checking.
Ruslan Ermilov <ru@nginx.com>
parents: 3516
diff changeset
798 if (port == NGX_ERROR || port < 1 || port > 65535) {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
799 ngx_log_error(NGX_LOG_ERR, s->connection->log, 0,
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
800 "auth http server %V sent invalid server "
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
801 "port:\"%V\"",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
802 ctx->peer.name, &ctx->port);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
803 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
804 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
805 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
806 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
807
5134
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
808 switch (peer->sockaddr->sa_family) {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
809
5134
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
810 #if (NGX_HAVE_INET6)
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
811 case AF_INET6:
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
812 sin6 = (struct sockaddr_in6 *) peer->sockaddr;
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
813 sin6->sin6_port = htons((in_port_t) port);
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
814 break;
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
815 #endif
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
816
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
817 default: /* AF_INET */
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
818 sin = (struct sockaddr_in *) peer->sockaddr;
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
819 sin->sin_port = htons((in_port_t) port);
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
820 break;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
821 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
822
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
823 len = ctx->addr.len + 1 + ctx->port.len;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
824
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
825 peer->name.len = len;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
826
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
827 peer->name.data = ngx_pnalloc(s->connection->pool, len);
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
828 if (peer->name.data == NULL) {
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
829 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
830 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
831 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
832 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
833
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
834 len = ctx->addr.len;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
835
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
836 ngx_memcpy(peer->name.data, ctx->addr.data, len);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
837
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
838 peer->name.data[len++] = ':';
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
839
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
840 ngx_memcpy(peer->name.data + len, ctx->port.data, ctx->port.len);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
841
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
842 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
843 ngx_mail_proxy_init(s, peer);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
844
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
845 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
846 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
847
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
848 if (rc == NGX_AGAIN ) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
849 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
850 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
851
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
852 /* rc == NGX_ERROR */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
853
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
854 ngx_log_error(NGX_LOG_ERR, s->connection->log, 0,
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
855 "auth http server %V sent invalid header in response",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
856 ctx->peer.name);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
857 ngx_close_connection(ctx->peer.connection);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
858 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
859 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
860
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
861 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
862 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
863 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
864
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
865
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
866 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
867 ngx_mail_auth_sleep_handler(ngx_event_t *rev)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
868 {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
869 ngx_connection_t *c;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
870 ngx_mail_session_t *s;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
871 ngx_mail_core_srv_conf_t *cscf;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
872
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
873 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, rev->log, 0, "mail auth sleep handler");
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
874
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
875 c = rev->data;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
876 s = c->data;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
877
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
878 if (rev->timedout) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
879
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
880 rev->timedout = 0;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
881
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
882 if (s->auth_wait) {
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
883 s->auth_wait = 0;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
884 ngx_mail_auth_http_init(s);
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
885 return;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
886 }
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
887
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
888 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
889
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
890 rev->handler = cscf->protocol->auth_state;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
891
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
892 s->mail_state = 0;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
893 s->auth_method = NGX_MAIL_AUTH_PLAIN;
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
894
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
895 c->log->action = "in auth state";
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
896
1477
59e1caf2be94 style fix and optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
897 ngx_mail_send(c->write);
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
898
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
899 if (c->destroyed) {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
900 return;
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
901 }
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
902
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
903 ngx_add_timer(rev, cscf->timeout);
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
904
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
905 if (rev->ready) {
1477
59e1caf2be94 style fix and optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
906 rev->handler(rev);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
907 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
908 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
909
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2310
diff changeset
910 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
1477
59e1caf2be94 style fix and optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
911 ngx_mail_close_connection(c);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
912 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
913
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
914 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
915 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
916
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
917 if (rev->active) {
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2310
diff changeset
918 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
1477
59e1caf2be94 style fix and optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
919 ngx_mail_close_connection(c);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
920 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
921 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
922 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
923
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
924
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
925 static ngx_int_t
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
926 ngx_mail_auth_http_parse_header_line(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
927 ngx_mail_auth_http_ctx_t *ctx)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
928 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
929 u_char c, ch, *p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
930 enum {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
931 sw_start = 0,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
932 sw_name,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
933 sw_space_before_value,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
934 sw_value,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
935 sw_space_after_value,
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
936 sw_almost_done,
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
937 sw_header_almost_done
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
938 } state;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
939
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
940 state = ctx->state;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
941
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
942 for (p = ctx->response->pos; p < ctx->response->last; p++) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
943 ch = *p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
944
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
945 switch (state) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
946
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
947 /* first char */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
948 case sw_start:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
949
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
950 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
951 case CR:
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
952 ctx->header_end = p;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
953 state = sw_header_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
954 break;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
955 case LF:
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
956 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
957 goto header_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
958 default:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
959 state = sw_name;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
960 ctx->header_name_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
961
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
962 c = (u_char) (ch | 0x20);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
963 if (c >= 'a' && c <= 'z') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
964 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
965 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
966
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
967 if (ch >= '0' && ch <= '9') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
968 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
969 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
970
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
971 return NGX_ERROR;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
972 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
973 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
974
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
975 /* header name */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
976 case sw_name:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
977 c = (u_char) (ch | 0x20);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
978 if (c >= 'a' && c <= 'z') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
979 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
980 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
981
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
982 if (ch == ':') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
983 ctx->header_name_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
984 state = sw_space_before_value;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
985 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
986 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
987
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
988 if (ch == '-') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
989 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
990 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
991
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
992 if (ch >= '0' && ch <= '9') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
993 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
994 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
995
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
996 if (ch == CR) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
997 ctx->header_name_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
998 ctx->header_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
999 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1000 state = sw_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1001 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1002 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1003
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1004 if (ch == LF) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1005 ctx->header_name_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1006 ctx->header_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1007 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1008 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1009 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1010
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1011 return NGX_ERROR;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1012
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1013 /* space* before header value */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1014 case sw_space_before_value:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1015 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1016 case ' ':
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1017 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1018 case CR:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1019 ctx->header_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1020 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1021 state = sw_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1022 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1023 case LF:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1024 ctx->header_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1025 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1026 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1027 default:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1028 ctx->header_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1029 state = sw_value;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1030 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1031 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1032 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1033
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1034 /* header value */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1035 case sw_value:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1036 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1037 case ' ':
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1038 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1039 state = sw_space_after_value;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1040 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1041 case CR:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1042 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1043 state = sw_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1044 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1045 case LF:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1046 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1047 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1048 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1049 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1050
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1051 /* space* before end of header line */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1052 case sw_space_after_value:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1053 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1054 case ' ':
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1055 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1056 case CR:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1057 state = sw_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1058 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1059 case LF:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1060 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1061 default:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1062 state = sw_value;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1063 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1064 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1065 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1066
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1067 /* end of header line */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1068 case sw_almost_done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1069 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1070 case LF:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1071 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1072 default:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1073 return NGX_ERROR;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1074 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1075
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1076 /* end of header */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1077 case sw_header_almost_done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1078 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1079 case LF:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1080 goto header_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1081 default:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1082 return NGX_ERROR;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1083 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1084 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1085 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1086
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1087 ctx->response->pos = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1088 ctx->state = state;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1089
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1090 return NGX_AGAIN;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1091
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1092 done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1093
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1094 ctx->response->pos = p + 1;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1095 ctx->state = sw_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1096
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1097 return NGX_OK;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1098
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1099 header_done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1100
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1101 ctx->response->pos = p + 1;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1102 ctx->state = sw_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1103
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1104 return NGX_DONE;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1105 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1106
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1107
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1108 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1109 ngx_mail_auth_http_block_read(ngx_event_t *rev)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1110 {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1111 ngx_connection_t *c;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1112 ngx_mail_session_t *s;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1113 ngx_mail_auth_http_ctx_t *ctx;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1114
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1115 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, rev->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1116 "mail auth http block read");
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1117
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2310
diff changeset
1118 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1119 c = rev->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1120 s = c->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1121
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1122 ctx = ngx_mail_get_module_ctx(s, ngx_mail_auth_http_module);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1123
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1124 ngx_close_connection(ctx->peer.connection);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1125 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1126 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1127 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1128 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1129
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1130
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1131 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1132 ngx_mail_auth_http_dummy_handler(ngx_event_t *ev)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1133 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1134 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, ev->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1135 "mail auth http dummy handler");
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1136 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1137
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1138
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1139 static ngx_buf_t *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1140 ngx_mail_auth_http_create_request(ngx_mail_session_t *s, ngx_pool_t *pool,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1141 ngx_mail_auth_http_conf_t *ahcf)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1142 {
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1143 size_t len;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1144 ngx_buf_t *b;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1145 ngx_str_t login, passwd;
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1146 ngx_mail_core_srv_conf_t *cscf;
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1147
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1148 if (ngx_mail_auth_http_escape(pool, &s->login, &login) != NGX_OK) {
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1149 return NULL;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1150 }
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1151
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1152 if (ngx_mail_auth_http_escape(pool, &s->passwd, &passwd) != NGX_OK) {
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1153 return NULL;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1154 }
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1155
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1156 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module);
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1157
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1158 len = sizeof("GET ") - 1 + ahcf->uri.len + sizeof(" HTTP/1.0" CRLF) - 1
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1159 + sizeof("Host: ") - 1 + ahcf->host_header.len + sizeof(CRLF) - 1
856
0197d6aae54e use correct auth method length
Igor Sysoev <igor@sysoev.ru>
parents: 854
diff changeset
1160 + sizeof("Auth-Method: ") - 1
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1161 + ngx_mail_auth_http_method[s->auth_method].len
856
0197d6aae54e use correct auth method length
Igor Sysoev <igor@sysoev.ru>
parents: 854
diff changeset
1162 + sizeof(CRLF) - 1
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1163 + sizeof("Auth-User: ") - 1 + login.len + sizeof(CRLF) - 1
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1164 + sizeof("Auth-Pass: ") - 1 + passwd.len + sizeof(CRLF) - 1
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1165 + sizeof("Auth-Salt: ") - 1 + s->salt.len
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1166 + sizeof("Auth-Protocol: ") - 1 + cscf->protocol->name.len
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1167 + sizeof(CRLF) - 1
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1168 + sizeof("Auth-Login-Attempt: ") - 1 + NGX_INT_T_LEN
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1169 + sizeof(CRLF) - 1
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1170 + sizeof("Client-IP: ") - 1 + s->connection->addr_text.len
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1171 + sizeof(CRLF) - 1
2309
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1172 + sizeof("Client-Host: ") - 1 + s->host.len + sizeof(CRLF) - 1
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1173 + sizeof("Auth-SMTP-Helo: ") - 1 + s->smtp_helo.len
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1174 + sizeof("Auth-SMTP-From: ") - 1 + s->smtp_from.len
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1175 + sizeof("Auth-SMTP-To: ") - 1 + s->smtp_to.len
1285
0c10dc6a8e74 fix memory allocation for auth_http_header
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
1176 + ahcf->header.len
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1177 + sizeof(CRLF) - 1;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1178
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1179 b = ngx_create_temp_buf(pool, len);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1180 if (b == NULL) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1181 return NULL;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1182 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1183
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1184 b->last = ngx_cpymem(b->last, "GET ", sizeof("GET ") - 1);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1185 b->last = ngx_copy(b->last, ahcf->uri.data, ahcf->uri.len);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1186 b->last = ngx_cpymem(b->last, " HTTP/1.0" CRLF,
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1187 sizeof(" HTTP/1.0" CRLF) - 1);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1188
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1189 b->last = ngx_cpymem(b->last, "Host: ", sizeof("Host: ") - 1);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1190 b->last = ngx_copy(b->last, ahcf->host_header.data,
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1191 ahcf->host_header.len);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1192 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1193
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1194 b->last = ngx_cpymem(b->last, "Auth-Method: ",
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1195 sizeof("Auth-Method: ") - 1);
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1196 b->last = ngx_cpymem(b->last,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1197 ngx_mail_auth_http_method[s->auth_method].data,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1198 ngx_mail_auth_http_method[s->auth_method].len);
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1199 *b->last++ = CR; *b->last++ = LF;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1200
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1201 b->last = ngx_cpymem(b->last, "Auth-User: ", sizeof("Auth-User: ") - 1);
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1202 b->last = ngx_copy(b->last, login.data, login.len);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1203 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1204
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1205 b->last = ngx_cpymem(b->last, "Auth-Pass: ", sizeof("Auth-Pass: ") - 1);
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1206 b->last = ngx_copy(b->last, passwd.data, passwd.len);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1207 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1208
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1209 if (s->auth_method != NGX_MAIL_AUTH_PLAIN && s->salt.len) {
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1210 b->last = ngx_cpymem(b->last, "Auth-Salt: ", sizeof("Auth-Salt: ") - 1);
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1211 b->last = ngx_copy(b->last, s->salt.data, s->salt.len);
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1212
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1213 s->passwd.data = NULL;
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1214 }
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1215
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1216 b->last = ngx_cpymem(b->last, "Auth-Protocol: ",
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1217 sizeof("Auth-Protocol: ") - 1);
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1218 b->last = ngx_cpymem(b->last, cscf->protocol->name.data,
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1219 cscf->protocol->name.len);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1220 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1221
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1222 b->last = ngx_sprintf(b->last, "Auth-Login-Attempt: %ui" CRLF,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1223 s->login_attempt);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1224
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1225 b->last = ngx_cpymem(b->last, "Client-IP: ", sizeof("Client-IP: ") - 1);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1226 b->last = ngx_copy(b->last, s->connection->addr_text.data,
2309
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1227 s->connection->addr_text.len);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1228 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1229
2309
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1230 if (s->host.len) {
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1231 b->last = ngx_cpymem(b->last, "Client-Host: ",
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1232 sizeof("Client-Host: ") - 1);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1233 b->last = ngx_copy(b->last, s->host.data, s->host.len);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1234 *b->last++ = CR; *b->last++ = LF;
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1235 }
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1236
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1237 if (s->auth_method == NGX_MAIL_AUTH_NONE) {
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1238
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1239 /* HELO, MAIL FROM, and RCPT TO can't contain CRLF, no need to escape */
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1240
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1241 b->last = ngx_cpymem(b->last, "Auth-SMTP-Helo: ",
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1242 sizeof("Auth-SMTP-Helo: ") - 1);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1243 b->last = ngx_copy(b->last, s->smtp_helo.data, s->smtp_helo.len);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1244 *b->last++ = CR; *b->last++ = LF;
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1245
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1246 b->last = ngx_cpymem(b->last, "Auth-SMTP-From: ",
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1247 sizeof("Auth-SMTP-From: ") - 1);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1248 b->last = ngx_copy(b->last, s->smtp_from.data, s->smtp_from.len);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1249 *b->last++ = CR; *b->last++ = LF;
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1250
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1251 b->last = ngx_cpymem(b->last, "Auth-SMTP-To: ",
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1252 sizeof("Auth-SMTP-To: ") - 1);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1253 b->last = ngx_copy(b->last, s->smtp_to.data, s->smtp_to.len);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1254 *b->last++ = CR; *b->last++ = LF;
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1255
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1256 }
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1257
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1258 if (ahcf->header.len) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1259 b->last = ngx_copy(b->last, ahcf->header.data, ahcf->header.len);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1260 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1261
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1262 /* add "\r\n" at the header end */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1263 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1264
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1265 #if (NGX_DEBUG_MAIL_PASSWD)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1266 {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1267 ngx_str_t l;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1268
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1269 l.len = b->last - b->pos;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1270 l.data = b->pos;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1271 ngx_log_debug1(NGX_LOG_DEBUG_MAIL, s->connection->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1272 "mail auth http header:\n\"%V\"", &l);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1273 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1274 #endif
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1275
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1276 return b;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1277 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1278
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1279
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1280 static ngx_int_t
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1281 ngx_mail_auth_http_escape(ngx_pool_t *pool, ngx_str_t *text, ngx_str_t *escaped)
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1282 {
1405
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1392
diff changeset
1283 u_char *p;
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1392
diff changeset
1284 uintptr_t n;
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1285
1405
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1392
diff changeset
1286 n = ngx_escape_uri(NULL, text->data, text->len, NGX_ESCAPE_MAIL_AUTH);
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1287
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1288 if (n == 0) {
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1289 *escaped = *text;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1290 return NGX_OK;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1291 }
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1292
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1293 escaped->len = text->len + n * 2;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1294
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
1295 p = ngx_pnalloc(pool, escaped->len);
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1296 if (p == NULL) {
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1297 return NGX_ERROR;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1298 }
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1299
1405
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1392
diff changeset
1300 (void) ngx_escape_uri(p, text->data, text->len, NGX_ESCAPE_MAIL_AUTH);
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1301
1405
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1392
diff changeset
1302 escaped->data = p;
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1303
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1304 return NGX_OK;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1305 }
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1306
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1307
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1308 static void *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1309 ngx_mail_auth_http_create_conf(ngx_conf_t *cf)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1310 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1311 ngx_mail_auth_http_conf_t *ahcf;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1312
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1313 ahcf = ngx_pcalloc(cf->pool, sizeof(ngx_mail_auth_http_conf_t));
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1314 if (ahcf == NULL) {
2912
c7d57b539248 return NULL instead of NGX_CONF_ERROR on a create conf failure
Igor Sysoev <igor@sysoev.ru>
parents: 2855
diff changeset
1315 return NULL;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1316 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1317
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1318 ahcf->timeout = NGX_CONF_UNSET_MSEC;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1319
1392
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1320 ahcf->file = cf->conf_file->file.name.data;
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1321 ahcf->line = cf->conf_file->line;
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1322
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1323 return ahcf;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1324 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1325
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1326
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1327 static char *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1328 ngx_mail_auth_http_merge_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
1329 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1330 ngx_mail_auth_http_conf_t *prev = parent;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1331 ngx_mail_auth_http_conf_t *conf = child;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1332
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1333 u_char *p;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1334 size_t len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1335 ngx_uint_t i;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1336 ngx_table_elt_t *header;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1337
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
1338 if (conf->peer == NULL) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
1339 conf->peer = prev->peer;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1340 conf->host_header = prev->host_header;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1341 conf->uri = prev->uri;
1392
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1342
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1343 if (conf->peer == NULL) {
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1344 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
4812
785ae4de268b Corrected the directive name in the ngx_mail_auth_http_module error message.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
1345 "no \"auth_http\" is defined for server in %s:%ui",
1392
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1346 conf->file, conf->line);
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1347
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1348 return NGX_CONF_ERROR;
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1349 }
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1350 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1351
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1352 ngx_conf_merge_msec_value(conf->timeout, prev->timeout, 60000);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1353
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1354 if (conf->headers == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1355 conf->headers = prev->headers;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1356 conf->header = prev->header;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1357 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1358
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1359 if (conf->headers && conf->header.len == 0) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1360 len = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1361 header = conf->headers->elts;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1362 for (i = 0; i < conf->headers->nelts; i++) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1363 len += header[i].key.len + 2 + header[i].value.len + 2;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1364 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1365
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
1366 p = ngx_pnalloc(cf->pool, len);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1367 if (p == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1368 return NGX_CONF_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1369 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1370
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1371 conf->header.len = len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1372 conf->header.data = p;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1373
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1374 for (i = 0; i < conf->headers->nelts; i++) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1375 p = ngx_cpymem(p, header[i].key.data, header[i].key.len);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1376 *p++ = ':'; *p++ = ' ';
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1377 p = ngx_cpymem(p, header[i].value.data, header[i].value.len);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1378 *p++ = CR; *p++ = LF;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1379 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1380 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1381
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1382 return NGX_CONF_OK;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1383 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1384
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1385
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1386 static char *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1387 ngx_mail_auth_http(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1388 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1389 ngx_mail_auth_http_conf_t *ahcf = conf;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1390
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1391 ngx_str_t *value;
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1392 ngx_url_t u;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1393
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1394 value = cf->args->elts;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1395
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1396 ngx_memzero(&u, sizeof(ngx_url_t));
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1397
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1398 u.url = value[1];
906
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
1399 u.default_port = 80;
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1400 u.uri_part = 1;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1401
1391
4eed21047e4d allow "http://" in auth_http URL
Igor Sysoev <igor@sysoev.ru>
parents: 1390
diff changeset
1402 if (ngx_strncmp(u.url.data, "http://", 7) == 0) {
4eed21047e4d allow "http://" in auth_http URL
Igor Sysoev <igor@sysoev.ru>
parents: 1390
diff changeset
1403 u.url.len -= 7;
4eed21047e4d allow "http://" in auth_http URL
Igor Sysoev <igor@sysoev.ru>
parents: 1390
diff changeset
1404 u.url.data += 7;
4eed21047e4d allow "http://" in auth_http URL
Igor Sysoev <igor@sysoev.ru>
parents: 1390
diff changeset
1405 }
4eed21047e4d allow "http://" in auth_http URL
Igor Sysoev <igor@sysoev.ru>
parents: 1390
diff changeset
1406
1559
fe11e2a3946d use pool instead of ngx_conf_t
Igor Sysoev <igor@sysoev.ru>
parents: 1487
diff changeset
1407 if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1408 if (u.err) {
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1409 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1410 "%s in auth_http \"%V\"", u.err, &u.url);
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1411 }
1390
3e045031ee3b stop configuration on error
Igor Sysoev <igor@sysoev.ru>
parents: 1285
diff changeset
1412
3e045031ee3b stop configuration on error
Igor Sysoev <igor@sysoev.ru>
parents: 1285
diff changeset
1413 return NGX_CONF_ERROR;
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1414 }
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1415
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
1416 ahcf->peer = u.addrs;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1417
3406
a2a5812cf4f4 use "localhost" in "Host" header line, if unix socket is used in "auth_http"
Igor Sysoev <igor@sysoev.ru>
parents: 3269
diff changeset
1418 if (u.family != AF_UNIX) {
a2a5812cf4f4 use "localhost" in "Host" header line, if unix socket is used in "auth_http"
Igor Sysoev <igor@sysoev.ru>
parents: 3269
diff changeset
1419 ahcf->host_header = u.host;
a2a5812cf4f4 use "localhost" in "Host" header line, if unix socket is used in "auth_http"
Igor Sysoev <igor@sysoev.ru>
parents: 3269
diff changeset
1420
a2a5812cf4f4 use "localhost" in "Host" header line, if unix socket is used in "auth_http"
Igor Sysoev <igor@sysoev.ru>
parents: 3269
diff changeset
1421 } else {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3406
diff changeset
1422 ngx_str_set(&ahcf->host_header, "localhost");
3406
a2a5812cf4f4 use "localhost" in "Host" header line, if unix socket is used in "auth_http"
Igor Sysoev <igor@sysoev.ru>
parents: 3269
diff changeset
1423 }
a2a5812cf4f4 use "localhost" in "Host" header line, if unix socket is used in "auth_http"
Igor Sysoev <igor@sysoev.ru>
parents: 3269
diff changeset
1424
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1425 ahcf->uri = u.uri;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1426
559
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1427 if (ahcf->uri.len == 0) {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3406
diff changeset
1428 ngx_str_set(&ahcf->uri, "/");
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
1429 }
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
1430
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1431 return NGX_CONF_OK;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1432 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1433
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1434
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1435 static char *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1436 ngx_mail_auth_http_header(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1437 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1438 ngx_mail_auth_http_conf_t *ahcf = conf;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1439
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1440 ngx_str_t *value;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1441 ngx_table_elt_t *header;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1442
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1443 if (ahcf->headers == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1444 ahcf->headers = ngx_array_create(cf->pool, 1, sizeof(ngx_table_elt_t));
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1445 if (ahcf->headers == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1446 return NGX_CONF_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1447 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1448 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1449
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1450 header = ngx_array_push(ahcf->headers);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1451 if (header == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1452 return NGX_CONF_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1453 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1454
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1455 value = cf->args->elts;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1456
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1457 header->key = value[1];
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1458 header->value = value[2];
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1459
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1460 return NGX_CONF_OK;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1461 }