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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22713
cb108f786fb4 Updated copyright notices to include the year 2018.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 22488
diff changeset
1 /* Copyright (c) 2005-2018 Dovecot authors, see the included COPYING file */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
279
49f4b0be0d87 Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents: 50
diff changeset
30 #include <stdio.h>
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 #include <unistd.h>
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 #include <fcntl.h>
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 #include <sys/stat.h>
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
4ae85f573c93 Compiler warning fixes.
Timo Sirainen <tss@iki.fi>
parents: 14286
diff changeset
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
4ae85f573c93 Compiler warning fixes.
Timo Sirainen <tss@iki.fi>
parents: 14286
diff changeset
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
7bda77ccd1fc Compiler warning fixes
Timo Sirainen <tss@iki.fi>
parents: 14840
diff changeset
217 *pid_r = (pid_t)-1;
7bda77ccd1fc Compiler warning fixes
Timo Sirainen <tss@iki.fi>
parents: 14840
diff changeset
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
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
260 static void create_pid_file(const char *path)
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
261 {
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
262 const char *pid;
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
263 int fd;
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
264
2534
9c55e054e57d crashfix in pid generation
Timo Sirainen <tss@iki.fi>
parents: 2524
diff changeset
265 pid = t_strconcat(dec2str(getpid()), "\n", NULL);
2524
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
266
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
267 fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, 0644);
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
268 if (fd == -1)
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
269 i_fatal("open(%s) failed: %m", path);
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
270 if (write_full(fd, pid, strlen(pid)) < 0)
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
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
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
273 }
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
471 /* deny file access from everyone else except owner */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
472 (void)umask(0077);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
495 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
507 static void main_deinit(void)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
523 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
555 {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
556 pid_t pid;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
557
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
558 pid = fork();
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
559 if (pid < 0)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
560 i_fatal("fork() failed: %m");
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
561
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
562 if (pid != 0)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
563 _exit(0);
610
bc766660efc4 Call setsid() when daemonizing.
Timo Sirainen <tss@iki.fi>
parents: 575
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
570 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
690 int main(int argc, char *argv[])
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
764 if (optind == argc) {
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
765 /* starting Dovecot */
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
766 } else if (!doubleopts[optind]) {
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
767 /* dovecot xx -> doveadm xx */
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
768 (void)execv(BINDIR"/doveadm", argv);
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
769 i_fatal("execv("BINDIR"/doveadm) failed: %m");
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
770 } else if (strcmp(argv[optind], "version") == 0) {
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
771 printf("%s\n", DOVECOT_VERSION_FULL);
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
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
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
776 } else if (strcmp(argv[optind], "build-options") == 0) {
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
777 print_build_options();
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
778 return 0;
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
779 } else if (strcmp(argv[optind], "log-error") == 0) {
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
780 fprintf(stderr, "Writing to error logs and killing myself..\n");
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
781 argv[optind] = "log test";
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
782 (void)execv(BINDIR"/doveadm", argv);
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
783 i_fatal("execv("BINDIR"/doveadm) failed: %m");
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
784 } else if (strcmp(argv[optind], "help") == 0) {
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
785 print_help();
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
786 return 0;
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
787 } else {
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
788 print_help();
cf496a6d669e master: Small code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 11418
diff changeset
789 i_fatal("Unknown argument: --%s", argv[optind]);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
790 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
2704fc574e70 /dev/null was opened too late.
Timo Sirainen <tss@iki.fi>
parents: 5432
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
854 return 0;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
855 }