annotate src/mail/ngx_mail_auth_http_module.c @ 9299:2706b60dc225 default tip

Core: error logging rate limiting. With this change, error logging to files can be rate-limited with the "rate=" parameter. The parameter specifies allowed log messages rate to a particular file (per worker), in messages per second (m/s). By default, "rate=1000m/s" is used. Rate limiting is implemented using the "leaky bucket" method, similarly to the limit_req module. Maximum burst size is set to the number of log messages per second for each severity level, so "error" messages are logged even if the rate limit is hit by "info" messages (but not vice versa). When the limit is reached for a particular level, the "too many log messages, limiting" message is logged at this level. If debug logging is enabled, either for the particular log file or for the particular connection, rate limiting is not used.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 25 Jun 2024 22:58:56 +0300
parents 4538c1ffb0f8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 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;
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
19 ngx_flag_t pass_client_cert;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
21 ngx_str_t host_header;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
22 ngx_str_t uri;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
23 ngx_str_t header;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
24
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
25 ngx_array_t *headers;
1392
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
26
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
27 u_char *file;
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
28 ngx_uint_t line;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
29 } ngx_mail_auth_http_conf_t;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
32 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
33
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
34 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
35 ngx_mail_auth_http_ctx_t *ctx);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
36
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
37 struct ngx_mail_auth_http_ctx_s {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
38 ngx_buf_t *request;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
39 ngx_buf_t *response;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
40 ngx_peer_connection_t peer;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
41
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
42 ngx_mail_auth_http_handler_pt handler;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
43
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
44 ngx_uint_t state;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
45
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
46 u_char *header_name_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
47 u_char *header_name_end;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
48 u_char *header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
49 u_char *header_end;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
50
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
51 ngx_str_t addr;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
52 ngx_str_t port;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
53 ngx_str_t err;
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
54 ngx_str_t errmsg;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
55 ngx_str_t errcode;
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
56 ngx_str_t errsasl;
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 time_t sleep;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
59
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
60 ngx_pool_t *pool;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
61 };
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
64 static void ngx_mail_auth_http_write_handler(ngx_event_t *wev);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
65 static void ngx_mail_auth_http_read_handler(ngx_event_t *rev);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
66 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
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_http_process_headers(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
69 ngx_mail_auth_http_ctx_t *ctx);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
70 static void ngx_mail_auth_sleep_handler(ngx_event_t *rev);
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
71 static void ngx_mail_auth_send_error(ngx_mail_session_t *s);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
72 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
73 ngx_mail_auth_http_ctx_t *ctx);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
74 static void ngx_mail_auth_http_block_read(ngx_event_t *rev);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
75 static void ngx_mail_auth_http_dummy_handler(ngx_event_t *ev);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
76 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
77 ngx_pool_t *pool, ngx_mail_auth_http_conf_t *ahcf);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
78 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
79 ngx_str_t *escaped);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
81 static void *ngx_mail_auth_http_create_conf(ngx_conf_t *cf);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
82 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
83 void *child);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
84 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
85 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
86 void *conf);
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
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
89 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
90
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 { ngx_string("auth_http"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
92 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE1,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
93 ngx_mail_auth_http,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
94 NGX_MAIL_SRV_CONF_OFFSET,
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 0,
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 NULL },
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 { ngx_string("auth_http_timeout"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
99 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
100 ngx_conf_set_msec_slot,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
101 NGX_MAIL_SRV_CONF_OFFSET,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
102 offsetof(ngx_mail_auth_http_conf_t, timeout),
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 NULL },
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
105 { ngx_string("auth_http_header"),
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
106 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_TAKE2,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
107 ngx_mail_auth_http_header,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
108 NGX_MAIL_SRV_CONF_OFFSET,
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
109 0,
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
110 NULL },
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
111
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
112 { ngx_string("auth_http_pass_client_cert"),
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
113 NGX_MAIL_MAIN_CONF|NGX_MAIL_SRV_CONF|NGX_CONF_FLAG,
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
114 ngx_conf_set_flag_slot,
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
115 NGX_MAIL_SRV_CONF_OFFSET,
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
116 offsetof(ngx_mail_auth_http_conf_t, pass_client_cert),
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
117 NULL },
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
118
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 ngx_null_command
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 };
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
123 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
124 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
125
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 NULL, /* create main configuration */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127 NULL, /* init main configuration */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
129 ngx_mail_auth_http_create_conf, /* create server configuration */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
130 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
131 };
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
134 ngx_module_t ngx_mail_auth_http_module = {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135 NGX_MODULE_V1,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
136 &ngx_mail_auth_http_module_ctx, /* module context */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
137 ngx_mail_auth_http_commands, /* module directives */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
138 NGX_MAIL_MODULE, /* module type */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
139 NULL, /* init master */
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140 NULL, /* init module */
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
141 NULL, /* init process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
142 NULL, /* init thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
143 NULL, /* exit thread */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
144 NULL, /* exit process */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
145 NULL, /* exit master */
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
146 NGX_MODULE_V1_PADDING
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147 };
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
150 static ngx_str_t ngx_mail_auth_http_method[] = {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
151 ngx_string("plain"),
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 805
diff changeset
152 ngx_string("plain"),
2748
2477b28eaccb fix Auth-Method, the bug has been introduced in r2496
Igor Sysoev <igor@sysoev.ru>
parents: 2388
diff changeset
153 ngx_string("plain"),
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 805
diff changeset
154 ngx_string("apop"),
2309
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
155 ngx_string("cram-md5"),
6774
bcb107bb89cd Mail: support SASL EXTERNAL (RFC 4422).
Rob N ★ <robn@fastmail.com>
parents: 6597
diff changeset
156 ngx_string("external"),
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
157 ngx_string("xoauth2"),
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
158 ngx_string("oauthbearer"),
2309
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
159 ngx_string("none")
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
160 };
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
162 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
163
1477
59e1caf2be94 style fix and optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
164
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165 void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
166 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
167 {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 ngx_int_t rc;
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
169 ngx_pool_t *pool;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
170 ngx_mail_auth_http_ctx_t *ctx;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
171 ngx_mail_auth_http_conf_t *ahcf;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
173 s->connection->log->action = "in http auth state";
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
174
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
175 pool = ngx_create_pool(2048, s->connection->log);
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
176 if (pool == NULL) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
177 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178 return;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
179 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
180
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
181 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
182 if (ctx == NULL) {
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
183 ngx_destroy_pool(pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
184 ngx_mail_session_internal_server_error(s);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
185 return;
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
186 }
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
187
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
188 ctx->pool = pool;
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
189
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
190 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
191
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
192 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
193 if (ctx->request == NULL) {
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
194 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
195 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196 return;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
197 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
198
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
199 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
200
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
201 ctx->peer.sockaddr = ahcf->peer->sockaddr;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
202 ctx->peer.socklen = ahcf->peer->socklen;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
203 ctx->peer.name = &ahcf->peer->name;
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
204 ctx->peer.get = ngx_event_get_peer;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205 ctx->peer.log = s->connection->log;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 ctx->peer.log_error = NGX_ERROR_ERR;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208 rc = ngx_event_connect_peer(&ctx->peer);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
209
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
210 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
211 if (ctx->peer.connection) {
6044cea025fa fix segfault when connect() failed
Igor Sysoev <igor@sysoev.ru>
parents: 856
diff changeset
212 ngx_close_connection(ctx->peer.connection);
6044cea025fa fix segfault when connect() failed
Igor Sysoev <igor@sysoev.ru>
parents: 856
diff changeset
213 }
6044cea025fa fix segfault when connect() failed
Igor Sysoev <igor@sysoev.ru>
parents: 856
diff changeset
214
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
215 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
216 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217 return;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220 ctx->peer.connection->data = s;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
221 ctx->peer.connection->pool = s->connection->pool;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
222
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
223 s->connection->read->handler = ngx_mail_auth_http_block_read;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
224 ctx->peer.connection->read->handler = ngx_mail_auth_http_read_handler;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
225 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
226
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
227 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
228
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
229 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
230 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
231
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232 if (rc == NGX_OK) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
233 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
234 return;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
235 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
236 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
237
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
238
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
239 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
240 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
241 {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
242 ssize_t n, size;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243 ngx_connection_t *c;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
244 ngx_mail_session_t *s;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
245 ngx_mail_auth_http_ctx_t *ctx;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
246 ngx_mail_auth_http_conf_t *ahcf;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248 c = wev->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 s = c->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
251 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
252
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
253 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, wev->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
254 "mail auth http write handler");
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
255
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
256 if (wev->timedout) {
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
257 ngx_log_error(NGX_LOG_ERR, wev->log, NGX_ETIMEDOUT,
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
258 "auth http server %V timed out", ctx->peer.name);
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
259 ngx_close_connection(c);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
260 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
261 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262 return;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 size = ctx->request->last - ctx->request->pos;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267 n = ngx_send(c, ctx->request->pos, size);
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 (n == NGX_ERROR) {
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
270 ngx_close_connection(c);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
271 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
272 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273 return;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
274 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276 if (n > 0) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
277 ctx->request->pos += n;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
278
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279 if (n == size) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
280 wev->handler = ngx_mail_auth_http_dummy_handler;
521
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 if (wev->timer_set) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283 ngx_del_timer(wev);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2310
diff changeset
286 if (ngx_handle_write_event(wev, 0) != NGX_OK) {
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
287 ngx_close_connection(c);
799
9737d6fb1ac6 disable write level event while waiting auth server response
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
288 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
289 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
290 }
9737d6fb1ac6 disable write level event while waiting auth server response
Igor Sysoev <igor@sysoev.ru>
parents: 633
diff changeset
291
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 return;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296 if (!wev->timer_set) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
297 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
298 ngx_add_timer(wev, ahcf->timeout);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
301
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
303 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
304 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
305 {
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
306 ssize_t n, size;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
307 ngx_connection_t *c;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
308 ngx_mail_session_t *s;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
309 ngx_mail_auth_http_ctx_t *ctx;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
310
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
311 c = rev->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
312 s = c->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
313
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
314 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, rev->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
315 "mail auth http read handler");
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
316
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
317 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
318
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
319 if (rev->timedout) {
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
320 ngx_log_error(NGX_LOG_ERR, rev->log, NGX_ETIMEDOUT,
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
321 "auth http server %V timed out", ctx->peer.name);
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
322 ngx_close_connection(c);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
323 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
324 ngx_mail_session_internal_server_error(s);
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
325 return;
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
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
328 if (ctx->response == NULL) {
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
329 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
330 if (ctx->response == NULL) {
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
331 ngx_close_connection(c);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
332 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
333 ngx_mail_session_internal_server_error(s);
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
334 return;
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
335 }
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
336 }
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
337
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
338 size = ctx->response->end - ctx->response->last;
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
339
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
340 n = ngx_recv(c, ctx->response->pos, size);
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
341
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
342 if (n > 0) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
343 ctx->response->last += n;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
344
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
345 ctx->handler(s, ctx);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
346 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
347 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
348
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
349 if (n == NGX_AGAIN) {
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
350 return;
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
351 }
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
352
1478
d0cce8369848 small optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
353 ngx_close_connection(c);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
354 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
355 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
356 }
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
357
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
358
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
359 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
360 ngx_mail_auth_http_ignore_status_line(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
361 ngx_mail_auth_http_ctx_t *ctx)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
362 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
363 u_char *p, ch;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
364 enum {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
365 sw_start = 0,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
366 sw_H,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
367 sw_HT,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
368 sw_HTT,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
369 sw_HTTP,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
370 sw_skip,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
371 sw_almost_done
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
372 } state;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
373
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
374 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, s->connection->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
375 "mail auth http process status line");
527
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 state = ctx->state;
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 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
380 ch = *p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
381
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
382 switch (state) {
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 /* "HTTP/" */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
385 case sw_start:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
386 if (ch == 'H') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
387 state = sw_H;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
388 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
389 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
390 goto next;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
391
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
392 case sw_H:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
393 if (ch == 'T') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
394 state = sw_HT;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
395 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
396 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
397 goto next;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
398
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
399 case sw_HT:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
400 if (ch == 'T') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
401 state = sw_HTT;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
402 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
403 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
404 goto next;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
405
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
406 case sw_HTT:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
407 if (ch == 'P') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
408 state = sw_HTTP;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
409 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
410 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
411 goto next;
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 case sw_HTTP:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
414 if (ch == '/') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
415 state = sw_skip;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
416 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
417 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
418 goto next;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
419
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
420 /* any text until end of line */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
421 case sw_skip:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
422 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
423 case CR:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
424 state = sw_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
425
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
426 break;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
427 case LF:
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
428 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
429 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
430 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
431
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
432 /* end of status line */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
433 case sw_almost_done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
434 if (ch == LF) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
435 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
436 }
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 ngx_log_error(NGX_LOG_ERR, s->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6001
diff changeset
439 "auth http server %V sent invalid response",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
440 ctx->peer.name);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
441 ngx_close_connection(ctx->peer.connection);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
442 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
443 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
444 return;
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 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
447
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
448 ctx->response->pos = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
449 ctx->state = state;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
450
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
451 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
452
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
453 next:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
454
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
455 p = ctx->response->start - 1;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
456
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
457 done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
458
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
459 ctx->response->pos = p + 1;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
460 ctx->state = 0;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
461 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
462 ctx->handler(s, ctx);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
463 }
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
464
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
465
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
466 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
467 ngx_mail_auth_http_process_headers(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
468 ngx_mail_auth_http_ctx_t *ctx)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
469 {
6593
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6480
diff changeset
470 u_char *p;
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6480
diff changeset
471 time_t timer;
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6480
diff changeset
472 size_t len, size;
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6480
diff changeset
473 ngx_int_t rc, port, n;
b3b7e33083ac Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
Roman Arutyunyan <arut@nginx.com>
parents: 6480
diff changeset
474 ngx_addr_t *peer;
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
475
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
476 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, s->connection->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
477 "mail auth http process headers");
527
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 for ( ;; ) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
480 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
481
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
482 if (rc == NGX_OK) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
483
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
484 #if (NGX_DEBUG)
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
485 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
486 ngx_str_t 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 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
489 key.data = ctx->header_name_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
490 value.len = ctx->header_end - ctx->header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
491 value.data = ctx->header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
492
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
493 ngx_log_debug2(NGX_LOG_DEBUG_MAIL, s->connection->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
494 "mail auth http header: \"%V: %V\"",
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
495 &key, &value);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
496 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
497 #endif
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
498
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
499 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
500
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
501 if (len == sizeof("Auth-Status") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
502 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
503 (u_char *) "Auth-Status",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
504 sizeof("Auth-Status") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
505 == 0)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
506 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
507 len = ctx->header_end - ctx->header_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
508
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
509 if (len == 2
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
510 && ctx->header_start[0] == 'O'
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
511 && ctx->header_start[1] == 'K')
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
512 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
513 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
514 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
515
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
516 if (len == 4
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
517 && ctx->header_start[0] == 'W'
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
518 && ctx->header_start[1] == 'A'
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
519 && ctx->header_start[2] == 'I'
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
520 && ctx->header_start[3] == 'T')
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
521 {
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
522 s->auth_wait = 1;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
523 continue;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
524 }
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
525
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
526 ctx->errmsg.len = len;
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
527 ctx->errmsg.data = ctx->header_start;
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
528
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
529 switch (s->protocol) {
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 case NGX_MAIL_POP3_PROTOCOL:
854
1673f197bc62 fix segfault when many auth failures occurred
Igor Sysoev <igor@sysoev.ru>
parents: 809
diff changeset
532 size = sizeof("-ERR ") - 1 + len + sizeof(CRLF) - 1;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
533 break;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
534
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
535 case NGX_MAIL_IMAP_PROTOCOL:
854
1673f197bc62 fix segfault when many auth failures occurred
Igor Sysoev <igor@sysoev.ru>
parents: 809
diff changeset
536 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
537 + sizeof(CRLF) - 1;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
538 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
539
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
540 default: /* NGX_MAIL_SMTP_PROTOCOL */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
541 ctx->err = ctx->errmsg;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
542 continue;
527
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
2061
b0a1c84725cf change useless ngx_pcalloc() to ngx_pnalloc()
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
545 p = ngx_pnalloc(s->connection->pool, size);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
546 if (p == NULL) {
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
547 ngx_close_connection(ctx->peer.connection);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
548 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
549 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
550 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
551 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
552
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
553 ctx->err.data = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
554
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
555 switch (s->protocol) {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
556
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
557 case NGX_MAIL_POP3_PROTOCOL:
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
558 *p++ = '-'; *p++ = 'E'; *p++ = 'R'; *p++ = 'R'; *p++ = ' ';
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
559 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
560
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
561 case NGX_MAIL_IMAP_PROTOCOL:
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
562 p = ngx_cpymem(p, s->tag.data, s->tag.len);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
563 *p++ = 'N'; *p++ = 'O'; *p++ = ' ';
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
564 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
565
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
566 default: /* NGX_MAIL_SMTP_PROTOCOL */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
567 break;
527
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
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
570 p = ngx_cpymem(p, ctx->header_start, len);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
571 *p++ = CR; *p++ = LF;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
572
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
573 ctx->err.len = p - ctx->err.data;
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 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
576 }
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 if (len == sizeof("Auth-Server") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
579 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
580 (u_char *) "Auth-Server",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
581 sizeof("Auth-Server") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
582 == 0)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
583 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
584 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
585 ctx->addr.data = ctx->header_start;
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 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
588 }
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 if (len == sizeof("Auth-Port") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
591 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
592 (u_char *) "Auth-Port",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
593 sizeof("Auth-Port") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
594 == 0)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
595 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
596 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
597 ctx->port.data = ctx->header_start;
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 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
600 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
601
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
602 if (len == sizeof("Auth-User") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
603 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
604 (u_char *) "Auth-User",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
605 sizeof("Auth-User") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
606 == 0)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
607 {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
608 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
609
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
610 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
611 if (s->login.data == NULL) {
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
612 ngx_close_connection(ctx->peer.connection);
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
613 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
614 ngx_mail_session_internal_server_error(s);
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
615 return;
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
616 }
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
617
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
618 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
619
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
620 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
621 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
622
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
623 if (len == sizeof("Auth-Pass") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
624 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
625 (u_char *) "Auth-Pass",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
626 sizeof("Auth-Pass") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
627 == 0)
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
628 {
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
629 s->passwd.len = ctx->header_end - ctx->header_start;
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
630
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
631 s->passwd.data = ngx_pnalloc(s->connection->pool,
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
632 s->passwd.len);
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
633 if (s->passwd.data == NULL) {
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
634 ngx_close_connection(ctx->peer.connection);
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
635 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
636 ngx_mail_session_internal_server_error(s);
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
637 return;
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
638 }
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
639
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
640 ngx_memcpy(s->passwd.data, ctx->header_start, s->passwd.len);
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
641
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
642 continue;
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
643 }
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
644
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
645 if (len == sizeof("Auth-Wait") - 1
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
646 && ngx_strncasecmp(ctx->header_name_start,
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
647 (u_char *) "Auth-Wait",
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
648 sizeof("Auth-Wait") - 1)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 906
diff changeset
649 == 0)
527
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 n = ngx_atoi(ctx->header_start,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
652 ctx->header_end - ctx->header_start);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
653
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
654 if (n != NGX_ERROR) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
655 ctx->sleep = n;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
656 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
657
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
658 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
659 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
660
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
661 if (len == sizeof("Auth-Error-Code") - 1
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
662 && ngx_strncasecmp(ctx->header_name_start,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
663 (u_char *) "Auth-Error-Code",
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
664 sizeof("Auth-Error-Code") - 1)
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
665 == 0)
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
666 {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
667 ctx->errcode.len = ctx->header_end - ctx->header_start;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
668
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
669 ctx->errcode.data = ngx_pnalloc(s->connection->pool,
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
670 ctx->errcode.len);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
671 if (ctx->errcode.data == NULL) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
672 ngx_close_connection(ctx->peer.connection);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
673 ngx_destroy_pool(ctx->pool);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
674 ngx_mail_session_internal_server_error(s);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
675 return;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
676 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
677
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
678 ngx_memcpy(ctx->errcode.data, ctx->header_start,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
679 ctx->errcode.len);
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
680
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
681 continue;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
682 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
683
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
684 if (len == sizeof("Auth-Error-SASL") - 1
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
685 && ngx_strncasecmp(ctx->header_name_start,
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
686 (u_char *) "Auth-Error-SASL",
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
687 sizeof("Auth-Error-SASL") - 1)
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
688 == 0)
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
689 {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
690 if (s->auth_method != NGX_MAIL_AUTH_XOAUTH2
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
691 && s->auth_method != NGX_MAIL_AUTH_OAUTHBEARER)
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
692 {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
693 continue;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
694 }
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
695
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
696 len = ctx->header_end - ctx->header_start;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
697
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
698 if (s->protocol == NGX_MAIL_SMTP_PROTOCOL) {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
699 size = len + sizeof("334 " CRLF) - 1;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
700
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
701 } else {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
702 size = len + sizeof("+ " CRLF) - 1;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
703 }
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
704
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
705 p = ngx_pnalloc(s->connection->pool, size);
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
706 if (p == NULL) {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
707 ngx_close_connection(ctx->peer.connection);
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
708 ngx_destroy_pool(ctx->pool);
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
709 ngx_mail_session_internal_server_error(s);
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
710 return;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
711 }
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
712
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
713 ctx->errsasl.len = size;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
714 ctx->errsasl.data = p;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
715
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
716 if (s->protocol == NGX_MAIL_SMTP_PROTOCOL) {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
717 *p++ = '3'; *p++ = '3'; *p++ = '4'; *p++ = ' ';
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
718
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
719 } else {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
720 *p++ = '+'; *p++ = ' ';
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
721 }
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
722
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
723 p = ngx_cpymem(p, ctx->header_start, len);
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
724 *p++ = CR; *p = LF;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
725
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
726 continue;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
727 }
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
728
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
729 /* ignore other headers */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
730
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
731 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
732 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
733
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
734 if (rc == NGX_DONE) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
735 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, s->connection->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
736 "mail auth http header done");
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
737
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
738 ngx_close_connection(ctx->peer.connection);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
739
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
740 if (ctx->err.len) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
741
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
742 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
743 "client login failed: \"%V\"", &ctx->errmsg);
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 559
diff changeset
744
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
745 if (s->protocol == NGX_MAIL_SMTP_PROTOCOL) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
746
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
747 if (ctx->errcode.len == 0) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
748 ctx->errcode = ngx_mail_smtp_errcode;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
749 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
750
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
751 ctx->err.len = ctx->errcode.len + ctx->errmsg.len
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
752 + sizeof(" " CRLF) - 1;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
753
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
754 p = ngx_pnalloc(s->connection->pool, ctx->err.len);
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
755 if (p == NULL) {
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
756 ngx_destroy_pool(ctx->pool);
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
757 ngx_mail_session_internal_server_error(s);
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
758 return;
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
759 }
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
760
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
761 ctx->err.data = p;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
762
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
763 p = ngx_cpymem(p, ctx->errcode.data, ctx->errcode.len);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
764 *p++ = ' ';
1166
bde5e4134759 style fix: remove tabs
Igor Sysoev <igor@sysoev.ru>
parents: 1136
diff changeset
765 p = ngx_cpymem(p, ctx->errmsg.data, ctx->errmsg.len);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
766 *p++ = CR; *p = LF;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
767 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
768
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
769 s->out = ctx->errsasl;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
770 s->auth_err = ctx->err;
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
771 timer = ctx->sleep;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
772
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
773 ngx_destroy_pool(ctx->pool);
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
774
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
775 if (timer == 0) {
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
776 s->auth_quit = 1;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
777 ngx_mail_auth_send_error(s);
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
778 return;
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
779 }
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
780
1640
02a22cd5282a 64-bit time_t compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
781 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
782
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
783 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
784
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
785 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
786 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
787
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
788 if (s->auth_wait) {
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
789 timer = ctx->sleep;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
790
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
791 ngx_destroy_pool(ctx->pool);
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
792
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
793 if (timer == 0) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
794 ngx_mail_auth_http_init(s);
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
795 return;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
796 }
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
797
1640
02a22cd5282a 64-bit time_t compatibility
Igor Sysoev <igor@sysoev.ru>
parents: 1559
diff changeset
798 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
799
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
800 s->connection->read->handler = ngx_mail_auth_sleep_handler;
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
801
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
802 return;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
803 }
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
804
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
805 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
806 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
807 "auth http server %V did not send server or port",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
808 ctx->peer.name);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
809 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
810 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
811 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
812 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
813
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
814 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
815 && s->protocol != NGX_MAIL_SMTP_PROTOCOL)
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
816 {
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
817 ngx_log_error(NGX_LOG_ERR, s->connection->log, 0,
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
818 "auth http server %V did not send password",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
819 ctx->peer.name);
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
820 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
821 ngx_mail_session_internal_server_error(s);
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
822 return;
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
823 }
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
824
3269
f0d596e84634 rename ngx_peer_addr_t to ngx_addr_t
Igor Sysoev <igor@sysoev.ru>
parents: 3267
diff changeset
825 peer = ngx_pcalloc(s->connection->pool, sizeof(ngx_addr_t));
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
826 if (peer == NULL) {
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
827 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
828 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
829 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
830 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
831
5134
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
832 rc = ngx_parse_addr(s->connection->pool, peer,
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
833 ctx->addr.data, ctx->addr.len);
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
834
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
835 switch (rc) {
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
836 case NGX_OK:
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
837 break;
2855
a96a8c916b0c mail proxy listen IPv6 support
Igor Sysoev <igor@sysoev.ru>
parents: 2748
diff changeset
838
5134
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
839 case NGX_DECLINED:
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
840 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
841 "auth http server %V sent invalid server "
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
842 "address:\"%V\"",
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
843 ctx->peer.name, &ctx->addr);
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
844 /* fall through */
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
845
c788e54090de Mail: IPv6 backends (ticket #323).
Ruslan Ermilov <ru@nginx.com>
parents: 4971
diff changeset
846 default:
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
847 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
848 ngx_mail_session_internal_server_error(s);
527
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 port = ngx_atoi(ctx->port.data, ctx->port.len);
4227
4af8ea9c3a86 Fixed port range checking.
Ruslan Ermilov <ru@nginx.com>
parents: 3516
diff changeset
853 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
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 server "
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
856 "port:\"%V\"",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
857 ctx->peer.name, &ctx->port);
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 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
861 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
862
6597
0a820872dd4c Fixed build on MSVC.
Roman Arutyunyan <arut@nginx.com>
parents: 6593
diff changeset
863 ngx_inet_set_port(peer->sockaddr, (in_port_t) port);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
864
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
865 len = ctx->addr.len + 1 + ctx->port.len;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
866
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
867 peer->name.len = len;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
868
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
869 peer->name.data = ngx_pnalloc(s->connection->pool, len);
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
870 if (peer->name.data == NULL) {
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
871 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
872 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
873 return;
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
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
876 len = ctx->addr.len;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
877
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
878 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
879
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
880 peer->name.data[len++] = ':';
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
881
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
882 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
883
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
884 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
885 ngx_mail_proxy_init(s, peer);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
886
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
887 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
888 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
889
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
890 if (rc == NGX_AGAIN ) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
891 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
892 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
893
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
894 /* rc == NGX_ERROR */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
895
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
896 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
897 "auth http server %V sent invalid header in response",
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
898 ctx->peer.name);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
899 ngx_close_connection(ctx->peer.connection);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
900 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
901 ngx_mail_session_internal_server_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
902
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
903 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
904 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
905 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
906
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
907
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
908 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
909 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
910 {
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
911 ngx_connection_t *c;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
912 ngx_mail_session_t *s;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
913
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
914 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
915
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
916 c = rev->data;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
917 s = c->data;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
918
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
919 if (rev->timedout) {
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 rev->timedout = 0;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
922
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
923 if (s->auth_wait) {
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
924 s->auth_wait = 0;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
925 ngx_mail_auth_http_init(s);
883
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
926 return;
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
927 }
eac23634d614 Auth-Status: WAIT
Igor Sysoev <igor@sysoev.ru>
parents: 862
diff changeset
928
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
929 ngx_mail_auth_send_error(s);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
930 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
931 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
932
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
933 if (rev->active) {
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2310
diff changeset
934 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
1477
59e1caf2be94 style fix and optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
935 ngx_mail_close_connection(c);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
936 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
937 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
938 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
939
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
940
9290
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
941 static void
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
942 ngx_mail_auth_send_error(ngx_mail_session_t *s)
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
943 {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
944 ngx_event_t *rev;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
945 ngx_connection_t *c;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
946 ngx_mail_core_srv_conf_t *cscf;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
947
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
948 c = s->connection;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
949 rev = c->read;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
950
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
951 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module);
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
952
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
953 rev->handler = cscf->protocol->auth_state;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
954
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
955 s->auth_method = NGX_MAIL_AUTH_PLAIN;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
956
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
957 c->log->action = "in auth state";
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
958
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
959 if (s->out.len == 0) {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
960 s->out = s->auth_err;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
961 s->quit = s->auth_quit;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
962 ngx_str_null(&s->auth_err);
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
963
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
964 s->state = 0;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
965 s->mail_state = 0;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
966 s->tag.len = 0;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
967
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
968 } else {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
969 s->auth_err.len -= s->tag.len;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
970 s->auth_err.data += s->tag.len;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
971 }
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
972
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
973 ngx_mail_send(c->write);
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
974
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
975 if (c->destroyed) {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
976 return;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
977 }
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
978
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
979 ngx_add_timer(rev, cscf->timeout);
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
980
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
981 if (rev->ready) {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
982 rev->handler(rev);
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
983 return;
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
984 }
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
985
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
986 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
987 ngx_mail_close_connection(c);
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
988 }
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
989 }
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
990
4538c1ffb0f8 Mail: added support for XOAUTH2 and OAUTHBEARER authentication.
Maxim Dounin <mdounin@mdounin.ru>
parents: 9274
diff changeset
991
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
992 static ngx_int_t
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
993 ngx_mail_auth_http_parse_header_line(ngx_mail_session_t *s,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
994 ngx_mail_auth_http_ctx_t *ctx)
527
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 u_char c, ch, *p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
997 enum {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
998 sw_start = 0,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
999 sw_name,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1000 sw_space_before_value,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1001 sw_value,
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1002 sw_space_after_value,
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1003 sw_almost_done,
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1004 sw_header_almost_done
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1005 } state;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1006
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1007 state = ctx->state;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1008
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1009 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
1010 ch = *p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1011
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1012 switch (state) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1013
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1014 /* first char */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1015 case sw_start:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1016
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1017 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1018 case CR:
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1019 ctx->header_end = p;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1020 state = sw_header_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1021 break;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1022 case LF:
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1023 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1024 goto header_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1025 default:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1026 state = sw_name;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1027 ctx->header_name_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1028
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1029 c = (u_char) (ch | 0x20);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1030 if (c >= 'a' && c <= 'z') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1031 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1032 }
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 if (ch >= '0' && ch <= '9') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1035 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1036 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1037
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1038 return NGX_ERROR;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1039 }
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
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1042 /* header name */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1043 case sw_name:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1044 c = (u_char) (ch | 0x20);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1045 if (c >= 'a' && c <= 'z') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1046 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1047 }
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 if (ch == ':') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1050 ctx->header_name_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1051 state = sw_space_before_value;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1052 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1053 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1054
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1055 if (ch == '-') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1056 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1057 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1058
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1059 if (ch >= '0' && ch <= '9') {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1060 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1061 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1062
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1063 if (ch == CR) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1064 ctx->header_name_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1065 ctx->header_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1066 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1067 state = sw_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1068 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1069 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1070
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1071 if (ch == LF) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1072 ctx->header_name_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1073 ctx->header_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1074 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1075 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1076 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1077
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1078 return NGX_ERROR;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1079
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1080 /* space* before header value */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1081 case sw_space_before_value:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1082 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1083 case ' ':
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1084 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1085 case CR:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1086 ctx->header_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1087 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1088 state = sw_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1089 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1090 case LF:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1091 ctx->header_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1092 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1093 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1094 default:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1095 ctx->header_start = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1096 state = sw_value;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1097 break;
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 break;
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 /* header value */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1102 case sw_value:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1103 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1104 case ' ':
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1105 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1106 state = sw_space_after_value;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1107 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1108 case CR:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1109 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1110 state = sw_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1111 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1112 case LF:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1113 ctx->header_end = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1114 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1115 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1116 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1117
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1118 /* space* before end of header line */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1119 case sw_space_after_value:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1120 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1121 case ' ':
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1122 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1123 case CR:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1124 state = sw_almost_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1125 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1126 case LF:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1127 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1128 default:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1129 state = sw_value;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1130 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1131 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1132 break;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1133
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1134 /* end of header line */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1135 case sw_almost_done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1136 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1137 case LF:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1138 goto done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1139 default:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1140 return NGX_ERROR;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1141 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1142
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1143 /* end of header */
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1144 case sw_header_almost_done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1145 switch (ch) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1146 case LF:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1147 goto header_done;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1148 default:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1149 return NGX_ERROR;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1150 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1151 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1152 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1153
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1154 ctx->response->pos = p;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1155 ctx->state = state;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1156
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1157 return NGX_AGAIN;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1158
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1159 done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1160
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1161 ctx->response->pos = p + 1;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1162 ctx->state = sw_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1163
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1164 return NGX_OK;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1165
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1166 header_done:
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1167
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1168 ctx->response->pos = p + 1;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1169 ctx->state = sw_start;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1170
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1171 return NGX_DONE;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1172 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1173
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1174
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1175 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1176 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
1177 {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1178 ngx_connection_t *c;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1179 ngx_mail_session_t *s;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1180 ngx_mail_auth_http_ctx_t *ctx;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1181
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1182 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, rev->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1183 "mail auth http block read");
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1184
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2310
diff changeset
1185 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
1186 c = rev->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1187 s = c->data;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1188
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1189 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
1190
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1191 ngx_close_connection(ctx->peer.connection);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1192 ngx_destroy_pool(ctx->pool);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1193 ngx_mail_session_internal_server_error(s);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1194 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1195 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1196
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1197
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1198 static void
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1199 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
1200 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1201 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, ev->log, 0,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1202 "mail auth http dummy handler");
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1203 }
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
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1206 static ngx_buf_t *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1207 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
1208 ngx_mail_auth_http_conf_t *ahcf)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1209 {
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1210 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
1211 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
1212 ngx_str_t login, passwd;
7801
777373b5a169 Mail: fixed build without SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7794
diff changeset
1213 ngx_connection_t *c;
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1214 #if (NGX_MAIL_SSL)
7905
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1215 ngx_str_t protocol, cipher, verify, subject, issuer,
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1216 serial, fingerprint, raw_cert, cert;
5990
6a7c6973d6fc Mail: don't emit Auth-SSL-Verify with disabled ssl_verify_client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5989
diff changeset
1217 ngx_mail_ssl_conf_t *sslcf;
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1218 #endif
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1219 ngx_mail_core_srv_conf_t *cscf;
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1220
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1221 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
1222 return NULL;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1223 }
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1224
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1225 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
1226 return NULL;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1227 }
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1228
7801
777373b5a169 Mail: fixed build without SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7794
diff changeset
1229 c = s->connection;
777373b5a169 Mail: fixed build without SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7794
diff changeset
1230
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1231 #if (NGX_MAIL_SSL)
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1232
7905
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1233 if (c->ssl) {
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1234
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1235 if (ngx_ssl_get_protocol(c, pool, &protocol) != NGX_OK) {
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1236 return NULL;
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1237 }
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1238
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1239 protocol.len = ngx_strlen(protocol.data);
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1240
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1241 if (ngx_ssl_get_cipher_name(c, pool, &cipher) != NGX_OK) {
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1242 return NULL;
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1243 }
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1244
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1245 cipher.len = ngx_strlen(cipher.data);
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1246
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1247 } else {
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1248 ngx_str_null(&protocol);
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1249 ngx_str_null(&cipher);
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1250 }
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1251
5990
6a7c6973d6fc Mail: don't emit Auth-SSL-Verify with disabled ssl_verify_client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5989
diff changeset
1252 sslcf = ngx_mail_get_module_srv_conf(s, ngx_mail_ssl_module);
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1253
5990
6a7c6973d6fc Mail: don't emit Auth-SSL-Verify with disabled ssl_verify_client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5989
diff changeset
1254 if (c->ssl && sslcf->verify) {
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1255
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1256 /* certificate details */
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1257
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1258 if (ngx_ssl_get_client_verify(c, pool, &verify) != NGX_OK) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1259 return NULL;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1260 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1261
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1262 if (ngx_ssl_get_subject_dn(c, pool, &subject) != NGX_OK) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1263 return NULL;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1264 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1265
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1266 if (ngx_ssl_get_issuer_dn(c, pool, &issuer) != NGX_OK) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1267 return NULL;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1268 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1269
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1270 if (ngx_ssl_get_serial_number(c, pool, &serial) != NGX_OK) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1271 return NULL;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1272 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1273
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1274 if (ngx_ssl_get_fingerprint(c, pool, &fingerprint) != NGX_OK) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1275 return NULL;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1276 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1277
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1278 if (ahcf->pass_client_cert) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1279
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1280 /* certificate itself, if configured */
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1281
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1282 if (ngx_ssl_get_raw_certificate(c, pool, &raw_cert) != NGX_OK) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1283 return NULL;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1284 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1285
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1286 if (ngx_mail_auth_http_escape(pool, &raw_cert, &cert) != NGX_OK) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1287 return NULL;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1288 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1289
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1290 } else {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1291 ngx_str_null(&cert);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1292 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1293
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1294 } else {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1295 ngx_str_null(&verify);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1296 ngx_str_null(&subject);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1297 ngx_str_null(&issuer);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1298 ngx_str_null(&serial);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1299 ngx_str_null(&fingerprint);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1300 ngx_str_null(&cert);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1301 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1302
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1303 #endif
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1304
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1478
diff changeset
1305 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
1306
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1307 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
1308 + 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
1309 + sizeof("Auth-Method: ") - 1
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1310 + 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
1311 + sizeof(CRLF) - 1
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1312 + 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
1313 + sizeof("Auth-Pass: ") - 1 + passwd.len + sizeof(CRLF) - 1
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1314 + 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
1315 + 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
1316 + sizeof(CRLF) - 1
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1317 + 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
1318 + sizeof(CRLF) - 1
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1319 + sizeof("Client-IP: ") - 1 + s->connection->addr_text.len
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1320 + sizeof(CRLF) - 1
2309
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1321 + sizeof("Client-Host: ") - 1 + s->host.len + sizeof(CRLF) - 1
1285
0c10dc6a8e74 fix memory allocation for auth_http_header
Igor Sysoev <igor@sysoev.ru>
parents: 1166
diff changeset
1322 + ahcf->header.len
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1323 + sizeof(CRLF) - 1;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1324
7794
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1325 if (c->proxy_protocol) {
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1326 len += sizeof("Proxy-Protocol-Addr: ") - 1
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1327 + c->proxy_protocol->src_addr.len + sizeof(CRLF) - 1
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1328 + sizeof("Proxy-Protocol-Port: ") - 1
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1329 + sizeof("65535") - 1 + sizeof(CRLF) - 1
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1330 + sizeof("Proxy-Protocol-Server-Addr: ") - 1
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1331 + c->proxy_protocol->dst_addr.len + sizeof(CRLF) - 1
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1332 + sizeof("Proxy-Protocol-Server-Port: ") - 1
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1333 + sizeof("65535") - 1 + sizeof(CRLF) - 1;
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1334 }
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1335
7793
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1336 if (s->auth_method == NGX_MAIL_AUTH_NONE) {
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1337 len += sizeof("Auth-SMTP-Helo: ") - 1 + s->smtp_helo.len
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1338 + sizeof(CRLF) - 1
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1339 + sizeof("Auth-SMTP-From: ") - 1 + s->smtp_from.len
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1340 + sizeof(CRLF) - 1
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1341 + sizeof("Auth-SMTP-To: ") - 1 + s->smtp_to.len
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1342 + sizeof(CRLF) - 1;
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1343 }
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1344
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1345 #if (NGX_MAIL_SSL)
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1346
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1347 if (c->ssl) {
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1348 len += sizeof("Auth-SSL: on" CRLF) - 1
7905
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1349 + sizeof("Auth-SSL-Protocol: ") - 1 + protocol.len
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1350 + sizeof(CRLF) - 1
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1351 + sizeof("Auth-SSL-Cipher: ") - 1 + cipher.len
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1352 + sizeof(CRLF) - 1
7793
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1353 + sizeof("Auth-SSL-Verify: ") - 1 + verify.len
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1354 + sizeof(CRLF) - 1
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1355 + sizeof("Auth-SSL-Subject: ") - 1 + subject.len
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1356 + sizeof(CRLF) - 1
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1357 + sizeof("Auth-SSL-Issuer: ") - 1 + issuer.len
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1358 + sizeof(CRLF) - 1
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1359 + sizeof("Auth-SSL-Serial: ") - 1 + serial.len
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1360 + sizeof(CRLF) - 1
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1361 + sizeof("Auth-SSL-Fingerprint: ") - 1 + fingerprint.len
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1362 + sizeof(CRLF) - 1
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1363 + sizeof("Auth-SSL-Cert: ") - 1 + cert.len
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1364 + sizeof(CRLF) - 1;
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1365 }
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1366
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1367 #endif
44ebeeceb70e Mail: made auth http creating request easier to extend.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6774
diff changeset
1368
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1369 b = ngx_create_temp_buf(pool, len);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1370 if (b == NULL) {
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1371 return NULL;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1372 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1373
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1374 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
1375 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
1376 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
1377 sizeof(" HTTP/1.0" CRLF) - 1);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1378
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1379 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
1380 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
1381 ahcf->host_header.len);
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1382 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1383
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1384 b->last = ngx_cpymem(b->last, "Auth-Method: ",
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1385 sizeof("Auth-Method: ") - 1);
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1386 b->last = ngx_cpymem(b->last,
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1387 ngx_mail_auth_http_method[s->auth_method].data,
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1388 ngx_mail_auth_http_method[s->auth_method].len);
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1389 *b->last++ = CR; *b->last++ = LF;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1390
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1391 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
1392 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
1393 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1394
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1395 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
1396 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
1397 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1398
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1399 if (s->auth_method != NGX_MAIL_AUTH_PLAIN && s->salt.len) {
800
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1400 b->last = ngx_cpymem(b->last, "Auth-Salt: ", sizeof("Auth-Salt: ") - 1);
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1401 b->last = ngx_copy(b->last, s->salt.data, s->salt.len);
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1402
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1403 s->passwd.data = NULL;
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1404 }
Igor Sysoev <igor@sysoev.ru>
parents: 799
diff changeset
1405
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1406 b->last = ngx_cpymem(b->last, "Auth-Protocol: ",
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1407 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
1408 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
1409 cscf->protocol->name.len);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1410 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1411
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1412 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
1413 s->login_attempt);
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1414
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1415 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
1416 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
1417 s->connection->addr_text.len);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1418 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1419
2309
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1420 if (s->host.len) {
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1421 b->last = ngx_cpymem(b->last, "Client-Host: ",
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1422 sizeof("Client-Host: ") - 1);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1423 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
1424 *b->last++ = CR; *b->last++ = LF;
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1425 }
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1426
7794
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1427 if (c->proxy_protocol) {
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1428 b->last = ngx_cpymem(b->last, "Proxy-Protocol-Addr: ",
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1429 sizeof("Proxy-Protocol-Addr: ") - 1);
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1430 b->last = ngx_copy(b->last, c->proxy_protocol->src_addr.data,
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1431 c->proxy_protocol->src_addr.len);
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1432 *b->last++ = CR; *b->last++ = LF;
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1433
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1434 b->last = ngx_sprintf(b->last, "Proxy-Protocol-Port: %d" CRLF,
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1435 c->proxy_protocol->src_port);
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1436
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1437 b->last = ngx_cpymem(b->last, "Proxy-Protocol-Server-Addr: ",
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1438 sizeof("Proxy-Protocol-Server-Addr: ") - 1);
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1439 b->last = ngx_copy(b->last, c->proxy_protocol->dst_addr.data,
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1440 c->proxy_protocol->dst_addr.len);
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1441 *b->last++ = CR; *b->last++ = LF;
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1442
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1443 b->last = ngx_sprintf(b->last, "Proxy-Protocol-Server-Port: %d" CRLF,
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1444 c->proxy_protocol->dst_port);
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1445 }
12ea1de7d87c Mail: parsing of the PROXY protocol from clients.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7793
diff changeset
1446
2309
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1447 if (s->auth_method == NGX_MAIL_AUTH_NONE) {
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1448
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1449 /* 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
1450
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1451 b->last = ngx_cpymem(b->last, "Auth-SMTP-Helo: ",
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1452 sizeof("Auth-SMTP-Helo: ") - 1);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1453 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
1454 *b->last++ = CR; *b->last++ = LF;
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1455
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1456 b->last = ngx_cpymem(b->last, "Auth-SMTP-From: ",
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1457 sizeof("Auth-SMTP-From: ") - 1);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1458 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
1459 *b->last++ = CR; *b->last++ = LF;
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1460
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1461 b->last = ngx_cpymem(b->last, "Auth-SMTP-To: ",
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1462 sizeof("Auth-SMTP-To: ") - 1);
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1463 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
1464 *b->last++ = CR; *b->last++ = LF;
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1465
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1466 }
8156bc03982a smtp_auth none
Igor Sysoev <igor@sysoev.ru>
parents: 2061
diff changeset
1467
5988
3b3f789655dc Mail: added Auth-SSL header to indicate SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5987
diff changeset
1468 #if (NGX_MAIL_SSL)
3b3f789655dc Mail: added Auth-SSL header to indicate SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5987
diff changeset
1469
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1470 if (c->ssl) {
5988
3b3f789655dc Mail: added Auth-SSL header to indicate SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5987
diff changeset
1471 b->last = ngx_cpymem(b->last, "Auth-SSL: on" CRLF,
3b3f789655dc Mail: added Auth-SSL header to indicate SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5987
diff changeset
1472 sizeof("Auth-SSL: on" CRLF) - 1);
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1473
7905
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1474 if (protocol.len) {
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1475 b->last = ngx_cpymem(b->last, "Auth-SSL-Protocol: ",
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1476 sizeof("Auth-SSL-Protocol: ") - 1);
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1477 b->last = ngx_copy(b->last, protocol.data, protocol.len);
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1478 *b->last++ = CR; *b->last++ = LF;
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1479 }
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1480
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1481 if (cipher.len) {
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1482 b->last = ngx_cpymem(b->last, "Auth-SSL-Cipher: ",
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1483 sizeof("Auth-SSL-Cipher: ") - 1);
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1484 b->last = ngx_copy(b->last, cipher.data, cipher.len);
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1485 *b->last++ = CR; *b->last++ = LF;
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1486 }
13d0c1d26d47 Mail: Auth-SSL-Protocol and Auth-SSL-Cipher headers (ticket #2134).
Rob Mueller <robm@fastmail.fm>
parents: 7801
diff changeset
1487
5990
6a7c6973d6fc Mail: don't emit Auth-SSL-Verify with disabled ssl_verify_client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5989
diff changeset
1488 if (verify.len) {
6a7c6973d6fc Mail: don't emit Auth-SSL-Verify with disabled ssl_verify_client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5989
diff changeset
1489 b->last = ngx_cpymem(b->last, "Auth-SSL-Verify: ",
6a7c6973d6fc Mail: don't emit Auth-SSL-Verify with disabled ssl_verify_client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5989
diff changeset
1490 sizeof("Auth-SSL-Verify: ") - 1);
6a7c6973d6fc Mail: don't emit Auth-SSL-Verify with disabled ssl_verify_client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5989
diff changeset
1491 b->last = ngx_copy(b->last, verify.data, verify.len);
6a7c6973d6fc Mail: don't emit Auth-SSL-Verify with disabled ssl_verify_client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5989
diff changeset
1492 *b->last++ = CR; *b->last++ = LF;
6a7c6973d6fc Mail: don't emit Auth-SSL-Verify with disabled ssl_verify_client.
Sergey Kandaurov <pluknet@nginx.com>
parents: 5989
diff changeset
1493 }
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1494
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1495 if (subject.len) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1496 b->last = ngx_cpymem(b->last, "Auth-SSL-Subject: ",
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1497 sizeof("Auth-SSL-Subject: ") - 1);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1498 b->last = ngx_copy(b->last, subject.data, subject.len);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1499 *b->last++ = CR; *b->last++ = LF;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1500 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1501
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1502 if (issuer.len) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1503 b->last = ngx_cpymem(b->last, "Auth-SSL-Issuer: ",
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1504 sizeof("Auth-SSL-Issuer: ") - 1);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1505 b->last = ngx_copy(b->last, issuer.data, issuer.len);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1506 *b->last++ = CR; *b->last++ = LF;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1507 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1508
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1509 if (serial.len) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1510 b->last = ngx_cpymem(b->last, "Auth-SSL-Serial: ",
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1511 sizeof("Auth-SSL-Serial: ") - 1);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1512 b->last = ngx_copy(b->last, serial.data, serial.len);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1513 *b->last++ = CR; *b->last++ = LF;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1514 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1515
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1516 if (fingerprint.len) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1517 b->last = ngx_cpymem(b->last, "Auth-SSL-Fingerprint: ",
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1518 sizeof("Auth-SSL-Fingerprint: ") - 1);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1519 b->last = ngx_copy(b->last, fingerprint.data, fingerprint.len);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1520 *b->last++ = CR; *b->last++ = LF;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1521 }
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1522
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1523 if (cert.len) {
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1524 b->last = ngx_cpymem(b->last, "Auth-SSL-Cert: ",
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1525 sizeof("Auth-SSL-Cert: ") - 1);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1526 b->last = ngx_copy(b->last, cert.data, cert.len);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1527 *b->last++ = CR; *b->last++ = LF;
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1528 }
5988
3b3f789655dc Mail: added Auth-SSL header to indicate SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5987
diff changeset
1529 }
3b3f789655dc Mail: added Auth-SSL header to indicate SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5987
diff changeset
1530
3b3f789655dc Mail: added Auth-SSL header to indicate SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5987
diff changeset
1531 #endif
3b3f789655dc Mail: added Auth-SSL header to indicate SSL.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5987
diff changeset
1532
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1533 if (ahcf->header.len) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1534 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
1535 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1536
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1537 /* add "\r\n" at the header end */
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1538 *b->last++ = CR; *b->last++ = LF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1539
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1540 #if (NGX_DEBUG_MAIL_PASSWD)
6001
add12ee1d01c Style: use %*s format, as in 68d21fd1dc64.
Ruslan Ermilov <ru@nginx.com>
parents: 5990
diff changeset
1541 ngx_log_debug2(NGX_LOG_DEBUG_MAIL, s->connection->log, 0,
add12ee1d01c Style: use %*s format, as in 68d21fd1dc64.
Ruslan Ermilov <ru@nginx.com>
parents: 5990
diff changeset
1542 "mail auth http header:%N\"%*s\"",
add12ee1d01c Style: use %*s format, as in 68d21fd1dc64.
Ruslan Ermilov <ru@nginx.com>
parents: 5990
diff changeset
1543 (size_t) (b->last - b->pos), b->pos);
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1544 #endif
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1545
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1546 return b;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1547 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1548
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1549
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1550 static ngx_int_t
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1551 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
1552 {
1405
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1392
diff changeset
1553 u_char *p;
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1392
diff changeset
1554 uintptr_t n;
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1555
1405
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1392
diff changeset
1556 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
1557
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1558 if (n == 0) {
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1559 *escaped = *text;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1560 return NGX_OK;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1561 }
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1562
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1563 escaped->len = text->len + n * 2;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1564
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
1565 p = ngx_pnalloc(pool, escaped->len);
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1566 if (p == NULL) {
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1567 return NGX_ERROR;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1568 }
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1569
1405
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1392
diff changeset
1570 (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
1571
1405
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1392
diff changeset
1572 escaped->data = p;
633
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1573
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1574 return NGX_OK;
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1575 }
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1576
f971949ffb58 nginx-0.3.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1577
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1578 static void *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1579 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
1580 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1581 ngx_mail_auth_http_conf_t *ahcf;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1582
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1583 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
1584 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
1585 return NULL;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1586 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1587
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1588 ahcf->timeout = NGX_CONF_UNSET_MSEC;
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1589 ahcf->pass_client_cert = NGX_CONF_UNSET;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1590
1392
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1591 ahcf->file = cf->conf_file->file.name.data;
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1592 ahcf->line = cf->conf_file->line;
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1593
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1594 return ahcf;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1595 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1596
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1597
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1598 static char *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1599 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
1600 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1601 ngx_mail_auth_http_conf_t *prev = parent;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1602 ngx_mail_auth_http_conf_t *conf = child;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1603
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1604 u_char *p;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1605 size_t len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1606 ngx_uint_t i;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1607 ngx_table_elt_t *header;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1608
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
1609 if (conf->peer == NULL) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
1610 conf->peer = prev->peer;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1611 conf->host_header = prev->host_header;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1612 conf->uri = prev->uri;
1392
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1613
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1614 if (conf->peer == NULL) {
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1615 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
1616 "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
1617 conf->file, conf->line);
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1618
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1619 return NGX_CONF_ERROR;
86acec04b8b0 test http_auth absence
Igor Sysoev <igor@sysoev.ru>
parents: 1391
diff changeset
1620 }
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1621 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1622
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1623 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
1624
5989
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1625 ngx_conf_merge_value(conf->pass_client_cert, prev->pass_client_cert, 0);
ec01b1d1fff1 Mail: client SSL certificates support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5988
diff changeset
1626
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1627 if (conf->headers == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1628 conf->headers = prev->headers;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1629 conf->header = prev->header;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1630 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1631
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1632 if (conf->headers && conf->header.len == 0) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1633 len = 0;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1634 header = conf->headers->elts;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1635 for (i = 0; i < conf->headers->nelts; i++) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1636 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
1637 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1638
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
1639 p = ngx_pnalloc(cf->pool, len);
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1640 if (p == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1641 return NGX_CONF_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1642 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1643
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1644 conf->header.len = len;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1645 conf->header.data = p;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1646
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1647 for (i = 0; i < conf->headers->nelts; i++) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1648 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
1649 *p++ = ':'; *p++ = ' ';
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1650 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
1651 *p++ = CR; *p++ = LF;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1652 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1653 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1654
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1655 return NGX_CONF_OK;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1656 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1657
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1658
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1659 static char *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1660 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
1661 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1662 ngx_mail_auth_http_conf_t *ahcf = conf;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1663
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1664 ngx_str_t *value;
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1665 ngx_url_t u;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1666
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1667 value = cf->args->elts;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1668
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1669 ngx_memzero(&u, sizeof(ngx_url_t));
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1670
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1671 u.url = value[1];
906
a0310ac2814f rewritten upstream
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
1672 u.default_port = 80;
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1673 u.uri_part = 1;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1674
1391
4eed21047e4d allow "http://" in auth_http URL
Igor Sysoev <igor@sysoev.ru>
parents: 1390
diff changeset
1675 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
1676 u.url.len -= 7;
4eed21047e4d allow "http://" in auth_http URL
Igor Sysoev <igor@sysoev.ru>
parents: 1390
diff changeset
1677 u.url.data += 7;
4eed21047e4d allow "http://" in auth_http URL
Igor Sysoev <igor@sysoev.ru>
parents: 1390
diff changeset
1678 }
4eed21047e4d allow "http://" in auth_http URL
Igor Sysoev <igor@sysoev.ru>
parents: 1390
diff changeset
1679
1559
fe11e2a3946d use pool instead of ngx_conf_t
Igor Sysoev <igor@sysoev.ru>
parents: 1487
diff changeset
1680 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
1681 if (u.err) {
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1682 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
1683 "%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
1684 }
1390
3e045031ee3b stop configuration on error
Igor Sysoev <igor@sysoev.ru>
parents: 1285
diff changeset
1685
3e045031ee3b stop configuration on error
Igor Sysoev <igor@sysoev.ru>
parents: 1285
diff changeset
1686 return NGX_CONF_ERROR;
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1687 }
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1688
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 883
diff changeset
1689 ahcf->peer = u.addrs;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1690
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
1691 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
1692 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
1693
a2a5812cf4f4 use "localhost" in "Host" header line, if unix socket is used in "auth_http"
Igor Sysoev <igor@sysoev.ru>
parents: 3269
diff changeset
1694 } else {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3406
diff changeset
1695 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
1696 }
a2a5812cf4f4 use "localhost" in "Host" header line, if unix socket is used in "auth_http"
Igor Sysoev <igor@sysoev.ru>
parents: 3269
diff changeset
1697
805
8ee450f30c25 now the "auth_http" directive uses ngx_parse_url()
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
1698 ahcf->uri = u.uri;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1699
559
c1f965ef9718 nginx-0.3.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 555
diff changeset
1700 if (ahcf->uri.len == 0) {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3406
diff changeset
1701 ngx_str_set(&ahcf->uri, "/");
555
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
1702 }
7bd37aef1e7e nginx-0.2.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
1703
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1704 return NGX_CONF_OK;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1705 }
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1706
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1707
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1708 static char *
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1709 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
1710 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
1711 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
1712
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1713 ngx_str_t *value;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1714 ngx_table_elt_t *header;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1715
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1716 if (ahcf->headers == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1717 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
1718 if (ahcf->headers == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1719 return NGX_CONF_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1720 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1721 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1722
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1723 header = ngx_array_push(ahcf->headers);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1724 if (header == NULL) {
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1725 return NGX_CONF_ERROR;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1726 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1727
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1728 value = cf->args->elts;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1729
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1730 header->key = value[1];
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1731 header->value = value[2];
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1732
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1733 return NGX_CONF_OK;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
1734 }