changeset 5149:892b8f1c1916 HEAD

Make sure we crash if we're trying to call sasl_callback() too many times.
author Timo Sirainen <tss@iki.fi>
date Fri, 16 Feb 2007 15:40:48 +0200
parents 7f2c39d7a2cc
children 16240711734e
files src/login-common/sasl-server.c
diffstat 1 files changed, 6 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/login-common/sasl-server.c	Fri Feb 16 15:12:05 2007 +0200
+++ b/src/login-common/sasl-server.c	Fri Feb 16 15:40:48 2007 +0200
@@ -27,6 +27,7 @@
 	client->authenticating = FALSE;
 	client->sasl_callback(client, success ? SASL_SERVER_REPLY_SUCCESS :
 			      SASL_SERVER_REPLY_MASTER_FAILED, NULL, NULL);
+	client->sasl_callback = NULL;
 }
 
 static void authenticate_callback(struct auth_request *request, int status,
@@ -71,6 +72,7 @@
 			client->authenticating = FALSE;
 			client->sasl_callback(client, SASL_SERVER_REPLY_SUCCESS,
 					      NULL, args);
+			client->sasl_callback = NULL;
 		} else {
 			master_request_login(client, master_callback,
 				auth_client_request_get_server_pid(request),
@@ -94,6 +96,7 @@
 		client->authenticating = FALSE;
 		client->sasl_callback(client, SASL_SERVER_REPLY_AUTH_FAILED,
 				      NULL, args);
+		client->sasl_callback = NULL;
 		break;
 	}
 }
@@ -148,6 +151,8 @@
 static void sasl_server_auth_cancel(struct client *client, const char *reason,
 				    enum sasl_server_reply reply)
 {
+	i_assert(client->authenticating);
+
 	if (verbose_auth && reason != NULL) {
 		const char *auth_name =
 			str_sanitize(client->auth_mech_name, MAX_MECH_NAME);
@@ -164,6 +169,7 @@
 	}
 
 	client->sasl_callback(client, reply, reason, NULL);
+	client->sasl_callback = NULL;
 }
 
 void sasl_server_auth_failed(struct client *client, const char *reason)