Mercurial > dovecot > core-2.2
changeset 9380:976a4c9ca6b6 HEAD
auth: Forgot to add mech-external.c in earlier commit.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 26 May 2009 02:53:42 -0400 |
parents | 304238bbd36c |
children | 315a480f9942 |
files | src/auth/mech-external.c |
diffstat | 1 files changed, 52 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/auth/mech-external.c Tue May 26 02:53:42 2009 -0400 @@ -0,0 +1,52 @@ +/* Copyright (c) 2009 Dovecot authors, see the included COPYING file */ + +#include "auth-common.h" +#include "passdb.h" +#include "mech.h" +#include "mech-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 +};