annotate src/director/director-settings.c @ 22633:9284bdc3c5c5

director: Don't recreate timeout on every user lookup Recreate it only when the timeout should change.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sat, 04 Nov 2017 01:34:02 +0200
parents f733d647ff82
children 7fe2a998bc1f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 20940
diff changeset
1 /* Copyright (c) 2009-2017 Dovecot authors, see the included COPYING file */
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "buffer.h"
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "settings-parser.h"
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "service-settings.h"
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "director-settings.h"
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 /* <settings checks> */
16616
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
10 static bool director_settings_verify(void *_set, pool_t pool, const char **error_r);
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
11
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 static struct file_listener_settings director_unix_listeners_array[] = {
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 { "login/director", 0, "", "" },
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 { "director-admin", 0600, "", "" }
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 };
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 static struct file_listener_settings *director_unix_listeners[] = {
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 &director_unix_listeners_array[0],
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 &director_unix_listeners_array[1]
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 };
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 static buffer_t director_unix_listeners_buf = {
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 director_unix_listeners,
17397
f373df52082a treewide - mass cleanup of 0 used to end a settings list
Phil Carmody <phil@dovecot.fi>
parents: 17130
diff changeset
22 sizeof(director_unix_listeners), { NULL, }
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 };
11325
2a5336ad86cd director: Tell login proxy to notify director of open connections every director_user_expire/2 secs.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
24 static struct file_listener_settings director_fifo_listeners_array[] = {
2a5336ad86cd director: Tell login proxy to notify director of open connections every director_user_expire/2 secs.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
25 { "login/proxy-notify", 0, "", "" }
2a5336ad86cd director: Tell login proxy to notify director of open connections every director_user_expire/2 secs.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
26 };
2a5336ad86cd director: Tell login proxy to notify director of open connections every director_user_expire/2 secs.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
27 static struct file_listener_settings *director_fifo_listeners[] = {
2a5336ad86cd director: Tell login proxy to notify director of open connections every director_user_expire/2 secs.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
28 &director_fifo_listeners_array[0]
2a5336ad86cd director: Tell login proxy to notify director of open connections every director_user_expire/2 secs.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
29 };
2a5336ad86cd director: Tell login proxy to notify director of open connections every director_user_expire/2 secs.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
30 static buffer_t director_fifo_listeners_buf = {
2a5336ad86cd director: Tell login proxy to notify director of open connections every director_user_expire/2 secs.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
31 director_fifo_listeners,
17397
f373df52082a treewide - mass cleanup of 0 used to end a settings list
Phil Carmody <phil@dovecot.fi>
parents: 17130
diff changeset
32 sizeof(director_fifo_listeners), { NULL, }
11325
2a5336ad86cd director: Tell login proxy to notify director of open connections every director_user_expire/2 secs.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
33 };
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 /* </settings checks> */
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 struct service_settings director_service_settings = {
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 .name = "director",
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 .protocol = "",
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 .type = "",
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 .executable = "director",
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 .user = "$default_internal_user",
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 .group = "",
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 .privileged_group = "",
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 .extra_groups = "",
13810
eebee8a4d486 director: chroot to base_dir by default.
Timo Sirainen <tss@iki.fi>
parents: 13809
diff changeset
45 .chroot = ".",
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 .drop_priv_before_exec = FALSE,
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 .process_min_avail = 0,
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 .process_limit = 1,
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 .client_limit = 0,
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 .service_count = 0,
15904
d3cf06639864 Replaced all -1U and (unsigned int)-1 with UINT_MAX.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
53 .idle_kill = UINT_MAX,
12432
8793036f6de8 Services' default vsz_limit wasn't actually using default_vsz_limit but rather 4 GB.
Timo Sirainen <tss@iki.fi>
parents: 12166
diff changeset
54 .vsz_limit = (uoff_t)-1,
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 .unix_listeners = { { &director_unix_listeners_buf,
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 sizeof(director_unix_listeners[0]) } },
11325
2a5336ad86cd director: Tell login proxy to notify director of open connections every director_user_expire/2 secs.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
58 .fifo_listeners = { { &director_fifo_listeners_buf,
2a5336ad86cd director: Tell login proxy to notify director of open connections every director_user_expire/2 secs.
Timo Sirainen <tss@iki.fi>
parents: 11321
diff changeset
59 sizeof(director_fifo_listeners[0]) } },
12166
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 11883
diff changeset
60 .inet_listeners = ARRAY_INIT,
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 11883
diff changeset
61
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 11883
diff changeset
62 .process_limit_1 = TRUE
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 };
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 #undef DEF
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 #define DEF(type, name) \
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 { type, #name, offsetof(struct director_settings, name), NULL }
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 static const struct setting_define director_setting_defines[] = {
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 DEF(SET_STR, master_user_separator),
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 DEF(SET_STR, director_servers),
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 DEF(SET_STR, director_mail_servers),
14292
817ef4c9f1f3 Added director_username_hash setting to specify what part of the username is hashed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
73 DEF(SET_STR, director_username_hash),
20940
8de947fa3b4d director: Support flush socket
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 19552
diff changeset
74 DEF(SET_STR, director_flush_socket),
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 DEF(SET_TIME, director_user_expire),
19108
3ebba506c2c7 director: Added director_user_kick_delay setting.
Timo Sirainen <tss@iki.fi>
parents: 19035
diff changeset
76 DEF(SET_TIME, director_user_kick_delay),
19035
aabfe48db1cf Changed type of internet port values to in_port_t everywhere.
Stephan Bosch <stephan@rename-it.nl>
parents: 18137
diff changeset
77 DEF(SET_IN_PORT, director_doveadm_port),
18065
b9df3d654710 director: Added director_consistent_hashing setting.
Timo Sirainen <tss@iki.fi>
parents: 17397
diff changeset
78 DEF(SET_BOOL, director_consistent_hashing),
22623
f733d647ff82 director: Add director_output_buffer_size setting
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
79 DEF(SET_SIZE, director_output_buffer_size),
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 SETTING_DEFINE_LIST_END
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 };
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 const struct director_settings director_default_settings = {
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 .master_user_separator = "",
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 .director_servers = "",
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 .director_mail_servers = "",
14798
36c3d44a5ba3 director: Changed director_username_hash setting's default from %u to %Lu
Timo Sirainen <tss@iki.fi>
parents: 14292
diff changeset
89 .director_username_hash = "%Lu",
20940
8de947fa3b4d director: Support flush socket
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 19552
diff changeset
90 .director_flush_socket = "",
11883
ab85d17947db director: Added director_doveadm_port for accepting doveadm TCP connections.
Timo Sirainen <tss@iki.fi>
parents: 11631
diff changeset
91 .director_user_expire = 60*15,
19108
3ebba506c2c7 director: Added director_user_kick_delay setting.
Timo Sirainen <tss@iki.fi>
parents: 19035
diff changeset
92 .director_user_kick_delay = 2,
22623
f733d647ff82 director: Add director_output_buffer_size setting
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
93 .director_doveadm_port = 0,
f733d647ff82 director: Add director_output_buffer_size setting
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
94 .director_output_buffer_size = 10 * 1024 * 1024,
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 };
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 const struct setting_parser_info director_setting_parser_info = {
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 .module_name = "director",
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 .defines = director_setting_defines,
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 .defaults = &director_default_settings,
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 .type_offset = (size_t)-1,
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 .struct_size = sizeof(struct director_settings),
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104
16616
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
105 .parent_offset = (size_t)-1,
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
106
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
107 .check_func = director_settings_verify
11321
5f350b5ff6d9 Added initial implementation of a director process (for NFS users).
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 };
16616
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
109
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
110 /* <settings checks> */
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
111 static bool
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
112 director_settings_verify(void *_set, pool_t pool ATTR_UNUSED, const char **error_r)
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
113 {
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
114 struct director_settings *set = _set;
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
115
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
116 if (set->director_user_expire < 10) {
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
117 *error_r = "director_user_expire is too low";
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
118 return FALSE;
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
119 }
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
120 return TRUE;
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
121 }
d95ca476098c director: Don't allow director_user_expire to be less than 10 seconds.
Timo Sirainen <tss@iki.fi>
parents: 15904
diff changeset
122 /* </settings checks> */