From: Timo Sirainen Date: Thu, 18 Nov 2010 20:35:39 +0000 (+0000) Subject: auth: If we get disconnected from anvil and can't reconnect, die. X-Git-Tag: 2.0.8~62 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e9d9f9071b12a687564c6817f3984cc1cd56d866;p=thirdparty%2Fdovecot%2Fcore.git auth: If we get disconnected from anvil and can't reconnect, die. --- diff --git a/src/auth/auth-penalty.c b/src/auth/auth-penalty.c index 5bb89a5256..51b104559b 100644 --- a/src/auth/auth-penalty.c +++ b/src/auth/auth-penalty.c @@ -4,6 +4,7 @@ #include "ioloop.h" #include "network.h" #include "crc32.h" +#include "master-service.h" #include "anvil-client.h" #include "auth-request.h" #include "auth-penalty.h" @@ -16,6 +17,7 @@ struct auth_penalty_request { struct auth_request *auth_request; + struct anvil_client *client; auth_penalty_callback_t *callback; }; @@ -67,7 +69,12 @@ static void auth_penalty_anvil_callback(const char *reply, void *context) unsigned int secs, drop_penalty; if (reply == NULL) { - /* internal failure */ + /* internal failure. */ + if (!anvil_client_is_connected(request->client)) { + /* we probably didn't have permissions to reconnect + back to anvil. need to restart ourself. */ + master_service_stop(master_service); + } } else if (sscanf(reply, "%u %lu", &penalty, &last_penalty) != 2) { i_error("Invalid PENALTY-GET reply: %s", reply); } else { @@ -123,6 +130,7 @@ void auth_penalty_lookup(struct auth_penalty *penalty, request = i_new(struct auth_penalty_request, 1); request->auth_request = auth_request; + request->client = penalty->client; request->callback = callback; auth_request_ref(auth_request);