[dovecot-cvs] dovecot/src/lib-auth auth-server-request.c,1.9,1.10

cras at procontrol.fi cras at procontrol.fi
Sun May 30 07:50:08 EEST 2004


Update of /home/cvs/dovecot/src/lib-auth
In directory talvi:/tmp/cvs-serv22718/lib-auth

Modified Files:
	auth-server-request.c 
Log Message:
PLAIN auth fallbacking works now with initial responses



Index: auth-server-request.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-auth/auth-server-request.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- a/auth-server-request.c	29 May 2004 21:40:30 -0000	1.9
+++ b/auth-server-request.c	30 May 2004 04:50:06 -0000	1.10
@@ -31,6 +31,44 @@
 };
 
 static int auth_server_send_new_request(struct auth_server_connection *conn,
+					struct auth_request *request);
+
+static struct auth_server_connection *
+get_next_plain_server(struct auth_server_connection *conn)
+{
+	conn = conn->next;
+	while (conn != NULL) {
+		if (conn->has_plain_mech)
+			return conn;
+		conn = conn->next;
+	}
+	return NULL;
+}
+
+static void
+auth_server_request_check_retry(struct auth_request *request,
+				const unsigned char *data, size_t data_size)
+{
+	if (strcmp(request->mech, "PLAIN") == 0 &&
+	    request->plaintext_data == NULL && request->conn != NULL) {
+		request->next_conn = get_next_plain_server(request->conn);
+		if (request->next_conn != NULL) {
+			/* plaintext authentication - save the data so we can
+			   try it for the next */
+			request->plaintext_data = i_malloc(data_size);
+			memcpy(request->plaintext_data, data, data_size);
+			request->plaintext_data_size = data_size;
+
+			hash_insert(request->next_conn->requests,
+				    POINTER_CAST(request->id), request);
+			auth_server_send_new_request(request->next_conn,
+						     request);
+			request->retrying = TRUE;
+		}
+	}
+}
+
+static int auth_server_send_new_request(struct auth_server_connection *conn,
 					struct auth_request *request)
 {
 	struct auth_client_request_new auth_request;
@@ -76,6 +114,8 @@
 		return FALSE;
 	}
 
+	auth_server_request_check_retry(request, request->initial_resp_data,
+					request->initial_resp_size);
 	return TRUE;
 }
 
@@ -99,18 +139,6 @@
 	}
 }
 
-static struct auth_server_connection *
-get_next_plain_server(struct auth_server_connection *conn)
-{
-	conn = conn->next;
-	while (conn != NULL) {
-		if (conn->has_plain_mech)
-			return conn;
-		conn = conn->next;
-	}
-	return NULL;
-}
-
 void auth_server_request_handle_reply(struct auth_server_connection *conn,
 				      struct auth_client_request_reply *reply,
 				      const unsigned char *data)
@@ -255,23 +283,7 @@
 {
 	auth_server_send_continue(request->conn, request, data, data_size);
 
-	if (strcmp(request->mech, "PLAIN") == 0 &&
-	    request->plaintext_data == NULL && request->conn != NULL) {
-		request->next_conn = get_next_plain_server(request->conn);
-		if (request->next_conn != NULL) {
-			/* plaintext authentication - save the data so we can
-			   try it for the next */
-			request->plaintext_data = i_malloc(data_size);
-			memcpy(request->plaintext_data, data, data_size);
-			request->plaintext_data_size = data_size;
-
-			hash_insert(request->next_conn->requests,
-				    POINTER_CAST(request->id), request);
-			auth_server_send_new_request(request->next_conn,
-						     request);
-			request->retrying = TRUE;
-		}
-	}
+	auth_server_request_check_retry(request, data, data_size);
 }
 
 void auth_client_request_abort(struct auth_request *request)



More information about the dovecot-cvs mailing list