passdb.c revision 19b30b0c64b0eaaaec8903036356838918e86a7a
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen/* Copyright (C) 2002-2003 Timo Sirainen */
b321df9603081896b70ec44635af96d674a9839aTimo Sirainenextern struct passdb_module_interface passdb_passwd;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainenextern struct passdb_module_interface passdb_bsdauth;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainenextern struct passdb_module_interface passdb_shadow;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainenextern struct passdb_module_interface passdb_passwd_file;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainenextern struct passdb_module_interface passdb_pam;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainenextern struct passdb_module_interface passdb_checkpassword;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainenextern struct passdb_module_interface passdb_vpopmail;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainenextern struct passdb_module_interface passdb_ldap;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainenextern struct passdb_module_interface passdb_sql;
19b30b0c64b0eaaaec8903036356838918e86a7aTimo Sirainenextern struct passdb_module_interface passdb_sia;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainenstruct passdb_module_interface *passdb_interfaces[] = {
473080c7c0d25ddfdf77e7dfa0ba8f73c6c669d5Timo Sirainenpassdb_credentials_to_str(enum passdb_credentials credentials)
473080c7c0d25ddfdf77e7dfa0ba8f73c6c669d5Timo Sirainen return "PLAIN";
473080c7c0d25ddfdf77e7dfa0ba8f73c6c669d5Timo Sirainen return "CRYPT";
6c07b8ddc5e894feead4d422075b079451721241Timo Sirainen return "HMAC-MD5";
473080c7c0d25ddfdf77e7dfa0ba8f73c6c669d5Timo Sirainen return "DIGEST-MD5";
d43c646d4b84635aa795946555be04a553d5413aTimo Sirainen return "LANMAN";
c7480644202e5451fbed448508ea29a25cffc99cTimo Sirainen return "NTLM";
a4ac325c2802693c6b761e5a8fda961e5d7490eaTimo Sirainen return "RPA";
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainenpassdb_get_credentials(struct auth_request *auth_request,
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainen if (auth_request->credentials == PASSDB_CREDENTIALS_CRYPT) {
473080c7c0d25ddfdf77e7dfa0ba8f73c6c669d5Timo Sirainen /* anything goes */
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainen return t_strdup_printf("{%s}%s", scheme, password);
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainen wanted_scheme = passdb_credentials_to_str(auth_request->credentials);
49e513d090753ccbf95560b2f3a21f081a5b6c51Timo Sirainen auth_request_log_info(auth_request, "password",
49e513d090753ccbf95560b2f3a21f081a5b6c51Timo Sirainen "Requested %s scheme, but we have only %s",
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainen /* we can generate anything out of plaintext passwords */
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainen password = password_generate(password, auth_request->user,
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainenvoid passdb_handle_credentials(enum passdb_result result,
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainen password = passdb_get_credentials(auth_request, password, scheme);
157bce86d0a01477bb8ebd0d380e6b2297f326f7Timo Sirainenstruct auth_passdb *passdb_preinit(struct auth *auth, const char *driver,
e9503210d3521a6833ed62dc332fc42ffb0e7a13Timo Sirainen auth_passdb = p_new(auth->pool, struct auth_passdb, 1);
8eb94c5190ba09bb6f6f068eec7bf96750f08d1dTimo Sirainen auth_passdb->args = p_strdup(auth->pool, args);
b321df9603081896b70ec44635af96d674a9839aTimo Sirainen for (p = passdb_interfaces; *p != NULL; p++) {
e9503210d3521a6833ed62dc332fc42ffb0e7a13Timo Sirainen auth_passdb->module = auth_module_open(driver);
747e77e3ab073a8e9e69c7a3e71b4593c5655d03Timo Sirainen "(typo, or Dovecot was built without support for it? "
747e77e3ab073a8e9e69c7a3e71b4593c5655d03Timo Sirainen "Check with dovecot --build-options)",
b321df9603081896b70ec44635af96d674a9839aTimo Sirainen iface->preinit(auth_passdb, auth_passdb->args);
25ee72451d16374ed27fdbf829f4ec756c778352Timo Sirainen passdb->passdb->iface.init(passdb->passdb, passdb->args);
e9503210d3521a6833ed62dc332fc42ffb0e7a13Timo Sirainen i_assert(passdb->passdb->default_pass_scheme != NULL ||
66d2db642fe24d555d113ba463e446b038d476efTimo Sirainen /* blocking passdb - we need an auth server */