]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Abort pending penalty lookups earlier in deinit.
authorTimo Sirainen <tss@iki.fi>
Tue, 8 Jun 2010 19:52:24 +0000 (20:52 +0100)
committerTimo Sirainen <tss@iki.fi>
Tue, 8 Jun 2010 19:52:24 +0000 (20:52 +0100)
--HG--
branch : HEAD

src/auth/auth-request-handler.c
src/auth/main.c

index 4f57f725560ecf5015eaac6de07efd502d12499c..f842191b65d4bc9915fc9a3f4b94ddf089aaec38 100644 (file)
@@ -185,8 +185,10 @@ auth_request_handle_failure(struct auth_request *request,
        request->delayed_failure = TRUE;
        handler->refcount++;
 
-       auth_penalty_update(auth_penalty, request,
-                           request->last_penalty + 1);
+       if (auth_penalty != NULL) {
+               auth_penalty_update(auth_penalty, request,
+                                   request->last_penalty + 1);
+       }
 
        auth_request_refresh_last_access(request);
        aqueue_append(auth_failures, &request);
@@ -221,7 +223,7 @@ void auth_request_handler_reply(struct auth_request *request,
        case AUTH_CLIENT_RESULT_SUCCESS:
                auth_request_proxy_finish(request, TRUE);
 
-               if (request->last_penalty != 0) {
+               if (request->last_penalty != 0 && auth_penalty != NULL) {
                        /* reset penalty */
                        auth_penalty_update(auth_penalty, request, 0);
                }
@@ -445,8 +447,7 @@ bool auth_request_handler_auth_begin(struct auth_request_handler *handler,
        handler->refcount++;
 
        /* before we start authenticating, see if we need to wait first */
-       auth_penalty_lookup(auth_penalty, request,
-                           auth_penalty_callback);
+       auth_penalty_lookup(auth_penalty, request, auth_penalty_callback);
        return TRUE;
 }
 
index ad538cc2c7fa58ecbe6a6c2f96ffa9487059f5d7..230ddfd05c607cb640685adda1990fc1ae4b26a8 100644 (file)
@@ -151,6 +151,8 @@ static void main_init(void)
 
 static void main_deinit(void)
 {
+       /* cancel all pending anvil penalty lookups */
+       auth_penalty_deinit(&auth_penalty);
        /* deinit auth workers, which aborts pending requests */
         auth_worker_server_deinit();
        /* deinit passdbs and userdbs. it aborts any pending async requests. */
@@ -168,7 +170,6 @@ static void main_deinit(void)
 
        mech_register_deinit(&mech_reg);
        mech_deinit(global_auth_settings);
-       auth_penalty_deinit(&auth_penalty);
 
        /* allow modules to unregister their dbs/drivers/etc. before freeing
           the whole data structures containing them. */