Mercurial > dovecot > original-hg > dovecot-1.2
view src/auth/passdb-passwd-file.c @ 2942:c7d426f8cb58 HEAD
Added name variable for userdb_module and passdb_module and changed their
initialization a bit.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 06 Dec 2004 18:39:02 +0200 |
parents | 54b29901a793 |
children | 052f3a5743af |
line wrap: on
line source
/* Copyright (C) 2002-2003 Timo Sirainen */ #include "config.h" #undef HAVE_CONFIG_H #ifdef PASSDB_PASSWD_FILE #include "common.h" #include "passdb.h" #include "password-scheme.h" #include "db-passwd-file.h" struct passwd_file *passdb_pwf = NULL; static void passwd_file_verify_plain(struct auth_request *request, const char *password, verify_plain_callback_t *callback) { struct passwd_user *pu; const char *scheme, *crypted_pass; int ret; pu = db_passwd_file_lookup(passdb_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 = "CRYPT"; ret = password_verify(password, crypted_pass, scheme, request->user); if (ret > 0) callback(PASSDB_RESULT_OK, request); else { if (ret < 0) { i_error("passwd-file(%s): Unknown password scheme %s", get_log_prefix(request), scheme); } else if (verbose) { i_info("passwd-file(%s): %s password mismatch", get_log_prefix(request), scheme); } callback(PASSDB_RESULT_PASSWORD_MISMATCH, request); } } static void passwd_file_lookup_credentials(struct auth_request *request, enum passdb_credentials credentials, lookup_credentials_callback_t *callback) { struct passwd_user *pu; const char *crypted_pass, *scheme; pu = db_passwd_file_lookup(passdb_pwf, request); if (pu == NULL) { callback(NULL, request); return; } crypted_pass = pu->password; scheme = password_get_scheme(&crypted_pass); passdb_handle_credentials(credentials, crypted_pass, scheme, callback, request); } static void passwd_file_init(const char *args) { if (userdb_pwf != NULL && strcmp(userdb_pwf->path, args) == 0) { passdb_pwf = userdb_pwf; passdb_pwf->refcount++; } else { passdb_pwf = db_passwd_file_parse(args, FALSE); } } static void passwd_file_deinit(void) { db_passwd_file_unref(passdb_pwf); } struct passdb_module passdb_passwd_file = { "passwd-file", NULL, passwd_file_init, passwd_file_deinit, passwd_file_verify_plain, passwd_file_lookup_credentials }; #endif