return 0;
}
-static int auth_request_set_default_fields(struct auth_request *request)
-{
- struct event *event = authdb_event(request);
- const struct auth_passdb_pre_settings *pre_set;
- const char *error;
-
- if (settings_get(event, &auth_passdb_pre_setting_parser_info, 0,
- &pre_set, &error) < 0) {
- e_error(event, "%s", error);
- return -1;
- }
- auth_request_set_strlist(request, &pre_set->default_fields,
- STATIC_PASS_SCHEME);
- settings_free(pre_set);
- return 0;
-}
-
-static int auth_request_set_override_fields(struct auth_request *request)
-{
- struct event *event = authdb_event(request);
- const struct auth_passdb_post_settings *post_set;
- const char *error;
-
- if (request->passdb->passdb->iface.fields_supported) {
- /* passdb_fields was already processed. It may be referring to
- %{driver:*} fields that are not available currently, so just
- skip processing the passdb_override_fields. This setting
- will go away anyway once all passdbs are converted to use
- fields. */
- return 0;
- }
-
- if (settings_get(event, &auth_passdb_post_setting_parser_info, 0,
- &post_set, &error) < 0) {
- e_error(event, "%s", error);
- return -1;
- }
- auth_request_set_strlist(request, &post_set->override_fields,
- STATIC_PASS_SCHEME);
- settings_free(post_set);
- return 0;
-}
-
-int auth_request_set_userdb_default_fields(struct auth_request *request)
-{
- struct event *event = authdb_event(request);
- const struct auth_userdb_pre_settings *pre_set;
- const char *error;
-
- if (settings_get(event, &auth_userdb_pre_setting_parser_info, 0,
- &pre_set, &error) < 0) {
- e_error(event, "%s", error);
- return -1;
- }
- auth_request_set_userdb_strlist(request, &pre_set->default_fields);
- settings_free(pre_set);
- return 0;
-}
-
-static int auth_request_set_userdb_override_fields(struct auth_request *request)
-{
- struct event *event = authdb_event(request);
- const struct auth_userdb_post_settings *post_set;
- const char *error;
-
- if (request->userdb->userdb->iface->fields_supported) {
- /* userdb_fields was already processed. It may be referring to
- %{driver:*} fields that are not available currently, so just
- skip processing the userdb_override_fields. This setting
- will go away anyway once all userdbs are converted to use
- fields. */
- return 0;
- }
-
-
- if (settings_get(event, &auth_userdb_post_setting_parser_info, 0,
- &post_set, &error) < 0) {
- e_error(event, "%s", error);
- return -1;
- }
- auth_request_set_userdb_strlist(request, &post_set->override_fields);
- settings_free(post_set);
- return 0;
-}
-
static int
auth_request_finish_passdb_lookup(enum passdb_result *result,
struct auth_request *request,
{
int ret;
- if (auth_request_set_override_fields(request) < 0)
- result = PASSDB_RESULT_INTERNAL_FAILURE;
-
if ((ret = auth_request_handle_passdb_callback(&result, request)) == 0) {
/* try next passdb */
auth_request_verify_plain(request, request->mech_password,
PASSDB_RESULT_INTERNAL_FAILURE, request);
} else if (passdb->passdb->blocking) {
passdb_blocking_verify_plain(request);
- } else if (auth_request_set_default_fields(request) < 0) {
- auth_request_verify_plain_callback(
- PASSDB_RESULT_INTERNAL_FAILURE, request);
} else {
passdb->passdb->iface.verify_plain(
request, password, auth_request_verify_plain_callback);
{
int ret;
- if (auth_request_set_override_fields(request) < 0)
- result = PASSDB_RESULT_INTERNAL_FAILURE;
-
if ((ret = auth_request_handle_passdb_callback(&result, request)) == 0) {
/* try next passdb */
if (request->fields.skip_password_check &&
uchar_empty_ptr, 0, request);
} else if (passdb->passdb->blocking) {
passdb_blocking_lookup_credentials(request);
- } else if (auth_request_set_default_fields(request) < 0) {
- auth_request_lookup_credentials_callback(
- PASSDB_RESULT_INTERNAL_FAILURE,
- uchar_empty_ptr, 0, request);
} else {
passdb->passdb->iface.lookup_credentials(request,
auth_request_lookup_credentials_callback);
}
/* We want to preserve any userdb fields set by the earlier passdb
- lookup, so initialize userdb_reply only if it doesn't exist.
- Don't add userdb's default_fields, because the entire userdb part of
- the result comes from the cache. */
+ lookup, so initialize userdb_reply only if it doesn't exist. */
if (request->fields.userdb_reply == NULL)
auth_request_init_userdb_reply(request);
auth_request_userdb_import(request, value);
if (result == USERDB_RESULT_OK) {
/* this userdb lookup succeeded, preserve its extra fields */
- if (auth_request_set_userdb_override_fields(request) < 0)
- result = USERDB_RESULT_INTERNAL_FAILURE;
- else
- auth_fields_snapshot(request->fields.userdb_reply);
+ auth_fields_snapshot(request->fields.userdb_reply);
} else {
/* this userdb lookup failed, remove any extra fields
it set */
auth_request_userdb_lookup_begin(request);
- /* we still want to set default_fields. these override any
- existing fields set by previous userdbs (because if that is
- unwanted, ":protected" can be used). */
- if (auth_request_set_userdb_default_fields(request) < 0) {
- auth_request_userdb_callback(
- USERDB_RESULT_INTERNAL_FAILURE, request);
- return;
- }
-
/* (for now) auth_cache is shared between passdb and userdb */
cache_key = passdb_cache == NULL ? NULL : userdb->cache_key;
if (cache_key != NULL) {
void auth_request_userdb_lookup_end(struct auth_request *request,
enum userdb_result result);
-int auth_request_set_userdb_default_fields(struct auth_request *request);
-
/* Fetches the current authdb event, this is done because
some lookups can recurse into new lookups, requiring new event,
which will be returned here. */
.check_func = auth_passdb_settings_check
};
-static const struct setting_define auth_passdb_pre_setting_defines[] = {
- { .type = SET_STRLIST, .key = "passdb_default_fields",
- .offset = offsetof(struct auth_passdb_pre_settings, default_fields) },
-
- SETTING_DEFINE_LIST_END
-};
-
-static const struct auth_passdb_pre_settings auth_passdb_pre_default_settings = {
- .default_fields = ARRAY_INIT,
-};
-
-const struct setting_parser_info auth_passdb_pre_setting_parser_info = {
- .name = "auth_passdb_pre",
-
- .defines = auth_passdb_pre_setting_defines,
- .defaults = &auth_passdb_pre_default_settings,
-
- .struct_size = sizeof(struct auth_passdb_pre_settings),
- .pool_offset1 = 1 + offsetof(struct auth_passdb_pre_settings, pool),
-};
-
static const struct setting_define auth_passdb_post_setting_defines[] = {
{ .type = SET_STRLIST, .key = "passdb_fields",
.offset = offsetof(struct auth_passdb_post_settings, fields) },
- { .type = SET_STRLIST, .key = "passdb_override_fields",
- .offset = offsetof(struct auth_passdb_post_settings, override_fields) },
SETTING_DEFINE_LIST_END
};
static const struct auth_passdb_post_settings auth_passdb_post_default_settings = {
.fields = ARRAY_INIT,
- .override_fields = ARRAY_INIT,
};
const struct setting_parser_info auth_passdb_post_setting_parser_info = {
.check_func = auth_userdb_settings_check,
};
-static const struct setting_define auth_userdb_pre_setting_defines[] = {
- { .type = SET_STRLIST, .key = "userdb_default_fields",
- .offset = offsetof(struct auth_userdb_pre_settings, default_fields) },
-
- SETTING_DEFINE_LIST_END
-};
-
-static const struct auth_userdb_pre_settings auth_userdb_pre_default_settings = {
- .default_fields = ARRAY_INIT,
-};
-
-const struct setting_parser_info auth_userdb_pre_setting_parser_info = {
- .name = "auth_userdb_pre",
-
- .defines = auth_userdb_pre_setting_defines,
- .defaults = &auth_userdb_pre_default_settings,
-
- .struct_size = sizeof(struct auth_userdb_pre_settings),
- .pool_offset1 = 1 + offsetof(struct auth_userdb_pre_settings, pool),
-};
-
static const struct setting_define auth_userdb_post_setting_defines[] = {
{ .type = SET_STRLIST, .key = "userdb_fields",
.offset = offsetof(struct auth_userdb_post_settings, fields) },
- { .type = SET_STRLIST, .key = "userdb_override_fields",
- .offset = offsetof(struct auth_userdb_post_settings, override_fields) },
SETTING_DEFINE_LIST_END
};
static const struct auth_userdb_post_settings auth_userdb_post_default_settings = {
.fields = ARRAY_INIT,
- .override_fields = ARRAY_INIT,
};
const struct setting_parser_info auth_userdb_post_setting_parser_info = {
struct master_service;
struct master_service_settings_output;
-struct auth_passdb_pre_settings {
- pool_t pool;
- ARRAY_TYPE(const_string) default_fields;
-};
-
struct auth_passdb_post_settings {
pool_t pool;
ARRAY_TYPE(const_string) fields;
- ARRAY_TYPE(const_string) override_fields;
};
struct auth_passdb_settings {
bool use_worker;
};
-struct auth_userdb_pre_settings {
- pool_t pool;
- ARRAY_TYPE(const_string) default_fields;
-};
-
struct auth_userdb_post_settings {
pool_t pool;
ARRAY_TYPE(const_string) fields;
- ARRAY_TYPE(const_string) override_fields;
};
struct auth_userdb_settings {
auth_request_userdb_lookup_begin(auth_request);
if (auth_request->fields.userdb_reply == NULL)
auth_request_init_userdb_reply(auth_request);
- if (auth_request_set_userdb_default_fields(auth_request) < 0) {
- lookup_user_callback(USERDB_RESULT_INTERNAL_FAILURE,
- auth_request);
- return TRUE;
- }
auth_request->userdb->userdb->iface->
lookup(auth_request, lookup_user_callback);
*dest = auth_passdb;
auth_passdb->passdb = passdb_preinit(auth->pool, event, set);
- /* make sure any %variables in default_fields exist in cache_key */
if (auth_passdb->passdb->default_cache_key != NULL && set->use_cache) {
- struct auth_passdb_pre_settings *passdb_pre_set;
- const char *error;
- if (settings_get(event, &auth_passdb_pre_setting_parser_info,
- SETTINGS_GET_FLAG_NO_EXPAND,
- &passdb_pre_set, &error) < 0)
- i_fatal("%s", error);
- auth_passdb->cache_key = p_strconcat(
- auth->pool,
- auth_passdb->passdb->default_cache_key,
- t_array_const_string_join(&passdb_pre_set->default_fields, ""),
- NULL);
- settings_free(passdb_pre_set);
+ auth_passdb->cache_key = auth_passdb->passdb->default_cache_key;
} else {
auth_passdb->cache_key = NULL;
}
*dest = auth_userdb;
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 && set->use_cache) {
- struct auth_userdb_pre_settings *userdb_pre_set;
- const char *error;
- if (settings_get(event, &auth_userdb_pre_setting_parser_info,
- SETTINGS_GET_FLAG_NO_EXPAND,
- &userdb_pre_set, &error) < 0)
- i_fatal("%s", error);
- auth_userdb->cache_key = p_strconcat(
- auth->pool,
- auth_userdb->userdb->default_cache_key,
- t_array_const_string_join(
- &userdb_pre_set->default_fields, ""),
- NULL);
- settings_free(userdb_pre_set);
+ auth_userdb->cache_key = auth_userdb->userdb->default_cache_key;
} else {
auth_userdb->cache_key = NULL;
}