request->userdb_cache_result = AUTH_REQUEST_CACHE_NONE;
+ /* use userdb-specific settings during the userdb lookup */
+ request->set = request->userdb->auth_set;
+
event = event_create(request->event);
event_add_str(event, "userdb", request->userdb->set->name);
event_add_str(event, "userdb_id", dec2str(request->userdb->userdb->id));
e_debug(e->event(), "Finished userdb lookup");
event_unref(&event);
array_pop_back(&request->authdb_event);
+
+ /* restore protocol-specific settings */
+ request->set = request->protocol_set;
}
static unsigned int
{
struct auth_userdb *auth_userdb, **dest;
+ /* Lookup userdb-specific auth_settings */
+ struct event *event = event_create(auth_event);
+ event_add_str(event, "protocol", auth->protocol);
+ event_add_str(event, "userdb", set->name);
+ event_set_ptr(event, SETTINGS_EVENT_FILTER_NAME,
+ p_strconcat(event_get_pool(event), "userdb_",
+ set->driver, NULL));
+
auth_userdb = p_new(auth->pool, struct auth_userdb, 1);
+ auth_userdb->auth_set =
+ settings_get_or_fatal(event, &auth_setting_parser_info);
+ event_unref(&event);
+
auth_userdb->set = set;
auth_userdb->skip = auth_userdb_skip_parse(set->skip);
auth_userdb->result_success =
}
}
+static void auth_userdb_deinit(struct auth_userdb *userdb)
+{
+ settings_free(userdb->auth_set);
+ userdb_deinit(userdb->userdb);
+}
+
static bool auth_passdb_list_have_verify_plain(const struct auth *auth)
{
const struct auth_passdb *passdb;
for (passdb = auth->passdbs; passdb != NULL; passdb = passdb->next)
auth_passdb_deinit(passdb);
for (userdb = auth->userdbs; userdb != NULL; userdb = userdb->next)
- userdb_deinit(userdb->userdb);
+ auth_userdb_deinit(userdb);
dns_client_deinit(&auth->dns_client);
}