From: Timo Sirainen Date: Sat, 13 Mar 2010 16:08:39 +0000 (+0200) Subject: auth: auth_penalty is now a global single instance. X-Git-Tag: 2.0.beta4~73 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1cc683c5d442a1a3bed5a18c1fb37180cb7ef84b;p=thirdparty%2Fdovecot%2Fcore.git auth: auth_penalty is now a global single instance. --HG-- branch : HEAD --- diff --git a/src/auth/auth-common.h b/src/auth/auth-common.h index 845a4f7d77..06dca43d5e 100644 --- a/src/auth/auth-common.h +++ b/src/auth/auth-common.h @@ -6,5 +6,6 @@ extern bool worker, shutdown_request; extern time_t process_start_time; +extern struct auth_penalty *auth_penalty; #endif diff --git a/src/auth/auth-request-handler.c b/src/auth/auth-request-handler.c index dfd50cfab4..9fe6bf47ec 100644 --- a/src/auth/auth-request-handler.c +++ b/src/auth/auth-request-handler.c @@ -173,7 +173,7 @@ auth_request_handle_failure(struct auth_request *request, request->delayed_failure = TRUE; handler->refcount++; - auth_penalty_update(request->auth->penalty, request, + auth_penalty_update(auth_penalty, request, request->last_penalty + 1); auth_request_refresh_last_access(request); @@ -211,7 +211,7 @@ static void auth_callback(struct auth_request *request, if (request->last_penalty != 0) { /* reset penalty */ - auth_penalty_update(request->auth->penalty, request, 0); + auth_penalty_update(auth_penalty, request, 0); } auth_stream_reply_add(reply, "OK", NULL); @@ -412,7 +412,7 @@ bool auth_request_handler_auth_begin(struct auth *auth, handler->refcount++; /* before we start authenticating, see if we need to wait first */ - auth_penalty_lookup(request->auth->penalty, request, + auth_penalty_lookup(auth_penalty, request, auth_penalty_callback); return TRUE; } diff --git a/src/auth/auth.c b/src/auth/auth.c index f616b27c7e..0d657821b2 100644 --- a/src/auth/auth.c +++ b/src/auth/auth.c @@ -10,14 +10,11 @@ #include "passdb.h" #include "passdb-cache.h" #include "auth.h" -#include "auth-penalty.h" #include "auth-request-handler.h" #include #include -#define AUTH_PENALTY_ANVIL_PATH "anvil-auth-penalty" - struct auth_userdb_settings userdb_dummy_set = { .driver = "static", .args = "" @@ -78,7 +75,6 @@ struct auth *auth_preinit(struct auth_settings *set) /* use a dummy userdb static. */ userdb_preinit(auth, &userdb_dummy_set); } - auth->penalty = auth_penalty_init(AUTH_PENALTY_ANVIL_PATH); return auth; } @@ -261,6 +257,5 @@ void auth_deinit(struct auth **_auth) auth_request_handler_deinit(); passdb_cache_deinit(); - auth_penalty_deinit(&auth->penalty); pool_unref(&auth->pool); } diff --git a/src/auth/auth.h b/src/auth/auth.h index 31958da6e8..af880561b2 100644 --- a/src/auth/auth.h +++ b/src/auth/auth.h @@ -39,7 +39,6 @@ struct auth { struct auth_passdb *masterdbs; struct auth_passdb *passdbs; struct auth_userdb *userdbs; - struct auth_penalty *penalty; }; const string_t *auth_mechanisms_get_list(struct auth *auth); diff --git a/src/auth/main.c b/src/auth/main.c index fd528dd5f5..24833c8b65 100644 --- a/src/auth/main.c +++ b/src/auth/main.c @@ -15,6 +15,7 @@ #include "password-scheme.h" #include "mech.h" #include "auth.h" +#include "auth-penalty.h" #include "auth-request-handler.h" #include "auth-worker-server.h" #include "auth-worker-client.h" @@ -23,6 +24,8 @@ #include +#define AUTH_PENALTY_ANVIL_PATH "anvil-auth-penalty" + enum auth_socket_type { AUTH_SOCKET_UNKNOWN = 0, AUTH_SOCKET_CLIENT, @@ -32,6 +35,7 @@ enum auth_socket_type { bool worker = FALSE, shutdown_request = FALSE; time_t process_start_time; +struct auth_penalty *auth_penalty; static struct module *modules = NULL; static struct auth *auth; @@ -62,6 +66,7 @@ static void main_preinit(void) module_dir_init(modules); auth = auth_preinit(global_auth_settings); + auth_penalty = auth_penalty_init(AUTH_PENALTY_ANVIL_PATH); /* Password lookups etc. may require roots, allow it. */ restrict_access_by_env(NULL, FALSE); @@ -107,6 +112,7 @@ static void main_deinit(void) mech_deinit(auth->set); auth_deinit(&auth); + auth_penalty_deinit(&auth_penalty); /* allow modules to unregister their dbs/drivers/etc. before freeing the whole data structures containing them. */