From: Aki Tuomi Date: Tue, 5 Jul 2016 11:41:41 +0000 (+0300) Subject: passdb-static: Support password scheme X-Git-Tag: 2.3.0.rc1~3336 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0a58543e241f335f0048d11de84c46b820cf1fd1;p=thirdparty%2Fdovecot%2Fcore.git passdb-static: Support password scheme This allows password argument to provide scheme instead of defaulting to plain. If no scheme is provided, plain is defaulted. --- diff --git a/src/auth/passdb-static.c b/src/auth/passdb-static.c index 06b1f08806..631b967c89 100644 --- a/src/auth/passdb-static.c +++ b/src/auth/passdb-static.c @@ -3,6 +3,7 @@ #include "auth-common.h" #include "passdb.h" #include "passdb-template.h" +#include "password-scheme.h" struct static_passdb_module { struct passdb_module module; @@ -11,7 +12,7 @@ struct static_passdb_module { }; static enum passdb_result -static_save_fields(struct auth_request *request, const char **password_r) +static_save_fields(struct auth_request *request, const char **password_r, const char **scheme_r) { struct static_passdb_module *module = (struct static_passdb_module *)request->passdb->passdb; @@ -28,8 +29,18 @@ static_save_fields(struct auth_request *request, const char **password_r) auth_request_log_info(request, AUTH_SUBSYS_DB, "No password returned (and no nopassword)"); *password_r = NULL; + *scheme_r = NULL; return PASSDB_RESULT_PASSWORD_MISMATCH; } + + *scheme_r = password_get_scheme(password_r); + + if (*scheme_r == NULL) + *scheme_r = STATIC_PASS_SCHEME; + + auth_request_set_field(request, "password", + *password_r, *scheme_r); + return PASSDB_RESULT_OK; } @@ -39,16 +50,18 @@ static_verify_plain(struct auth_request *request, const char *password, { enum passdb_result result; const char *static_password; + const char *static_scheme; + int ret; - result = static_save_fields(request, &static_password); + result = static_save_fields(request, &static_password, &static_scheme); if (result != PASSDB_RESULT_OK) { callback(result, request); return; } ret = auth_request_password_verify(request, password, static_password, - STATIC_PASS_SCHEME, AUTH_SUBSYS_DB); + static_scheme, AUTH_SUBSYS_DB); if (ret <= 0) { callback(PASSDB_RESULT_PASSWORD_MISMATCH, request); return; @@ -63,10 +76,11 @@ static_lookup_credentials(struct auth_request *request, { enum passdb_result result; const char *static_password; + const char *static_scheme; - result = static_save_fields(request, &static_password); + result = static_save_fields(request, &static_password, &static_scheme); passdb_handle_credentials(result, static_password, - STATIC_PASS_SCHEME, callback, request); + static_scheme, callback, request); } static struct passdb_module *