Mercurial > dovecot > core-2.2
annotate src/master/main.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 |
rev | line source |
---|---|
22713
cb108f786fb4
Updated copyright notices to include the year 2018.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
22488
diff
changeset
|
1 /* Copyright (c) 2005-2018 Dovecot authors, see the included COPYING file */ |
0 | 2 |
3 #include "common.h" | |
9496
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
4 #include "ioloop.h" |
0 | 5 #include "lib-signals.h" |
727
8dd8ebe6bcac
We use close-on-exec flag now to make sure that master process closes the
Timo Sirainen <tss@iki.fi>
parents:
697
diff
changeset
|
6 #include "fd-close-on-exec.h" |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
7 #include "array.h" |
2524 | 8 #include "write-full.h" |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
9 #include "env-util.h" |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
10 #include "hostpid.h" |
10501
28a14e2fe5d6
Use t_abspath() instead of duplicating code.
Timo Sirainen <tss@iki.fi>
parents:
10312
diff
changeset
|
11 #include "abspath.h" |
12859
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
12 #include "ipwd.h" |
17055
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
13 #include "str.h" |
10996
43f2452b7dd8
Replaced execv*() with execv*_const() wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
10983
diff
changeset
|
14 #include "execv-const.h" |
6313
0e08960275f8
Grow file descriptors to 64k at startup, and drop them for login and imap
Timo Sirainen <tss@iki.fi>
parents:
6303
diff
changeset
|
15 #include "restrict-process-size.h" |
14068
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
16 #include "master-instance.h" |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
17 #include "master-service.h" |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
18 #include "master-service-settings.h" |
9913
e819f6dfe5f4
dovecot -p (ask ssl key password from command line) works again.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
19 #include "askpass.h" |
5789
4f22660ffd33
Move POSIX capabilities dropping into separate function.
Andrey Panin <pazke@donpac.ru>
parents:
5696
diff
changeset
|
20 #include "capabilities.h" |
20452
9d3e4542c309
master: Allow stopping specific services via master socket.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19604
diff
changeset
|
21 #include "master-client.h" |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
22 #include "service.h" |
10200
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
23 #include "service-anvil.h" |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
24 #include "service-listen.h" |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
25 #include "service-monitor.h" |
10031
fa9d2204b453
master: If config process doesn't exist when reloading config, create one to avoid hanging.
Timo Sirainen <tss@iki.fi>
parents:
10027
diff
changeset
|
26 #include "service-process.h" |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
27 #include "service-log.h" |
10999
a2c6c91635b5
{master,doveconf}: Show the version with hg's node id, if unreleased.
Pascal Volk <user@localhost.localdomain.org>
parents:
10996
diff
changeset
|
28 #include "dovecot-version.h" |
0 | 29 |
279
49f4b0be0d87
Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents:
50
diff
changeset
|
30 #include <stdio.h> |
0 | 31 #include <unistd.h> |
32 #include <fcntl.h> | |
33 #include <sys/stat.h> | |
34 | |
9236
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
35 #define DOVECOT_CONFIG_BIN_PATH BINDIR"/doveconf" |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
36 |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
37 #define MASTER_SERVICE_NAME "master" |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
38 #define FATAL_FILENAME "master-fatal.lastlog" |
9223
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
39 #define MASTER_PID_FILE_NAME "master.pid" |
9496
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
40 #define SERVICE_TIME_MOVED_BACKWARDS_MAX_THROTTLE_SECS (60*3) |
9223
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
41 |
1617
cc3cef25662c
Replaced geteuid() calls with one in the beginning and saving it to
Timo Sirainen <tss@iki.fi>
parents:
1610
diff
changeset
|
42 uid_t master_uid; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
43 gid_t master_gid; |
8990
8350642f78f2
Improved logging for core dumping. With Linux use PR_SET_DUMPABLE for imap/pop3.
Timo Sirainen <tss@iki.fi>
parents:
8699
diff
changeset
|
44 bool core_dumps_disabled; |
12482
28db9b177087
master: Use t_askpass() for getting the manual SSL key password.
Timo Sirainen <tss@iki.fi>
parents:
12439
diff
changeset
|
45 const char *ssl_manual_key_password; |
21116
61d0c09b50f0
global: use dev_null_fd instead of opening /dev/null
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21115
diff
changeset
|
46 int global_master_dead_pipe_fd[2]; |
9876
31a283729295
master: Several fixes to handling SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
9873
diff
changeset
|
47 struct service_list *services; |
21115
a55167eff11a
master: Don't unlink login sockets at startup if someone is listening to them.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21094
diff
changeset
|
48 bool startup_finished = FALSE; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
49 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
50 static char *pidfile_path; |
14068
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
51 static struct master_instance_list *instances; |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
52 static struct timeout *to_instance; |
12275
4933c3095ee2
Cleaned up log callbacks and made them more extensible.
Timo Sirainen <tss@iki.fi>
parents:
12259
diff
changeset
|
53 static failure_callback_t *orig_fatal_callback; |
9894
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
54 static failure_callback_t *orig_error_callback; |
0 | 55 |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
56 static const struct setting_parser_info *set_roots[] = { |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
57 &master_setting_parser_info, |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
58 NULL |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
59 }; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
60 |
21317
1892618b85f9
master: Removed unused process_exec(extra_args) parameter
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21116
diff
changeset
|
61 void process_exec(const char *cmd) |
7229
586abf9b561c
If Dovecot master dies with a fatal failure, log the error message to a file
Timo Sirainen <tss@iki.fi>
parents:
7226
diff
changeset
|
62 { |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
63 const char *executable, *p, **argv; |
7229
586abf9b561c
If Dovecot master dies with a fatal failure, log the error message to a file
Timo Sirainen <tss@iki.fi>
parents:
7226
diff
changeset
|
64 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
65 argv = t_strsplit(cmd, " "); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
66 executable = argv[0]; |
7229
586abf9b561c
If Dovecot master dies with a fatal failure, log the error message to a file
Timo Sirainen <tss@iki.fi>
parents:
7226
diff
changeset
|
67 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
68 /* hide the path, it's ugly */ |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
69 p = strrchr(argv[0], '/'); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
70 if (p != NULL) argv[0] = p+1; |
635
90a65c017bf0
SIGHUP reloads now settings. Logged in clients are left untouched, but
Timo Sirainen <tss@iki.fi>
parents:
615
diff
changeset
|
71 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
72 /* prefix with dovecot/ */ |
13972
e1f21a4ef417
master: Added instance_name setting, which is used to prefix processes in ps output.
Timo Sirainen <tss@iki.fi>
parents:
13690
diff
changeset
|
73 argv[0] = t_strdup_printf("%s/%s", services->set->instance_name, |
e1f21a4ef417
master: Added instance_name setting, which is used to prefix processes in ps output.
Timo Sirainen <tss@iki.fi>
parents:
13690
diff
changeset
|
74 argv[0]); |
14070
26885fe20e1f
master: If instance_name doesn't begin with "dovecot", add "dovecot-" prefix to process names.
Timo Sirainen <tss@iki.fi>
parents:
14068
diff
changeset
|
75 if (strncmp(argv[0], PACKAGE, strlen(PACKAGE)) != 0) |
26885fe20e1f
master: If instance_name doesn't begin with "dovecot", add "dovecot-" prefix to process names.
Timo Sirainen <tss@iki.fi>
parents:
14068
diff
changeset
|
76 argv[0] = t_strconcat(PACKAGE"-", argv[0], NULL); |
10996
43f2452b7dd8
Replaced execv*() with execv*_const() wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
10983
diff
changeset
|
77 (void)execv_const(executable, argv); |
0 | 78 } |
79 | |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
80 int get_uidgid(const char *user, uid_t *uid_r, gid_t *gid_r, |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
81 const char **error_r) |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
82 { |
12859
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
83 struct passwd pw; |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
84 |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
85 if (*user == '\0') { |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
86 *uid_r = (uid_t)-1; |
10020
e5fccc9d4831
master: If service user isn't specified, keep original gid instead of using 0.
Timo Sirainen <tss@iki.fi>
parents:
10017
diff
changeset
|
87 *gid_r = (gid_t)-1; |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
88 return 0; |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
89 } |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
90 |
12859
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
91 switch (i_getpwnam(user, &pw)) { |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
92 case -1: |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
93 *error_r = t_strdup_printf("getpwnam(%s) failed: %m", user); |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
94 return -1; |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
95 case 0: |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
96 *error_r = t_strdup_printf("User doesn't exist: %s", user); |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
97 return -1; |
12859
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
98 default: |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
99 *uid_r = pw.pw_uid; |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
100 *gid_r = pw.pw_gid; |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
101 return 0; |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
102 } |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
103 } |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
104 |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
105 int get_gid(const char *group, gid_t *gid_r, const char **error_r) |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
106 { |
12859
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
107 struct group gr; |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
108 |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
109 if (*group == '\0') { |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
110 *gid_r = (gid_t)-1; |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
111 return 0; |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
112 } |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
113 |
12859
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
114 switch (i_getgrnam(group, &gr)) { |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
115 case -1: |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
116 *error_r = t_strdup_printf("getgrnam(%s) failed: %m", group); |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
117 return -1; |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
118 case 0: |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
119 *error_r = t_strdup_printf("Group doesn't exist: %s", group); |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
120 return -1; |
12859
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
121 default: |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
122 *gid_r = gr.gr_gid; |
02829f7f79c7
Replaced all getpw/gr*() to use i_getpw/gr*() with improved error handling.
Timo Sirainen <tss@iki.fi>
parents:
12857
diff
changeset
|
123 return 0; |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
124 } |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
125 } |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
126 |
12285
9dd776345b22
Compiler warning/error fix to recent logging API changes.
Timo Sirainen <tss@iki.fi>
parents:
12275
diff
changeset
|
127 static void ATTR_NORETURN ATTR_FORMAT(2, 0) |
12275
4933c3095ee2
Cleaned up log callbacks and made them more extensible.
Timo Sirainen <tss@iki.fi>
parents:
12259
diff
changeset
|
128 master_fatal_callback(const struct failure_context *ctx, |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
129 const char *format, va_list args) |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
130 { |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
131 const char *path, *str; |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
132 va_list args2; |
19038
f8ab4f979e92
Removed all invocations of strtoll() and friends.
Stephan Bosch <stephan@rename-it.nl>
parents:
19036
diff
changeset
|
133 pid_t pid; |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
134 int fd; |
19038
f8ab4f979e92
Removed all invocations of strtoll() and friends.
Stephan Bosch <stephan@rename-it.nl>
parents:
19036
diff
changeset
|
135 |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
136 /* if we already forked a child process, this isn't fatal for the |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
137 main process and there's no need to write the fatal file. */ |
19038
f8ab4f979e92
Removed all invocations of strtoll() and friends.
Stephan Bosch <stephan@rename-it.nl>
parents:
19036
diff
changeset
|
138 if (str_to_pid(my_pid, &pid) < 0) |
f8ab4f979e92
Removed all invocations of strtoll() and friends.
Stephan Bosch <stephan@rename-it.nl>
parents:
19036
diff
changeset
|
139 i_unreached(); |
f8ab4f979e92
Removed all invocations of strtoll() and friends.
Stephan Bosch <stephan@rename-it.nl>
parents:
19036
diff
changeset
|
140 if (getpid() == pid) { |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
141 /* write the error message to a file (we're chdired to |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
142 base dir) */ |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
143 path = t_strconcat(FATAL_FILENAME, NULL); |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
144 fd = open(path, O_CREAT | O_TRUNC | O_WRONLY, 0600); |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
145 if (fd != -1) { |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
146 VA_COPY(args2, args); |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
147 str = t_strdup_vprintf(format, args2); |
17396
03870eea2857
lib: pair VA_COPY with va_end
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
148 va_end(args2); |
14682
d0d7b810646b
Make sure we check all the functions' return values. Minor API changes to simplify this.
Timo Sirainen <tss@iki.fi>
parents:
14382
diff
changeset
|
149 (void)write_full(fd, str, strlen(str)); |
14691
3945a3646c67
Changed i_close_fd() API to set the fd to -1 after closing.
Timo Sirainen <tss@iki.fi>
parents:
14687
diff
changeset
|
150 i_close_fd(&fd); |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
151 } |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
152 } |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
153 |
12275
4933c3095ee2
Cleaned up log callbacks and made them more extensible.
Timo Sirainen <tss@iki.fi>
parents:
12259
diff
changeset
|
154 orig_fatal_callback(ctx, format, args); |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
155 abort(); /* just to silence the noreturn attribute warnings */ |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
156 } |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
157 |
14382 | 158 static void ATTR_NORETURN ATTR_FORMAT(2, 0) |
12275
4933c3095ee2
Cleaned up log callbacks and made them more extensible.
Timo Sirainen <tss@iki.fi>
parents:
12259
diff
changeset
|
159 startup_fatal_handler(const struct failure_context *ctx, |
9894
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
160 const char *fmt, va_list args) |
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
161 { |
9896
7675eb23bba8
master: Fixes to logging startup errors.
Timo Sirainen <tss@iki.fi>
parents:
9894
diff
changeset
|
162 va_list args2; |
9894
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
163 |
9896
7675eb23bba8
master: Fixes to logging startup errors.
Timo Sirainen <tss@iki.fi>
parents:
9894
diff
changeset
|
164 VA_COPY(args2, args); |
12275
4933c3095ee2
Cleaned up log callbacks and made them more extensible.
Timo Sirainen <tss@iki.fi>
parents:
12259
diff
changeset
|
165 fprintf(stderr, "%s%s\n", failure_log_type_prefixes[ctx->type], |
10521
76af32fae1e2
master: When writing startup errors to stderr, use the correct type prefix.
Timo Sirainen <tss@iki.fi>
parents:
10501
diff
changeset
|
166 t_strdup_vprintf(fmt, args2)); |
17396
03870eea2857
lib: pair VA_COPY with va_end
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
167 va_end(args2); |
12275
4933c3095ee2
Cleaned up log callbacks and made them more extensible.
Timo Sirainen <tss@iki.fi>
parents:
12259
diff
changeset
|
168 orig_fatal_callback(ctx, fmt, args); |
9894
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
169 abort(); |
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
170 } |
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
171 |
14382 | 172 static void ATTR_FORMAT(2, 0) |
12275
4933c3095ee2
Cleaned up log callbacks and made them more extensible.
Timo Sirainen <tss@iki.fi>
parents:
12259
diff
changeset
|
173 startup_error_handler(const struct failure_context *ctx, |
4933c3095ee2
Cleaned up log callbacks and made them more extensible.
Timo Sirainen <tss@iki.fi>
parents:
12259
diff
changeset
|
174 const char *fmt, va_list args) |
9894
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
175 { |
9896
7675eb23bba8
master: Fixes to logging startup errors.
Timo Sirainen <tss@iki.fi>
parents:
9894
diff
changeset
|
176 va_list args2; |
9894
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
177 |
9896
7675eb23bba8
master: Fixes to logging startup errors.
Timo Sirainen <tss@iki.fi>
parents:
9894
diff
changeset
|
178 VA_COPY(args2, args); |
12275
4933c3095ee2
Cleaned up log callbacks and made them more extensible.
Timo Sirainen <tss@iki.fi>
parents:
12259
diff
changeset
|
179 fprintf(stderr, "%s%s\n", failure_log_type_prefixes[ctx->type], |
10521
76af32fae1e2
master: When writing startup errors to stderr, use the correct type prefix.
Timo Sirainen <tss@iki.fi>
parents:
10501
diff
changeset
|
180 t_strdup_vprintf(fmt, args2)); |
17396
03870eea2857
lib: pair VA_COPY with va_end
Phil Carmody <phil@dovecot.fi>
parents:
17130
diff
changeset
|
181 va_end(args2); |
12275
4933c3095ee2
Cleaned up log callbacks and made them more extensible.
Timo Sirainen <tss@iki.fi>
parents:
12259
diff
changeset
|
182 orig_error_callback(ctx, fmt, args); |
9894
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
183 } |
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
184 |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
185 static void fatal_log_check(const struct master_settings *set) |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
186 { |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
187 const char *path; |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
188 char buf[1024]; |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
189 ssize_t ret; |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
190 int fd; |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
191 |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
192 path = t_strconcat(set->base_dir, "/"FATAL_FILENAME, NULL); |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
193 fd = open(path, O_RDONLY); |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
194 if (fd == -1) |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
195 return; |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
196 |
16707
72028f670746
Fixed off-by-one buffer overflows (practically non-exploitable).
Timo Sirainen <tss@iki.fi>
parents:
16676
diff
changeset
|
197 ret = read(fd, buf, sizeof(buf)-1); |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
198 if (ret < 0) |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
199 i_error("read(%s) failed: %m", path); |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
200 else { |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
201 buf[ret] = '\0'; |
9904
88801acf025a
master: Write "last died with error" only to stderr, not to log.
Timo Sirainen <tss@iki.fi>
parents:
9903
diff
changeset
|
202 fprintf(stderr, "Last died with error (see error log for more " |
9927
cb3760f21777
master: Startup warnings written to stderr should end with LF.
Timo Sirainen <tss@iki.fi>
parents:
9926
diff
changeset
|
203 "information): %s\n", buf); |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
204 } |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
205 |
17496
3d3796c15074
Check for syscall errors that are quite unlikely to happen.
Timo Sirainen <tss@iki.fi>
parents:
17476
diff
changeset
|
206 i_close_fd(&fd); |
19136
fefaa6d09a81
Replaced unlink() calls with i_unlink*() wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
19038
diff
changeset
|
207 i_unlink(path); |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
208 } |
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
209 |
9243
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
210 static bool pid_file_read(const char *path, pid_t *pid_r) |
9223
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
211 { |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
212 char buf[32]; |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
213 int fd; |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
214 ssize_t ret; |
9243
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
215 bool found; |
9223
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
216 |
14891 | 217 *pid_r = (pid_t)-1; |
218 | |
9223
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
219 fd = open(path, O_RDONLY); |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
220 if (fd == -1) { |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
221 if (errno == ENOENT) |
9243
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
222 return FALSE; |
9223
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
223 i_fatal("open(%s) failed: %m", path); |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
224 } |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
225 |
16707
72028f670746
Fixed off-by-one buffer overflows (practically non-exploitable).
Timo Sirainen <tss@iki.fi>
parents:
16676
diff
changeset
|
226 ret = read(fd, buf, sizeof(buf)-1); |
9223
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
227 if (ret <= 0) { |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
228 if (ret == 0) |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
229 i_error("Empty PID file in %s, overriding", path); |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
230 else |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
231 i_fatal("read(%s) failed: %m", path); |
9243
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
232 found = FALSE; |
9223
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
233 } else { |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
234 if (buf[ret-1] == '\n') |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
235 ret--; |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
236 buf[ret] = '\0'; |
19036
f78e38c7cba2
Removed all invocations of atoi().
Stephan Bosch <stephan@rename-it.nl>
parents:
18980
diff
changeset
|
237 if (str_to_pid(buf, pid_r) < 0) { |
f78e38c7cba2
Removed all invocations of atoi().
Stephan Bosch <stephan@rename-it.nl>
parents:
18980
diff
changeset
|
238 i_error("PID file contains invalid PID value"); |
f78e38c7cba2
Removed all invocations of atoi().
Stephan Bosch <stephan@rename-it.nl>
parents:
18980
diff
changeset
|
239 found = FALSE; |
f78e38c7cba2
Removed all invocations of atoi().
Stephan Bosch <stephan@rename-it.nl>
parents:
18980
diff
changeset
|
240 } else { |
f78e38c7cba2
Removed all invocations of atoi().
Stephan Bosch <stephan@rename-it.nl>
parents:
18980
diff
changeset
|
241 found = !(*pid_r == getpid() || |
f78e38c7cba2
Removed all invocations of atoi().
Stephan Bosch <stephan@rename-it.nl>
parents:
18980
diff
changeset
|
242 (kill(*pid_r, 0) < 0 && errno == ESRCH)); |
f78e38c7cba2
Removed all invocations of atoi().
Stephan Bosch <stephan@rename-it.nl>
parents:
18980
diff
changeset
|
243 } |
9223
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
244 } |
14691
3945a3646c67
Changed i_close_fd() API to set the fd to -1 after closing.
Timo Sirainen <tss@iki.fi>
parents:
14687
diff
changeset
|
245 i_close_fd(&fd); |
9243
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
246 return found; |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
247 } |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
248 |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
249 static void pid_file_check_running(const char *path) |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
250 { |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
251 pid_t pid; |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
252 |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
253 if (!pid_file_read(path, &pid)) |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
254 return; |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
255 |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
256 i_fatal("Dovecot is already running with PID %s " |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
257 "(read from %s)", dec2str(pid), path); |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
258 } |
64a7a1a3fe33
master: Added dovecot stop and dovecot reload parameters.
Timo Sirainen <tss@iki.fi>
parents:
9241
diff
changeset
|
259 |
2524 | 260 static void create_pid_file(const char *path) |
261 { | |
262 const char *pid; | |
263 int fd; | |
264 | |
2534 | 265 pid = t_strconcat(dec2str(getpid()), "\n", NULL); |
2524 | 266 |
267 fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, 0644); | |
268 if (fd == -1) | |
269 i_fatal("open(%s) failed: %m", path); | |
270 if (write_full(fd, pid, strlen(pid)) < 0) | |
271 i_fatal("write() failed in %s: %m", path); | |
14691
3945a3646c67
Changed i_close_fd() API to set the fd to -1 after closing.
Timo Sirainen <tss@iki.fi>
parents:
14687
diff
changeset
|
272 i_close_fd(&fd); |
2524 | 273 } |
274 | |
10572
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
275 static void create_config_symlink(const struct master_settings *set) |
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
276 { |
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
277 const char *base_config_path; |
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
278 |
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
279 base_config_path = t_strconcat(set->base_dir, "/"PACKAGE".conf", NULL); |
19136
fefaa6d09a81
Replaced unlink() calls with i_unlink*() wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
19038
diff
changeset
|
280 i_unlink_if_exists(base_config_path); |
10572
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
281 |
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
282 if (symlink(services->config->config_file_path, base_config_path) < 0) { |
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
283 i_error("symlink(%s, %s) failed: %m", |
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
284 services->config->config_file_path, base_config_path); |
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
285 } |
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
286 } |
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
287 |
14068
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
288 static void instance_update_now(struct master_instance_list *list) |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
289 { |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
290 int ret; |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
291 |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
292 ret = master_instance_list_set_name(list, services->set->base_dir, |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
293 services->set->instance_name); |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
294 if (ret == 0) { |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
295 /* duplicate instance names. allow without warning.. */ |
14682
d0d7b810646b
Make sure we check all the functions' return values. Minor API changes to simplify this.
Timo Sirainen <tss@iki.fi>
parents:
14382
diff
changeset
|
296 (void)master_instance_list_update(list, services->set->base_dir); |
14068
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
297 } |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
298 |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
299 if (to_instance != NULL) |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
300 timeout_remove(&to_instance); |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
301 to_instance = timeout_add((3600*12 + rand()%(60*30)) * 1000, |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
302 instance_update_now, list); |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
303 } |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
304 |
14950
543852ebb327
Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents:
14891
diff
changeset
|
305 static void instance_update(const struct master_settings *set) |
14068
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
306 { |
14950
543852ebb327
Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents:
14891
diff
changeset
|
307 const char *path; |
543852ebb327
Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents:
14891
diff
changeset
|
308 |
543852ebb327
Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents:
14891
diff
changeset
|
309 path = t_strconcat(set->state_dir, "/"MASTER_INSTANCE_FNAME, NULL); |
543852ebb327
Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents:
14891
diff
changeset
|
310 instances = master_instance_list_init(path); |
14068
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
311 instance_update_now(instances); |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
312 } |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
313 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
314 static void |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
315 sig_settings_reload(const siginfo_t *si ATTR_UNUSED, |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
316 void *context ATTR_UNUSED) |
9002
9d0037a997f4
Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
8649
diff
changeset
|
317 { |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
318 struct master_service_settings_input input; |
10793
bf4822f0846b
lib-master: Added support for caching config lookups.
Timo Sirainen <tss@iki.fi>
parents:
10611
diff
changeset
|
319 struct master_service_settings_output output; |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
320 const struct master_settings *set; |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
321 void **sets; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
322 struct service_list *new_services; |
10200
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
323 struct service *service; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
324 const char *error; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
325 |
9903
329b1f01052a
master: SIGHUP now logs that config was reread.
Timo Sirainen <tss@iki.fi>
parents:
9902
diff
changeset
|
326 i_warning("SIGHUP received - reloading configuration"); |
329b1f01052a
master: SIGHUP now logs that config was reread.
Timo Sirainen <tss@iki.fi>
parents:
9902
diff
changeset
|
327 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
328 /* see if hostname changed */ |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
329 hostpid_init(); |
9002
9d0037a997f4
Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
8649
diff
changeset
|
330 |
10031
fa9d2204b453
master: If config process doesn't exist when reloading config, create one to avoid hanging.
Timo Sirainen <tss@iki.fi>
parents:
10027
diff
changeset
|
331 if (services->config->process_avail == 0) { |
fa9d2204b453
master: If config process doesn't exist when reloading config, create one to avoid hanging.
Timo Sirainen <tss@iki.fi>
parents:
10027
diff
changeset
|
332 /* we can't reload config if there's no config process. */ |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10031
diff
changeset
|
333 if (service_process_create(services->config) == NULL) { |
10031
fa9d2204b453
master: If config process doesn't exist when reloading config, create one to avoid hanging.
Timo Sirainen <tss@iki.fi>
parents:
10027
diff
changeset
|
334 i_error("Can't reload configuration because " |
fa9d2204b453
master: If config process doesn't exist when reloading config, create one to avoid hanging.
Timo Sirainen <tss@iki.fi>
parents:
10027
diff
changeset
|
335 "we couldn't create a config process"); |
fa9d2204b453
master: If config process doesn't exist when reloading config, create one to avoid hanging.
Timo Sirainen <tss@iki.fi>
parents:
10027
diff
changeset
|
336 return; |
fa9d2204b453
master: If config process doesn't exist when reloading config, create one to avoid hanging.
Timo Sirainen <tss@iki.fi>
parents:
10027
diff
changeset
|
337 } |
fa9d2204b453
master: If config process doesn't exist when reloading config, create one to avoid hanging.
Timo Sirainen <tss@iki.fi>
parents:
10027
diff
changeset
|
338 } |
fa9d2204b453
master: If config process doesn't exist when reloading config, create one to avoid hanging.
Timo Sirainen <tss@iki.fi>
parents:
10027
diff
changeset
|
339 |
21389
59437f8764c6
global: Replaced all instances of memset(p, 0, sizeof(*p)) with the new i_zero() macro.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21342
diff
changeset
|
340 i_zero(&input); |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
341 input.roots = set_roots; |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
342 input.module = MASTER_SERVICE_NAME; |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
343 input.config_path = services_get_config_socket_path(services); |
10793
bf4822f0846b
lib-master: Added support for caching config lookups.
Timo Sirainen <tss@iki.fi>
parents:
10611
diff
changeset
|
344 if (master_service_settings_read(master_service, &input, |
bf4822f0846b
lib-master: Added support for caching config lookups.
Timo Sirainen <tss@iki.fi>
parents:
10611
diff
changeset
|
345 &output, &error) < 0) { |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
346 i_error("Error reading configuration: %s", error); |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
347 return; |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
348 } |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
349 sets = master_service_settings_get_others(master_service); |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
350 set = sets[0]; |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
351 |
12726
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
352 if (services_create(set, &new_services, &error) < 0) { |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
353 /* new configuration is invalid, keep the old */ |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
354 i_error("Config reload failed: %s", error); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
355 return; |
9002
9d0037a997f4
Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
8649
diff
changeset
|
356 } |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
357 new_services->config->config_file_path = |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
358 p_strdup(new_services->pool, |
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
359 services->config->config_file_path); |
9002
9d0037a997f4
Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
8649
diff
changeset
|
360 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
361 /* switch to new configuration. */ |
13662
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
362 services_monitor_stop(services, FALSE); |
10200
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
363 if (services_listen_using(new_services, services) < 0) { |
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
364 services_monitor_start(services); |
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
365 return; |
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
366 } |
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
367 |
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
368 /* anvil never dies. it just gets moved to the new services list */ |
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
369 service = service_lookup_type(services, SERVICE_TYPE_ANVIL); |
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
370 if (service != NULL) { |
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
371 while (service->processes != NULL) |
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
372 service_process_destroy(service->processes); |
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
373 } |
13662
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
374 services_destroy(services, FALSE); |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
375 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
376 services = new_services; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
377 services_monitor_start(services); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
378 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
379 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
380 static void |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
381 sig_log_reopen(const siginfo_t *si ATTR_UNUSED, void *context ATTR_UNUSED) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
382 { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
383 service_signal(services->log, SIGUSR1); |
9902
45e87a15cf48
master: SIGUSR1 now reopens logs.
Timo Sirainen <tss@iki.fi>
parents:
9896
diff
changeset
|
384 |
9932
accb1c02e03c
master: Use "master: " prefix in log messages.
Timo Sirainen <tss@iki.fi>
parents:
9928
diff
changeset
|
385 master_service_init_log(master_service, "master: "); |
9902
45e87a15cf48
master: SIGUSR1 now reopens logs.
Timo Sirainen <tss@iki.fi>
parents:
9896
diff
changeset
|
386 i_set_fatal_handler(master_fatal_callback); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
387 } |
9002
9d0037a997f4
Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
8649
diff
changeset
|
388 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
389 static void |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
390 sig_reap_children(const siginfo_t *si ATTR_UNUSED, void *context ATTR_UNUSED) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
391 { |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
392 services_monitor_reap_children(); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
393 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
394 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
395 static void sig_die(const siginfo_t *si, void *context ATTR_UNUSED) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
396 { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
397 i_warning("Killed with signal %d (by pid=%s uid=%s code=%s)", |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
398 si->si_signo, dec2str(si->si_pid), |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
399 dec2str(si->si_uid), |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
400 lib_signal_code_to_str(si->si_signo, si->si_code)); |
16780
d7627178a7f2
master: Make sure new processes aren't created after stop signal is received.
Timo Sirainen <tss@iki.fi>
parents:
16707
diff
changeset
|
401 /* make sure new processes won't be created by the currently |
d7627178a7f2
master: Make sure new processes aren't created after stop signal is received.
Timo Sirainen <tss@iki.fi>
parents:
16707
diff
changeset
|
402 running ioloop. */ |
d7627178a7f2
master: Make sure new processes aren't created after stop signal is received.
Timo Sirainen <tss@iki.fi>
parents:
16707
diff
changeset
|
403 services->destroying = TRUE; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
404 master_service_stop(master_service); |
9002
9d0037a997f4
Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
8649
diff
changeset
|
405 } |
9d0037a997f4
Initial commit for config rewrite.
Timo Sirainen <tss@iki.fi>
parents:
8649
diff
changeset
|
406 |
10983
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
407 static struct master_settings *master_settings_read(void) |
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
408 { |
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
409 struct master_service_settings_input input; |
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
410 struct master_service_settings_output output; |
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
411 const char *error; |
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
412 |
21389
59437f8764c6
global: Replaced all instances of memset(p, 0, sizeof(*p)) with the new i_zero() macro.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21342
diff
changeset
|
413 i_zero(&input); |
10983
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
414 input.roots = set_roots; |
12243
760e584b352b
master: Get only master-related configuration from doveconf at startup.
Timo Sirainen <tss@iki.fi>
parents:
11594
diff
changeset
|
415 input.module = "master"; |
12259
092c39cf86b9
master: Parse and check full config at startup.
Timo Sirainen <tss@iki.fi>
parents:
12243
diff
changeset
|
416 input.parse_full_config = TRUE; |
12726
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
417 input.preserve_environment = TRUE; |
10983
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
418 if (master_service_settings_read(master_service, &input, &output, |
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
419 &error) < 0) |
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
420 i_fatal("Error reading configuration: %s", error); |
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
421 return master_service_settings_get_others(master_service)[0]; |
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
422 } |
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
423 |
17055
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
424 static void main_log_startup(char **protocols) |
7946
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7914
diff
changeset
|
425 { |
11224
22f69f7d16ab
dovecot: Show the hg version also in "Dovecot starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
11039
diff
changeset
|
426 #define STARTUP_STRING PACKAGE_NAME" v"DOVECOT_VERSION_FULL" starting up" |
17055
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
427 string_t *str = t_str_new(128); |
7946
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7914
diff
changeset
|
428 rlim_t core_limit; |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7914
diff
changeset
|
429 |
17055
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
430 str_append(str, STARTUP_STRING); |
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
431 if (protocols[0] == NULL) |
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
432 str_append(str, " without any protocols"); |
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
433 else { |
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
434 str_printfa(str, " for %s", |
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
435 t_strarray_join((const char **)protocols, ", ")); |
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
436 } |
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
437 |
8990
8350642f78f2
Improved logging for core dumping. With Linux use PR_SET_DUMPABLE for imap/pop3.
Timo Sirainen <tss@iki.fi>
parents:
8699
diff
changeset
|
438 core_dumps_disabled = restrict_get_core_limit(&core_limit) == 0 && |
8350642f78f2
Improved logging for core dumping. With Linux use PR_SET_DUMPABLE for imap/pop3.
Timo Sirainen <tss@iki.fi>
parents:
8699
diff
changeset
|
439 core_limit == 0; |
8350642f78f2
Improved logging for core dumping. With Linux use PR_SET_DUMPABLE for imap/pop3.
Timo Sirainen <tss@iki.fi>
parents:
8699
diff
changeset
|
440 if (core_dumps_disabled) |
17055
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
441 str_append(str, " (core dumps disabled)"); |
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
442 i_info("%s", str_c(str)); |
7946
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7914
diff
changeset
|
443 } |
aad49536db41
If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents:
7914
diff
changeset
|
444 |
13690
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
445 static void master_set_process_limit(void) |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
446 { |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
447 struct service *const *servicep; |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
448 unsigned int process_limit = 0; |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
449 rlim_t nproc; |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
450 |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
451 /* we'll just count all the processes that can exist and set the |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
452 process limit so that we won't reach it. it's usually higher than |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
453 needed, since we'd only need to set it high enough for each |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
454 separate UID not to reach the limit, but this is difficult to |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
455 guess: mail processes should probably be counted together for a |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
456 common vmail user (unless system users are being used), but |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
457 we can't really guess what the mail processes are. */ |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
458 array_foreach(&services->services, servicep) |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
459 process_limit += (*servicep)->process_limit; |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
460 |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
461 if (restrict_get_process_limit(&nproc) == 0 && |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
462 process_limit > nproc) |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
463 restrict_process_count(process_limit); |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
464 } |
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
465 |
11418
8f63f17fdb0c
master: dovecot --log-error now internally calls doveadm log test.
Timo Sirainen <tss@iki.fi>
parents:
11417
diff
changeset
|
466 static void main_init(const struct master_settings *set) |
0 | 467 { |
13690
eace12589314
master: Increase process count limit (ulimit -u) at startup high enough that we don't reach it.
Timo Sirainen <tss@iki.fi>
parents:
13662
diff
changeset
|
468 master_set_process_limit(); |
5824
5d0aa827f130
Reordered initialization code. Capabilities are now dropped as soon as
root@hurina
parents:
5789
diff
changeset
|
469 drop_capabilities(); |
5d0aa827f130
Reordered initialization code. Capabilities are now dropped as soon as
root@hurina
parents:
5789
diff
changeset
|
470 |
0 | 471 /* deny file access from everyone else except owner */ |
472 (void)umask(0077); | |
473 | |
17055
e49f481af55b
master: Include used protocols in the "starting up" log message.
Timo Sirainen <tss@iki.fi>
parents:
16780
diff
changeset
|
474 main_log_startup(set->protocols_split); |
5090
04b467f23400
Added --log-error command line option.
Timo Sirainen <tss@iki.fi>
parents:
5077
diff
changeset
|
475 |
3620
3360cc019737
Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents:
3589
diff
changeset
|
476 lib_signals_init(); |
4903
204d7edc7cdc
Added context parameter type safety checks for most callback APIs.
Timo Sirainen <tss@iki.fi>
parents:
4745
diff
changeset
|
477 lib_signals_ignore(SIGPIPE, TRUE); |
204d7edc7cdc
Added context parameter type safety checks for most callback APIs.
Timo Sirainen <tss@iki.fi>
parents:
4745
diff
changeset
|
478 lib_signals_ignore(SIGALRM, FALSE); |
13065
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12859
diff
changeset
|
479 lib_signals_set_handler(SIGHUP, LIBSIG_FLAGS_SAFE, |
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12859
diff
changeset
|
480 sig_settings_reload, NULL); |
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12859
diff
changeset
|
481 lib_signals_set_handler(SIGUSR1, LIBSIG_FLAGS_SAFE, |
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12859
diff
changeset
|
482 sig_log_reopen, NULL); |
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12859
diff
changeset
|
483 lib_signals_set_handler(SIGCHLD, LIBSIG_FLAGS_SAFE, |
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12859
diff
changeset
|
484 sig_reap_children, NULL); |
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12859
diff
changeset
|
485 lib_signals_set_handler(SIGINT, LIBSIG_FLAGS_SAFE, sig_die, NULL); |
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12859
diff
changeset
|
486 lib_signals_set_handler(SIGTERM, LIBSIG_FLAGS_SAFE, sig_die, NULL); |
0 | 487 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
488 create_pid_file(pidfile_path); |
10572
26b5209dc4f4
doveconf: Log a warning if Dovecot was last started using a different config file.
Timo Sirainen <tss@iki.fi>
parents:
10521
diff
changeset
|
489 create_config_symlink(set); |
14950
543852ebb327
Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents:
14891
diff
changeset
|
490 instance_update(set); |
20452
9d3e4542c309
master: Allow stopping specific services via master socket.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19604
diff
changeset
|
491 master_clients_init(); |
2524 | 492 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
493 services_monitor_start(services); |
21115
a55167eff11a
master: Don't unlink login sockets at startup if someone is listening to them.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21094
diff
changeset
|
494 startup_finished = TRUE; |
0 | 495 } |
496 | |
13662
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
497 static void global_dead_pipe_close(void) |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
498 { |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
499 if (close(global_master_dead_pipe_fd[0]) < 0) |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
500 i_error("close(global dead pipe) failed: %m"); |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
501 if (close(global_master_dead_pipe_fd[1]) < 0) |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
502 i_error("close(global dead pipe) failed: %m"); |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
503 global_master_dead_pipe_fd[0] = -1; |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
504 global_master_dead_pipe_fd[1] = -1; |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
505 } |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
506 |
0 | 507 static void main_deinit(void) |
508 { | |
20452
9d3e4542c309
master: Allow stopping specific services via master socket.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19604
diff
changeset
|
509 master_clients_deinit(); |
14068
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
510 instance_update_now(instances); |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
511 timeout_remove(&to_instance); |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
512 master_instance_list_deinit(&instances); |
5f60958926e1
Keep track of what Dovecot instances have been executed and their instance_name.
Timo Sirainen <tss@iki.fi>
parents:
14040
diff
changeset
|
513 |
13662
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
514 /* kill services and wait for them to die before unlinking pid file */ |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
515 global_dead_pipe_close(); |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
516 services_destroy(services, TRUE); |
6894298ae5fd
master: Wait for services to stop listening before unlinking the pid file.
Timo Sirainen <tss@iki.fi>
parents:
13072
diff
changeset
|
517 |
19136
fefaa6d09a81
Replaced unlink() calls with i_unlink*() wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
19038
diff
changeset
|
518 i_unlink(pidfile_path); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
519 i_free(pidfile_path); |
0 | 520 |
10200
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
521 service_anvil_global_deinit(); |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
522 service_pids_deinit(); |
0 | 523 } |
524 | |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
525 static const char *get_full_config_path(struct service_list *list) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
526 { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
527 const char *path; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
528 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
529 path = master_service_get_config_path(master_service); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
530 if (*path == '/') |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
531 return path; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
532 |
10501
28a14e2fe5d6
Use t_abspath() instead of duplicating code.
Timo Sirainen <tss@iki.fi>
parents:
10312
diff
changeset
|
533 return p_strdup(list->pool, t_abspath(path)); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
534 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
535 |
9496
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
536 static void master_time_moved(time_t old_time, time_t new_time) |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
537 { |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
538 unsigned long secs; |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
539 |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
540 if (new_time >= old_time) |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
541 return; |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
542 |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
543 /* time moved backwards. disable launching new service processes |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
544 until */ |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
545 secs = old_time - new_time + 1; |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
546 if (secs > SERVICE_TIME_MOVED_BACKWARDS_MAX_THROTTLE_SECS) |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
547 secs = SERVICE_TIME_MOVED_BACKWARDS_MAX_THROTTLE_SECS; |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
548 services_throttle_time_sensitives(services, secs); |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
549 i_warning("Time moved backwards by %lu seconds, " |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
550 "waiting for %lu secs until new services are launched again.", |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
551 (unsigned long)(old_time - new_time), secs); |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
552 } |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
553 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
554 static void daemonize(void) |
0 | 555 { |
556 pid_t pid; | |
557 | |
558 pid = fork(); | |
559 if (pid < 0) | |
560 i_fatal("fork() failed: %m"); | |
561 | |
562 if (pid != 0) | |
563 _exit(0); | |
610 | 564 |
801
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
780
diff
changeset
|
565 if (setsid() < 0) |
86224ff16bf6
Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents:
780
diff
changeset
|
566 i_fatal("setsid() failed: %m"); |
1367
533bb936e674
chdir() to base_dir at startup. chdir() mail processes to home dir if it's
Timo Sirainen <tss@iki.fi>
parents:
1358
diff
changeset
|
567 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
568 /* update my_pid */ |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
569 hostpid_init(); |
0 | 570 } |
571 | |
279
49f4b0be0d87
Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents:
50
diff
changeset
|
572 static void print_help(void) |
49f4b0be0d87
Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents:
50
diff
changeset
|
573 { |
9958
e139e62cfa22
master: Build help and --log-error message to stderr, not stdout.
Timo Sirainen <tss@iki.fi>
parents:
9932
diff
changeset
|
574 fprintf(stderr, |
10611
c06033a1f147
master: Removed non-existing -cb parameter description from --help.
Timo Sirainen <tss@iki.fi>
parents:
10582
diff
changeset
|
575 "Usage: dovecot [-F] [-c <config file>] [-p] [-n] [-a] [--help] [--version]\n" |
16676
cecaa7b85f65
master: Added --hostdomain to the help message.
Pascal Volk <user@localhost.localdomain.org>
parents:
16664
diff
changeset
|
576 " [--build-options] [--hostdomain] [reload] [stop]\n"); |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
577 } |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
578 |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
579 static void print_build_options(void) |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
580 { |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
581 printf("Build options:" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
582 #ifdef IOLOOP_EPOLL |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
583 " ioloop=epoll" |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
584 #endif |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
585 #ifdef IOLOOP_KQUEUE |
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
586 " ioloop=kqueue" |
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
587 #endif |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
588 #ifdef IOLOOP_POLL |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
589 " ioloop=poll" |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
590 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
591 #ifdef IOLOOP_SELECT |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
592 " ioloop=select" |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
593 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
594 #ifdef IOLOOP_NOTIFY_INOTIFY |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
595 " notify=inotify" |
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
596 #endif |
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
597 #ifdef IOLOOP_NOTIFY_KQUEUE |
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
598 " notify=kqueue" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
599 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
600 #ifdef HAVE_IPV6 |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
601 " ipv6" |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
602 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
603 #ifdef HAVE_GNUTLS |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
604 " gnutls" |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
605 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
606 #ifdef HAVE_OPENSSL |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
607 " openssl" |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
608 #endif |
11311
4506efe5f238
dovecot --build-options shows IO_BLOCK_SIZE
Timo Sirainen <tss@iki.fi>
parents:
11303
diff
changeset
|
609 " io_block_size=%u" |
10017
7c091e3e0266
dovecot --build-options: Added "Mail storages" list back.
Timo Sirainen <tss@iki.fi>
parents:
10016
diff
changeset
|
610 "\nMail storages: "MAIL_STORAGES"\n" |
9329
ed142749ce67
dovecot --build-options: If SQL or LDAP was built as plugins, say it.
Timo Sirainen <tss@iki.fi>
parents:
9244
diff
changeset
|
611 #ifdef SQL_DRIVER_PLUGINS |
10017
7c091e3e0266
dovecot --build-options: Added "Mail storages" list back.
Timo Sirainen <tss@iki.fi>
parents:
10016
diff
changeset
|
612 "SQL driver plugins:" |
9329
ed142749ce67
dovecot --build-options: If SQL or LDAP was built as plugins, say it.
Timo Sirainen <tss@iki.fi>
parents:
9244
diff
changeset
|
613 #else |
10017
7c091e3e0266
dovecot --build-options: Added "Mail storages" list back.
Timo Sirainen <tss@iki.fi>
parents:
10016
diff
changeset
|
614 "SQL drivers:" |
9329
ed142749ce67
dovecot --build-options: If SQL or LDAP was built as plugins, say it.
Timo Sirainen <tss@iki.fi>
parents:
9244
diff
changeset
|
615 #endif |
21706
1c0256d2c33e
master: add cassandra to printed build options
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents:
21390
diff
changeset
|
616 #ifdef BUILD_CASSANDRA |
1c0256d2c33e
master: add cassandra to printed build options
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents:
21390
diff
changeset
|
617 " cassandra" |
1c0256d2c33e
master: add cassandra to printed build options
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents:
21390
diff
changeset
|
618 #endif |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
619 #ifdef BUILD_MYSQL |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
620 " mysql" |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
621 #endif |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
622 #ifdef BUILD_PGSQL |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
623 " postgresql" |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
624 #endif |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
625 #ifdef BUILD_SQLITE |
3919
b967ffb7e3a6
SQLite support. Patch by Jakob Hirsch.
Timo Sirainen <tss@iki.fi>
parents:
3917
diff
changeset
|
626 " sqlite" |
b967ffb7e3a6
SQLite support. Patch by Jakob Hirsch.
Timo Sirainen <tss@iki.fi>
parents:
3917
diff
changeset
|
627 #endif |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
628 "\nPassdb:" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
629 #ifdef PASSDB_BSDAUTH |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
630 " bsdauth" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
631 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
632 #ifdef PASSDB_CHECKPASSWORD |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
633 " checkpassword" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
634 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
635 #ifdef PASSDB_LDAP |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
636 " ldap" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
637 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
638 #ifdef PASSDB_PAM |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
639 " pam" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
640 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
641 #ifdef PASSDB_PASSWD |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
642 " passwd" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
643 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
644 #ifdef PASSDB_PASSWD_FILE |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
645 " passwd-file" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
646 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
647 #ifdef PASSDB_SHADOW |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
648 " shadow" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
649 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
650 #ifdef PASSDB_SQL |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
651 " sql" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
652 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
653 #ifdef PASSDB_VPOPMAIL |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
654 " vpopmail" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
655 #endif |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
656 "\nUserdb:" |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
657 #ifdef USERDB_CHECKPASSWORD |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
658 " checkpassword" |
7947
cd2789afcb09
Include "nss" in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents:
7946
diff
changeset
|
659 #endif |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
660 #ifdef USERDB_LDAP |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
661 " ldap" |
9329
ed142749ce67
dovecot --build-options: If SQL or LDAP was built as plugins, say it.
Timo Sirainen <tss@iki.fi>
parents:
9244
diff
changeset
|
662 #ifndef BUILTIN_LDAP |
ed142749ce67
dovecot --build-options: If SQL or LDAP was built as plugins, say it.
Timo Sirainen <tss@iki.fi>
parents:
9244
diff
changeset
|
663 "(plugin)" |
ed142749ce67
dovecot --build-options: If SQL or LDAP was built as plugins, say it.
Timo Sirainen <tss@iki.fi>
parents:
9244
diff
changeset
|
664 #endif |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
665 #endif |
10016
90622fad99a0
dovecot --build-options: List nss if it's enabled.
Timo Sirainen <tss@iki.fi>
parents:
9980
diff
changeset
|
666 #ifdef USERDB_NSS |
90622fad99a0
dovecot --build-options: List nss if it's enabled.
Timo Sirainen <tss@iki.fi>
parents:
9980
diff
changeset
|
667 " nss" |
90622fad99a0
dovecot --build-options: List nss if it's enabled.
Timo Sirainen <tss@iki.fi>
parents:
9980
diff
changeset
|
668 #endif |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
669 #ifdef USERDB_PASSWD |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
670 " passwd" |
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
671 #endif |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
672 #ifdef USERDB_PREFETCH |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
673 " prefetch" |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
674 #endif |
7947
cd2789afcb09
Include "nss" in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents:
7946
diff
changeset
|
675 #ifdef USERDB_PASSWD_FILE |
cd2789afcb09
Include "nss" in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents:
7946
diff
changeset
|
676 " passwd-file" |
cd2789afcb09
Include "nss" in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents:
7946
diff
changeset
|
677 #endif |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
678 #ifdef USERDB_SQL |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
679 " sql" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
680 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
681 #ifdef USERDB_STATIC |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
682 " static" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
683 #endif |
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
684 #ifdef USERDB_VPOPMAIL |
4475
3a3ef25c62ab
List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents:
4464
diff
changeset
|
685 " vpopmail" |
3589
fead84acb13c
Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents:
3535
diff
changeset
|
686 #endif |
11311
4506efe5f238
dovecot --build-options shows IO_BLOCK_SIZE
Timo Sirainen <tss@iki.fi>
parents:
11303
diff
changeset
|
687 "\n", IO_BLOCK_SIZE); |
279
49f4b0be0d87
Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents:
50
diff
changeset
|
688 } |
49f4b0be0d87
Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents:
50
diff
changeset
|
689 |
0 | 690 int main(int argc, char *argv[]) |
691 { | |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
692 struct master_settings *set; |
12726
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
693 const char *error, *doveconf_arg = NULL; |
9959
80472a77d765
Added debug_log_path setting and i_debug() call.
Timo Sirainen <tss@iki.fi>
parents:
9958
diff
changeset
|
694 failure_callback_t *orig_info_callback, *orig_debug_callback; |
11418
8f63f17fdb0c
master: dovecot --log-error now internally calls doveadm log test.
Timo Sirainen <tss@iki.fi>
parents:
11417
diff
changeset
|
695 bool foreground = FALSE, ask_key_pass = FALSE; |
11415
257eb30cc529
dovecot: Removed reload and stop handlers. "dovecot arg" now execs "doveadm arg".
Timo Sirainen <tss@iki.fi>
parents:
11311
diff
changeset
|
696 bool doubleopts[argc]; |
257eb30cc529
dovecot: Removed reload and stop handlers. "dovecot arg" now execs "doveadm arg".
Timo Sirainen <tss@iki.fi>
parents:
11311
diff
changeset
|
697 int i, c; |
0 | 698 |
2311
4558d1b196fd
Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents:
2306
diff
changeset
|
699 #ifdef DEBUG |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
700 if (getenv("GDB") == NULL) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
701 fd_debug_verify_leaks(3, 1024); |
2311
4558d1b196fd
Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents:
2306
diff
changeset
|
702 #endif |
11415
257eb30cc529
dovecot: Removed reload and stop handlers. "dovecot arg" now execs "doveadm arg".
Timo Sirainen <tss@iki.fi>
parents:
11311
diff
changeset
|
703 /* drop -- prefix from all --args. ugly, but the only way that it |
257eb30cc529
dovecot: Removed reload and stop handlers. "dovecot arg" now execs "doveadm arg".
Timo Sirainen <tss@iki.fi>
parents:
11311
diff
changeset
|
704 works with standard getopt() in all OSes.. */ |
11303
5b628ee2888d
dovecot: Fixed handling --parameters with some OSes.
Timo Sirainen <tss@iki.fi>
parents:
11224
diff
changeset
|
705 for (i = 1; i < argc; i++) { |
5b628ee2888d
dovecot: Fixed handling --parameters with some OSes.
Timo Sirainen <tss@iki.fi>
parents:
11224
diff
changeset
|
706 if (strncmp(argv[i], "--", 2) == 0) { |
5b628ee2888d
dovecot: Fixed handling --parameters with some OSes.
Timo Sirainen <tss@iki.fi>
parents:
11224
diff
changeset
|
707 if (argv[i][2] == '\0') |
5b628ee2888d
dovecot: Fixed handling --parameters with some OSes.
Timo Sirainen <tss@iki.fi>
parents:
11224
diff
changeset
|
708 break; |
5b628ee2888d
dovecot: Fixed handling --parameters with some OSes.
Timo Sirainen <tss@iki.fi>
parents:
11224
diff
changeset
|
709 argv[i] += 2; |
11415
257eb30cc529
dovecot: Removed reload and stop handlers. "dovecot arg" now execs "doveadm arg".
Timo Sirainen <tss@iki.fi>
parents:
11311
diff
changeset
|
710 doubleopts[i] = TRUE; |
257eb30cc529
dovecot: Removed reload and stop handlers. "dovecot arg" now execs "doveadm arg".
Timo Sirainen <tss@iki.fi>
parents:
11311
diff
changeset
|
711 } else { |
257eb30cc529
dovecot: Removed reload and stop handlers. "dovecot arg" now execs "doveadm arg".
Timo Sirainen <tss@iki.fi>
parents:
11311
diff
changeset
|
712 doubleopts[i] = FALSE; |
11303
5b628ee2888d
dovecot: Fixed handling --parameters with some OSes.
Timo Sirainen <tss@iki.fi>
parents:
11224
diff
changeset
|
713 } |
5b628ee2888d
dovecot: Fixed handling --parameters with some OSes.
Timo Sirainen <tss@iki.fi>
parents:
11224
diff
changeset
|
714 } |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
715 master_service = master_service_init(MASTER_SERVICE_NAME, |
9345
0dbc2dc0877c
master process shouldn't log to stderr. Changed the lib-master flag to _DONT_LOG_TO_STDERR.
Timo Sirainen <tss@iki.fi>
parents:
9329
diff
changeset
|
716 MASTER_SERVICE_FLAG_STANDALONE | |
0dbc2dc0877c
master process shouldn't log to stderr. Changed the lib-master flag to _DONT_LOG_TO_STDERR.
Timo Sirainen <tss@iki.fi>
parents:
9329
diff
changeset
|
717 MASTER_SERVICE_FLAG_DONT_LOG_TO_STDERR, |
11594
1d5cd1d835a1
master: Don't try to parse -options if they're not the first parameters.
Timo Sirainen <tss@iki.fi>
parents:
11493
diff
changeset
|
718 &argc, &argv, "+Fanp"); |
15201
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
14950
diff
changeset
|
719 i_unset_failure_prefix(); |
0 | 720 |
9496
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
721 io_loop_set_time_moved_callback(current_ioloop, master_time_moved); |
4fd624e60da1
master: If time moves backwards, delay launching new processes.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
722 |
1617
cc3cef25662c
Replaced geteuid() calls with one in the beginning and saving it to
Timo Sirainen <tss@iki.fi>
parents:
1610
diff
changeset
|
723 master_uid = geteuid(); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
724 master_gid = getegid(); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
725 |
10119
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
726 while ((c = master_getopt(master_service)) > 0) { |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
727 switch (c) { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
728 case 'F': |
0 | 729 foreground = TRUE; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
730 break; |
9236
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
731 case 'a': |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
732 doveconf_arg = "-a"; |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
733 break; |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
734 case 'n': |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
735 doveconf_arg = "-n"; |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
736 break; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
737 case 'p': |
3889
c7462001227b
Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
738 /* Ask SSL private key password */ |
c7462001227b
Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents:
3879
diff
changeset
|
739 ask_key_pass = TRUE; |
7334
ae8180a4febd
Allow dovecot --exec-mail ext program arguments.
Timo Sirainen <tss@iki.fi>
parents:
7229
diff
changeset
|
740 break; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
741 default: |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
742 if (!master_service_parse_option(master_service, |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
743 c, optarg)) { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
744 print_help(); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
745 exit(FATAL_DEFAULT); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
746 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
747 break; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
748 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
749 } |
21342
77b037d4b9b8
master: Update assert to make sure optind != 0
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21317
diff
changeset
|
750 i_assert(optind > 0 && optind <= argc); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
751 |
9236
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
752 if (doveconf_arg != NULL) { |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
753 const char **args; |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
754 |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
755 args = t_new(const char *, 5); |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
756 args[0] = DOVECOT_CONFIG_BIN_PATH; |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
757 args[1] = doveconf_arg; |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
758 args[2] = "-c"; |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
759 args[3] = master_service_get_config_path(master_service); |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
760 args[4] = NULL; |
10996
43f2452b7dd8
Replaced execv*() with execv*_const() wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
10983
diff
changeset
|
761 execv_const(args[0], args); |
9236
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
762 } |
955e68007ada
dovecot: Forward dovecot -a, -n to doveconf.
Timo Sirainen <tss@iki.fi>
parents:
9230
diff
changeset
|
763 |
11493 | 764 if (optind == argc) { |
765 /* starting Dovecot */ | |
766 } else if (!doubleopts[optind]) { | |
767 /* dovecot xx -> doveadm xx */ | |
768 (void)execv(BINDIR"/doveadm", argv); | |
769 i_fatal("execv("BINDIR"/doveadm) failed: %m"); | |
770 } else if (strcmp(argv[optind], "version") == 0) { | |
771 printf("%s\n", DOVECOT_VERSION_FULL); | |
772 return 0; | |
16664
5a3821097f3c
master: Added --hostdomain setting to show the current hostdomain.
Timo Sirainen <tss@iki.fi>
parents:
15828
diff
changeset
|
773 } else if (strcmp(argv[optind], "hostdomain") == 0) { |
5a3821097f3c
master: Added --hostdomain setting to show the current hostdomain.
Timo Sirainen <tss@iki.fi>
parents:
15828
diff
changeset
|
774 printf("%s\n", my_hostdomain()); |
5a3821097f3c
master: Added --hostdomain setting to show the current hostdomain.
Timo Sirainen <tss@iki.fi>
parents:
15828
diff
changeset
|
775 return 0; |
11493 | 776 } else if (strcmp(argv[optind], "build-options") == 0) { |
777 print_build_options(); | |
778 return 0; | |
779 } else if (strcmp(argv[optind], "log-error") == 0) { | |
780 fprintf(stderr, "Writing to error logs and killing myself..\n"); | |
781 argv[optind] = "log test"; | |
782 (void)execv(BINDIR"/doveadm", argv); | |
783 i_fatal("execv("BINDIR"/doveadm) failed: %m"); | |
784 } else if (strcmp(argv[optind], "help") == 0) { | |
785 print_help(); | |
786 return 0; | |
787 } else { | |
788 print_help(); | |
789 i_fatal("Unknown argument: --%s", argv[optind]); | |
0 | 790 } |
791 | |
12819
539da23bff31
master: Use per-services_list "master is dead" fd, so services know when config is reload.
Timo Sirainen <tss@iki.fi>
parents:
12729
diff
changeset
|
792 if (pipe(global_master_dead_pipe_fd) < 0) |
12564
b0ec48006d57
master-child API change: Use a separate fd for tracking when master dies.
Timo Sirainen <tss@iki.fi>
parents:
12482
diff
changeset
|
793 i_fatal("pipe() failed: %m"); |
12819
539da23bff31
master: Use per-services_list "master is dead" fd, so services know when config is reload.
Timo Sirainen <tss@iki.fi>
parents:
12729
diff
changeset
|
794 fd_close_on_exec(global_master_dead_pipe_fd[0], TRUE); |
539da23bff31
master: Use per-services_list "master is dead" fd, so services know when config is reload.
Timo Sirainen <tss@iki.fi>
parents:
12729
diff
changeset
|
795 fd_close_on_exec(global_master_dead_pipe_fd[1], TRUE); |
5437 | 796 |
10983
eecf62b49475
master: Get settings without specifying module.
Timo Sirainen <tss@iki.fi>
parents:
10842
diff
changeset
|
797 set = master_settings_read(); |
9914
3e4f64af6c9a
dovecot -p: And fixed it to really work this time.
Timo Sirainen <tss@iki.fi>
parents:
9913
diff
changeset
|
798 if (ask_key_pass) { |
12482
28db9b177087
master: Use t_askpass() for getting the manual SSL key password.
Timo Sirainen <tss@iki.fi>
parents:
12439
diff
changeset
|
799 ssl_manual_key_password = |
28db9b177087
master: Use t_askpass() for getting the manual SSL key password.
Timo Sirainen <tss@iki.fi>
parents:
12439
diff
changeset
|
800 t_askpass("Give the password for SSL keys: "); |
9914
3e4f64af6c9a
dovecot -p: And fixed it to really work this time.
Timo Sirainen <tss@iki.fi>
parents:
9913
diff
changeset
|
801 } |
3e4f64af6c9a
dovecot -p: And fixed it to really work this time.
Timo Sirainen <tss@iki.fi>
parents:
9913
diff
changeset
|
802 |
21116
61d0c09b50f0
global: use dev_null_fd instead of opening /dev/null
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21115
diff
changeset
|
803 if (dup2(dev_null_fd, STDIN_FILENO) < 0) |
61d0c09b50f0
global: use dev_null_fd instead of opening /dev/null
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21115
diff
changeset
|
804 i_fatal("dup2(dev_null_fd) failed: %m"); |
61d0c09b50f0
global: use dev_null_fd instead of opening /dev/null
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21115
diff
changeset
|
805 if (!foreground && dup2(dev_null_fd, STDOUT_FILENO) < 0) |
61d0c09b50f0
global: use dev_null_fd instead of opening /dev/null
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21115
diff
changeset
|
806 i_fatal("dup2(dev_null_fd) failed: %m"); |
9914
3e4f64af6c9a
dovecot -p: And fixed it to really work this time.
Timo Sirainen <tss@iki.fi>
parents:
9913
diff
changeset
|
807 |
9223
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
808 pidfile_path = |
b1c6b740a4a1
master: Check PID file existence at startup before doing anything.
Timo Sirainen <tss@iki.fi>
parents:
9212
diff
changeset
|
809 i_strconcat(set->base_dir, "/"MASTER_PID_FILE_NAME, NULL); |
9894
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
810 |
9932
accb1c02e03c
master: Use "master: " prefix in log messages.
Timo Sirainen <tss@iki.fi>
parents:
9928
diff
changeset
|
811 master_service_init_log(master_service, "master: "); |
9894
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
812 i_get_failure_handlers(&orig_fatal_callback, &orig_error_callback, |
9959
80472a77d765
Added debug_log_path setting and i_debug() call.
Timo Sirainen <tss@iki.fi>
parents:
9958
diff
changeset
|
813 &orig_info_callback, &orig_debug_callback); |
9894
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
814 i_set_fatal_handler(startup_fatal_handler); |
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
815 i_set_error_handler(startup_error_handler); |
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
816 |
11418
8f63f17fdb0c
master: dovecot --log-error now internally calls doveadm log test.
Timo Sirainen <tss@iki.fi>
parents:
11417
diff
changeset
|
817 pid_file_check_running(pidfile_path); |
8f63f17fdb0c
master: dovecot --log-error now internally calls doveadm log test.
Timo Sirainen <tss@iki.fi>
parents:
11417
diff
changeset
|
818 master_settings_do_fixes(set); |
8f63f17fdb0c
master: dovecot --log-error now internally calls doveadm log test.
Timo Sirainen <tss@iki.fi>
parents:
11417
diff
changeset
|
819 fatal_log_check(set); |
8354
5339d2ebeb56
dovecot -n/-a: Print some information about the system.
Timo Sirainen <tss@iki.fi>
parents:
8323
diff
changeset
|
820 |
22488
052396bac097
lib-master: master_service_import_environment() - use a data stack frame
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22487
diff
changeset
|
821 const struct master_service_settings *service_set = |
052396bac097
lib-master: master_service_import_environment() - use a data stack frame
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22487
diff
changeset
|
822 master_service_settings_get(master_service); |
052396bac097
lib-master: master_service_import_environment() - use a data stack frame
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22487
diff
changeset
|
823 master_service_import_environment(service_set->import_environment); |
12726
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
824 master_service_env_clean(); |
3897
9dc2f8f0eb59
When starting with --exec-mail, keep USER and HOME environments and clear
Timo Sirainen <tss@iki.fi>
parents:
3889
diff
changeset
|
825 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
826 /* create service structures from settings. if there are any errors in |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
827 service configuration we'll catch it here. */ |
9794
da330a07e45c
master: Support reloading configuration.
Timo Sirainen <tss@iki.fi>
parents:
9496
diff
changeset
|
828 service_pids_init(); |
10200
01676e67cf38
master: anvil process now stays alive across SIGHUPs.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
829 service_anvil_global_init(); |
12726
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
830 if (services_create(set, &services, &error) < 0) |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
831 i_fatal("%s", error); |
2311
4558d1b196fd
Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents:
2306
diff
changeset
|
832 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
833 services->config->config_file_path = get_full_config_path(services); |
0 | 834 |
11418
8f63f17fdb0c
master: dovecot --log-error now internally calls doveadm log test.
Timo Sirainen <tss@iki.fi>
parents:
11417
diff
changeset
|
835 /* if any listening fails, fail completely */ |
8f63f17fdb0c
master: dovecot --log-error now internally calls doveadm log test.
Timo Sirainen <tss@iki.fi>
parents:
11417
diff
changeset
|
836 if (services_listen(services) <= 0) |
8f63f17fdb0c
master: dovecot --log-error now internally calls doveadm log test.
Timo Sirainen <tss@iki.fi>
parents:
11417
diff
changeset
|
837 i_fatal("Failed to start listeners"); |
0 | 838 |
11418
8f63f17fdb0c
master: dovecot --log-error now internally calls doveadm log test.
Timo Sirainen <tss@iki.fi>
parents:
11417
diff
changeset
|
839 if (chdir(set->base_dir) < 0) |
8f63f17fdb0c
master: dovecot --log-error now internally calls doveadm log test.
Timo Sirainen <tss@iki.fi>
parents:
11417
diff
changeset
|
840 i_fatal("chdir(%s) failed: %m", set->base_dir); |
9226
0ca7ed260f1e
master: Added back some startup checks/fixes.
Timo Sirainen <tss@iki.fi>
parents:
9223
diff
changeset
|
841 |
9894
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
842 i_set_fatal_handler(master_fatal_callback); |
3d362066d0e8
master: Log startup errors as well as writing them to stderr.
Timo Sirainen <tss@iki.fi>
parents:
9876
diff
changeset
|
843 i_set_error_handler(orig_error_callback); |
0 | 844 |
12729
08e4280e5bfd
master: Change stderr to /dev/null just before forking.
Timo Sirainen <tss@iki.fi>
parents:
12726
diff
changeset
|
845 if (!foreground) |
08e4280e5bfd
master: Change stderr to /dev/null just before forking.
Timo Sirainen <tss@iki.fi>
parents:
12726
diff
changeset
|
846 daemonize(); |
08e4280e5bfd
master: Change stderr to /dev/null just before forking.
Timo Sirainen <tss@iki.fi>
parents:
12726
diff
changeset
|
847 |
14040
51324056af4f
Keep track of seen mountpoints and warn at startup if one is missing.
Timo Sirainen <tss@iki.fi>
parents:
13972
diff
changeset
|
848 T_BEGIN { |
51324056af4f
Keep track of seen mountpoints and warn at startup if one is missing.
Timo Sirainen <tss@iki.fi>
parents:
13972
diff
changeset
|
849 main_init(set); |
51324056af4f
Keep track of seen mountpoints and warn at startup if one is missing.
Timo Sirainen <tss@iki.fi>
parents:
13972
diff
changeset
|
850 } T_END; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
851 master_service_run(master_service, NULL); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
852 main_deinit(); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9134
diff
changeset
|
853 master_service_deinit(&master_service); |
0 | 854 return 0; |
855 } |