From: Timo Sirainen Date: Tue, 8 Jun 2010 19:52:24 +0000 (+0100) Subject: auth: Abort pending penalty lookups earlier in deinit. X-Git-Tag: 2.0.beta6~29 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2c8ff32886e56a5e037169c9ebef4219f85a5629;p=thirdparty%2Fdovecot%2Fcore.git auth: Abort pending penalty lookups earlier in deinit. --HG-- branch : HEAD --- diff --git a/src/auth/auth-request-handler.c b/src/auth/auth-request-handler.c index 4f57f72556..f842191b65 100644 --- a/src/auth/auth-request-handler.c +++ b/src/auth/auth-request-handler.c @@ -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; } diff --git a/src/auth/main.c b/src/auth/main.c index ad538cc2c7..230ddfd05c 100644 --- a/src/auth/main.c +++ b/src/auth/main.c @@ -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. */