for (dest = &auth->userdbs; *dest != NULL; dest = &(*dest)->next) ;
*dest = auth_userdb;
- auth_userdb->userdb = userdb_preinit(auth->pool, set);
+ auth_userdb->userdb = userdb_preinit(auth->pool, event, set);
/* make sure any %variables in default_fields exist in cache_key */
if (auth_userdb->userdb->default_cache_key != NULL) {
struct auth_userdb_pre_settings *userdb_pre_set;
}
struct userdb_module *
-userdb_preinit(pool_t pool, const struct auth_userdb_settings *set)
+userdb_preinit(pool_t pool, struct event *event,
+ const struct auth_userdb_settings *set)
{
static unsigned int auth_userdb_id = 0;
struct userdb_module_interface *iface;
struct userdb_module *userdb;
+ const char *error;
iface = userdb_interface_find(set->driver);
if (iface == NULL || iface->lookup == NULL) {
set->driver, set->args);
}
- if (iface->preinit_legacy == NULL)
- userdb = p_new(pool, struct userdb_module, 1);
- else
- userdb = iface->preinit_legacy(pool, set->args);
+ if (iface->preinit != NULL) {
+ if (set->args[0] != '\0')
+ i_fatal("userdb %s: userdb_args must be empty", set->name);
+ if (iface->preinit(pool, event, &userdb, &error) < 0)
+ i_fatal("userdb %s: %s", set->name, error);
+ userdb->blocking = set->use_worker;
+ } else {
+ if (iface->preinit_legacy == NULL)
+ userdb = p_new(pool, struct userdb_module, 1);
+ else
+ userdb = iface->preinit_legacy(pool, set->args);
+ }
userdb->id = ++auth_userdb_id;
userdb->iface = iface;
userdb->args = p_strdup(pool, set->args);
struct userdb_module_interface {
const char *name;
+ /* Create a new userdb_module based on the settings looked up via the
+ given event. */
+ int (*preinit)(pool_t pool, struct event *event,
+ struct userdb_module **module_r, const char **error_r);
struct userdb_module *(*preinit_legacy)(pool_t pool, const char *args);
void (*init)(struct userdb_module *module);
void (*deinit)(struct userdb_module *module);
ATTR_NULL(1);
struct userdb_module *
-userdb_preinit(pool_t pool, const struct auth_userdb_settings *set);
+userdb_preinit(pool_t pool, struct event *event,
+ const struct auth_userdb_settings *set);
void userdb_init(struct userdb_module *userdb);
void userdb_deinit(struct userdb_module *userdb);