changeset 9603:caea6aaadde4 HEAD

login processes: Auth code cleanups. Custom IMAP auth errors now have [ALERT] prefix. This should make them visible in more clients.
author Timo Sirainen <tss@iki.fi>
date Thu, 09 Jul 2009 20:49:34 -0400
parents 489727453d1c
children c0914a6a2e36
files src/imap-login/client-authenticate.c src/imap-login/client.c src/login-common/sasl-server.c src/login-common/sasl-server.h src/pop3-login/client-authenticate.c src/pop3-login/client.c
diffstat 6 files changed, 29 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap-login/client-authenticate.c	Thu Jul 09 20:14:42 2009 -0400
+++ b/src/imap-login/client-authenticate.c	Thu Jul 09 20:49:34 2009 -0400
@@ -67,10 +67,9 @@
 	if (line == NULL)
 		return;
 
-	if (strcmp(line, "*") == 0) {
-		sasl_server_auth_client_error(&client->common,
-					      "Authentication aborted");
-	} else {
+	if (strcmp(line, "*") == 0)
+		sasl_server_auth_abort(&client->common);
+	else {
 		client_set_auth_waiting(client);
 		auth_client_request_continue(client->common.auth_request, line);
 		io_remove(&client->io);
@@ -223,7 +222,7 @@
 		   allowed to log in. Shouldn't probably happen. */
 		reply = t_str_new(128);
 		if (reason != NULL)
-			str_printfa(reply, "NO %s", reason);
+			str_printfa(reply, "NO [ALERT] %s", reason);
 		else if (temp) {
 			str_append(reply, "NO ["IMAP_RESP_CODE_UNAVAILABLE"] "
 				   AUTH_TEMP_FAILED_MSG);
@@ -255,7 +254,7 @@
 	bool nodelay;
 
 	i_assert(!client->destroyed ||
-		 reply == SASL_SERVER_REPLY_CLIENT_ERROR ||
+		 reply == SASL_SERVER_REPLY_AUTH_ABORTED ||
 		 reply == SASL_SERVER_REPLY_MASTER_FAILED);
 
 	switch (reply) {
@@ -269,7 +268,7 @@
 		client_destroy_success(client, "Login");
 		break;
 	case SASL_SERVER_REPLY_AUTH_FAILED:
-	case SASL_SERVER_REPLY_CLIENT_ERROR:
+	case SASL_SERVER_REPLY_AUTH_ABORTED:
 		if (client->to_auth_waiting != NULL)
 			timeout_remove(&client->to_auth_waiting);
 		if (args != NULL) {
@@ -277,9 +276,12 @@
 				break;
 		}
 
-		msg = reply == SASL_SERVER_REPLY_AUTH_FAILED ? "NO " : "BAD ";
-		msg = t_strconcat(msg, data != NULL ? data :
-				  IMAP_AUTH_FAILED_MSG, NULL);
+		if (reply == SASL_SERVER_REPLY_AUTH_ABORTED)
+			msg = "BAD Authentication aborted by client.";
+		else if (data == NULL)
+			msg = "NO "IMAP_AUTH_FAILED_MSG;
+		else
+			msg = t_strconcat("NO [ALERT] ", data, NULL);
 		client_send_tagline(client, msg);
 
 		if (!client->destroyed)
--- a/src/imap-login/client.c	Thu Jul 09 20:14:42 2009 -0400
+++ b/src/imap-login/client.c	Thu Jul 09 20:49:34 2009 -0400
@@ -583,7 +583,7 @@
 					  client->common.master_tag);
 	} else if (client->common.auth_request != NULL) {
 		i_assert(client->common.authenticating);
-		sasl_server_auth_client_error(&client->common, NULL);
+		sasl_server_auth_abort(&client->common);
 	} else {
 		i_assert(!client->common.authenticating);
 	}
--- a/src/login-common/sasl-server.c	Thu Jul 09 20:14:42 2009 -0400
+++ b/src/login-common/sasl-server.c	Thu Jul 09 20:49:34 2009 -0400
@@ -273,7 +273,7 @@
 	sasl_server_auth_cancel(client, reason, SASL_SERVER_REPLY_AUTH_FAILED);
 }
 
-void sasl_server_auth_client_error(struct client *client, const char *reason)
+void sasl_server_auth_abort(struct client *client)
 {
-	sasl_server_auth_cancel(client, reason, SASL_SERVER_REPLY_CLIENT_ERROR);
+	sasl_server_auth_cancel(client, NULL, SASL_SERVER_REPLY_AUTH_ABORTED);
 }
--- a/src/login-common/sasl-server.h	Thu Jul 09 20:14:42 2009 -0400
+++ b/src/login-common/sasl-server.h	Thu Jul 09 20:49:34 2009 -0400
@@ -6,7 +6,7 @@
 enum sasl_server_reply {
 	SASL_SERVER_REPLY_SUCCESS,
 	SASL_SERVER_REPLY_AUTH_FAILED,
-	SASL_SERVER_REPLY_CLIENT_ERROR,
+	SASL_SERVER_REPLY_AUTH_ABORTED,
 	SASL_SERVER_REPLY_MASTER_FAILED,
 	SASL_SERVER_REPLY_CONTINUE
 };
@@ -20,6 +20,6 @@
 			    const char *initial_resp_base64,
 			    sasl_server_callback_t *callback);
 void sasl_server_auth_failed(struct client *client, const char *reason);
-void sasl_server_auth_client_error(struct client *client, const char *reason);
+void sasl_server_auth_abort(struct client *client);
 
 #endif
--- a/src/pop3-login/client-authenticate.c	Thu Jul 09 20:14:42 2009 -0400
+++ b/src/pop3-login/client-authenticate.c	Thu Jul 09 20:49:34 2009 -0400
@@ -73,10 +73,9 @@
 	if (line == NULL)
 		return;
 
-	if (strcmp(line, "*") == 0) {
-		sasl_server_auth_client_error(&client->common,
-					      "Authentication aborted");
-	} else {
+	if (strcmp(line, "*") == 0)
+		sasl_server_auth_abort(&client->common);
+	else {
 		auth_client_request_continue(client->common.auth_request, line);
 		io_remove(&client->io);
 
@@ -217,7 +216,7 @@
 	bool nodelay;
 
 	i_assert(!client->destroyed ||
-		 reply == SASL_SERVER_REPLY_CLIENT_ERROR ||
+		 reply == SASL_SERVER_REPLY_AUTH_ABORTED ||
 		 reply == SASL_SERVER_REPLY_MASTER_FAILED);
 
 	switch (reply) {
@@ -230,14 +229,18 @@
 		client_destroy_success(client, "Login");
 		break;
 	case SASL_SERVER_REPLY_AUTH_FAILED:
-	case SASL_SERVER_REPLY_CLIENT_ERROR:
+	case SASL_SERVER_REPLY_AUTH_ABORTED:
 		if (args != NULL) {
 			if (client_handle_args(client, args, FALSE, &nodelay))
 				break;
 		}
 
-		msg = t_strconcat("-ERR ", data != NULL ?
-				  data : AUTH_FAILED_MSG, NULL);
+		if (reply == SASL_SERVER_REPLY_AUTH_ABORTED)
+			msg = "-ERR Authentication aborted by client.";
+		else if (data == NULL)
+			msg = "-ERR "AUTH_FAILED_MSG;
+		else
+			msg = t_strconcat("-ERR ", data, NULL);
 		client_send_line(client, msg);
 
 		if (!client->destroyed)
--- a/src/pop3-login/client.c	Thu Jul 09 20:14:42 2009 -0400
+++ b/src/pop3-login/client.c	Thu Jul 09 20:49:34 2009 -0400
@@ -384,7 +384,7 @@
 					  client->common.master_tag);
 	} else if (client->common.auth_request != NULL) {
 		i_assert(client->common.authenticating);
-		sasl_server_auth_client_error(&client->common, NULL);
+		sasl_server_auth_abort(&client->common);
 	} else {
 		i_assert(!client->common.authenticating);
 	}