Mercurial > dovecot > original-hg > dovecot-1.2
changeset 4434:7fd600d3f719 HEAD
When using non-plaintext authentication with passdb passwd-file we didn't
support extra_fields and we crashed if password scheme wasn't explicitly
specified in the passwd-file.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 24 Jun 2006 22:02:40 +0300 |
parents | 8916e7dd60c6 |
children | ccd102aef7ad |
files | src/auth/passdb-passwd-file.c |
diffstat | 1 files changed, 32 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/passdb-passwd-file.c Sat Jun 24 21:24:07 2006 +0300 +++ b/src/auth/passdb-passwd-file.c Sat Jun 24 22:02:40 2006 +0300 @@ -20,34 +20,25 @@ struct db_passwd_file *pwf; }; -static void -passwd_file_verify_plain(struct auth_request *request, const char *password, - verify_plain_callback_t *callback) +static void passwd_file_save_results(struct auth_request *request, + const struct passwd_user *pu, + const char **crypted_pass_r, + const char **scheme_r) { - struct passdb_module *_module = request->passdb->passdb; - struct passwd_file_passdb_module *module = - (struct passwd_file_passdb_module *)_module; - struct passwd_user *pu; const struct var_expand_table *table; - const char *scheme, *crypted_pass, *key, *value; + const char *key, *value; string_t *str; char **p; - int ret; - pu = db_passwd_file_lookup(module->pwf, request); - if (pu == NULL) { - callback(PASSDB_RESULT_USER_UNKNOWN, request); - return; - } - - crypted_pass = pu->password; - scheme = password_get_scheme(&crypted_pass); - if (scheme == NULL) scheme = _module->default_pass_scheme; + *crypted_pass_r = pu->password; + *scheme_r = password_get_scheme(crypted_pass_r); + if (*scheme_r == NULL) + *scheme_r = request->passdb->passdb->default_pass_scheme; /* save the password so cache can use it */ - if (crypted_pass != NULL) { + if (*crypted_pass_r != NULL) { auth_request_set_field(request, "password", - crypted_pass, scheme); + *crypted_pass_r, *scheme_r); } if (pu->extra_fields != NULL) { @@ -70,6 +61,26 @@ } t_pop(); } +} + +static void +passwd_file_verify_plain(struct auth_request *request, const char *password, + verify_plain_callback_t *callback) +{ + struct passdb_module *_module = request->passdb->passdb; + struct passwd_file_passdb_module *module = + (struct passwd_file_passdb_module *)_module; + struct passwd_user *pu; + const char *scheme, *crypted_pass; + int ret; + + pu = db_passwd_file_lookup(module->pwf, request); + if (pu == NULL) { + callback(PASSDB_RESULT_USER_UNKNOWN, request); + return; + } + + passwd_file_save_results(request, pu, &crypted_pass, &scheme); ret = auth_request_password_verify(request, password, crypted_pass, scheme, "passwd-file"); @@ -94,8 +105,7 @@ return; } - crypted_pass = pu->password; - scheme = password_get_scheme(&crypted_pass); + passwd_file_save_results(request, pu, &crypted_pass, &scheme); passdb_handle_credentials(PASSDB_RESULT_OK, crypted_pass, scheme, callback, request);