diff src/imap/ngx_imap_auth_http_module.c @ 543:511a89da35ad release-0.2.0

nginx-0.2.0-RELEASE import *) The pid-file names used during online upgrade was changed and now is not required a manual rename operation. The old master process adds the ".oldbin" suffix to its pid-file and executes a new binary file. The new master process creates usual pid-file without the ".newbin" suffix. If the master process exits, then old master process renames back its pid-file with the ".oldbin" suffix to the pid-file without suffix. *) Change: the "worker_connections" directive, new name of the "connections" directive; now the directive specifies maximum number of connections, but not maximum socket descriptor number. *) Feature: SSL supports the session cache inside one worker process. *) Feature: the "satisfy_any" directive. *) Change: the ngx_http_access_module and ngx_http_auth_basic_module do not run for subrequests. *) Feature: the "worker_rlimit_nofile" and "worker_rlimit_sigpending" directives. *) Bugfix: if all backend using in load-balancing failed after one error, then nginx did not try do connect to them during 60 seconds. *) Bugfix: in IMAP/POP3 command argument parsing. Thanks to Rob Mueller. *) Bugfix: errors while using SSL in IMAP/POP3 proxy. *) Bugfix: errors while using SSI and gzipping. *) Bugfix: the "Expires" and "Cache-Control" header lines were omitted from the 304 responses. Thanks to Alexandr Kukushkin.
author Igor Sysoev <igor@sysoev.ru>
date Fri, 23 Sep 2005 11:02:22 +0000
parents b09ee85d0ac8
children 818fbd4750b9
line wrap: on
line diff
--- a/src/imap/ngx_imap_auth_http_module.c
+++ b/src/imap/ngx_imap_auth_http_module.c
@@ -150,7 +150,8 @@ ngx_imap_auth_http_init(ngx_imap_session
 
     rc = ngx_event_connect_peer(&ctx->peer);
 
-    if (rc == NGX_ERROR || rc == NGX_CONNECT_ERROR) {
+    if (rc == NGX_ERROR || rc == NGX_BUSY || rc == NGX_DECLINED) {
+        ngx_close_connection(ctx->peer.connection);
         ngx_imap_session_internal_server_error(s);
         return;
     }
@@ -448,6 +449,7 @@ ngx_imap_auth_http_process_headers(ngx_i
 
                 p = ngx_pcalloc(s->connection->pool, size);
                 if (p == NULL) {
+                    ngx_close_connection(ctx->peer.connection);
                     ngx_imap_session_internal_server_error(s);
                     return;
                 }
@@ -641,8 +643,9 @@ ngx_imap_auth_http_process_headers(ngx_i
 static void
 ngx_imap_auth_sleep_handler(ngx_event_t *rev)
 {
-    ngx_connection_t    *c;
-    ngx_imap_session_t  *s;
+    ngx_connection_t          *c;
+    ngx_imap_session_t        *s;
+    ngx_imap_core_srv_conf_t  *cscf;
 
     ngx_log_debug0(NGX_LOG_DEBUG_IMAP, rev->log, 0, "imap auth sleep handler");
 
@@ -662,6 +665,18 @@ ngx_imap_auth_sleep_handler(ngx_event_t 
             s->connection->read->handler = ngx_imap_auth_state;
         }
 
+        c->log->action = "in auth state";
+
+        ngx_imap_send(s->connection->write);
+
+        if (c->closed) {
+            return;
+        }
+
+        cscf = ngx_imap_get_module_srv_conf(s, ngx_imap_core_module);
+
+        ngx_add_timer(rev, cscf->timeout);
+
         if (rev->ready) {
             s->connection->read->handler(rev);
             return;
@@ -671,8 +686,6 @@ ngx_imap_auth_sleep_handler(ngx_event_t 
             ngx_imap_close_connection(s->connection);
         }
 
-        ngx_imap_send(s->connection->write);
-
         return;
     }