Mercurial > hg > nginx-vendor-0-8
diff src/imap/ngx_imap_handler.c @ 258:6ae1357b7b7c NGINX_0_4_14
nginx 0.4.14
*) Feature: the "proxy_pass_error_message" directive in IMAP/POP3 proxy.
*) Feature: now configure detects system PCRE library on FreeBSD,
Linux, and NetBSD.
*) Bugfix: ngx_http_perl_module did not work with perl built with the
threads support; bug appeared in 0.3.38.
*) Bugfix: ngx_http_perl_module did not work if perl was called
recursively.
*) Bugfix: nginx ignored a host name in an request line.
*) Bugfix: a worker process may got caught in an endless loop, if a
FastCGI server sent too many data to the stderr.
*) Bugfix: the $upstream_response_time variable may be negative if the
system time was changed backward.
*) 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.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 27 Nov 2006 00:00:00 +0300 |
parents | 644510700914 |
children | 0effe91f6083 |
line wrap: on
line diff
--- 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) {