Mercurial > dovecot > core-2.2
changeset 10900:7909611180a8 HEAD
auth: Completely removed struct auth_*db from *db.c
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 13 Mar 2010 21:05:31 +0200 |
parents | cff28ea08c4a |
children | ac58cc0c71aa |
files | src/auth/auth.c src/auth/passdb.c src/auth/passdb.h src/auth/userdb.c src/auth/userdb.h |
diffstat | 5 files changed, 93 insertions(+), 73 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/auth.c Sat Mar 13 20:19:53 2010 +0200 +++ b/src/auth/auth.c Sat Mar 13 21:05:31 2010 +0200 @@ -20,6 +20,36 @@ .args = "" }; +static void +auth_passdb_preinit(struct auth *auth, const struct auth_passdb_settings *set) +{ + struct auth_passdb *auth_passdb, **dest; + + auth_passdb = p_new(auth->pool, struct auth_passdb, 1); + auth_passdb->set = set; + + for (dest = &auth->passdbs; *dest != NULL; dest = &(*dest)->next) ; + *dest = auth_passdb; + + auth_passdb->passdb = + passdb_preinit(auth->pool, set->driver, set->args); +} + +static void +auth_userdb_preinit(struct auth *auth, const struct auth_userdb_settings *set) +{ + struct auth_userdb *auth_userdb, **dest; + + auth_userdb = p_new(auth->pool, struct auth_userdb, 1); + auth_userdb->set = set; + + for (dest = &auth->userdbs; *dest != NULL; dest = &(*dest)->next) ; + *dest = auth_userdb; + + auth_userdb->userdb = + userdb_preinit(auth->pool, set->driver, set->args); +} + struct auth *auth_preinit(struct auth_settings *set) { struct auth_passdb_settings *const *passdbs; @@ -45,7 +75,7 @@ if (passdbs[i]->master) continue; - passdb_preinit(auth, passdbs[i]); + auth_passdb_preinit(auth, passdbs[i]); passdb_count++; last_passdb = i; } @@ -62,18 +92,18 @@ i_fatal("Master passdb can't have pass=yes " "if there are no passdbs"); } - passdb_preinit(auth, passdbs[i]); + auth_passdb_preinit(auth, passdbs[i]); } if (array_is_created(&set->userdbs)) { userdbs = array_get(&set->userdbs, &count); for (i = 0; i < count; i++) - userdb_preinit(auth, userdbs[i]); + auth_userdb_preinit(auth, userdbs[i]); } if (auth->userdbs == NULL) { /* use a dummy userdb static. */ - userdb_preinit(auth, &userdb_dummy_set); + auth_userdb_preinit(auth, &userdb_dummy_set); } return auth; } @@ -204,11 +234,12 @@ const char *const *mechanisms; for (passdb = auth->masterdbs; passdb != NULL; passdb = passdb->next) - passdb_init(passdb->passdb, passdb->set); + passdb_init(passdb->passdb, passdb->set->args); for (passdb = auth->passdbs; passdb != NULL; passdb = passdb->next) - passdb_init(passdb->passdb, passdb->set); + passdb_init(passdb->passdb, passdb->set->args); for (userdb = auth->userdbs; userdb != NULL; userdb = userdb->next) - userdb_init(userdb->userdb, userdb->set); + userdb_init(userdb->userdb, userdb->set->args); + /* caching is handled only by the main auth process */ if (!worker) passdb_cache_init(auth->set);
--- a/src/auth/passdb.c Sat Mar 13 20:19:53 2010 +0200 +++ b/src/auth/passdb.c Sat Mar 13 21:05:31 2010 +0200 @@ -154,48 +154,39 @@ callback(result, credentials, size, auth_request); } -void passdb_preinit(struct auth *auth, const struct auth_passdb_settings *set) +struct passdb_module * +passdb_preinit(pool_t pool, const char *driver, const char *args) { static unsigned int auth_passdb_id = 0; struct passdb_module_interface *iface; - struct auth_passdb *auth_passdb, **dest; - - auth_passdb = p_new(auth->pool, struct auth_passdb, 1); - auth_passdb->set = set; + struct passdb_module *passdb; - for (dest = &auth->passdbs; *dest != NULL; dest = &(*dest)->next) ; - *dest = auth_passdb; - - iface = passdb_interface_find(set->driver); + iface = passdb_interface_find(driver); if (iface == NULL) - i_fatal("Unknown passdb driver '%s'", set->driver); + i_fatal("Unknown passdb driver '%s'", driver); if (iface->verify_plain == NULL) { i_fatal("Support not compiled in for passdb driver '%s'", - set->driver); + driver); } - if (iface->preinit == NULL && iface->init == NULL && - *set->args != '\0') { - i_fatal("passdb %s: No args are supported: %s", - set->driver, set->args); - } + if (iface->preinit == NULL && iface->init == NULL && *args != '\0') + i_fatal("passdb %s: No args are supported: %s", driver, args); - if (iface->preinit == NULL) { - auth_passdb->passdb = - p_new(auth->pool, struct passdb_module, 1); - } else { - auth_passdb->passdb = - iface->preinit(auth->pool, set->args); - } - auth_passdb->passdb->id = ++auth_passdb_id; - auth_passdb->passdb->iface = *iface; + if (iface->preinit == NULL) + passdb = p_new(pool, struct passdb_module, 1); + else + passdb = iface->preinit(pool, args); + passdb->id = ++auth_passdb_id; + passdb->iface = *iface; + return passdb; } -void passdb_init(struct passdb_module *passdb, - const struct auth_passdb_settings *set) +void passdb_init(struct passdb_module *passdb, const char *args) { - if (passdb->iface.init != NULL) - passdb->iface.init(passdb, set->args); + if (passdb->iface.init != NULL && !passdb->initialized) { + passdb->initialized = TRUE; + passdb->iface.init(passdb, args); + } i_assert(passdb->default_pass_scheme != NULL || passdb->cache_key == NULL); @@ -203,6 +194,8 @@ void passdb_deinit(struct passdb_module *passdb) { + i_assert(passdb->initialized); + if (passdb->iface.deinit != NULL) passdb->iface.deinit(passdb); }
--- a/src/auth/passdb.h Sat Mar 13 20:19:53 2010 +0200 +++ b/src/auth/passdb.h Sat Mar 13 21:05:31 2010 +0200 @@ -5,7 +5,6 @@ ((pass)[0] != '\0' && (pass)[0] != '*' && (pass)[0] != '!') struct auth_request; -struct auth_passdb_settings; enum passdb_result { PASSDB_RESULT_INTERNAL_FAILURE = -1, @@ -63,6 +62,9 @@ unsigned int id; struct passdb_module_interface iface; + + /* init() has been called */ + unsigned int initialized:1; }; /* Try to get credentials in wanted scheme (request->credentials_scheme) from @@ -82,9 +84,9 @@ lookup_credentials_callback_t *callback, struct auth_request *auth_request); -void passdb_preinit(struct auth *auth, const struct auth_passdb_settings *set); -void passdb_init(struct passdb_module *passdb, - const struct auth_passdb_settings *set); +struct passdb_module * +passdb_preinit(pool_t pool, const char *driver, const char *args); +void passdb_init(struct passdb_module *passdb, const char *args); void passdb_deinit(struct passdb_module *passdb); void passdb_register_module(struct passdb_module_interface *iface);
--- a/src/auth/userdb.c Sat Mar 13 20:19:53 2010 +0200 +++ b/src/auth/userdb.c Sat Mar 13 21:05:31 2010 +0200 @@ -106,52 +106,44 @@ return gr->gr_gid; } -void userdb_preinit(struct auth *auth, const struct auth_userdb_settings *set) +struct userdb_module * +userdb_preinit(pool_t pool, const char *driver, const char *args) { static unsigned int auth_userdb_id = 0; struct userdb_module_interface *iface; - struct auth_userdb *auth_userdb, **dest; - - auth_userdb = p_new(auth->pool, struct auth_userdb, 1); - auth_userdb->set = set; + struct userdb_module *userdb; - for (dest = &auth->userdbs; *dest != NULL; dest = &(*dest)->next) ; - *dest = auth_userdb; - - iface = userdb_interface_find(set->driver); + iface = userdb_interface_find(driver); if (iface == NULL) - i_fatal("Unknown userdb driver '%s'", set->driver); + i_fatal("Unknown userdb driver '%s'", driver); if (iface->lookup == NULL) { i_fatal("Support not compiled in for userdb driver '%s'", - set->driver); + driver); } - if (iface->preinit == NULL && iface->init == NULL && - *auth_userdb->set->args != '\0') { - i_fatal("userdb %s: No args are supported: %s", - set->driver, auth_userdb->set->args); - } + if (iface->preinit == NULL && iface->init == NULL && *args != '\0') + i_fatal("userdb %s: No args are supported: %s", driver, args); - if (iface->preinit == NULL) { - auth_userdb->userdb = - p_new(auth->pool, struct userdb_module, 1); - } else { - auth_userdb->userdb = - iface->preinit(auth->pool, auth_userdb->set->args); - } - auth_userdb->userdb->id = ++auth_userdb_id; - auth_userdb->userdb->iface = iface; + if (iface->preinit == NULL) + userdb = p_new(pool, struct userdb_module, 1); + else + userdb = iface->preinit(pool, args); + userdb->id = ++auth_userdb_id; + userdb->iface = iface; + return userdb; } -void userdb_init(struct userdb_module *userdb, - const struct auth_userdb_settings *set) +void userdb_init(struct userdb_module *userdb, const char *args) { - if (userdb->iface->init != NULL) - userdb->iface->init(userdb, set->args); + if (userdb->iface->init != NULL && !userdb->initialized) { + userdb->initialized = TRUE; + userdb->iface->init(userdb, args); + } } void userdb_deinit(struct userdb_module *userdb) { + i_assert(userdb->initialized); if (userdb->iface->deinit != NULL) userdb->iface->deinit(userdb); }
--- a/src/auth/userdb.h Sat Mar 13 20:19:53 2010 +0200 +++ b/src/auth/userdb.h Sat Mar 13 21:05:31 2010 +0200 @@ -5,7 +5,6 @@ struct auth; struct auth_request; -struct auth_userdb_settings; enum userdb_result { USERDB_RESULT_INTERNAL_FAILURE = -1, @@ -30,6 +29,9 @@ unsigned int id; const struct userdb_module_interface *iface; + + /* init() has been called */ + unsigned int initialized:1; }; struct userdb_iterate_context { @@ -60,9 +62,9 @@ uid_t userdb_parse_uid(struct auth_request *request, const char *str); gid_t userdb_parse_gid(struct auth_request *request, const char *str); -void userdb_preinit(struct auth *auth, const struct auth_userdb_settings *set); -void userdb_init(struct userdb_module *userdb, - const struct auth_userdb_settings *set); +struct userdb_module * +userdb_preinit(pool_t pool, const char *driver, const char *args); +void userdb_init(struct userdb_module *userdb, const char *args); void userdb_deinit(struct userdb_module *userdb); void userdb_register_module(struct userdb_module_interface *iface);