passdb.c revision b4f2560c29dacd066ba89e782d95ceed7ac473a3
e59faf65ce864fe95dc00f5d52b8323cdbd0608aTimo Sirainen/* Copyright (C) 2002-2003 Timo Sirainen */
c04f9a724a7b3cc649485a61b0a540868d25d71bTimo Sirainenextern struct passdb_module_interface passdb_passwd;
c04f9a724a7b3cc649485a61b0a540868d25d71bTimo Sirainenextern struct passdb_module_interface passdb_bsdauth;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenextern struct passdb_module_interface passdb_shadow;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenextern struct passdb_module_interface passdb_passwd_file;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenextern struct passdb_module_interface passdb_pam;
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainenextern struct passdb_module_interface passdb_checkpassword;
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainenextern struct passdb_module_interface passdb_vpopmail;
9f19a50d5966643c4d1c5ca06868ac2ad31bc4d5Timo Sirainenextern struct passdb_module_interface passdb_ldap;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenextern struct passdb_module_interface passdb_sql;
c04f9a724a7b3cc649485a61b0a540868d25d71bTimo Sirainenextern struct passdb_module_interface passdb_sia;
d22301419109ed4a38351715e6760011421dadecTimo Sirainenstruct passdb_module_interface *passdb_interfaces[] = {
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainenbool passdb_get_credentials(struct auth_request *auth_request,
c04f9a724a7b3cc649485a61b0a540868d25d71bTimo Sirainen const unsigned char **credentials_r, size_t *size_r)
c04f9a724a7b3cc649485a61b0a540868d25d71bTimo Sirainen const char *wanted_scheme = auth_request->credentials_scheme;
d6badc27cd6e8d3398877b6766cb0aaeef3a7800Timo Sirainen ret = password_decode(input, input_scheme, credentials_r, size_r);
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen auth_request_log_error(auth_request, "password",
d6badc27cd6e8d3398877b6766cb0aaeef3a7800Timo Sirainen "Invalid password format for scheme %s",
a341c4cdbd4b93ba479f465ad3f569dc82f57312Timo Sirainen auth_request_log_error(auth_request, "password",
9293bf90039454f47e94e4ba3722a775cfa7d25cTimo Sirainen /* anything goes. change the credentials_scheme to what we
ca98d6a1bbe73499da758a36bfab2963375c8d06Timo Sirainen actually got, so blocking passdbs work. */
cd83124e5d070a016c590bb0b1096d7828c7b6adTimo Sirainen if (!password_scheme_is_alias(input_scheme, wanted_scheme)) {
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen if (!password_scheme_is_alias(input_scheme, "PLAIN")) {
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen auth_request_log_info(auth_request, "password",
c04f9a724a7b3cc649485a61b0a540868d25d71bTimo Sirainen "Requested %s scheme, but we have only %s",
c04f9a724a7b3cc649485a61b0a540868d25d71bTimo Sirainen /* we can generate anything out of plaintext passwords */
cd83124e5d070a016c590bb0b1096d7828c7b6adTimo Sirainen plaintext = t_strndup(*credentials_r, *size_r);
cd83124e5d070a016c590bb0b1096d7828c7b6adTimo Sirainen if (!password_generate(plaintext, auth_request->user,
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen auth_request_log_error(auth_request, "password",
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen "Requested unknown scheme %s", wanted_scheme);
c04f9a724a7b3cc649485a61b0a540868d25d71bTimo Sirainenvoid passdb_handle_credentials(enum passdb_result result,
96308127e006bb3b1108093bcf4cc1fd9481cb7aTimo Sirainen const unsigned char *credentials;
6d931bbce16786df431e9ae8201a78a95084316dTimo Sirainen !passdb_get_credentials(auth_request, password, scheme,
9f19a50d5966643c4d1c5ca06868ac2ad31bc4d5Timo Sirainen callback(result, credentials, size, auth_request);
61b0637759146621cbb7edcbd0b03a71cfd66dfeTimo Sirainenstruct auth_passdb *passdb_preinit(struct auth *auth, const char *driver,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen auth_passdb = p_new(auth->pool, struct auth_passdb, 1);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen auth_passdb->args = p_strdup(auth->pool, args);
cd83124e5d070a016c590bb0b1096d7828c7b6adTimo Sirainen for (p = passdb_interfaces; *p != NULL; p++) {
#ifdef HAVE_MODULES
driver);
return auth_passdb;
#ifdef HAVE_MODULES