Mercurial > dovecot > core-2.2
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 |
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> */ |