passdb.c revision 747e77e3ab073a8e9e69c7a3e71b4593c5655d03
45312f52ff3a3d4c137447be4c7556500c2f8bf2Timo Sirainen/* Copyright (C) 2002-2003 Timo Sirainen */
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainenextern struct passdb_module_interface passdb_passwd;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenextern struct passdb_module_interface passdb_bsdauth;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenextern struct passdb_module_interface passdb_shadow;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenextern struct passdb_module_interface passdb_passwd_file;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenextern struct passdb_module_interface passdb_pam;
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainenextern struct passdb_module_interface passdb_checkpassword;
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainenextern struct passdb_module_interface passdb_vpopmail;
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainenextern struct passdb_module_interface passdb_ldap;
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainenextern struct passdb_module_interface passdb_sql;
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenstruct passdb_module_interface *passdb_interfaces[] = {
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenpassdb_credentials_to_str(enum passdb_credentials credentials)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return "PLAIN";
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return "CRYPT";
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return "HMAC-MD5";
3b49aee9ced3b0370a3be396aca53acd5f21418cTimo Sirainen return "DIGEST-MD5";
3b49aee9ced3b0370a3be396aca53acd5f21418cTimo Sirainen return "LANMAN";
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return "NTLM";
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return "RPA";
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenpassdb_get_credentials(struct auth_request *auth_request,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen if (auth_request->credentials == PASSDB_CREDENTIALS_CRYPT) {
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen /* anything goes */
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen return t_strdup_printf("{%s}%s", scheme, password);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen wanted_scheme = passdb_credentials_to_str(auth_request->credentials);
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen auth_request_log_info(auth_request, "password",
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen "Requested %s scheme, but we have only %s",
dee43975a70bcdb9dc83d34d6a2b177d37bb7194Timo Sirainen /* we can generate anything out of plaintext passwords */
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen password = password_generate(password, auth_request->user,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainenvoid passdb_handle_credentials(enum passdb_result result,
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen password = passdb_get_credentials(auth_request, password, scheme);
7a24bdc1a5e2d5368c2569b4852192f2bdb5a31fTimo Sirainenstruct auth_passdb *passdb_preinit(struct auth *auth, const char *driver,
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen auth_passdb = p_new(auth->pool, struct auth_passdb, 1);
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen auth_passdb->args = p_strdup(auth->pool, args);
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen for (dest = &auth->passdbs; *dest != NULL; dest = &(*dest)->next)
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen for (p = passdb_interfaces; *p != NULL; p++) {
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen auth_passdb->module = auth_module_open(driver);
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen "(typo, or Dovecot was built without support for it? "
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen "Check with dovecot --build-options)",
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen iface->preinit(auth_passdb, auth_passdb->args);
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen passdb->passdb->iface->init(passdb->passdb, passdb->args);
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen i_assert(passdb->passdb->default_pass_scheme != NULL ||
4ece61edd7c266a4b8f3b290a7f0a3cb3d13ca0fTimo Sirainen /* blocking passdb - we need an auth server */