/* update mail_location and create another user for the
second location. */
- struct setting_parser_context *set_parser =
- mail_storage_service_user_get_settings_parser(ctx->ctx.cur_service_user);
- if (master_service_set(set_parser, "mail_location", location, &error) <= 0)
+ struct master_service_settings_instance *set_instance =
+ mail_storage_service_user_get_settings_instance(ctx->ctx.cur_service_user);
+ if (master_service_set(set_instance, "mail_location", location, &error) <= 0)
i_unreached();
ret = mail_storage_service_next(ctx->ctx.storage_service,
ctx->ctx.cur_service_user,
struct mail_storage_service_user *service_user,
const char **error_r)
{
- struct setting_parser_context *set_parser =
- mail_storage_service_user_get_settings_parser(service_user);
+ struct master_service_settings_instance *set_instance =
+ mail_storage_service_user_get_settings_instance(service_user);
const struct mail_storage_settings *mail_set;
- if (master_service_settings_parser_get(NULL, set_parser,
+ if (master_service_settings_instance_get(NULL, set_instance,
&mail_storage_setting_parser_info,
MASTER_SERVICE_SETTINGS_GET_FLAG_NO_CHECK |
MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND,
struct mail_storage_service_user *service_user,
const char **error_r)
{
- struct setting_parser_context *set_parser =
- mail_storage_service_user_get_settings_parser(service_user);
- if (master_service_set(set_parser, "mailbox_list_index_very_dirty_syncs",
+ struct master_service_settings_instance *set_instance =
+ mail_storage_service_user_get_settings_instance(service_user);
+ if (master_service_set(set_instance, "mailbox_list_index_very_dirty_syncs",
"no", error_r) <= 0)
i_unreached();
return 0;
return 1;
}
- if (master_service_settings_parser_get(client->event,
- mail_user->set_parser,
+ if (master_service_settings_instance_get(client->event,
+ mail_user->set_instance,
&imap_urlauth_worker_setting_parser_info, 0,
&set, &error) < 0) {
e_error(client->event, "user %s: %s", input.username, error);
restrict_access_allow_coredumps(TRUE);
- if (master_service_settings_parser_get(mail_user->event,
- mail_user->set_parser, &smtp_submit_setting_parser_info,
- 0, &smtp_set, error_r) < 0 ||
- master_service_settings_parser_get(mail_user->event,
- mail_user->set_parser, &imap_setting_parser_info,
- 0, &imap_set, error_r) < 0) {
+ if (master_service_settings_instance_get(mail_user->event,
+ mail_user->set_instance,
+ &smtp_submit_setting_parser_info, 0,
+ &smtp_set, error_r) < 0 ||
+ master_service_settings_instance_get(mail_user->event,
+ mail_user->set_instance, &imap_setting_parser_info, 0,
+ &imap_set, error_r) < 0) {
master_service_settings_free(smtp_set);
mail_user_deinit(&mail_user);
event_unref(&event);
struct mail_storage_service_ctx *storage_service =
mail_storage_service_user_get_service_ctx(dinput->rcpt_user->service_user);
- struct setting_parser_context *set_parser =
- mail_storage_service_user_get_settings_parser(dinput->rcpt_user->service_user);
- raw_mail_user = raw_storage_create_from_set(storage_service, set_parser);
+ struct master_service_settings_instance *set_instance =
+ mail_storage_service_user_get_settings_instance(dinput->rcpt_user->service_user);
+ raw_mail_user = raw_storage_create_from_set(storage_service, set_instance);
mail_from = (dinput->mail_from != NULL ?
dinput->mail_from : &default_envelope_sender);
const char *error;
int ret;
- if (master_service_settings_parser_get(dinput->rcpt_user->event,
- dinput->rcpt_user->set_parser,
+ if (master_service_settings_instance_get(dinput->rcpt_user->event,
+ dinput->rcpt_user->set_instance,
&lda_setting_parser_info, 0,
&dinput->set, &error) < 0 ||
- master_service_settings_parser_get(dinput->rcpt_user->event,
- dinput->rcpt_user->set_parser,
+ master_service_settings_instance_get(dinput->rcpt_user->event,
+ dinput->rcpt_user->set_instance,
&smtp_submit_setting_parser_info, 0,
&dinput->smtp_set, &error) < 0)
i_fatal("%s", error);
size_t mmap_size;
};
+struct master_service_settings_instance {
+ struct setting_parser_context *parser;
+};
+
static pool_t master_settings_pool_create(struct master_settings_mmap *mmap);
#undef DEF
event_get_ptr(event, MASTER_SERVICE_VAR_EXPAND_FUNC_CONTEXT);
}
-#undef master_service_settings_parser_get
-int master_service_settings_parser_get(struct event *event,
- struct setting_parser_context *set_parser,
- const struct setting_parser_info *info,
- enum master_service_settings_get_flags flags,
- const void **set_r, const char **error_r)
+#undef master_service_settings_instance_get
+int master_service_settings_instance_get(struct event *event,
+ struct master_service_settings_instance *instance,
+ const struct setting_parser_info *info,
+ enum master_service_settings_get_flags flags,
+ const void **set_r, const char **error_r)
{
int ret;
i_assert(info->pool_offset1 != 0);
pool_t set_pool = pool_alloconly_create("master service settings parser", 1024);
- void *set = settings_parser_get_root_set(set_parser, info);
+ void *set = settings_parser_get_root_set(instance->parser, info);
set = settings_dup_with_pointers(info, set, set_pool);
pool_t *pool_p = PTR_OFFSET(set, info->pool_offset1 - 1);
enum master_service_settings_get_flags flags,
const void **set_r, const char **error_r)
{
- return master_service_settings_parser_get(event,
- master_service->set_parser, info, flags, set_r, error_r);
+ struct master_service_settings_instance instance = {
+ .parser = master_service->set_parser,
+ };
+ return master_service_settings_instance_get(event,
+ &instance, info, flags, set_r, error_r);
}
const void *
return set;
}
-int master_service_set(struct setting_parser_context *set_parser,
+int master_service_set(struct master_service_settings_instance *instance,
const char *key, const char *value,
const char **error_r)
{
int ret;
- ret = settings_parse_keyvalue(set_parser, key, value);
+ ret = settings_parse_keyvalue(instance->parser, key, value);
if (ret <= 0)
- *error_r = settings_parser_get_error(set_parser);
+ *error_r = settings_parser_get_error(instance->parser);
return ret;
}
const void *
-master_service_settings_find(struct setting_parser_context *set_parser,
+master_service_settings_find(struct master_service_settings_instance *instance,
const char *key, enum setting_type *type_r)
{
- return settings_parse_get_value(set_parser, key, type_r);
+ return settings_parse_get_value(instance->parser, key, type_r);
}
bool master_service_set_has_config_override(struct master_service *service,
}
return FALSE;
}
+
+static struct master_service_settings_instance *
+master_service_settings_instance_from(struct setting_parser_context *parser)
+{
+ struct master_service_settings_instance *new_instance =
+ i_new(struct master_service_settings_instance, 1);
+ pool_t pool = pool_alloconly_create("master service settings instance", 1024);
+ new_instance->parser = settings_parser_dup(parser, pool);
+ pool_unref(&pool);
+ return new_instance;
+}
+
+struct master_service_settings_instance *
+master_service_settings_instance_new(struct master_service *service)
+{
+ return master_service_settings_instance_from(service->set_parser);
+}
+
+struct master_service_settings_instance *
+master_service_settings_instance_dup(struct master_service_settings_instance *instance)
+{
+ return master_service_settings_instance_from(instance->parser);
+}
+
+void master_service_settings_instance_free(
+ struct master_service_settings_instance **_instance)
+{
+ struct master_service_settings_instance *instance = *_instance;
+
+ *_instance = NULL;
+
+ settings_parser_unref(&instance->parser);
+ i_free(instance);
+}
struct var_expand_func_table;
struct master_service;
struct master_settings_mmap;
+struct master_service_settings_instance;
enum master_service_settings_get_flags {
/* Don't call check_func()s */
#endif
/* Like master_service_settings_get(), but get settings from the specified
- parser. */
-int master_service_settings_parser_get(struct event *event,
- struct setting_parser_context *set_parser,
- const struct setting_parser_info *info,
- enum master_service_settings_get_flags flags,
- const void **set_r, const char **error_r);
+ instance. */
+int master_service_settings_instance_get(struct event *event,
+ struct master_service_settings_instance *instance,
+ const struct setting_parser_info *info,
+ enum master_service_settings_get_flags flags,
+ const void **set_r, const char **error_r);
#ifdef HAVE_TYPE_CHECKS
-# define master_service_settings_parser_get(event, set_parser, \
+# define master_service_settings_instance_get(event, instance, \
info, flags, set_r, error_r) \
- master_service_settings_parser_get(event, set_parser, \
+ master_service_settings_instance_get(event, instance, \
info, flags, (void *)set_r, 1 ? (error_r) : \
COMPILE_ERROR_IF_TRUE( \
!__builtin_types_compatible_p(typeof((*set_r)->pool), pool_t)))
#else
-# define master_service_settings_parser_get(event, set_parser, \
+# define master_service_settings_instance_get(event, instance, \
info, flags, set_r, error_r) \
- master_service_settings_parser_get(event, set_parser, \
+ master_service_settings_instance_get(event, instance, \
info, flags, (void *)set_r, error_r)
#endif
/* Set key=value to settings parser. Returns 1 on success, 0 if key is unknown,
-1 on error. The error string is returned on <= 0. */
-int master_service_set(struct setting_parser_context *set_parser,
+int master_service_set(struct master_service_settings_instance *instance,
const char *key, const char *value,
const char **error_r);
/* Wrapper to settings_parse_get_value(). */
const void *
-master_service_settings_find(struct setting_parser_context *set_parser,
+master_service_settings_find(struct master_service_settings_instance *instance,
const char *key, enum setting_type *type_r);
/* Returns TRUE if -o key=value parameter was used. Setting keys in overrides
bool master_service_set_has_config_override(struct master_service *service,
const char *key);
+/* Return a new instance for settings. */
+struct master_service_settings_instance *
+master_service_settings_instance_new(struct master_service *service);
+/* Return a new instance based on an existing instance. */
+struct master_service_settings_instance *
+master_service_settings_instance_dup(struct master_service_settings_instance *instance);
+/* Free a settings instance. */
+void master_service_settings_instance_free(
+ struct master_service_settings_instance **instance);
+
#endif
struct mdbox_storage *storage = MDBOX_STORAGE(_storage);
const char *dir;
- if (master_service_settings_parser_get(_storage->event,
- _storage->user->set_parser,
+ if (master_service_settings_instance_get(_storage->event,
+ _storage->user->set_instance,
mdbox_get_setting_parser_info(), 0,
&storage->set, error_r) < 0)
return -1;
struct imapc_client_settings set;
string_t *str;
- if (master_service_settings_parser_get(ns->user->event,
- ns->user->set_parser, imapc_get_setting_parser_info(),
+ if (master_service_settings_instance_get(ns->user->event,
+ ns->user->set_instance, imapc_get_setting_parser_info(),
0, &imapc_set, error_r) < 0)
return -1;
struct mailbox_list *list = ns->list;
const char *dir;
- if (master_service_settings_parser_get(_storage->event,
- _storage->user->set_parser,
+ if (master_service_settings_instance_get(_storage->event,
+ _storage->user->set_instance,
maildir_get_setting_parser_info(), 0,
&storage->set, error_r) < 0)
return -1;
return -1;
}
- if (master_service_settings_parser_get(_storage->event,
- _storage->user->set_parser,
+ if (master_service_settings_instance_get(_storage->event,
+ _storage->user->set_instance,
mbox_get_setting_parser_info(), 0,
&storage->set, error_r) < 0)
return -1;
{
struct pop3c_storage *storage = POP3C_STORAGE(_storage);
- if (master_service_settings_parser_get(_storage->event,
- _storage->user->set_parser,
+ if (master_service_settings_instance_get(_storage->event,
+ _storage->user->set_instance,
pop3c_get_setting_parser_info(), 0,
&storage->set, error_r) < 0)
return -1;
struct mail_user *
raw_storage_create_from_set(struct mail_storage_service_ctx *ctx,
- struct setting_parser_context *set_parser)
+ struct master_service_settings_instance *set_instance)
{
struct mail_user *user;
struct mail_namespace *ns;
struct mail_storage_service_input input = {
.event_parent = event,
.username = "raw-mail-user",
- .set_parser = set_parser,
+ .set_instance = set_instance,
.autocreated = TRUE,
.no_userdb_lookup = TRUE,
.userdb_fields = userdb_fields,
struct mail_user *
raw_storage_create_from_set(struct mail_storage_service_ctx *ctx,
- struct setting_parser_context *set_parser);
+ struct master_service_settings_instance *set_instance);
int raw_mailbox_alloc_stream(struct mail_user *user, struct istream *input,
time_t received_time, const char *envelope_sender,
mail_storage_service_user_get_service_ctx(user->service_user);
struct event *service_user_event =
mail_storage_service_user_get_event(user->service_user);
- struct setting_parser_context *service_user_set_parser =
- mail_storage_service_user_get_settings_parser(user->service_user);
+ struct master_service_settings_instance *service_user_set_instance =
+ mail_storage_service_user_get_settings_instance(user->service_user);
const struct mail_storage_service_input input = {
.event_parent = event_get_parent(service_user_event),
.username = userdomain,
- .set_parser = service_user_set_parser,
+ .set_instance = service_user_set_instance,
.session_id = user->session_id,
.autocreated = TRUE,
.no_userdb_lookup = TRUE,
const char *system_groups_user, *uid_source, *gid_source;
const char *chdir_path;
const struct mail_user_settings *user_set;
- struct setting_parser_context *set_parser;
+ struct master_service_settings_instance *set_instance;
unsigned int session_id_counter;
return;
}
- if (master_service_set(user->set_parser, key, value, &error) < 0)
+ if (master_service_set(user->set_instance, key, value, &error) < 0)
i_fatal("Invalid userdb input %s=%s: %s", key, value, error);
}
const char *key, const char *value,
const char **error_r)
{
- struct setting_parser_context *set_parser = user->set_parser;
const char *append_value = NULL;
const void *old_value;
enum setting_type type;
if (*key == '\0')
return 1;
- old_value = master_service_settings_find(set_parser, key, &type);
+ old_value = master_service_settings_find(user->set_instance, key, &type);
if (old_value == NULL && !str_begins_with(key, "plugin/")) {
/* assume it's a plugin setting */
key = t_strconcat("plugin/", key, NULL);
- old_value = master_service_settings_find(set_parser, key, &type);
+ old_value = master_service_settings_find(user->set_instance, key, &type);
}
if (master_service_set_has_config_override(ctx->service, key)) {
value = t_strconcat(*strp, append_value, NULL);
}
- ret = master_service_set(user->set_parser, key, value, error_r);
+ ret = master_service_set(user->set_instance, key, value, error_r);
if (ret < 0)
return -1;
if (strstr(key, "pass") != NULL) {
int mail_storage_service_read_settings(struct mail_storage_service_ctx *ctx,
const struct mail_storage_service_input *input,
- struct setting_parser_context **parser_r,
+ struct master_service_settings_instance **instance_r,
const char **error_r)
{
struct master_service_settings_input set_input;
return -1;
}
ctx->settings_looked_up = TRUE;
- pool_t pool = pool_alloconly_create("mail storage service settings pool", 1024);
- *parser_r = settings_parser_dup(ctx->service->set_parser, pool);
- pool_unref(&pool);
+ *instance_r = master_service_settings_instance_new(ctx->service);
return 0;
}
const struct mail_user_settings *user_set;
const char *const *userdb_fields, *error;
struct auth_user_reply reply;
- struct setting_parser_context *set_parser;
+ struct master_service_settings_instance *set_instance;
pool_t temp_pool;
int ret = 1;
mail_storage_service_seteuid_root();
}
- pool_t user_pool = pool_alloconly_create(MEMPOOL_GROWING"mail storage service user", 1024*6);
- if (input->set_parser != NULL) {
- set_parser = settings_parser_dup(input->set_parser, user_pool);
- } else if (mail_storage_service_read_settings(ctx, input,
- &set_parser, error_r) < 0) {
+ if (input->set_instance != NULL) {
+ /* Start with the specified settings instance and its settings,
+ but allow this instance to set its own settings without
+ affecting the parent instance. */
+ set_instance = master_service_settings_instance_dup(input->set_instance);
+ } else if (mail_storage_service_read_settings(ctx, input, &set_instance,
+ error_r) < 0) {
if (ctx->config_permission_denied) {
/* just restart and maybe next time we will open the
config socket before dropping privileges */
i_fatal("%s", *error_r);
}
- pool_unref(&user_pool);
return -1;
}
mail_storage_service_var_expand_callback);
event_set_ptr(event, MASTER_SERVICE_VAR_EXPAND_FUNC_CONTEXT,
&var_expand_ctx);
- if (master_service_settings_parser_get(event, set_parser,
+ if (master_service_settings_instance_get(event, set_instance,
&mail_user_setting_parser_info,
0, &user_set, error_r) < 0) {
- pool_unref(&user_pool);
event_unref(&event);
- settings_parser_unref(&set_parser);
+ master_service_settings_instance_free(&set_instance);
return -1;
}
/* load global plugins */
if (mail_storage_service_load_modules(ctx, user_set, error_r) < 0) {
master_service_settings_free(user_set);
- pool_unref(&user_pool);
event_unref(&event);
- settings_parser_unref(&set_parser);
+ master_service_settings_instance_free(&set_instance);
return -1;
}
event_set_forced_debug(event,
ctx->debug || (flags & MAIL_STORAGE_SERVICE_FLAG_DEBUG) != 0);
+ pool_t user_pool = pool_alloconly_create(MEMPOOL_GROWING"mail storage service user", 1024*6);
const char *session_id = input->session_id != NULL ?
p_strdup(user_pool, input->session_id) :
mail_storage_service_generate_session_id(
event_unref(&event);
pool_unref(&temp_pool);
pool_unref(&user_pool);
- settings_parser_unref(&set_parser);
+ master_service_settings_instance_free(&set_instance);
return ret;
}
event_add_str(event, "user", username);
user->input.session_create_time = input->session_create_time;
user->flags = flags;
- user->set_parser = set_parser;
+ user->set_instance = set_instance;
user->user_set = user_set;
user->gid_source = "mail_gid setting";
user->uid_source = "mail_uid setting";
var_expand_ctx.user = user;
if ((flags & MAIL_STORAGE_SERVICE_FLAG_DEBUG) != 0) {
- if (master_service_set(user->set_parser, "mail_debug", "yes", &error) <= 0)
+ if (master_service_set(user->set_instance, "mail_debug", "yes", &error) <= 0)
i_unreached();
}
fine that extra plugins are loaded - we'll just need to
prevent any of their hooks from being called. One easy way
to do this is just to clear out the mail_plugins setting: */
- if (master_service_set(user->set_parser, "mail_plugins", "", &error) <= 0)
+ if (master_service_set(user->set_instance, "mail_plugins", "", &error) <= 0)
i_unreached();
}
if (ret > 0) {
mail_storage_service_update_chroot(user);
/* Settings may have changed in the parser */
- if (master_service_settings_parser_get(event, user->set_parser,
+ if (master_service_settings_instance_get(event, user->set_instance,
&mail_user_setting_parser_info,
0, &user_set, &error) < 0) {
*error_r = t_strdup_printf(
master_service_set_current_user(master_service, NULL);
master_service_settings_free(user->user_set);
- settings_parser_unref(&user->set_parser);
+ master_service_settings_instance_free(&user->set_instance);
event_unref(&user->event);
pool_unref(&user->pool);
}
const struct mail_storage_service_input *input)
{
const struct mail_user_settings *user_set;
- struct setting_parser_context *set_parser;
+ struct master_service_settings_instance *set_instance;
const char *error;
if (ctx->conn != NULL)
return;
if (mail_storage_service_read_settings(ctx, input,
- &set_parser, &error) < 0)
+ &set_instance, &error) < 0)
i_fatal("%s", error);
struct event *event = input == NULL ? NULL : input->event_parent;
- if (master_service_settings_parser_get(event, set_parser,
+ if (master_service_settings_instance_get(event, set_instance,
&mail_user_setting_parser_info,
MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND,
&user_set, &error) < 0)
i_fatal("%s", error);
- settings_parser_unref(&set_parser);
+ master_service_settings_instance_free(&set_instance);
mail_storage_service_first_init(ctx, user_set, ctx->flags);
master_service_settings_free(user_set);
return &user->input;
}
-struct setting_parser_context *
-mail_storage_service_user_get_settings_parser(struct mail_storage_service_user *user)
+struct master_service_settings_instance *
+mail_storage_service_user_get_settings_instance(struct mail_storage_service_user *user)
{
- return user->set_parser;
+ return user->set_instance;
}
int mail_storage_service_user_init_ssl_client_settings(
struct mail_storage_service_user *user, pool_t pool,
struct ssl_iostream_settings *ssl_set_r, const char **error_r)
{
- struct setting_parser_context *set_parser;
+ struct master_service_settings_instance *set_instance;
const struct master_service_ssl_settings *ssl_set;
- set_parser = mail_storage_service_user_get_settings_parser(user);
- if (master_service_settings_parser_get(user->event,
- set_parser, &master_service_ssl_setting_parser_info,
+ set_instance = mail_storage_service_user_get_settings_instance(user);
+ if (master_service_settings_instance_get(user->event,
+ set_instance, &master_service_ssl_setting_parser_info,
0, &ssl_set, error_r) < 0)
return -1;
master_service_ssl_client_settings_to_iostream_set(ssl_set, pool,
const char *const *forward_fields;
- /* Use this settings parser instead of looking it up. */
- struct setting_parser_context *set_parser;
+ /* Use this settings instance instead of looking it up. */
+ struct master_service_settings_instance *set_instance;
/* Override specified global flags */
enum mail_storage_service_flags flags_override_add;
struct auth_master_connection *conn);
int mail_storage_service_read_settings(struct mail_storage_service_ctx *ctx,
const struct mail_storage_service_input *input,
- struct setting_parser_context **parser_r,
+ struct master_service_settings_instance **instance_r,
const char **error_r) ATTR_NULL(2);
/* Read settings and initialize context to use them. Do nothing if service is
already initialized. This is mainly necessary when calling _get_auth_conn()
mail_storage_service_user_get_set(struct mail_storage_service_user *user);
const struct mail_storage_service_input *
mail_storage_service_user_get_input(struct mail_storage_service_user *user);
-struct setting_parser_context *
-mail_storage_service_user_get_settings_parser(struct mail_storage_service_user *user);
+struct master_service_settings_instance *
+mail_storage_service_user_get_settings_instance(struct mail_storage_service_user *user);
int mail_storage_service_user_init_ssl_client_settings(
struct mail_storage_service_user *user, pool_t pool,
struct ssl_iostream_settings *ssl_set_r, const char **error_r);
mail_storage_service_user_get_event(service_user);
const char *username =
mail_storage_service_user_get_username(service_user);
- struct setting_parser_context *service_user_set_parser =
- mail_storage_service_user_get_settings_parser(service_user);
+ struct master_service_settings_instance *service_user_set_instance =
+ mail_storage_service_user_get_settings_instance(service_user);
i_assert(*username != '\0');
pool_t pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024);
user->service_user = service_user;
mail_storage_service_user_ref(service_user);
user->username = p_strdup(pool, username);
- user->set_parser = service_user_set_parser;
+ user->set_instance = service_user_set_instance;
user->set = mail_storage_service_user_get_set(service_user);
user->service = master_service_get_name(master_service);
user->default_normalizer = uni_utf8_to_decomposed_titlecase;
i_assert(!user->initialized);
- if (master_service_settings_parser_get(user->event, user->set_parser,
+ if (master_service_settings_instance_get(user->event, user->set_instance,
&mail_storage_setting_parser_info, 0,
&user->_mail_set, &error) < 0)
user->error = p_strdup(user->pool, error);
This could be set by plugins that need to fail the initialization. */
const char *error;
- /* Points to service_user->set_parser */
- struct setting_parser_context *set_parser;
+ /* Points to service_user->set_instance */
+ struct master_service_settings_instance *set_instance;
const struct mail_user_settings *set;
struct mail_storage_settings *_mail_set;
struct ssl_iostream_settings *ssl_set;
input.username = "";
if (mail_storage_service_read_settings(storage_service, &input,
- &client->set_parser, &error) < 0)
+ &client->set_instance, &error) < 0)
i_fatal("%s", error);
- /* create raw user before duplicating the settings parser */
client->raw_mail_user =
- raw_storage_create_from_set(storage_service, client->set_parser);
+ raw_storage_create_from_set(storage_service, client->set_instance);
const struct var_expand_table *tab =
mail_storage_service_get_var_expand_table(storage_service, &input);
struct event *event = event_create(client->event);
event_set_ptr(event, MASTER_SERVICE_VAR_EXPAND_TABLE, (void *)tab);
- if (master_service_settings_parser_get(event, client->set_parser,
+ if (master_service_settings_instance_get(event, client->set_instance,
&lda_setting_parser_info, 0,
&client->lda_set, &error) < 0 ||
- master_service_settings_parser_get(event, client->set_parser,
+ master_service_settings_instance_get(event, client->set_instance,
&lmtp_setting_parser_info, 0,
&client->lmtp_set, &error) < 0)
i_fatal("%s", error);
client_state_reset(client);
- settings_parser_unref(&client->set_parser);
+ master_service_settings_instance_free(&client->set_instance);
master_service_settings_free(client->lda_set);
master_service_settings_free(client->lmtp_set);
event_unref(&client->event);
struct lmtp_client_vfuncs v;
struct event *event;
- struct setting_parser_context *set_parser;
+ struct master_service_settings_instance *set_instance;
const struct lda_settings *lda_set;
const struct lmtp_settings *lmtp_set;
lrcpt->type = LMTP_RECIPIENT_TYPE_LOCAL;
lrcpt->backend_context = llrcpt;
- struct setting_parser_context *set_parser =
- mail_storage_service_user_get_settings_parser(service_user);
- if (master_service_settings_parser_get(rcpt->event, set_parser,
+ struct master_service_settings_instance *set_instance =
+ mail_storage_service_user_get_settings_instance(service_user);
+ if (master_service_settings_instance_get(rcpt->event, set_instance,
&lda_setting_parser_info,
0, &llrcpt->lda_set, &error) < 0) {
e_error(rcpt->event, "%s", error);
const struct mail_storage_settings *mail_set;
struct smtp_proxy_data proxy_data;
struct mail_namespace *ns;
- struct setting_parser_context *set_parser;
+ struct master_service_settings_instance *set_instance;
const char *error, *username;
int ret;
input = mail_storage_service_user_get_input(service_user);
username = t_strdup(input->username);
- set_parser = mail_storage_service_user_get_settings_parser(service_user);
- if (master_service_settings_parser_get(rcpt->event, set_parser,
+ set_instance = mail_storage_service_user_get_settings_instance(service_user);
+ if (master_service_settings_instance_get(rcpt->event, set_instance,
&mail_storage_setting_parser_info,
MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND,
&mail_set, &error) < 0) {
advertised that it's going to timeout the connection.
this avoids duplicate deliveries in case the delivery
succeeds after the proxy has already disconnected from us. */
- struct setting_parser_context *set_parser =
- mail_storage_service_user_get_settings_parser(service_user);
+ struct master_service_settings_instance *set_instance =
+ mail_storage_service_user_get_settings_instance(service_user);
const char *value = t_strdup_printf("%us",
proxy_data.timeout_secs <= 1 ? 1 :
proxy_data.timeout_secs-1);
- if (master_service_set(set_parser, "mail_max_lock_timeout",
+ if (master_service_set(set_instance, "mail_max_lock_timeout",
value, &error) <= 0)
i_unreached();
}
mail_storage_service_user_get_log_prefix(service_user));
lldctx.rcpt_user = rcpt_user;
- if (master_service_settings_parser_get(rcpt_user->event,
- rcpt_user->set_parser,
+ if (master_service_settings_instance_get(rcpt_user->event,
+ rcpt_user->set_instance,
&smtp_submit_setting_parser_info, 0,
&lldctx.smtp_set, &error) < 0) {
e_error(rcpt->event, "%s", error);
NULL
};
struct mail_storage_service_input input;
- struct setting_parser_context *set_parser;
+ struct master_service_settings_instance *set_instance;
const struct mail_storage_settings *mail_set;
const char *value, *error;
input.username = "";
if (mail_storage_service_read_settings(storage_service, &input,
- &set_parser,
+ &set_instance,
&error) < 0)
i_fatal("%s", error);
- if (master_service_settings_parser_get(NULL, set_parser,
+ if (master_service_settings_instance_get(NULL, set_instance,
&mail_storage_setting_parser_info,
MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND,
&mail_set, &error) < 0)
value = mail_user_set_plugin_getenv(mail_set, "quota_status_nouser");
nouser_reply = i_strdup(value != NULL ? value : "REJECT Unknown user");
master_service_settings_free(mail_set);
- settings_parser_unref(&set_parser);
+ master_service_settings_instance_free(&set_instance);
}
static void main_deinit(void)
}
restrict_access_allow_coredumps(TRUE);
- if (master_service_settings_parser_get(mail_user->event,
- mail_user->set_parser,
+ if (master_service_settings_instance_get(mail_user->event,
+ mail_user->set_instance,
&pop3_setting_parser_info, 0, &set, error_r) < 0) {
if (write(fd_out, lookup_error_str, strlen(lookup_error_str)) < 0) {
/* ignored */
restrict_access_allow_coredumps(TRUE);
- if (master_service_settings_parser_get(mail_user->event,
- mail_user->set_parser, &submission_setting_parser_info,
- 0, &set, error_r) < 0) {
+ if (master_service_settings_instance_get(mail_user->event,
+ mail_user->set_instance,
+ &submission_setting_parser_info, 0,
+ &set, error_r) < 0) {
send_error(fd_out, event, my_hostname,
"4.7.0", MAIL_ERRSTR_CRITICAL_MSG);
mail_user_deinit(&mail_user);