[dovecot-cvs] dovecot/src/auth auth-client-connection.c,1.10,1.11

cras at dovecot.org cras at dovecot.org
Sat Aug 28 14:04:16 EEST 2004


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

Modified Files:
	auth-client-connection.c 
Log Message:
Process all input data from stream.



Index: auth-client-connection.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/auth-client-connection.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- auth-client-connection.c	28 Aug 2004 11:02:55 -0000	1.10
+++ auth-client-connection.c	28 Aug 2004 11:04:14 -0000	1.11
@@ -92,7 +92,7 @@
 	}
 }
 
-static void auth_client_input_request(struct auth_client_connection *conn)
+static int auth_client_input_request(struct auth_client_connection *conn)
 {
         enum auth_client_request_type type;
         unsigned char *data;
@@ -100,7 +100,7 @@
 
 	data = i_stream_get_modifyable_data(conn->input, &size);
 	if (size < sizeof(type))
-		return;
+		return FALSE;
 
 	/* note that we can't directly cast the received data pointer into
 	   structures, as it may not be aligned properly. */
@@ -112,11 +112,11 @@
 		struct auth_client_request_new request;
 
 		if (size < sizeof(request))
-			return;
+			return FALSE;
 
 		memcpy(&request, data, sizeof(request));
 		if (size < sizeof(request) + request.data_size)
-			return;
+			return FALSE;
 
 		/* we have a full init request */
 		conn->refcount++;
@@ -129,11 +129,11 @@
                 struct auth_client_request_continue request;
 
 		if (size < sizeof(request))
-			return;
+			return FALSE;
 
 		memcpy(&request, data, sizeof(request));
 		if (size < sizeof(request) + request.data_size)
-			return;
+			return FALSE;
 
 		/* we have a full continued request */
 		conn->refcount++;
@@ -152,6 +152,7 @@
 		auth_client_connection_destroy(conn);
 	}
 	auth_client_connection_unref(conn);
+	return TRUE;
 }
 
 static void auth_client_input(void *context)
@@ -175,8 +176,9 @@
 
 	if (conn->pid == 0)
 		auth_client_input_handshake(conn);
-	else
-		auth_client_input_request(conn);
+
+	while (auth_client_input_request(conn))
+		;
 }
 
 struct auth_client_connection *



More information about the dovecot-cvs mailing list