annotate src/master/master-settings.c @ 23017:c1d36f2575c7 default tip

lib-imap: Fix "Don't accept strings with NULs" cherry-pick
author Timo Sirainen <timo.sirainen@open-xchange.com>
date Thu, 29 Aug 2019 09:55:25 +0300
parents cb108f786fb4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22713
cb108f786fb4 Updated copyright notices to include the year 2018.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 22485
diff changeset
1 /* Copyright (c) 2005-2018 Dovecot authors, see the included COPYING file */
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "common.h"
3975
9de8bce1077e Added plugin {} section to dovecot.conf for passing extra environment
Timo Sirainen <tss@iki.fi>
parents: 3921
diff changeset
4 #include "array.h"
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
5 #include "env-util.h"
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "istream.h"
15187
02451e967a06 Renamed network.[ch] to net.[ch].
Timo Sirainen <tss@iki.fi>
parents: 15049
diff changeset
7 #include "net.h"
9226
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
8 #include "str.h"
13060
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
9 #include "ipwd.h"
3900
7ee2fc733bf6 Fix base_dir permissions if it exists
Timo Sirainen <tss@iki.fi>
parents: 3889
diff changeset
10 #include "mkdir-parents.h"
9226
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
11 #include "safe-mkdir.h"
13756
540d9d296dc9 master: Log a warning at startup if fd limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 13072
diff changeset
12 #include "restrict-process-size.h"
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
13 #include "settings-parser.h"
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
14 #include "master-settings.h"
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 #include <stddef.h>
3901
0ae5f5b468b7 Put ssl-parameters file into login directory so it still can be accessed
Timo Sirainen <tss@iki.fi>
parents: 3900
diff changeset
17 #include <dirent.h>
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 #include <unistd.h>
3854
fee060a82236 /var/run/dovecot can be world-readable. Default to it, and don't try to
Timo Sirainen <tss@iki.fi>
parents: 3845
diff changeset
19 #include <sys/stat.h>
4197
c3ded5b815aa If we have plugins set and imap_capability unset, figure out the IMAP
Timo Sirainen <tss@iki.fi>
parents: 4190
diff changeset
20 #include <sys/wait.h>
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
22 static bool master_settings_verify(void *_set, pool_t pool,
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
23 const char **error_r);
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
24
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
25 extern const struct setting_parser_info service_setting_parser_info;
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
26
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
27 #undef DEF
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
28 #define DEF(type, name) \
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
29 { type, #name, offsetof(struct file_listener_settings, name), NULL }
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
30
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
31 static const struct setting_define file_listener_setting_defines[] = {
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
32 DEF(SET_STR, path),
10555
4d703a15d6b8 master: Changed unix_listener mode setting to octal type.
Timo Sirainen <tss@iki.fi>
parents: 10538
diff changeset
33 DEF(SET_UINT_OCT, mode),
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
34 DEF(SET_STR, user),
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
35 DEF(SET_STR, group),
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
36
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
37 SETTING_DEFINE_LIST_END
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
38 };
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
39
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
40 static const struct file_listener_settings file_listener_default_settings = {
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
41 .path = "",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
42 .mode = 0600,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
43 .user = "",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
44 .group = "",
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
45 };
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
46
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
47 static const struct setting_parser_info file_listener_setting_parser_info = {
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
48 .defines = file_listener_setting_defines,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
49 .defaults = &file_listener_default_settings,
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
50
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
51 .type_offset = offsetof(struct file_listener_settings, path),
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
52 .struct_size = sizeof(struct file_listener_settings),
10106
5a25b4ec5694 Reordered struct setting_parser_info fields to make using them easier.
Timo Sirainen <tss@iki.fi>
parents: 10101
diff changeset
53
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
54 .parent_offset = (size_t)-1,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
55 .parent = &service_setting_parser_info
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1592
diff changeset
56 };
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1592
diff changeset
57
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
58 #undef DEF
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
59 #define DEF(type, name) \
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
60 { type, #name, offsetof(struct inet_listener_settings, name), NULL }
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
61
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
62 static const struct setting_define inet_listener_setting_defines[] = {
10595
9ab4539b736d Added default inet_listeners for imap/pop3-login.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
63 DEF(SET_STR, name),
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
64 DEF(SET_STR, address),
19077
f17065f4f9f2 Removed SET_IN_PORT_ZERO - SET_IN_PORT now always allows zeros as well.
Timo Sirainen <tss@iki.fi>
parents: 19041
diff changeset
65 DEF(SET_IN_PORT, port),
9218
4a42f694b762 inet_listeners now support ssl=yes. For now only login processes support it.
Timo Sirainen <tss@iki.fi>
parents: 9213
diff changeset
66 DEF(SET_BOOL, ssl),
16823
a991a0547daa master: Added reuse_port setting to inet_listeners, which enables SO_REUSEPORT if available.
Timo Sirainen <tss@iki.fi>
parents: 16310
diff changeset
67 DEF(SET_BOOL, reuse_port),
18952
4d7a83ddb644 lib-master: Added support for HAProxy protocol.
Timo Sirainen <tss@iki.fi>
parents: 18188
diff changeset
68 DEF(SET_BOOL, haproxy),
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
69
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
70 SETTING_DEFINE_LIST_END
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
71 };
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
72
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
73 static const struct inet_listener_settings inet_listener_default_settings = {
10595
9ab4539b736d Added default inet_listeners for imap/pop3-login.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
74 .name = "",
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
75 .address = "",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
76 .port = 0,
16823
a991a0547daa master: Added reuse_port setting to inet_listeners, which enables SO_REUSEPORT if available.
Timo Sirainen <tss@iki.fi>
parents: 16310
diff changeset
77 .ssl = FALSE,
18952
4d7a83ddb644 lib-master: Added support for HAProxy protocol.
Timo Sirainen <tss@iki.fi>
parents: 18188
diff changeset
78 .reuse_port = FALSE,
4d7a83ddb644 lib-master: Added support for HAProxy protocol.
Timo Sirainen <tss@iki.fi>
parents: 18188
diff changeset
79 .haproxy = FALSE
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
80 };
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
81
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
82 static const struct setting_parser_info inet_listener_setting_parser_info = {
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
83 .defines = inet_listener_setting_defines,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
84 .defaults = &inet_listener_default_settings,
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
85
10595
9ab4539b736d Added default inet_listeners for imap/pop3-login.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
86 .type_offset = offsetof(struct inet_listener_settings, name),
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
87 .struct_size = sizeof(struct inet_listener_settings),
10106
5a25b4ec5694 Reordered struct setting_parser_info fields to make using them easier.
Timo Sirainen <tss@iki.fi>
parents: 10101
diff changeset
88
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
89 .parent_offset = (size_t)-1,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
90 .parent = &service_setting_parser_info
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
91 };
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1592
diff changeset
92
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
93 #undef DEF
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
94 #undef DEFLIST
10176
9e0123366fc5 services, unix/fifo_listeners and namespaces are now sections with unique name.
Timo Sirainen <tss@iki.fi>
parents: 10173
diff changeset
95 #undef DEFLIST_UNIQUE
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
96 #define DEF(type, name) \
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
97 { type, #name, offsetof(struct service_settings, name), NULL }
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
98 #define DEFLIST(field, name, defines) \
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
99 { SET_DEFLIST, name, offsetof(struct service_settings, field), defines }
10176
9e0123366fc5 services, unix/fifo_listeners and namespaces are now sections with unique name.
Timo Sirainen <tss@iki.fi>
parents: 10173
diff changeset
100 #define DEFLIST_UNIQUE(field, name, defines) \
9e0123366fc5 services, unix/fifo_listeners and namespaces are now sections with unique name.
Timo Sirainen <tss@iki.fi>
parents: 10173
diff changeset
101 { SET_DEFLIST_UNIQUE, name, offsetof(struct service_settings, field), defines }
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
102
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
103 static const struct setting_define service_setting_defines[] = {
9213
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
104 DEF(SET_STR, name),
9837
2fa181d56c20 protocols setting works again.
Timo Sirainen <tss@iki.fi>
parents: 9281
diff changeset
105 DEF(SET_STR, protocol),
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
106 DEF(SET_STR, type),
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
107 DEF(SET_STR, executable),
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
108 DEF(SET_STR, user),
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
109 DEF(SET_STR, group),
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
110 DEF(SET_STR, privileged_group),
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
111 DEF(SET_STR, extra_groups),
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
112 DEF(SET_STR, chroot),
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
113
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
114 DEF(SET_BOOL, drop_priv_before_exec),
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
115
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
116 DEF(SET_UINT, process_min_avail),
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
117 DEF(SET_UINT, process_limit),
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
118 DEF(SET_UINT, client_limit),
9839
d76916a6df44 Added service_count setting to limit how many requests a service can handle before dying.
Timo Sirainen <tss@iki.fi>
parents: 9837
diff changeset
119 DEF(SET_UINT, service_count),
11631
d41694c931d0 Added support for per-service idle kill timeout.
Timo Sirainen <tss@iki.fi>
parents: 11307
diff changeset
120 DEF(SET_TIME, idle_kill),
10281
4b663b9e63af Added "size" setting type, which supports B/k/M/G/T suffixes.
Timo Sirainen <tss@iki.fi>
parents: 10190
diff changeset
121 DEF(SET_SIZE, vsz_limit),
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
122
10176
9e0123366fc5 services, unix/fifo_listeners and namespaces are now sections with unique name.
Timo Sirainen <tss@iki.fi>
parents: 10173
diff changeset
123 DEFLIST_UNIQUE(unix_listeners, "unix_listener",
9e0123366fc5 services, unix/fifo_listeners and namespaces are now sections with unique name.
Timo Sirainen <tss@iki.fi>
parents: 10173
diff changeset
124 &file_listener_setting_parser_info),
9e0123366fc5 services, unix/fifo_listeners and namespaces are now sections with unique name.
Timo Sirainen <tss@iki.fi>
parents: 10173
diff changeset
125 DEFLIST_UNIQUE(fifo_listeners, "fifo_listener",
9e0123366fc5 services, unix/fifo_listeners and namespaces are now sections with unique name.
Timo Sirainen <tss@iki.fi>
parents: 10173
diff changeset
126 &file_listener_setting_parser_info),
10595
9ab4539b736d Added default inet_listeners for imap/pop3-login.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
127 DEFLIST_UNIQUE(inet_listeners, "inet_listener",
9ab4539b736d Added default inet_listeners for imap/pop3-login.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
128 &inet_listener_setting_parser_info),
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1592
diff changeset
129
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
130 SETTING_DEFINE_LIST_END
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1592
diff changeset
131 };
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1592
diff changeset
132
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
133 static const struct service_settings service_default_settings = {
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
134 .name = "",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
135 .protocol = "",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
136 .type = "",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
137 .executable = "",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
138 .user = "",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
139 .group = "",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
140 .privileged_group = "",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
141 .extra_groups = "",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
142 .chroot = "",
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
143
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
144 .drop_priv_before_exec = FALSE,
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
145
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
146 .process_min_avail = 0,
12370
b4b6bf889044 master: default_process_limit wasn't actually used anywhere, rather the default was unlimited.
Timo Sirainen <tss@iki.fi>
parents: 12166
diff changeset
147 .process_limit = 0,
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
148 .client_limit = 0,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
149 .service_count = 0,
11631
d41694c931d0 Added support for per-service idle kill timeout.
Timo Sirainen <tss@iki.fi>
parents: 11307
diff changeset
150 .idle_kill = 0,
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
151 .vsz_limit = (uoff_t)-1,
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
152
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
153 .unix_listeners = ARRAY_INIT,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
154 .fifo_listeners = ARRAY_INIT,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
155 .inet_listeners = ARRAY_INIT
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
156 };
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
157
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
158 const struct setting_parser_info service_setting_parser_info = {
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
159 .defines = service_setting_defines,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
160 .defaults = &service_default_settings,
5474
331337b735c9 Added type checks to setting defines.
Timo Sirainen <tss@iki.fi>
parents: 5439
diff changeset
161
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
162 .type_offset = offsetof(struct service_settings, name),
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
163 .struct_size = sizeof(struct service_settings),
5474
331337b735c9 Added type checks to setting defines.
Timo Sirainen <tss@iki.fi>
parents: 5439
diff changeset
164
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
165 .parent_offset = offsetof(struct service_settings, master_set),
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
166 .parent = &master_setting_parser_info
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
167 };
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
169 #undef DEF
10176
9e0123366fc5 services, unix/fifo_listeners and namespaces are now sections with unique name.
Timo Sirainen <tss@iki.fi>
parents: 10173
diff changeset
170 #undef DEFLIST_UNIQUE
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
171 #define DEF(type, name) \
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
172 { type, #name, offsetof(struct master_settings, name), NULL }
10176
9e0123366fc5 services, unix/fifo_listeners and namespaces are now sections with unique name.
Timo Sirainen <tss@iki.fi>
parents: 10173
diff changeset
173 #define DEFLIST_UNIQUE(field, name, defines) \
9e0123366fc5 services, unix/fifo_listeners and namespaces are now sections with unique name.
Timo Sirainen <tss@iki.fi>
parents: 10173
diff changeset
174 { SET_DEFLIST_UNIQUE, name, offsetof(struct master_settings, field), defines }
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
175
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
176 static const struct setting_define master_setting_defines[] = {
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
177 DEF(SET_STR, base_dir),
14950
543852ebb327 Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents: 14749
diff changeset
178 DEF(SET_STR, state_dir),
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
179 DEF(SET_STR, libexec_dir),
13972
e1f21a4ef417 master: Added instance_name setting, which is used to prefix processes in ps output.
Timo Sirainen <tss@iki.fi>
parents: 13922
diff changeset
180 DEF(SET_STR, instance_name),
9837
2fa181d56c20 protocols setting works again.
Timo Sirainen <tss@iki.fi>
parents: 9281
diff changeset
181 DEF(SET_STR, protocols),
10023
f69fda5d7af5 master: Added back "listen" setting, which is the default address for inet_listeners.
Timo Sirainen <tss@iki.fi>
parents: 10008
diff changeset
182 DEF(SET_STR, listen),
9841
331cf0bd593e master: If ssl=no, skip inet_listeners with ssl=yes.
Timo Sirainen <tss@iki.fi>
parents: 9839
diff changeset
183 DEF(SET_ENUM, ssl),
10705
bf84cb98bd04 Added default_internal_user and default_login_user settings, which services use as default users.
Timo Sirainen <tss@iki.fi>
parents: 10595
diff changeset
184 DEF(SET_STR, default_internal_user),
bf84cb98bd04 Added default_internal_user and default_login_user settings, which services use as default users.
Timo Sirainen <tss@iki.fi>
parents: 10595
diff changeset
185 DEF(SET_STR, default_login_user),
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
186 DEF(SET_UINT, default_process_limit),
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
187 DEF(SET_UINT, default_client_limit),
13922
1362d8bda03c master: default_idle_kill setting wasn't "time" type.
Timo Sirainen <tss@iki.fi>
parents: 13799
diff changeset
188 DEF(SET_TIME, default_idle_kill),
10281
4b663b9e63af Added "size" setting type, which supports B/k/M/G/T suffixes.
Timo Sirainen <tss@iki.fi>
parents: 10190
diff changeset
189 DEF(SET_SIZE, default_vsz_limit),
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
190
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
191 DEF(SET_BOOL, version_ignore),
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
192
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
193 DEF(SET_UINT, first_valid_uid),
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
194 DEF(SET_UINT, last_valid_uid),
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
195 DEF(SET_UINT, first_valid_gid),
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
196 DEF(SET_UINT, last_valid_gid),
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
197
10176
9e0123366fc5 services, unix/fifo_listeners and namespaces are now sections with unique name.
Timo Sirainen <tss@iki.fi>
parents: 10173
diff changeset
198 DEFLIST_UNIQUE(services, "service", &service_setting_parser_info),
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
199
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
200 SETTING_DEFINE_LIST_END
3183
16ea551957ed Replaced userdb/passdb settings with blocks so it's possible to give
Timo Sirainen <tss@iki.fi>
parents: 3166
diff changeset
201 };
16ea551957ed Replaced userdb/passdb settings with blocks so it's possible to give
Timo Sirainen <tss@iki.fi>
parents: 3166
diff changeset
202
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
203 static const struct master_settings master_default_settings = {
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
204 .base_dir = PKG_RUNDIR,
14950
543852ebb327 Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents: 14749
diff changeset
205 .state_dir = PKG_STATEDIR,
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
206 .libexec_dir = PKG_LIBEXECDIR,
13972
e1f21a4ef417 master: Added instance_name setting, which is used to prefix processes in ps output.
Timo Sirainen <tss@iki.fi>
parents: 13922
diff changeset
207 .instance_name = PACKAGE,
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
208 .protocols = "imap pop3 lmtp",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
209 .listen = "*, ::",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
210 .ssl = "yes:no:required",
10705
bf84cb98bd04 Added default_internal_user and default_login_user settings, which services use as default users.
Timo Sirainen <tss@iki.fi>
parents: 10595
diff changeset
211 .default_internal_user = "dovecot",
11272
79a3aef47ddf Changed default_internal_user to dovenull.
Timo Sirainen <tss@iki.fi>
parents: 11149
diff changeset
212 .default_login_user = "dovenull",
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
213 .default_process_limit = 100,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
214 .default_client_limit = 1000,
11631
d41694c931d0 Added support for per-service idle kill timeout.
Timo Sirainen <tss@iki.fi>
parents: 11307
diff changeset
215 .default_idle_kill = 60,
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
216 .default_vsz_limit = 256*1024*1024,
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
217
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
218 .version_ignore = FALSE,
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
219
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
220 .first_valid_uid = 500,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
221 .last_valid_uid = 0,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
222 .first_valid_gid = 1,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
223 .last_valid_gid = 0,
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
224
10179
afe52d60989c Moved default service settings from master.conf to source code.
Timo Sirainen <tss@iki.fi>
parents: 10178
diff changeset
225 #ifndef CONFIG_BINARY
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
226 .services = ARRAY_INIT
10179
afe52d60989c Moved default service settings from master.conf to source code.
Timo Sirainen <tss@iki.fi>
parents: 10178
diff changeset
227 #else
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
228 .services = { { &config_all_services_buf,
10179
afe52d60989c Moved default service settings from master.conf to source code.
Timo Sirainen <tss@iki.fi>
parents: 10178
diff changeset
229 sizeof(struct service_settings *) } },
afe52d60989c Moved default service settings from master.conf to source code.
Timo Sirainen <tss@iki.fi>
parents: 10178
diff changeset
230 #endif
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
231 };
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
232
10177
d589d568a19d Changed all settings related structs to const and changed APIs to make it work.
Timo Sirainen <tss@iki.fi>
parents: 10176
diff changeset
233 const struct setting_parser_info master_setting_parser_info = {
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
234 .module_name = "master",
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
235 .defines = master_setting_defines,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
236 .defaults = &master_default_settings,
1330
7cde19dbe754 Moved auth_username_chars from db-pgsql to generic for all. Some other
Timo Sirainen <tss@iki.fi>
parents: 1328
diff changeset
237
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
238 .type_offset = (size_t)-1,
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
239 .struct_size = sizeof(struct master_settings),
10106
5a25b4ec5694 Reordered struct setting_parser_info fields to make using them easier.
Timo Sirainen <tss@iki.fi>
parents: 10101
diff changeset
240
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
241 .parent_offset = (size_t)-1,
10106
5a25b4ec5694 Reordered struct setting_parser_info fields to make using them easier.
Timo Sirainen <tss@iki.fi>
parents: 10101
diff changeset
242
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 10406
diff changeset
243 .check_func = master_settings_verify
4388
af61031c746f Settings parser nowadays returns "" instead of NULL when it reads an empty
Timo Sirainen <tss@iki.fi>
parents: 4326
diff changeset
244 };
af61031c746f Settings parser nowadays returns "" instead of NULL when it reads an empty
Timo Sirainen <tss@iki.fi>
parents: 4326
diff changeset
245
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
246 /* <settings checks> */
10915
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
247 static void
12003
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
248 expand_user(const char **user, enum service_user_default *default_r,
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
249 const struct master_settings *set)
10915
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
250 {
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
251 /* $variable expansion is typically done by doveconf, but these
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
252 variables can come from built-in settings, so we need to expand
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
253 them here */
12003
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
254 if (strcmp(*user, "$default_internal_user") == 0) {
10915
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
255 *user = set->default_internal_user;
12003
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
256 *default_r = SERVICE_USER_DEFAULT_INTERNAL;
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
257 } else if (strcmp(*user, "$default_login_user") == 0) {
10915
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
258 *user = set->default_login_user;
12003
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
259 *default_r = SERVICE_USER_DEFAULT_LOGIN;
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
260 } else {
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
261 *default_r = SERVICE_USER_DEFAULT_NONE;
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
262 }
10915
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
263 }
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
264
20271
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
265 static bool
10915
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
266 fix_file_listener_paths(ARRAY_TYPE(file_listener_settings) *l,
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
267 pool_t pool, const struct master_settings *master_set,
20271
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
268 ARRAY_TYPE(const_string) *all_listeners,
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
269 const char **error_r)
4197
c3ded5b815aa If we have plugins set and imap_capability unset, figure out the IMAP
Timo Sirainen <tss@iki.fi>
parents: 4190
diff changeset
270 {
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
271 struct file_listener_settings *const *sets;
21322
5ab8dc1a4a6f global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21115
diff changeset
272 size_t base_dir_len = strlen(master_set->base_dir);
12003
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
273 enum service_user_default user_default;
8585
24ccf040026b Added a bit more generic get_process_capability() function.
Timo Sirainen <tss@iki.fi>
parents: 8584
diff changeset
274
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
275 if (!array_is_created(l))
20271
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
276 return TRUE;
8585
24ccf040026b Added a bit more generic get_process_capability() function.
Timo Sirainen <tss@iki.fi>
parents: 8584
diff changeset
277
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
278 array_foreach(l, sets) {
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
279 struct file_listener_settings *set = *sets;
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
280
20271
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
281 if (set->path[0] == '\0') {
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
282 *error_r = "path must not be empty";
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
283 return FALSE;
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
284 }
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
285
12003
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
286 expand_user(&set->user, &user_default, master_set);
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
287 if (*set->path != '/') {
10915
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
288 set->path = p_strconcat(pool, master_set->base_dir, "/",
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
289 set->path, NULL);
10915
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
290 } else if (strncmp(set->path, master_set->base_dir,
7fd91455b66e master: login dir was created with wrong group.
Timo Sirainen <tss@iki.fi>
parents: 10914
diff changeset
291 base_dir_len) == 0 &&
10538
6f67d3ce4ac4 master: Log warning if unix_listener begins with base_dir's path.
Timo Sirainen <tss@iki.fi>
parents: 10535
diff changeset
292 set->path[base_dir_len] == '/') {
6f67d3ce4ac4 master: Log warning if unix_listener begins with base_dir's path.
Timo Sirainen <tss@iki.fi>
parents: 10535
diff changeset
293 i_warning("You should remove base_dir prefix from "
6f67d3ce4ac4 master: Log warning if unix_listener begins with base_dir's path.
Timo Sirainen <tss@iki.fi>
parents: 10535
diff changeset
294 "unix_listener: %s", set->path);
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
295 }
11307
706e411a134d master: Don't include disabled unix/fifo_listeners in duplicate checks.
Timo Sirainen <tss@iki.fi>
parents: 11272
diff changeset
296 if (set->mode != 0)
706e411a134d master: Don't include disabled unix/fifo_listeners in duplicate checks.
Timo Sirainen <tss@iki.fi>
parents: 11272
diff changeset
297 array_append(all_listeners, &set->path, 1);
10375
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
298 }
20271
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
299 return TRUE;
10375
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
300 }
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
301
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
302 static void add_inet_listeners(ARRAY_TYPE(inet_listener_settings) *l,
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
303 ARRAY_TYPE(const_string) *all_listeners)
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
304 {
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
305 struct inet_listener_settings *const *sets;
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
306 const char *str;
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
307
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
308 if (!array_is_created(l))
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
309 return;
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
310
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
311 array_foreach(l, sets) {
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
312 struct inet_listener_settings *set = *sets;
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
313
10873
7c2e38d7390c master: Don't complain about duplicate inet_listeners with port=0 (they're ignored).
Timo Sirainen <tss@iki.fi>
parents: 10705
diff changeset
314 if (set->port != 0) {
19035
aabfe48db1cf Changed type of internet port values to in_port_t everywhere.
Stephan Bosch <stephan@rename-it.nl>
parents: 18952
diff changeset
315 str = t_strdup_printf("%u:%s", set->port, set->address);
10873
7c2e38d7390c master: Don't complain about duplicate inet_listeners with port=0 (they're ignored).
Timo Sirainen <tss@iki.fi>
parents: 10705
diff changeset
316 array_append(all_listeners, &str, 1);
7c2e38d7390c master: Don't complain about duplicate inet_listeners with port=0 (they're ignored).
Timo Sirainen <tss@iki.fi>
parents: 10705
diff changeset
317 }
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
318 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
319 }
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
320
10101
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
321 static bool master_settings_parse_type(struct service_settings *set,
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
322 const char **error_r)
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
323 {
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
324 if (*set->type == '\0')
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
325 set->parsed_type = SERVICE_TYPE_UNKNOWN;
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
326 else if (strcmp(set->type, "log") == 0)
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
327 set->parsed_type = SERVICE_TYPE_LOG;
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
328 else if (strcmp(set->type, "config") == 0)
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
329 set->parsed_type = SERVICE_TYPE_CONFIG;
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
330 else if (strcmp(set->type, "anvil") == 0)
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
331 set->parsed_type = SERVICE_TYPE_ANVIL;
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
332 else if (strcmp(set->type, "login") == 0)
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
333 set->parsed_type = SERVICE_TYPE_LOGIN;
11968
351948b4dc6c master: Added service type=startup for starting one service process at startup.
Timo Sirainen <tss@iki.fi>
parents: 11631
diff changeset
334 else if (strcmp(set->type, "startup") == 0)
351948b4dc6c master: Added service type=startup for starting one service process at startup.
Timo Sirainen <tss@iki.fi>
parents: 11631
diff changeset
335 set->parsed_type = SERVICE_TYPE_STARTUP;
10101
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
336 else {
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
337 *error_r = t_strconcat("Unknown service type: ",
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
338 set->type, NULL);
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
339 return FALSE;
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
340 }
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
341 return TRUE;
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
342 }
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
343
10116
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
344 static void service_set_login_dump_core(struct service_settings *set)
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
345 {
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
346 const char *p;
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
347
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
348 if (set->parsed_type != SERVICE_TYPE_LOGIN)
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
349 return;
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
350
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
351 p = strstr(set->executable, " -D");
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
352 if (p != NULL && (p[3] == '\0' || p[3] == ' '))
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
353 set->login_dump_core = TRUE;
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
354 }
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
355
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
356 static bool
10535
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
357 services_have_protocol(struct master_settings *set, const char *name)
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
358 {
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
359 struct service_settings *const *services;
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
360
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
361 array_foreach(&set->services, services) {
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
362 struct service_settings *service = *services;
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
363
10977
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
364 if (strcmp(service->protocol, name) == 0)
10535
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
365 return TRUE;
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
366 }
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
367 return FALSE;
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
368 }
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
369
12166
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
370 #ifdef CONFIG_BINARY
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
371 static const struct service_settings *
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
372 master_default_settings_get_service(const char *name)
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
373 {
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
374 extern struct master_settings master_default_settings;
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
375 struct service_settings *const *setp;
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
376
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
377 array_foreach(&master_default_settings.services, setp) {
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
378 if (strcmp((*setp)->name, name) == 0)
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
379 return *setp;
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
380 }
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
381 return NULL;
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
382 }
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
383 #endif
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
384
12376
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
385 static unsigned int
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
386 service_get_client_limit(struct master_settings *set, const char *name)
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
387 {
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
388 struct service_settings *const *servicep;
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
389
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
390 array_foreach(&set->services, servicep) {
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
391 if (strcmp((*servicep)->name, name) == 0) {
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
392 if ((*servicep)->client_limit != 0)
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
393 return (*servicep)->client_limit;
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
394 else
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
395 return set->default_client_limit;
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
396 }
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
397 }
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
398 return set->default_client_limit;
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
399 }
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
400
10535
e4e31fa845a5 master: Give error message with unknown names in protocols setting.
Timo Sirainen <tss@iki.fi>
parents: 10495
diff changeset
401 static bool
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
402 master_settings_verify(void *_set, pool_t pool, const char **error_r)
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
403 {
12376
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
404 static int warned_auth = FALSE, warned_anvil = FALSE;
9837
2fa181d56c20 protocols setting works again.
Timo Sirainen <tss@iki.fi>
parents: 9281
diff changeset
405 struct master_settings *set = _set;
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
406 struct service_settings *const *services;
10375
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
407 const char *const *strings;
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
408 ARRAY_TYPE(const_string) all_listeners;
13060
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
409 struct passwd pw;
21322
5ab8dc1a4a6f global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21115
diff changeset
410 unsigned int i, j, count, client_limit, process_limit;
12376
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
411 unsigned int max_auth_client_processes, max_anvil_client_processes;
21322
5ab8dc1a4a6f global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21115
diff changeset
412 size_t len;
13758
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
413 #ifdef CONFIG_BINARY
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
414 const struct service_settings *default_service;
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
415 #else
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
416 rlim_t fd_limit;
16310
2bf265dc0e68 master: Fixed warning log message.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
417 const char *max_client_limit_source = "default_client_limit";
13758
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
418 unsigned int max_client_limit = set->default_client_limit;
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
419 #endif
9002
9d0037a997f4 Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents: 8692
diff changeset
420
20313
a54a915c7e4d master: make setting listen empty an error
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20271
diff changeset
421 if (*set->listen == '\0') {
a54a915c7e4d master: make setting listen empty an error
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20271
diff changeset
422 *error_r = "listen can't be set empty";
a54a915c7e4d master: make setting listen empty an error
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20271
diff changeset
423 return FALSE;
a54a915c7e4d master: make setting listen empty an error
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20271
diff changeset
424 }
a54a915c7e4d master: make setting listen empty an error
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20271
diff changeset
425
10979
2fde82ea7cd9 config: Avoid problems with trailing '/' in base_dir.
Timo Sirainen <tss@iki.fi>
parents: 10977
diff changeset
426 len = strlen(set->base_dir);
2fde82ea7cd9 config: Avoid problems with trailing '/' in base_dir.
Timo Sirainen <tss@iki.fi>
parents: 10977
diff changeset
427 if (len > 0 && set->base_dir[len-1] == '/') {
2fde82ea7cd9 config: Avoid problems with trailing '/' in base_dir.
Timo Sirainen <tss@iki.fi>
parents: 10977
diff changeset
428 /* drop trailing '/' */
2fde82ea7cd9 config: Avoid problems with trailing '/' in base_dir.
Timo Sirainen <tss@iki.fi>
parents: 10977
diff changeset
429 set->base_dir = p_strndup(pool, set->base_dir, len - 1);
2fde82ea7cd9 config: Avoid problems with trailing '/' in base_dir.
Timo Sirainen <tss@iki.fi>
parents: 10977
diff changeset
430 }
2fde82ea7cd9 config: Avoid problems with trailing '/' in base_dir.
Timo Sirainen <tss@iki.fi>
parents: 10977
diff changeset
431
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
432 if (set->last_valid_uid != 0 &&
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
433 set->first_valid_uid > set->last_valid_uid) {
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
434 *error_r = "first_valid_uid can't be larger than last_valid_uid";
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
435 return FALSE;
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
436 }
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
437 if (set->last_valid_gid != 0 &&
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
438 set->first_valid_gid > set->last_valid_gid) {
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
439 *error_r = "first_valid_gid can't be larger than last_valid_gid";
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
440 return FALSE;
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
441 }
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
442
13060
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
443 if (i_getpwnam(set->default_login_user, &pw) == 0) {
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
444 *error_r = t_strdup_printf("default_login_user doesn't exist: %s",
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
445 set->default_login_user);
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
446 return FALSE;
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
447 }
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
448 if (i_getpwnam(set->default_internal_user, &pw) == 0) {
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
449 *error_r = t_strdup_printf("default_internal_user doesn't exist: %s",
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
450 set->default_internal_user);
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
451 return FALSE;
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
452 }
99da5f4f375d master: Fail at startup if default_login_user or default_internal_user doesn't exist.
Timo Sirainen <tss@iki.fi>
parents: 13000
diff changeset
453
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
454 /* check that we have at least one service. the actual service
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
455 structure validity is checked later while creating them. */
9857
0830fbbdfecd settings: Don't crash if no namespaces or services have been created.
Timo Sirainen <tss@iki.fi>
parents: 9841
diff changeset
456 if (!array_is_created(&set->services) ||
0830fbbdfecd settings: Don't crash if no namespaces or services have been created.
Timo Sirainen <tss@iki.fi>
parents: 9841
diff changeset
457 array_count(&set->services) == 0) {
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
458 *error_r = "No services defined";
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
459 return FALSE;
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
460 }
9857
0830fbbdfecd settings: Don't crash if no namespaces or services have been created.
Timo Sirainen <tss@iki.fi>
parents: 9841
diff changeset
461 services = array_get(&set->services, &count);
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
462 for (i = 0; i < count; i++) {
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
463 struct service_settings *service = services[i];
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
464
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
465 if (*service->name == '\0') {
9213
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
466 *error_r = t_strdup_printf(
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
467 "Service #%d is missing name", i);
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
468 return FALSE;
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
469 }
10101
4fe8c4382712 Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents: 10072
diff changeset
470 if (!master_settings_parse_type(service, error_r))
9230
d83bfe8c38c2 Verify that service type string is known. Removed auth-destination type.
Timo Sirainen <tss@iki.fi>
parents: 9226
diff changeset
471 return FALSE;
9213
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
472 for (j = 0; j < i; j++) {
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
473 if (strcmp(service->name, services[j]->name) == 0) {
9213
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
474 *error_r = t_strdup_printf(
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
475 "Duplicate service name: %s",
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
476 service->name);
9213
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
477 return FALSE;
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
478 }
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
479 }
12003
a2e60bd5d9a7 master: Give better error messages for unknown users/groups.
Timo Sirainen <tss@iki.fi>
parents: 11968
diff changeset
480 expand_user(&service->user, &service->user_default, set);
10116
50db5e7bddd9 Fixed login processes' core dump handling.
Timo Sirainen <tss@iki.fi>
parents: 10107
diff changeset
481 service_set_login_dump_core(service);
9213
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
482 }
11149
ca663b6f63a4 master: Require protocols=none to not have any protocols.
Timo Sirainen <tss@iki.fi>
parents: 10979
diff changeset
483 set->protocols_split = p_strsplit_spaces(pool, set->protocols, " ");
12820
a6382acebe7e master: Allow protocols value to be empty (= same as "none")
Timo Sirainen <tss@iki.fi>
parents: 12726
diff changeset
484 if (set->protocols_split[0] != NULL &&
a6382acebe7e master: Allow protocols value to be empty (= same as "none")
Timo Sirainen <tss@iki.fi>
parents: 12726
diff changeset
485 strcmp(set->protocols_split[0], "none") == 0 &&
11149
ca663b6f63a4 master: Require protocols=none to not have any protocols.
Timo Sirainen <tss@iki.fi>
parents: 10979
diff changeset
486 set->protocols_split[1] == NULL)
ca663b6f63a4 master: Require protocols=none to not have any protocols.
Timo Sirainen <tss@iki.fi>
parents: 10979
diff changeset
487 set->protocols_split[0] = NULL;
ca663b6f63a4 master: Require protocols=none to not have any protocols.
Timo Sirainen <tss@iki.fi>
parents: 10979
diff changeset
488
10977
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
489 for (i = 0; set->protocols_split[i] != NULL; i++) {
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
490 if (!services_have_protocol(set, set->protocols_split[i])) {
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
491 *error_r = t_strdup_printf("protocols: "
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
492 "Unknown protocol: %s",
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
493 set->protocols_split[i]);
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
494 return FALSE;
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
495 }
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
496 }
10375
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
497 t_array_init(&all_listeners, 64);
12376
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
498 max_auth_client_processes = 0;
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
499 max_anvil_client_processes = 2; /* blocking, nonblocking pipes */
9213
7b3accdf44f8 Require each service to have a unique name. Log service errors using service_error().
Timo Sirainen <tss@iki.fi>
parents: 9211
diff changeset
500 for (i = 0; i < count; i++) {
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
501 struct service_settings *service = services[i];
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
502
15303
4d268e810c15 master: If service { protocol } is set and not included in "protocols", ignore its settings
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
503 if (*service->protocol != '\0' &&
4d268e810c15 master: If service { protocol } is set and not included in "protocols", ignore its settings
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
504 !str_array_find((const char **)set->protocols_split,
4d268e810c15 master: If service { protocol } is set and not included in "protocols", ignore its settings
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
505 service->protocol)) {
4d268e810c15 master: If service { protocol } is set and not included in "protocols", ignore its settings
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
506 /* protocol not enabled, ignore its settings */
4d268e810c15 master: If service { protocol } is set and not included in "protocols", ignore its settings
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
507 continue;
4d268e810c15 master: If service { protocol } is set and not included in "protocols", ignore its settings
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
508 }
4d268e810c15 master: If service { protocol } is set and not included in "protocols", ignore its settings
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
509
15340
f423090a363a master: Ignore service {} blocks with empty executable settings.
Timo Sirainen <tss@iki.fi>
parents: 15337
diff changeset
510 if (*service->executable != '/' &&
f423090a363a master: Ignore service {} blocks with empty executable settings.
Timo Sirainen <tss@iki.fi>
parents: 15337
diff changeset
511 *service->executable != '\0') {
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
512 service->executable =
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
513 p_strconcat(pool, set->libexec_dir, "/",
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
514 service->executable, NULL);
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
515 }
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
516 if (*service->chroot != '/' && *service->chroot != '\0') {
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
517 service->chroot =
9211
66bb019c664c service settings: Base relative chroots under base_dir.
Timo Sirainen <tss@iki.fi>
parents: 9184
diff changeset
518 p_strconcat(pool, set->base_dir, "/",
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
519 service->chroot, NULL);
9211
66bb019c664c service settings: Base relative chroots under base_dir.
Timo Sirainen <tss@iki.fi>
parents: 9184
diff changeset
520 }
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
521 if (service->drop_priv_before_exec &&
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
522 *service->chroot != '\0') {
9211
66bb019c664c service settings: Base relative chroots under base_dir.
Timo Sirainen <tss@iki.fi>
parents: 9184
diff changeset
523 *error_r = t_strdup_printf("service(%s): "
66bb019c664c service settings: Base relative chroots under base_dir.
Timo Sirainen <tss@iki.fi>
parents: 9184
diff changeset
524 "drop_priv_before_exec=yes can't be "
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
525 "used with chroot", service->name);
9211
66bb019c664c service settings: Base relative chroots under base_dir.
Timo Sirainen <tss@iki.fi>
parents: 9184
diff changeset
526 return FALSE;
66bb019c664c service settings: Base relative chroots under base_dir.
Timo Sirainen <tss@iki.fi>
parents: 9184
diff changeset
527 }
10495
72a0ec4b7e26 config: Don't fail if process_min_avail is set and process_limit is the default.
Timo Sirainen <tss@iki.fi>
parents: 10410
diff changeset
528 process_limit = service->process_limit;
72a0ec4b7e26 config: Don't fail if process_min_avail is set and process_limit is the default.
Timo Sirainen <tss@iki.fi>
parents: 10410
diff changeset
529 if (process_limit == 0)
72a0ec4b7e26 config: Don't fail if process_min_avail is set and process_limit is the default.
Timo Sirainen <tss@iki.fi>
parents: 10410
diff changeset
530 process_limit = set->default_process_limit;
72a0ec4b7e26 config: Don't fail if process_min_avail is set and process_limit is the default.
Timo Sirainen <tss@iki.fi>
parents: 10410
diff changeset
531 if (service->process_min_avail > process_limit) {
9872
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
532 *error_r = t_strdup_printf("service(%s): "
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
533 "process_min_avail is higher than process_limit",
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
534 service->name);
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
535 return FALSE;
af7f0be02d3b master: Added process_min_avail setting for services.
Timo Sirainen <tss@iki.fi>
parents: 9857
diff changeset
536 }
13000
c3f4201f9818 master: Warn if service's vsz_limit < 1 MB
Timo Sirainen <tss@iki.fi>
parents: 12822
diff changeset
537 if (service->vsz_limit < 1024*1024 && service->vsz_limit != 0) {
12430
f78260c108b0 master: Fail if service's vsz_limit is less than 1 kB
Timo Sirainen <tss@iki.fi>
parents: 12422
diff changeset
538 *error_r = t_strdup_printf("service(%s): "
f78260c108b0 master: Fail if service's vsz_limit is less than 1 kB
Timo Sirainen <tss@iki.fi>
parents: 12422
diff changeset
539 "vsz_limit is too low", service->name);
f78260c108b0 master: Fail if service's vsz_limit is less than 1 kB
Timo Sirainen <tss@iki.fi>
parents: 12422
diff changeset
540 return FALSE;
f78260c108b0 master: Fail if service's vsz_limit is less than 1 kB
Timo Sirainen <tss@iki.fi>
parents: 12422
diff changeset
541 }
10977
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
542
12166
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
543 #ifdef CONFIG_BINARY
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
544 default_service =
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
545 master_default_settings_get_service(service->name);
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
546 if (default_service != NULL &&
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
547 default_service->process_limit_1 && process_limit > 1) {
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
548 *error_r = t_strdup_printf("service(%s): "
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
549 "process_limit must be 1", service->name);
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
550 return FALSE;
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
551 }
13758
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
552 #else
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
553 if (max_client_limit < service->client_limit) {
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
554 max_client_limit = service->client_limit;
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
555 max_client_limit_source = t_strdup_printf(
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
556 "service %s { client_limit }", service->name);
b8e1c9685c69 Compiler warning fix
Timo Sirainen <tss@iki.fi>
parents: 13756
diff changeset
557 }
12166
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
558 #endif
ce75971127a2 Fail at startup if process_limit>1 for services that don't support it.
Timo Sirainen <tss@iki.fi>
parents: 12056
diff changeset
559
15303
4d268e810c15 master: If service { protocol } is set and not included in "protocols", ignore its settings
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
560 if (*service->protocol != '\0') {
10977
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
561 /* each imap/pop3/lmtp process can use up a connection,
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
562 although if service_count=1 it's only temporary */
13799
24fe54f2cfcb master: Be more relaxed about giving service auth's client_limit being too low.
Timo Sirainen <tss@iki.fi>
parents: 13758
diff changeset
563 if (service->service_count != 1 ||
24fe54f2cfcb master: Be more relaxed about giving service auth's client_limit being too low.
Timo Sirainen <tss@iki.fi>
parents: 13758
diff changeset
564 strcmp(service->type, "login") == 0)
24fe54f2cfcb master: Be more relaxed about giving service auth's client_limit being too low.
Timo Sirainen <tss@iki.fi>
parents: 13758
diff changeset
565 max_auth_client_processes += process_limit;
10977
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
566 }
12376
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
567 if (strcmp(service->type, "login") == 0 ||
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
568 strcmp(service->name, "auth") == 0)
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
569 max_anvil_client_processes += process_limit;
10977
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
570
20271
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
571 if (!fix_file_listener_paths(&service->unix_listeners, pool,
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
572 set, &all_listeners, error_r)) {
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
573 *error_r = t_strdup_printf("service(%s): unix_listener: %s",
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
574 service->name, *error_r);
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
575 return FALSE;
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
576 }
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
577 if (!fix_file_listener_paths(&service->fifo_listeners, pool,
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
578 set, &all_listeners, error_r)) {
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
579 *error_r = t_strdup_printf("service(%s): fifo_listener: %s",
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
580 service->name, *error_r);
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
581 return FALSE;
55e8d679fa2b master: Give a nicer error if unix/fifo_listener path is empty.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
582 }
10375
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
583 add_inet_listeners(&service->inet_listeners, &all_listeners);
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
584 }
10375
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
585
12376
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
586 client_limit = service_get_client_limit(set, "auth");
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
587 if (client_limit < max_auth_client_processes && !warned_auth) {
10977
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
588 warned_auth = TRUE;
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
589 i_warning("service auth { client_limit=%u } is lower than "
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
590 "required under max. load (%u)",
12376
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
591 client_limit, max_auth_client_processes);
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
592 }
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
593
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
594 client_limit = service_get_client_limit(set, "anvil");
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
595 if (client_limit < max_anvil_client_processes && !warned_anvil) {
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
596 warned_anvil = TRUE;
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
597 i_warning("service anvil { client_limit=%u } is lower than "
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
598 "required under max. load (%u)",
97b286b6ec45 master: Log a warning at startup if anvil's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 12370
diff changeset
599 client_limit, max_anvil_client_processes);
10977
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
600 }
13756
540d9d296dc9 master: Log a warning at startup if fd limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 13072
diff changeset
601 #ifndef CONFIG_BINARY
540d9d296dc9 master: Log a warning at startup if fd limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 13072
diff changeset
602 if (restrict_get_fd_limit(&fd_limit) == 0 &&
540d9d296dc9 master: Log a warning at startup if fd limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 13072
diff changeset
603 fd_limit < (rlim_t)max_client_limit) {
540d9d296dc9 master: Log a warning at startup if fd limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 13072
diff changeset
604 i_warning("fd limit (ulimit -n) is lower than required "
540d9d296dc9 master: Log a warning at startup if fd limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 13072
diff changeset
605 "under max. load (%u < %u), because of %s",
540d9d296dc9 master: Log a warning at startup if fd limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 13072
diff changeset
606 (unsigned int)fd_limit, max_client_limit,
540d9d296dc9 master: Log a warning at startup if fd limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 13072
diff changeset
607 max_client_limit_source);
540d9d296dc9 master: Log a warning at startup if fd limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 13072
diff changeset
608 }
540d9d296dc9 master: Log a warning at startup if fd limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 13072
diff changeset
609 #endif
10977
4191ba54c8aa config: Log a warning if auth service's client_limit is too low.
Timo Sirainen <tss@iki.fi>
parents: 10915
diff changeset
610
10375
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
611 /* check for duplicate listeners */
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
612 array_sort(&all_listeners, i_strcmp_p);
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
613 strings = array_get(&all_listeners, &count);
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
614 for (i = 1; i < count; i++) {
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
615 if (strcmp(strings[i-1], strings[i]) == 0) {
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
616 *error_r = t_strdup_printf("duplicate listener: %s",
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
617 strings[i]);
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
618 return FALSE;
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
619 }
b21b3b373c74 master: Give a nicer error message if duplicate listeners exist.
Timo Sirainen <tss@iki.fi>
parents: 10374
diff changeset
620 }
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
621 return TRUE;
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
622 }
9159
6324a79d3ee1 Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents: 9153
diff changeset
623 /* </settings checks> */
8821
71cfd00e1375 master: If login process has -D parameter, make login directory writable.
Timo Sirainen <tss@iki.fi>
parents: 8700
diff changeset
624
9226
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
625 static bool
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
626 login_want_core_dumps(const struct master_settings *set, gid_t *gid_r)
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
627 {
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
628 struct service_settings *const *services;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
629 const char *error;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
630 bool cores = FALSE;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
631 uid_t uid;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
632
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
633 *gid_r = (gid_t)-1;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
634
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
635 array_foreach(&set->services, services) {
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
636 struct service_settings *service = *services;
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
637
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
638 if (service->parsed_type == SERVICE_TYPE_LOGIN) {
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
639 if (service->login_dump_core)
9226
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
640 cores = TRUE;
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
641 (void)get_uidgid(service->user, &uid, gid_r, &error);
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
642 if (*service->group != '\0')
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
643 (void)get_gid(service->group, gid_r, &error);
9226
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
644 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
645 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
646 return cores;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
647 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
648
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
649 static bool
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
650 settings_have_auth_unix_listeners_in(const struct master_settings *set,
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
651 const char *dir)
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
652 {
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
653 struct service_settings *const *services;
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
654 struct file_listener_settings *const *uls;
21322
5ab8dc1a4a6f global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21115
diff changeset
655 size_t dir_len = strlen(dir);
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
656
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
657 array_foreach(&set->services, services) {
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
658 struct service_settings *service = *services;
9226
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
659
10406
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
660 if (array_is_created(&service->unix_listeners)) {
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
661 array_foreach(&service->unix_listeners, uls) {
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
662 struct file_listener_settings *u = *uls;
ad3fb3f929fc Use array_foreach() more.
Timo Sirainen <tss@iki.fi>
parents: 10375
diff changeset
663
18188
e9a8fc0e21c9 master: Fixed a check to see if login directory has any unix listeners.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
664 if (strncmp(u->path, dir, dir_len) == 0 &&
e9a8fc0e21c9 master: Fixed a check to see if login directory has any unix listeners.
Timo Sirainen <tss@iki.fi>
parents: 18137
diff changeset
665 u->path[dir_len] == '/')
9226
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
666 return TRUE;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
667 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
668 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
669 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
670 return FALSE;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
671 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
672
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
673 static void unlink_sockets(const char *path, const char *prefix)
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
674 {
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
675 DIR *dirp;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
676 struct dirent *dp;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
677 struct stat st;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
678 string_t *str;
21322
5ab8dc1a4a6f global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21115
diff changeset
679 size_t prefix_len;
9226
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
680
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
681 dirp = opendir(path);
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
682 if (dirp == NULL) {
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
683 i_error("opendir(%s) failed: %m", path);
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
684 return;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
685 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
686
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
687 prefix_len = strlen(prefix);
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
688 str = t_str_new(256);
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
689 while ((dp = readdir(dirp)) != NULL) {
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
690 if (dp->d_name[0] == '.')
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
691 continue;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
692
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
693 if (strncmp(dp->d_name, prefix, prefix_len) != 0)
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
694 continue;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
695
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
696 str_truncate(str, 0);
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
697 str_printfa(str, "%s/%s", path, dp->d_name);
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
698 if (lstat(str_c(str), &st) < 0) {
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
699 if (errno != ENOENT)
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
700 i_error("lstat(%s) failed: %m", str_c(str));
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
701 continue;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
702 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
703 if (!S_ISSOCK(st.st_mode))
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
704 continue;
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
705
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
706 /* try to avoid unlinking sockets if someone's already
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
707 listening in them. do this only at startup, because
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
708 when SIGHUPing a child process might catch the new
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
709 connection before it notices that it's supposed
21115
a55167eff11a master: Don't unlink login sockets at startup if someone is listening to them.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20313
diff changeset
710 to die. */
a55167eff11a master: Don't unlink login sockets at startup if someone is listening to them.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20313
diff changeset
711 if (!startup_finished) {
9226
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
712 int fd = net_connect_unix(str_c(str));
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
713 if (fd != -1 || errno != ECONNREFUSED) {
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
714 i_fatal("Dovecot is already running? "
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
715 "Socket already exists: %s",
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
716 str_c(str));
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
717 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
718 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
719
19136
fefaa6d09a81 Replaced unlink() calls with i_unlink*() wherever possible.
Timo Sirainen <tss@iki.fi>
parents: 19077
diff changeset
720 i_unlink_if_exists(str_c(str));
9226
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
721 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
722 (void)closedir(dirp);
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
723 }
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
724
15049
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
725 static void
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
726 mkdir_login_dir(const struct master_settings *set, const char *login_dir)
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
727 {
15049
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
728 mode_t mode;
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
729 gid_t gid;
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
730
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
731 if (settings_have_auth_unix_listeners_in(set, login_dir)) {
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
732 /* we are not using external authentication, so make sure the
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
733 login directory exists with correct permissions and it's
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
734 empty. with external auth we wouldn't want to delete
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
735 existing sockets or break the permissions required by the
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
736 auth server. */
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
737 mode = login_want_core_dumps(set, &gid) ? 0770 : 0750;
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
738 if (safe_mkdir(login_dir, mode, master_uid, gid) == 0) {
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
739 i_warning("Corrected permissions for login directory "
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
740 "%s", login_dir);
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
741 }
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
742
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
743 unlink_sockets(login_dir, "");
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
744 } else {
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
745 /* still make sure that login directory exists */
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
746 if (mkdir(login_dir, 0755) < 0 && errno != EEXIST)
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
747 i_fatal("mkdir(%s) failed: %m", login_dir);
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
748 }
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
749 }
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
750
14680
3ffdb4bf36d3 master: Problems with creating base_dir/statedir should be fatals.
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
751 void master_settings_do_fixes(const struct master_settings *set)
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
752 {
15049
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
753 const char *empty_dir;
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
754 struct stat st;
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4963
diff changeset
755
3900
7ee2fc733bf6 Fix base_dir permissions if it exists
Timo Sirainen <tss@iki.fi>
parents: 3889
diff changeset
756 /* since base dir is under /var/run by default, it may have been
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
757 deleted. */
14680
3ffdb4bf36d3 master: Problems with creating base_dir/statedir should be fatals.
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
758 if (mkdir_parents(set->base_dir, 0755) < 0 && errno != EEXIST)
3ffdb4bf36d3 master: Problems with creating base_dir/statedir should be fatals.
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
759 i_fatal("mkdir(%s) failed: %m", set->base_dir);
4554
d59ab08a6b6a Allow base_dir to point to a symlink.
Timo Sirainen <tss@iki.fi>
parents: 4553
diff changeset
760 /* allow base_dir to be a symlink, so don't use lstat() */
14680
3ffdb4bf36d3 master: Problems with creating base_dir/statedir should be fatals.
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
761 if (stat(set->base_dir, &st) < 0)
3ffdb4bf36d3 master: Problems with creating base_dir/statedir should be fatals.
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
762 i_fatal("stat(%s) failed: %m", set->base_dir);
3ffdb4bf36d3 master: Problems with creating base_dir/statedir should be fatals.
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
763 if (!S_ISDIR(st.st_mode))
3ffdb4bf36d3 master: Problems with creating base_dir/statedir should be fatals.
Timo Sirainen <tss@iki.fi>
parents: 14446
diff changeset
764 i_fatal("%s is not a directory", set->base_dir);
12056
bc5c9bd4bc7e master: Make sure base_dir has at least 0755 permissions.
Timo Sirainen <tss@iki.fi>
parents: 12019
diff changeset
765 if ((st.st_mode & 0755) != 0755) {
10374
17eac5a18ce4 master: Create base_dir with 0755 permissions, not 0777.
Timo Sirainen <tss@iki.fi>
parents: 10281
diff changeset
766 i_warning("Fixing permissions of %s to be world-readable",
17eac5a18ce4 master: Create base_dir with 0755 permissions, not 0777.
Timo Sirainen <tss@iki.fi>
parents: 10281
diff changeset
767 set->base_dir);
17eac5a18ce4 master: Create base_dir with 0755 permissions, not 0777.
Timo Sirainen <tss@iki.fi>
parents: 10281
diff changeset
768 if (chmod(set->base_dir, 0755) < 0)
17eac5a18ce4 master: Create base_dir with 0755 permissions, not 0777.
Timo Sirainen <tss@iki.fi>
parents: 10281
diff changeset
769 i_error("chmod(%s) failed: %m", set->base_dir);
17eac5a18ce4 master: Create base_dir with 0755 permissions, not 0777.
Timo Sirainen <tss@iki.fi>
parents: 10281
diff changeset
770 }
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
771
4407
2e4857a2b858 Added --with-statedir configure option which defaults to
Timo Sirainen <tss@iki.fi>
parents: 4393
diff changeset
772 /* Make sure our permanent state directory exists */
14950
543852ebb327 Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents: 14749
diff changeset
773 if (mkdir_parents(set->state_dir, 0755) < 0 && errno != EEXIST)
543852ebb327 Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents: 14749
diff changeset
774 i_fatal("mkdir(%s) failed: %m", set->state_dir);
9226
0ca7ed260f1e master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents: 9218
diff changeset
775
15049
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
776 mkdir_login_dir(set, t_strconcat(set->base_dir, "/login", NULL));
aa6027a0a78e Added support to perform token-based service process authentication.
Stephan Bosch <stephan@rename-it.nl>
parents: 14950
diff changeset
777 mkdir_login_dir(set, t_strconcat(set->base_dir, "/token-login", NULL));
9235
2e2b957f1cca Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents: 9230
diff changeset
778
2e2b957f1cca Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents: 9230
diff changeset
779 empty_dir = t_strconcat(set->base_dir, "/empty", NULL);
2e2b957f1cca Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents: 9230
diff changeset
780 if (safe_mkdir(empty_dir, 0755, master_uid, getegid()) == 0) {
2e2b957f1cca Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents: 9230
diff changeset
781 i_warning("Corrected permissions for empty directory "
2e2b957f1cca Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents: 9230
diff changeset
782 "%s", empty_dir);
2e2b957f1cca Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents: 9230
diff changeset
783 }
4754
188481077cde default_mail_env fallbacking was broken with --exec-mail.
Timo Sirainen <tss@iki.fi>
parents: 4701
diff changeset
784 }