diff options
author | Igor Sysoev <igor@sysoev.ru> | 2006-11-27 11:18:50 +0000 |
---|---|---|
committer | Jonathan Kolb <jon@b0g.us> | 2006-11-27 11:18:50 +0000 |
commit | 03789a0a1c208ac62bee429497b9f6a46c0aa5ff (patch) | |
tree | 32f1bb5197e419a4dc9c8d7fa2e05eaf86c1998f /src/imap/ngx_imap_handler.c | |
parent | e0cae6b0a5df2466cdb9749dc1a37664fff21ff5 (diff) | |
download | nginx-0.4.tar.gz |
*) 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.c | 87 |
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) { |