changeset 2289:83df1d1bbb05 HEAD

Fixes, patch by Andrey Panin
author Timo Sirainen <tss@iki.fi>
date Tue, 06 Jul 2004 09:35:30 +0300
parents 5633733e6ec1
children f0379a850f2a
files src/auth/mech-apop.c src/pop3-login/client.c
diffstat 2 files changed, 15 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/mech-apop.c	Tue Jul 06 09:06:00 2004 +0300
+++ b/src/auth/mech-apop.c	Tue Jul 06 09:35:30 2004 +0300
@@ -10,7 +10,6 @@
  */
 
 #include "common.h"
-#include "safe-memset.h"
 #include "mech.h"
 #include "passdb.h"
 #include "md5.h"
@@ -40,14 +39,18 @@
 		(struct apop_auth_request *)auth_request;
 	unsigned char digest[16];
 	struct md5_context ctx;
+	int ret = FALSE;
 
-	md5_init(&ctx);
-	md5_update(&ctx, auth->challenge, strlen(auth->challenge));
-	md5_update(&ctx, credentials, strlen(credentials));
-	md5_final(&ctx, digest);
+	if (credentials != NULL) {
+		md5_init(&ctx);
+		md5_update(&ctx, auth->challenge, strlen(auth->challenge));
+		md5_update(&ctx, credentials, strlen(credentials));
+		md5_final(&ctx, digest);
 
-	mech_auth_finish(auth_request, NULL, 0,
-			 memcmp(digest, auth->digest, 16) == 0);
+		ret = memcmp(digest, auth->digest, 16) == 0;
+	}
+
+	mech_auth_finish(auth_request, NULL, 0, ret);
 }
 
 static int
--- a/src/pop3-login/client.c	Tue Jul 06 09:06:00 2004 +0300
+++ b/src/pop3-login/client.c	Tue Jul 06 09:35:30 2004 +0300
@@ -225,14 +225,14 @@
 	}
 }
 
-static char *get_apop_challenge(void)
+static char *get_apop_challenge(struct pop3_client *client)
 {
-	struct auth_connect_id id;
+	struct auth_connect_id *id = &client->auth_id;
 
-	if (!auth_client_reserve_connection(auth_client, "APOP", &id))
+	if (!auth_client_reserve_connection(auth_client, "APOP", id))
 		return NULL;
 
-	return i_strdup_printf("<%x.%x.%s@%s>", id.server_pid, id.connect_uid,
+	return i_strdup_printf("<%x.%x.%s@%s>", id->server_pid, id->connect_uid,
 			       dec2str(ioloop_time), my_hostname);
 }
 
@@ -241,7 +241,7 @@
 	client->common.io =
 		io_add(client->common.fd, IO_READ, client_input, client);
 
-	client->apop_challenge = get_apop_challenge();
+	client->apop_challenge = get_apop_challenge(client);
 	client_send_line(client, t_strconcat("+OK " PACKAGE " ready.",
 					     client->apop_challenge, NULL));
 }