dovecot-1.2: APOP auth: Minor code cleanups.
dovecot at dovecot.org
dovecot at dovecot.org
Fri Jan 9 18:17:28 EET 2009
details: http://hg.dovecot.org/dovecot-1.2/rev/67f923c9988a
changeset: 8604:67f923c9988a
user: Timo Sirainen <tss at iki.fi>
date: Fri Jan 09 11:09:17 2009 -0500
description:
APOP auth: Minor code cleanups.
diffstat:
1 file changed, 9 insertions(+), 8 deletions(-)
src/auth/mech-apop.c | 17 +++++++++--------
diffs (77 lines):
diff -r fe4b8c4a6922 -r 67f923c9988a src/auth/mech-apop.c
--- a/src/auth/mech-apop.c Thu Jan 08 14:48:18 2009 -0500
+++ b/src/auth/mech-apop.c Fri Jan 09 11:09:17 2009 -0500
@@ -26,7 +26,7 @@ struct apop_auth_request {
char *challenge;
/* received: */
- unsigned char digest[16];
+ unsigned char response_digest[16];
};
static bool verify_credentials(struct apop_auth_request *request,
@@ -40,7 +40,7 @@ static bool verify_credentials(struct ap
md5_update(&ctx, credentials, size);
md5_final(&ctx, digest);
- return memcmp(digest, request->digest, 16) == 0;
+ return memcmp(digest, request->response_digest, 16) == 0;
}
static void
@@ -77,6 +77,9 @@ mech_apop_auth_initial(struct auth_reque
unsigned long pid, connect_uid, timestamp;
const char *error;
+ /* pop3-login handles sending the challenge and getting the response.
+ Our input here is: <challenge> \0 <username> \0 <response> */
+
if (data_size == 0) {
/* Should never happen */
auth_request_log_info(auth_request, "apop",
@@ -88,9 +91,10 @@ mech_apop_auth_initial(struct auth_reque
tmp = data;
end = data + data_size;
- /* skip the challenge */
+ /* get the challenge */
while (tmp != end && *tmp != '\0')
tmp++;
+ request->challenge = p_strdup_until(request->pool, data, tmp);
if (tmp != end) {
/* get the username */
@@ -105,14 +109,14 @@ mech_apop_auth_initial(struct auth_reque
auth_request_fail(auth_request);
return;
}
- tmp++;
+ memcpy(request->response_digest, tmp + 1, sizeof(request->digest));
/* the challenge must begin with trusted unique ID. we trust only
ourself, so make sure it matches our connection specific UID
which we told to client in handshake. Also require a timestamp
which is later than this process's start time. */
- if (sscanf((const char *)data, "<%lx.%lx.%lx.",
+ if (sscanf(request->challenge, "<%lx.%lx.%lx.",
&pid, &connect_uid, ×tamp) != 3 ||
connect_uid != auth_request->connect_uid ||
pid != (unsigned long)getpid() ||
@@ -122,7 +126,6 @@ mech_apop_auth_initial(struct auth_reque
auth_request_fail(auth_request);
return;
}
- request->challenge = p_strdup(request->pool, (const char *)data);
if (!auth_request_set_username(auth_request, (const char *)username,
&error)) {
@@ -130,8 +133,6 @@ mech_apop_auth_initial(struct auth_reque
auth_request_fail(auth_request);
return;
}
-
- memcpy(request->digest, tmp, sizeof(request->digest));
auth_request_lookup_credentials(auth_request, "PLAIN",
apop_credentials_callback);
More information about the dovecot-cvs
mailing list