From: Timo Sirainen Date: Sat, 13 Dec 2008 11:16:54 +0000 (+0200) Subject: Don't crash if trying to use an unsupported auth mechanism. X-Git-Tag: 1.2.alpha5~22 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=71015434894b40355dd56c1f9571aaeb6bcb1f99;p=thirdparty%2Fdovecot%2Fcore.git Don't crash if trying to use an unsupported auth mechanism. --HG-- branch : HEAD --- diff --git a/src/imap-login/client-authenticate.c b/src/imap-login/client-authenticate.c index 7d6dc4af8a..31c58a2899 100644 --- a/src/imap-login/client-authenticate.c +++ b/src/imap-login/client-authenticate.c @@ -81,12 +81,16 @@ static void client_auth_input(struct imap_client *client) 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 *client, const char *mech_name, 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 --git a/src/imap-login/client.h b/src/imap-login/client.h index 35f410a37e..76de7ff82f 100644 --- a/src/imap-login/client.h +++ b/src/imap-login/client.h @@ -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 --git a/src/pop3-login/client-authenticate.c b/src/pop3-login/client-authenticate.c index 0126b732a5..da665ed502 100644 --- a/src/pop3-login/client-authenticate.c +++ b/src/pop3-login/client-authenticate.c @@ -329,8 +329,10 @@ bool cmd_pass(struct pop3_client *client, const char *args) 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 --git a/src/pop3-login/client.h b/src/pop3-login/client.h index dcebfe41fe..6e76d24d9b 100644 --- a/src/pop3-login/client.h +++ b/src/pop3-login/client.h @@ -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; };