changeset 12449:3e4a65a74c40

auth: If we get disconnected from anvil and can't reconnect, die.
author Timo Sirainen <tss@iki.fi>
date Thu, 18 Nov 2010 20:35:39 +0000
parents 9a9f65bcbe19
children 0d455d1a9ea6
files src/auth/auth-penalty.c
diffstat 1 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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);