[dovecot-cvs] dovecot/src/auth mech-digest-md5.c,1.5,1.6

cras at procontrol.fi cras at procontrol.fi
Sun Feb 2 02:32:23 EET 2003


Update of /home/cvs/dovecot/src/auth
In directory danu:/tmp/cvs-serv2673

Modified Files:
	mech-digest-md5.c 
Log Message:
finally working



Index: mech-digest-md5.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/mech-digest-md5.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- mech-digest-md5.c	2 Feb 2003 00:21:17 -0000	1.5
+++ mech-digest-md5.c	2 Feb 2003 00:32:21 -0000	1.6
@@ -297,8 +297,8 @@
 	return ret;
 }
 
-static int auth_handle_response(struct digest_auth_request *auth, char *key, char *value,
-				const char **error)
+static int auth_handle_response(struct digest_auth_request *auth,
+				char *key, char *value, const char **error)
 {
 	int i;
 
@@ -460,8 +460,9 @@
 	return TRUE;
 }
 
-static int parse_digest_response(struct digest_auth_request *auth, const char *data,
-				 size_t size, const char **error)
+static int parse_digest_response(struct digest_auth_request *auth,
+				 const char *data, size_t size,
+				 const char **error)
 {
 	char *copy, *key, *value;
 	int failed;
@@ -525,14 +526,20 @@
 {
 	struct digest_auth_request *auth =
 		(struct digest_auth_request *) request;
-	int success;
+	struct auth_login_reply reply;
 
-	success = verify_credentials(auth, result);
+	mech_init_login_reply(&reply);
+	reply.id = request->id;
 
-	auth->authenticated = TRUE;
-	mech_auth_finish(request, auth->rspauth,
-			 auth->rspauth == NULL ? 0 : strlen(auth->rspauth),
-			 success);
+	if (!verify_credentials(auth, result))
+		reply.result = AUTH_LOGIN_RESULT_FAILURE;
+	else {
+		reply.result = AUTH_LOGIN_RESULT_CONTINUE;
+		reply.data_size = strlen(auth->rspauth);
+		auth->authenticated = TRUE;
+	}
+
+	request->callback(&reply, auth->rspauth, request->conn);
 }
 
 static int
@@ -554,10 +561,7 @@
 	if (auth->authenticated) {
 		/* authentication is done, we were just waiting the last
 		   word from client */
-		void *data;
-
-		data = mech_auth_success(&reply, auth_request, NULL, 0);
-		callback(&reply, data, conn);
+		mech_auth_finish(auth_request, NULL, 0, TRUE);
 		return TRUE;
 	}
 
@@ -569,7 +573,8 @@
 
 		auth_request->user = p_strdup(auth_request->pool,
 					      auth->username);
-		auth_request->realm = p_strdup(auth_request->pool, auth->realm);
+		auth_request->realm =
+			p_strdup_empty(auth_request->pool, auth->realm);
 
 		passdb->lookup_credentials(&auth->auth_request,
 					   PASSDB_CREDENTIALS_DIGEST_MD5,




More information about the dovecot-cvs mailing list