Mercurial > dovecot > core-2.2
view src/director/director-settings.c @ 22675:d689d7d99b4f
director: Delay sorting users until there are no more user iterators
This shouldn't have normally happened. Only when an outgoing handshake was
going on at the same time as a) another outgoing handshake was going on, or
b) doveadm was doing HOST-RESET-USERS
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Sat, 25 Nov 2017 10:05:27 +0200 |
parents | fea53c2725c0 |
children | 5f9ff9066649 |
line wrap: on
line source
/* Copyright (c) 2009-2017 Dovecot authors, see the included COPYING file */ #include "lib.h" #include "buffer.h" #include "settings-parser.h" #include "service-settings.h" #include "director-settings.h" /* <settings checks> */ static bool director_settings_verify(void *_set, pool_t pool, const char **error_r); static struct file_listener_settings director_unix_listeners_array[] = { { "login/director", 0, "", "" }, { "director-admin", 0600, "", "" } }; static struct file_listener_settings *director_unix_listeners[] = { &director_unix_listeners_array[0], &director_unix_listeners_array[1] }; static buffer_t director_unix_listeners_buf = { director_unix_listeners, sizeof(director_unix_listeners), { NULL, } }; static struct file_listener_settings director_fifo_listeners_array[] = { { "login/proxy-notify", 0, "", "" } }; static struct file_listener_settings *director_fifo_listeners[] = { &director_fifo_listeners_array[0] }; static buffer_t director_fifo_listeners_buf = { director_fifo_listeners, sizeof(director_fifo_listeners), { NULL, } }; /* </settings checks> */ struct service_settings director_service_settings = { .name = "director", .protocol = "", .type = "", .executable = "director", .user = "$default_internal_user", .group = "", .privileged_group = "", .extra_groups = "", .chroot = ".", .drop_priv_before_exec = FALSE, .process_min_avail = 0, .process_limit = 1, .client_limit = 0, .service_count = 0, .idle_kill = UINT_MAX, .vsz_limit = (uoff_t)-1, .unix_listeners = { { &director_unix_listeners_buf, sizeof(director_unix_listeners[0]) } }, .fifo_listeners = { { &director_fifo_listeners_buf, sizeof(director_fifo_listeners[0]) } }, .inet_listeners = ARRAY_INIT, .process_limit_1 = TRUE }; #undef DEF #define DEF(type, name) \ { type, #name, offsetof(struct director_settings, name), NULL } static const struct setting_define director_setting_defines[] = { DEF(SET_STR, master_user_separator), DEF(SET_STR, director_servers), DEF(SET_STR, director_mail_servers), DEF(SET_STR, director_username_hash), DEF(SET_STR, director_flush_socket), DEF(SET_TIME, director_user_expire), DEF(SET_TIME, director_user_kick_delay), DEF(SET_IN_PORT, director_doveadm_port), DEF(SET_BOOL, director_consistent_hashing), DEF(SET_UINT, director_max_parallel_moves), DEF(SET_UINT, director_max_parallel_kicks), DEF(SET_SIZE, director_output_buffer_size), SETTING_DEFINE_LIST_END }; const struct director_settings director_default_settings = { .master_user_separator = "", .director_servers = "", .director_mail_servers = "", .director_username_hash = "%Lu", .director_flush_socket = "", .director_user_expire = 60*15, .director_user_kick_delay = 2, .director_doveadm_port = 0, .director_max_parallel_moves = 100, .director_max_parallel_kicks = 100, .director_output_buffer_size = 10 * 1024 * 1024, }; const struct setting_parser_info director_setting_parser_info = { .module_name = "director", .defines = director_setting_defines, .defaults = &director_default_settings, .type_offset = (size_t)-1, .struct_size = sizeof(struct director_settings), .parent_offset = (size_t)-1, .check_func = director_settings_verify }; /* <settings checks> */ static bool director_settings_verify(void *_set, pool_t pool ATTR_UNUSED, const char **error_r) { struct director_settings *set = _set; if (set->director_user_expire < 10) { *error_r = "director_user_expire is too low"; return FALSE; } return TRUE; } /* </settings checks> */