dovecot-1.2: Don't crash if trying to use an unsupported auth me...

dovecot at dovecot.org dovecot at dovecot.org
Sat Dec 13 13:18:03 EET 2008


details:   http://hg.dovecot.org/dovecot-1.2/rev/4693c9f72baa
changeset: 8534:4693c9f72baa
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Dec 13 13:16:54 2008 +0200
description:
Don't crash if trying to use an unsupported auth mechanism.

diffstat:

4 files changed, 11 insertions(+), 1 deletion(-)
src/imap-login/client-authenticate.c |    8 +++++++-
src/imap-login/client.h              |    1 +
src/pop3-login/client-authenticate.c |    2 ++
src/pop3-login/client.h              |    1 +

diffs (68 lines):

diff -r 70b0597e2bb5 -r 4693c9f72baa src/imap-login/client-authenticate.c
--- a/src/imap-login/client-authenticate.c	Sat Dec 13 12:52:53 2008 +0200
+++ b/src/imap-login/client-authenticate.c	Sat Dec 13 13:16:54 2008 +0200
@@ -81,12 +81,16 @@ static void client_auth_input(struct ima
 
 static void client_auth_failed(struct imap_client *client)
 {
+	client->common.auth_command_tag = NULL;
+
+	if (client->auth_initializing)
+		return;
+
 	/* get back to normal client input. */
 	if (client->io != NULL)
 		io_remove(&client->io);
 	client->io = io_add(client->common.fd, IO_READ,
 			    client_input, client);
-	client->common.auth_command_tag = NULL;
 	client_input(client);
 }
 
@@ -285,8 +289,10 @@ static int client_auth_begin(struct imap
 	client->common.auth_command_tag = client->cmd_tag;
 
 	client_ref(client);
+	client->auth_initializing = TRUE;
 	sasl_server_auth_begin(&client->common, IMAP_SERVICE_NAME, mech_name,
 			       init_resp, sasl_callback);
+	client->auth_initializing = FALSE;
 	if (!client->common.authenticating)
 		return 1;
 
diff -r 70b0597e2bb5 -r 4693c9f72baa src/imap-login/client.h
--- a/src/imap-login/client.h	Sat Dec 13 12:52:53 2008 +0200
+++ b/src/imap-login/client.h	Sat Dec 13 13:16:54 2008 +0200
@@ -31,6 +31,7 @@ struct imap_client {
 	unsigned int destroyed:1;
 	unsigned int greeting_sent:1;
 	unsigned int id_logged:1;
+	unsigned int auth_initializing:1;
 };
 
 void client_destroy(struct imap_client *client, const char *reason);
diff -r 70b0597e2bb5 -r 4693c9f72baa src/pop3-login/client-authenticate.c
--- a/src/pop3-login/client-authenticate.c	Sat Dec 13 12:52:53 2008 +0200
+++ b/src/pop3-login/client-authenticate.c	Sat Dec 13 13:16:54 2008 +0200
@@ -329,8 +329,10 @@ bool cmd_pass(struct pop3_client *client
 	base64_encode(plain_login->data, plain_login->used, base64);
 
 	client_ref(client);
+	client->auth_initializing = TRUE;
 	sasl_server_auth_begin(&client->common, POP3_SERVICE_NAME, "PLAIN",
 			       str_c(base64), sasl_callback);
+	client->auth_initializing = FALSE;
 	if (!client->common.authenticating)
 		return TRUE;
 
diff -r 70b0597e2bb5 -r 4693c9f72baa src/pop3-login/client.h
--- a/src/pop3-login/client.h	Sat Dec 13 12:52:53 2008 +0200
+++ b/src/pop3-login/client.h	Sat Dec 13 13:16:54 2008 +0200
@@ -29,6 +29,7 @@ struct pop3_client {
 
 	unsigned int login_success:1;
 	unsigned int auth_connected:1;
+	unsigned int auth_initializing:1;
 	unsigned int destroyed:1;
 };
 


More information about the dovecot-cvs mailing list