summaryrefslogtreecommitdiff
path: root/src/imap/ngx_imap_handler.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2006-11-27 11:18:50 +0000
committerJonathan Kolb <jon@b0g.us>2006-11-27 11:18:50 +0000
commit03789a0a1c208ac62bee429497b9f6a46c0aa5ff (patch)
tree32f1bb5197e419a4dc9c8d7fa2e05eaf86c1998f /src/imap/ngx_imap_handler.c
parente0cae6b0a5df2466cdb9749dc1a37664fff21ff5 (diff)
downloadnginx-0.4.tar.gz
Changes with nginx 0.4.14 27 Nov 2006v0.4.14nginx-0.4
*) Feature: the "proxy_pass_error_message" directive in IMAP/POP3 proxy. *) Bugfix: ngx_http_perl_module did nto work with perl built with the threads support; bug appeared in 0.3.38. *) Bugfix: !!!!!!!!!! segfault perl. *) Bugfix: !!!!!!!!!! recursive perl. *) Bugfix: nginx ignored a host name in an request line. *) Bugfix: !!!!!!!!!! endless loop when too many FastCGI sent too many to stderr *) Bugfix: !!!!!!!! negative upstream response time *) Bugfix: the "Auth-Login-Attempt" parameter was not sent to IMAP/POP3 proxy authentication server when POP3 was used. *) Bugfix: a segmentation fault might occur if connect to IMAP/POP3 proxy authentication server failed.
Diffstat (limited to 'src/imap/ngx_imap_handler.c')
-rw-r--r--src/imap/ngx_imap_handler.c87
1 files changed, 25 insertions, 62 deletions
diff --git a/src/imap/ngx_imap_handler.c b/src/imap/ngx_imap_handler.c
index 26513940b..2b3d29cbc 100644
--- a/src/imap/ngx_imap_handler.c
+++ b/src/imap/ngx_imap_handler.c
@@ -12,6 +12,7 @@
static void ngx_imap_init_session(ngx_connection_t *c);
static void ngx_imap_init_protocol(ngx_event_t *rev);
+static void ngx_imap_do_auth(ngx_imap_session_t *s);
static ngx_int_t ngx_imap_read_command(ngx_imap_session_t *s);
static u_char *ngx_imap_log_error(ngx_log_t *log, u_char *buf, size_t len);
@@ -537,18 +538,7 @@ ngx_imap_auth_state(ngx_event_t *rev)
"imap login:\"%V\"", &s->login);
#endif
- s->args.nelts = 0;
- s->buffer->pos = s->buffer->start;
- s->buffer->last = s->buffer->start;
-
- if (rev->timer_set) {
- ngx_del_timer(rev);
- }
-
- s->login_attempt++;
-
- ngx_imap_auth_http_init(s);
-
+ ngx_imap_do_auth(s);
return;
}
@@ -789,16 +779,7 @@ ngx_pop3_auth_state(ngx_event_t *rev)
s->auth_method = NGX_IMAP_AUTH_APOP;
- s->args.nelts = 0;
- s->buffer->pos = s->buffer->start;
- s->buffer->last = s->buffer->start;
-
- if (rev->timer_set) {
- ngx_del_timer(rev);
- }
-
- ngx_imap_auth_http_init(s);
-
+ ngx_imap_do_auth(s);
return;
}
@@ -922,16 +903,7 @@ ngx_pop3_auth_state(ngx_event_t *rev)
"pop3 passwd: \"%V\"", &s->passwd);
#endif
- s->args.nelts = 0;
- s->buffer->pos = s->buffer->start;
- s->buffer->last = s->buffer->start;
-
- if (rev->timer_set) {
- ngx_del_timer(rev);
- }
-
- ngx_imap_auth_http_init(s);
-
+ ngx_imap_do_auth(s);
return;
}
@@ -1021,16 +993,7 @@ ngx_pop3_auth_state(ngx_event_t *rev)
"pop3 auth login password: \"%V\"", &s->passwd);
#endif
- s->args.nelts = 0;
- s->buffer->pos = s->buffer->start;
- s->buffer->last = s->buffer->start;
-
- if (rev->timer_set) {
- ngx_del_timer(rev);
- }
-
- ngx_imap_auth_http_init(s);
-
+ ngx_imap_do_auth(s);
return;
case ngx_pop3_auth_plain:
@@ -1092,16 +1055,7 @@ ngx_pop3_auth_state(ngx_event_t *rev)
&s->login, &s->passwd);
#endif
- s->args.nelts = 0;
- s->buffer->pos = s->buffer->start;
- s->buffer->last = s->buffer->start;
-
- if (rev->timer_set) {
- ngx_del_timer(rev);
- }
-
- ngx_imap_auth_http_init(s);
-
+ ngx_imap_do_auth(s);
return;
case ngx_pop3_auth_cram_md5:
@@ -1151,16 +1105,7 @@ ngx_pop3_auth_state(ngx_event_t *rev)
s->auth_method = NGX_IMAP_AUTH_CRAM_MD5;
- s->args.nelts = 0;
- s->buffer->pos = s->buffer->start;
- s->buffer->last = s->buffer->start;
-
- if (rev->timer_set) {
- ngx_del_timer(rev);
- }
-
- ngx_imap_auth_http_init(s);
-
+ ngx_imap_do_auth(s);
return;
}
}
@@ -1187,6 +1132,24 @@ ngx_pop3_auth_state(ngx_event_t *rev)
}
+static void
+ngx_imap_do_auth(ngx_imap_session_t *s)
+{
+ s->args.nelts = 0;
+ s->buffer->pos = s->buffer->start;
+ s->buffer->last = s->buffer->start;
+ s->state = 0;
+
+ if (s->connection->read->timer_set) {
+ ngx_del_timer(s->connection->read);
+ }
+
+ s->login_attempt++;
+
+ ngx_imap_auth_http_init(s);
+}
+
+
static ngx_int_t
ngx_imap_read_command(ngx_imap_session_t *s)
{