passdb.c revision a8e132559a7ebe54c8269d79ce29fa3338c76199
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[] = {
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainenpassdb_get_credentials(struct auth_request *auth_request,
a8e132559a7ebe54c8269d79ce29fa3338c76199Timo Sirainen const char *wanted_scheme = auth_request->credentials_scheme;
a8e132559a7ebe54c8269d79ce29fa3338c76199Timo Sirainen if (strcasecmp(wanted_scheme, "CRYPT") == 0) {
473080c7c0d25ddfdf77e7dfa0ba8f73c6c669d5Timo Sirainen /* anything goes */
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainen return t_strdup_printf("{%s}%s", scheme, password);
a8e132559a7ebe54c8269d79ce29fa3338c76199Timo Sirainen if (!password_scheme_is_alias(scheme, wanted_scheme)) {
a8e132559a7ebe54c8269d79ce29fa3338c76199Timo Sirainen if (!password_scheme_is_alias(scheme, "PLAIN")) {
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,
f968e62caa52a8924bd05ebf76ff515b5c18e17bTimo Sirainenvoid passdb_handle_credentials(enum passdb_result result,
0b47a03ce89751b2c04b03da255ba68b796864a7Timo Sirainen 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 */