annotate src/mail/ngx_mail_pop3_handler.c @ 4436:311b358658c8 stable-1.0

Merge of r4339, r4340, r4341: Cache fixes: *) Obsolete code removed. The ngx_http_cache() and ngx_http_no_cache_set_slot() functions were replaced in 0.8.46 and no longer used since then. *) Handling of cache files with long headers. There are two possible situations which can lead to this: response was cached with bigger proxy_buffer_size value (and nginx was restared since then, i.e. shared memory zone content was lost), or due to the race in the cache update code (see [1]) we've end up with fcn->body_start from a different response stored in shared memory zone. *) Only complain on long locked entries. There have been multiple reports of cases where a real locked entry was removed, resulting in a segmentation fault later in a worker which locked the entry. It looks like default inactive timeout isn't enough in real life. For now just ignore such locked entries, and move them to the top of the inactive queue to allow processing of other entries. [1] http://mailman.nginx.org/pipermail/nginx-devel/2011-September/001287.html
author Maxim Dounin <mdounin@mdounin.ru>
date Sun, 05 Feb 2012 13:34:08 +0000
parents dd1570b6f237
children d620f497c50f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
4 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
5
413
de9d4726e28a nginx-0.0.10-2004-08-31-23:05:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
de9d4726e28a nginx-0.0.10-2004-08-31-23:05:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
de9d4726e28a nginx-0.0.10-2004-08-31-23:05:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
de9d4726e28a nginx-0.0.10-2004-08-31-23:05:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_event.h>
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
10 #include <ngx_mail.h>
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
11 #include <ngx_mail_pop3_module.h>
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
12
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
13
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
14 static ngx_int_t ngx_mail_pop3_user(ngx_mail_session_t *s, ngx_connection_t *c);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
15 static ngx_int_t ngx_mail_pop3_pass(ngx_mail_session_t *s, ngx_connection_t *c);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
16 static ngx_int_t ngx_mail_pop3_capa(ngx_mail_session_t *s, ngx_connection_t *c,
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
17 ngx_int_t stls);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
18 static ngx_int_t ngx_mail_pop3_stls(ngx_mail_session_t *s, ngx_connection_t *c);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
19 static ngx_int_t ngx_mail_pop3_apop(ngx_mail_session_t *s, ngx_connection_t *c);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
20 static ngx_int_t ngx_mail_pop3_auth(ngx_mail_session_t *s, ngx_connection_t *c);
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
21
413
de9d4726e28a nginx-0.0.10-2004-08-31-23:05:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
23 static u_char pop3_greeting[] = "+OK POP3 ready" CRLF;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
24 static u_char pop3_ok[] = "+OK" CRLF;
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
25 static u_char pop3_next[] = "+ " CRLF;
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
26 static u_char pop3_username[] = "+ VXNlcm5hbWU6" CRLF;
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
27 static u_char pop3_password[] = "+ UGFzc3dvcmQ6" CRLF;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
28 static u_char pop3_invalid_command[] = "-ERR invalid command" CRLF;
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
29
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
30
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
31 void
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
32 ngx_mail_pop3_init_session(ngx_mail_session_t *s, ngx_connection_t *c)
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
33 {
800
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
34 u_char *p;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
35 ngx_mail_core_srv_conf_t *cscf;
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
36 ngx_mail_pop3_srv_conf_t *pscf;
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
37
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
38 pscf = ngx_mail_get_module_srv_conf(s, ngx_mail_pop3_module);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
39 cscf = ngx_mail_get_module_srv_conf(s, ngx_mail_core_module);
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
40
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
41 if (pscf->auth_methods
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
42 & (NGX_MAIL_AUTH_APOP_ENABLED|NGX_MAIL_AUTH_CRAM_MD5_ENABLED))
800
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
43 {
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
44 if (ngx_mail_salt(s, c, cscf) != NGX_OK) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
45 ngx_mail_session_internal_server_error(s);
800
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
46 return;
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
47 }
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
48
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
49 s->out.data = ngx_pnalloc(c->pool, sizeof(pop3_greeting) + s->salt.len);
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
50 if (s->out.data == NULL) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
51 ngx_mail_session_internal_server_error(s);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
52 return;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
53 }
800
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
54
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
55 p = ngx_cpymem(s->out.data, pop3_greeting, sizeof(pop3_greeting) - 3);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
56 *p++ = ' ';
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
57 p = ngx_cpymem(p, s->salt.data, s->salt.len);
800
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
58
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
59 s->out.len = p - s->out.data;
800
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
60
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
61 } else {
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3450
diff changeset
62 ngx_str_set(&s->out, pop3_greeting);
800
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
63 }
Igor Sysoev <igor@sysoev.ru>
parents: 641
diff changeset
64
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
65 c->read->handler = ngx_mail_pop3_init_protocol;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
66
1486
0e7074ef7303 style fix: remove trailing spaces
Igor Sysoev <igor@sysoev.ru>
parents: 1482
diff changeset
67 ngx_add_timer(c->read, cscf->timeout);
1480
a231e37a19ab move event handling to protocol specific code,
Igor Sysoev <igor@sysoev.ru>
parents: 1479
diff changeset
68
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
69 if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
1480
a231e37a19ab move event handling to protocol specific code,
Igor Sysoev <igor@sysoev.ru>
parents: 1479
diff changeset
70 ngx_mail_close_connection(c);
a231e37a19ab move event handling to protocol specific code,
Igor Sysoev <igor@sysoev.ru>
parents: 1479
diff changeset
71 }
a231e37a19ab move event handling to protocol specific code,
Igor Sysoev <igor@sysoev.ru>
parents: 1479
diff changeset
72
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
73 ngx_mail_send(c->write);
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
74 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
75
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
76
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
77 void
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
78 ngx_mail_pop3_init_protocol(ngx_event_t *rev)
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
79 {
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
80 ngx_connection_t *c;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
81 ngx_mail_session_t *s;
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
82
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
83 c = rev->data;
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
84
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
85 c->log->action = "in auth state";
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
86
423
fda5987b188d nginx-0.0.10-2004-09-13-20:18:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 422
diff changeset
87 if (rev->timedout) {
fda5987b188d nginx-0.0.10-2004-09-13-20:18:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 422
diff changeset
88 ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
89 c->timedout = 1;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
90 ngx_mail_close_connection(c);
423
fda5987b188d nginx-0.0.10-2004-09-13-20:18:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 422
diff changeset
91 return;
fda5987b188d nginx-0.0.10-2004-09-13-20:18:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 422
diff changeset
92 }
420
33a8253115b4 nginx-0.0.10-2004-09-09-22:55:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
93
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
94 s = c->data;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
95
419
47709bff4468 nginx-0.0.10-2004-09-09-19:40:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 418
diff changeset
96 if (s->buffer == NULL) {
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
97 if (ngx_array_init(&s->args, c->pool, 2, sizeof(ngx_str_t))
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
98 == NGX_ERROR)
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
99 {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
100 ngx_mail_session_internal_server_error(s);
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
101 return;
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
102 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
103
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
104 s->buffer = ngx_create_temp_buf(c->pool, 128);
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
105 if (s->buffer == NULL) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
106 ngx_mail_session_internal_server_error(s);
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
107 return;
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
108 }
419
47709bff4468 nginx-0.0.10-2004-09-09-19:40:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 418
diff changeset
109 }
47709bff4468 nginx-0.0.10-2004-09-09-19:40:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 418
diff changeset
110
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
111 s->mail_state = ngx_pop3_start;
1477
59e1caf2be94 style fix and optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1476
diff changeset
112 c->read->handler = ngx_mail_pop3_auth_state;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
113
1477
59e1caf2be94 style fix and optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1476
diff changeset
114 ngx_mail_pop3_auth_state(rev);
420
33a8253115b4 nginx-0.0.10-2004-09-09-22:55:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
115 }
33a8253115b4 nginx-0.0.10-2004-09-09-22:55:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
116
33a8253115b4 nginx-0.0.10-2004-09-09-22:55:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
117
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
118 void
1477
59e1caf2be94 style fix and optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1476
diff changeset
119 ngx_mail_pop3_auth_state(ngx_event_t *rev)
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
120 {
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
121 ngx_int_t rc;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
122 ngx_connection_t *c;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
123 ngx_mail_session_t *s;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
124
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
125 c = rev->data;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
126 s = c->data;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
127
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
128 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, c->log, 0, "pop3 auth state");
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
129
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
130 if (rev->timedout) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
131 ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
132 c->timedout = 1;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
133 ngx_mail_close_connection(c);
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
134 return;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
135 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
136
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
137 if (s->out.len) {
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
138 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, c->log, 0, "pop3 send handler busy");
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
139 s->blocked = 1;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
140 return;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
141 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
142
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
143 s->blocked = 0;
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
144
1482
4606dce4f416 optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1480
diff changeset
145 rc = ngx_mail_read_command(s, c);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
146
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
147 if (rc == NGX_AGAIN || rc == NGX_ERROR) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
148 return;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
149 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
150
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3450
diff changeset
151 ngx_str_set(&s->out, pop3_ok);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
152
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
153 if (rc == NGX_OK) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
154 switch (s->mail_state) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
155
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
156 case ngx_pop3_start:
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
157
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
158 switch (s->command) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
159
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
160 case NGX_POP3_USER:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
161 rc = ngx_mail_pop3_user(s, c);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
162 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
163
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
164 case NGX_POP3_CAPA:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
165 rc = ngx_mail_pop3_capa(s, c, 1);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
166 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
167
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
168 case NGX_POP3_APOP:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
169 rc = ngx_mail_pop3_apop(s, c);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
170 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
171
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
172 case NGX_POP3_AUTH:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
173 rc = ngx_mail_pop3_auth(s, c);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
174 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
175
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
176 case NGX_POP3_QUIT:
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
177 s->quit = 1;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
178 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
179
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
180 case NGX_POP3_NOOP:
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
181 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
182
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
183 case NGX_POP3_STLS:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
184 rc = ngx_mail_pop3_stls(s, c);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
185 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
186
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
187 default:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
188 rc = NGX_MAIL_PARSE_INVALID_COMMAND;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
189 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
190 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
191
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
192 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
193
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
194 case ngx_pop3_user:
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
195
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
196 switch (s->command) {
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
197
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
198 case NGX_POP3_PASS:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
199 rc = ngx_mail_pop3_pass(s, c);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
200 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
201
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
202 case NGX_POP3_CAPA:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
203 rc = ngx_mail_pop3_capa(s, c, 0);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
204 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
205
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
206 case NGX_POP3_QUIT:
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
207 s->quit = 1;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
208 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
209
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
210 case NGX_POP3_NOOP:
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
211 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
212
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
213 default:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
214 rc = NGX_MAIL_PARSE_INVALID_COMMAND;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
215 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
216 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
217
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
218 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
219
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
220 /* suppress warinings */
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
221 case ngx_pop3_passwd:
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
222 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
223
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
224 case ngx_pop3_auth_login_username:
2495
a59b26eee816 compatibility with Microsoft's
Igor Sysoev <igor@sysoev.ru>
parents: 2388
diff changeset
225 rc = ngx_mail_auth_login_username(s, c, 0);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
226
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3450
diff changeset
227 ngx_str_set(&s->out, pop3_password);
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
228 s->mail_state = ngx_pop3_auth_login_password;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
229 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
230
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
231 case ngx_pop3_auth_login_password:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
232 rc = ngx_mail_auth_login_password(s, c);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
233 break;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
234
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
235 case ngx_pop3_auth_plain:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
236 rc = ngx_mail_auth_plain(s, c, 0);
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
237 break;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
238
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
239 case ngx_pop3_auth_cram_md5:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
240 rc = ngx_mail_auth_cram_md5(s, c);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
241 break;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
242 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
243 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
244
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
245 switch (rc) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
246
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
247 case NGX_DONE:
1482
4606dce4f416 optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1480
diff changeset
248 ngx_mail_auth(s, c);
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
249 return;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
250
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
251 case NGX_ERROR:
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
252 ngx_mail_session_internal_server_error(s);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
253 return;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
254
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
255 case NGX_MAIL_PARSE_INVALID_COMMAND:
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
256 s->mail_state = ngx_pop3_start;
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
257 s->state = 0;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
258
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3450
diff changeset
259 ngx_str_set(&s->out, pop3_invalid_command);
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
260
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
261 /* fall through */
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
262
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
263 case NGX_OK:
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
264
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
265 s->args.nelts = 0;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
266 s->buffer->pos = s->buffer->start;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
267 s->buffer->last = s->buffer->start;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
268
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
269 if (s->state) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
270 s->arg_start = s->buffer->start;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
271 }
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
272
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
273 ngx_mail_send(c->write);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
274 }
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
275 }
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
276
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
277 static ngx_int_t
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
278 ngx_mail_pop3_user(ngx_mail_session_t *s, ngx_connection_t *c)
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
279 {
1704
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1487
diff changeset
280 ngx_str_t *arg;
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
281
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
282 #if (NGX_MAIL_SSL)
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
283 if (ngx_mail_starttls_only(s, c)) {
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
284 return NGX_MAIL_PARSE_INVALID_COMMAND;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
285 }
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
286 #endif
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
287
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
288 if (s->args.nelts != 1) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
289 return NGX_MAIL_PARSE_INVALID_COMMAND;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
290 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
291
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
292 arg = s->args.elts;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
293 s->login.len = arg[0].len;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
294 s->login.data = ngx_pnalloc(c->pool, s->login.len);
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
295 if (s->login.data == NULL) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
296 return NGX_ERROR;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
297 }
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
298
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
299 ngx_memcpy(s->login.data, arg[0].data, s->login.len);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
300
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
301 ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0,
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
302 "pop3 login: \"%V\"", &s->login);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
303
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
304 s->mail_state = ngx_pop3_user;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
305
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
306 return NGX_OK;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
307 }
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
308
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
309
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
310 static ngx_int_t
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
311 ngx_mail_pop3_pass(ngx_mail_session_t *s, ngx_connection_t *c)
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
312 {
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
313 ngx_str_t *arg;
1136
68f30ab68bb7 Many changes:
Igor Sysoev <igor@sysoev.ru>
parents: 1111
diff changeset
314
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
315 if (s->args.nelts != 1) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
316 return NGX_MAIL_PARSE_INVALID_COMMAND;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
317 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
318
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
319 arg = s->args.elts;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
320 s->passwd.len = arg[0].len;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
321 s->passwd.data = ngx_pnalloc(c->pool, s->passwd.len);
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
322 if (s->passwd.data == NULL) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
323 return NGX_ERROR;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
324 }
1323
c4b2c893989d IMAP AUTHENTICATE
Igor Sysoev <igor@sysoev.ru>
parents: 1322
diff changeset
325
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
326 ngx_memcpy(s->passwd.data, arg[0].data, s->passwd.len);
1323
c4b2c893989d IMAP AUTHENTICATE
Igor Sysoev <igor@sysoev.ru>
parents: 1322
diff changeset
327
c4b2c893989d IMAP AUTHENTICATE
Igor Sysoev <igor@sysoev.ru>
parents: 1322
diff changeset
328 #if (NGX_DEBUG_MAIL_PASSWD)
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
329 ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0,
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
330 "pop3 passwd: \"%V\"", &s->passwd);
1323
c4b2c893989d IMAP AUTHENTICATE
Igor Sysoev <igor@sysoev.ru>
parents: 1322
diff changeset
331 #endif
c4b2c893989d IMAP AUTHENTICATE
Igor Sysoev <igor@sysoev.ru>
parents: 1322
diff changeset
332
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
333 return NGX_DONE;
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
334 }
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
335
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
336
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
337 static ngx_int_t
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
338 ngx_mail_pop3_capa(ngx_mail_session_t *s, ngx_connection_t *c, ngx_int_t stls)
420
33a8253115b4 nginx-0.0.10-2004-09-09-22:55:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
339 {
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
340 ngx_mail_pop3_srv_conf_t *pscf;
420
33a8253115b4 nginx-0.0.10-2004-09-09-22:55:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
341
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
342 pscf = ngx_mail_get_module_srv_conf(s, ngx_mail_pop3_module);
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
343
1322
27f2299e0d80 SMTP STARTTLS
Igor Sysoev <igor@sysoev.ru>
parents: 1286
diff changeset
344 #if (NGX_MAIL_SSL)
27f2299e0d80 SMTP STARTTLS
Igor Sysoev <igor@sysoev.ru>
parents: 1286
diff changeset
345
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
346 if (stls && c->ssl == NULL) {
1704
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1487
diff changeset
347 ngx_mail_ssl_conf_t *sslcf;
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1487
diff changeset
348
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
349 sslcf = ngx_mail_get_module_srv_conf(s, ngx_mail_ssl_module);
1322
27f2299e0d80 SMTP STARTTLS
Igor Sysoev <igor@sysoev.ru>
parents: 1286
diff changeset
350
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
351 if (sslcf->starttls == NGX_MAIL_STARTTLS_ON) {
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
352 s->out = pscf->starttls_capability;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
353 return NGX_OK;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
354 }
809
da9c1521319d AUTH PLAIN LOGIN CRAM-MD5
Igor Sysoev <igor@sysoev.ru>
parents: 800
diff changeset
355
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
356 if (sslcf->starttls == NGX_MAIL_STARTTLS_ONLY) {
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
357 s->out = pscf->starttls_only_capability;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
358 return NGX_OK;
421
01456a419cf9 nginx-0.0.10-2004-09-10-18:32:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 420
diff changeset
359 }
01456a419cf9 nginx-0.0.10-2004-09-10-18:32:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 420
diff changeset
360 }
420
33a8253115b4 nginx-0.0.10-2004-09-09-22:55:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
361
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
362 #endif
420
33a8253115b4 nginx-0.0.10-2004-09-09-22:55:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
363
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
364 s->out = pscf->capability;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
365 return NGX_OK;
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
366 }
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
367
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
368
894
4f7dca9c37f0 workaround for Eudora for Mac: it sends
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
369 static ngx_int_t
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
370 ngx_mail_pop3_stls(ngx_mail_session_t *s, ngx_connection_t *c)
894
4f7dca9c37f0 workaround for Eudora for Mac: it sends
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
371 {
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
372 #if (NGX_MAIL_SSL)
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
373 ngx_mail_ssl_conf_t *sslcf;
894
4f7dca9c37f0 workaround for Eudora for Mac: it sends
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
374
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
375 if (c->ssl == NULL) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
376 sslcf = ngx_mail_get_module_srv_conf(s, ngx_mail_ssl_module);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
377 if (sslcf->starttls) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
378 c->read->handler = ngx_mail_starttls_handler;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
379 return NGX_OK;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
380 }
894
4f7dca9c37f0 workaround for Eudora for Mac: it sends
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
381 }
4f7dca9c37f0 workaround for Eudora for Mac: it sends
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
382
4f7dca9c37f0 workaround for Eudora for Mac: it sends
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
383 #endif
4f7dca9c37f0 workaround for Eudora for Mac: it sends
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
384
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
385 return NGX_MAIL_PARSE_INVALID_COMMAND;
855
b006f30d6a2f count s->login_attempt for POP3, minimize code
Igor Sysoev <igor@sysoev.ru>
parents: 851
diff changeset
386 }
b006f30d6a2f count s->login_attempt for POP3, minimize code
Igor Sysoev <igor@sysoev.ru>
parents: 851
diff changeset
387
b006f30d6a2f count s->login_attempt for POP3, minimize code
Igor Sysoev <igor@sysoev.ru>
parents: 851
diff changeset
388
521
6f00349b98e5 nginx-0.1.35-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
389 static ngx_int_t
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
390 ngx_mail_pop3_apop(ngx_mail_session_t *s, ngx_connection_t *c)
420
33a8253115b4 nginx-0.0.10-2004-09-09-22:55:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 419
diff changeset
391 {
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
392 ngx_str_t *arg;
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
393 ngx_mail_pop3_srv_conf_t *pscf;
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
394
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
395 #if (NGX_MAIL_SSL)
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
396 if (ngx_mail_starttls_only(s, c)) {
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
397 return NGX_MAIL_PARSE_INVALID_COMMAND;
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
398 }
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
399 #endif
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
400
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
401 if (s->args.nelts != 2) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
402 return NGX_MAIL_PARSE_INVALID_COMMAND;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
403 }
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
404
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
405 pscf = ngx_mail_get_module_srv_conf(s, ngx_mail_pop3_module);
1472
32450a2bbdf4 decrement active connection counter in mail proxy
Igor Sysoev <igor@sysoev.ru>
parents: 1323
diff changeset
406
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
407 if (!(pscf->auth_methods & NGX_MAIL_AUTH_APOP_ENABLED)) {
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
408 return NGX_MAIL_PARSE_INVALID_COMMAND;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
409 }
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
410
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
411 arg = s->args.elts;
543
511a89da35ad nginx-0.2.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 541
diff changeset
412
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
413 s->login.len = arg[0].len;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
414 s->login.data = ngx_pnalloc(c->pool, s->login.len);
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
415 if (s->login.data == NULL) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
416 return NGX_ERROR;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
417 }
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
418
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
419 ngx_memcpy(s->login.data, arg[0].data, s->login.len);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
420
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
421 s->passwd.len = arg[1].len;
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1704
diff changeset
422 s->passwd.data = ngx_pnalloc(c->pool, s->passwd.len);
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
423 if (s->passwd.data == NULL) {
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
424 return NGX_ERROR;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
425 }
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
426
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
427 ngx_memcpy(s->passwd.data, arg[1].data, s->passwd.len);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
428
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
429 ngx_log_debug2(NGX_LOG_DEBUG_MAIL, c->log, 0,
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
430 "pop3 apop: \"%V\" \"%V\"", &s->login, &s->passwd);
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
431
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
432 s->auth_method = NGX_MAIL_AUTH_APOP;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
433
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
434 return NGX_DONE;
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
435 }
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
436
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 529
diff changeset
437
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
438 static ngx_int_t
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
439 ngx_mail_pop3_auth(ngx_mail_session_t *s, ngx_connection_t *c)
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
440 {
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
441 ngx_int_t rc;
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
442 ngx_mail_pop3_srv_conf_t *pscf;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
443
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
444 #if (NGX_MAIL_SSL)
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
445 if (ngx_mail_starttls_only(s, c)) {
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
446 return NGX_MAIL_PARSE_INVALID_COMMAND;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
447 }
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
448 #endif
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
449
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
450 pscf = ngx_mail_get_module_srv_conf(s, ngx_mail_pop3_module);
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
451
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
452 if (s->args.nelts == 0) {
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
453 s->out = pscf->auth_capability;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
454 s->state = 0;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
455
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
456 return NGX_OK;
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
457 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
458
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
459 rc = ngx_mail_auth_parse(s, c);
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
460
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
461 switch (rc) {
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
462
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
463 case NGX_MAIL_AUTH_LOGIN:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
464
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3450
diff changeset
465 ngx_str_set(&s->out, pop3_username);
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
466 s->mail_state = ngx_pop3_auth_login_username;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
467
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
468 return NGX_OK;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
469
2495
a59b26eee816 compatibility with Microsoft's
Igor Sysoev <igor@sysoev.ru>
parents: 2388
diff changeset
470 case NGX_MAIL_AUTH_LOGIN_USERNAME:
a59b26eee816 compatibility with Microsoft's
Igor Sysoev <igor@sysoev.ru>
parents: 2388
diff changeset
471
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3450
diff changeset
472 ngx_str_set(&s->out, pop3_password);
2495
a59b26eee816 compatibility with Microsoft's
Igor Sysoev <igor@sysoev.ru>
parents: 2388
diff changeset
473 s->mail_state = ngx_pop3_auth_login_password;
a59b26eee816 compatibility with Microsoft's
Igor Sysoev <igor@sysoev.ru>
parents: 2388
diff changeset
474
a59b26eee816 compatibility with Microsoft's
Igor Sysoev <igor@sysoev.ru>
parents: 2388
diff changeset
475 return ngx_mail_auth_login_username(s, c, 1);
a59b26eee816 compatibility with Microsoft's
Igor Sysoev <igor@sysoev.ru>
parents: 2388
diff changeset
476
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
477 case NGX_MAIL_AUTH_PLAIN:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
478
3516
dd1570b6f237 ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents: 3450
diff changeset
479 ngx_str_set(&s->out, pop3_next);
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
480 s->mail_state = ngx_pop3_auth_plain;
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
481
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
482 return NGX_OK;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
483
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
484 case NGX_MAIL_AUTH_CRAM_MD5:
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
485
1487
f69493e8faab ngx_mail_pop3_module, ngx_mail_imap_module, and ngx_mail_smtp_module
Igor Sysoev <igor@sysoev.ru>
parents: 1486
diff changeset
486 if (!(pscf->auth_methods & NGX_MAIL_AUTH_CRAM_MD5_ENABLED)) {
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
487 return NGX_MAIL_PARSE_INVALID_COMMAND;
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
488 }
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
489
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
490 if (ngx_mail_auth_cram_md5_salt(s, c, "+ ", 2) == NGX_OK) {
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
491 s->mail_state = ngx_pop3_auth_cram_md5;
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
492 return NGX_OK;
1476
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
493 }
67578e966dcc split pop3, imap, and smtp handlers
Igor Sysoev <igor@sysoev.ru>
parents: 1472
diff changeset
494
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
495 return NGX_ERROR;
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
496 }
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
497
1479
2647950e047f optimizations
Igor Sysoev <igor@sysoev.ru>
parents: 1477
diff changeset
498 return rc;
541
b09ee85d0ac8 nginx-0.1.45-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 539
diff changeset
499 }