*/
#include "common.h"
-#include "safe-memset.h"
#include "mech.h"
#include "passdb.h"
#include "md5.h"
(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
}
}
-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);
}
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));
}