# HG changeset patch # User Timo Sirainen # Date 1290112539 0 # Node ID 3e4a65a74c40d2809eac380eaf435faf4dd24c97 # Parent 9a9f65bcbe19ee881d06871152f4066da52d101a auth: If we get disconnected from anvil and can't reconnect, die. diff -r 9a9f65bcbe19 -r 3e4a65a74c40 src/auth/auth-penalty.c --- a/src/auth/auth-penalty.c Thu Nov 18 20:35:20 2010 +0000 +++ b/src/auth/auth-penalty.c Thu Nov 18 20:35:39 2010 +0000 @@ -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 @@ 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 @@ 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);