Mercurial > dovecot > original-hg > dovecot-1.2
changeset 9079:e3fe9b4a6a2d HEAD
auth: Added support for EXTERNAL SASL mechanism.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 25 May 2009 20:35:00 -0400 |
parents | 76d455a7f4da |
children | f1b0ef72cea7 |
files | src/auth/Makefile.am src/auth/mech-external.c |
diffstat | 2 files changed, 53 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/Makefile.am Mon May 25 20:33:42 2009 -0400 +++ b/src/auth/Makefile.am Mon May 25 20:35:00 2009 -0400 @@ -69,6 +69,7 @@ mech-login.c \ mech-cram-md5.c \ mech-digest-md5.c \ + mech-external.c \ mech-gssapi.c \ mech-ntlm.c \ mech-otp.c \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/auth/mech-external.c Mon May 25 20:35:00 2009 -0400 @@ -0,0 +1,52 @@ +/* Copyright (c) 2009 Dovecot authors, see the included COPYING file */ + +#include "common.h" +#include "mech.h" +#include "passdb.h" +#include "plain-common.h" + +static void +mech_external_auth_continue(struct auth_request *request, + const unsigned char *data, size_t data_size) +{ + const char *authzid, *error; + + authzid = t_strndup(data, data_size); + if (request->user == NULL) { + auth_request_log_info(request, "external", + "username not known"); + auth_request_fail(request); + } else if (*authzid != '\0' && + !auth_request_set_login_username(request, authzid, &error)) { + /* invalid login username */ + auth_request_log_info(request, "plain", + "login user: %s", error); + auth_request_fail(request); + } else { + auth_request_verify_plain(request, "", + plain_verify_callback); + } +} + +static struct auth_request *mech_external_auth_new(void) +{ + struct auth_request *request; + pool_t pool; + + pool = pool_alloconly_create("external_auth_request", 2048); + request = p_new(pool, struct auth_request, 1); + request->pool = pool; + return request; +} + +const struct mech_module mech_external = { + "EXTERNAL", + + MEMBER(flags) 0, + MEMBER(passdb_need) MECH_PASSDB_NEED_VERIFY_PLAIN, + + mech_external_auth_new, + mech_generic_auth_initial, + mech_external_auth_continue, + mech_generic_auth_free +};