annotate src/master/main.c @ 8782:e5cc81734221 HEAD

Compile fix for systems where printf() is a macro.
author Timo Sirainen <tss@iki.fi>
date Thu, 26 Feb 2009 11:24:21 -0500
parents 035037f388fa
children c9381a0fdc5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8590
b9faf4db2a9f Updated copyright notices to include year 2009.
Timo Sirainen <tss@iki.fi>
parents: 8354
diff changeset
1 /* Copyright (c) 2002-2009 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"
5887
3f2eb1b9c555 Support listening multiple sockets. SIGHUP also doesn't anymore recreate
Timo Sirainen <tss@iki.fi>
parents: 5846
diff changeset
4 #include "array.h"
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "ioloop.h"
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "lib-signals.h"
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "network.h"
697
7814b29d0862 Created env_put() and env_clean() for a bit easier handling of environment
Timo Sirainen <tss@iki.fi>
parents: 635
diff changeset
8 #include "env-util.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
9 #include "fd-close-on-exec.h"
2524
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
10 #include "write-full.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
11 #include "restrict-process-size.h"
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12
3889
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
13 #include "askpass.h"
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 #include "auth-process.h"
5789
4f22660ffd33 Move POSIX capabilities dropping into separate function.
Andrey Panin <pazke@donpac.ru>
parents: 5696
diff changeset
15 #include "capabilities.h"
3853
b3e18b51c205 Start dict server automatically when a client tries to connect to it.
Timo Sirainen <tss@iki.fi>
parents: 3724
diff changeset
16 #include "dict-process.h"
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 #include "login-process.h"
1055
a72bba3f8a55 Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents: 1036
diff changeset
18 #include "mail-process.h"
3724
d22c883021da Added syslog_facility setting to config file.
Timo Sirainen <tss@iki.fi>
parents: 3620
diff changeset
19 #include "syslog-util.h"
5936
Timo Sirainen <tss@iki.fi>
parents: 5887
diff changeset
20 #include "listener.h"
615
0d852af6842e Master process generates DH/RSA parameters now and stores them into file
Timo Sirainen <tss@iki.fi>
parents: 610
diff changeset
21 #include "ssl-init.h"
2000
c7c19f5071c3 Write all logging through master process. Fixes problems with log rotation,
Timo Sirainen <tss@iki.fi>
parents: 1820
diff changeset
22 #include "log.h"
8354
5339d2ebeb56 dovecot -n/-a: Print some information about the system.
Timo Sirainen <tss@iki.fi>
parents: 8323
diff changeset
23 #include "sysinfo-get.h"
8595
829b6555392b master: When receiving SIGHUP, get the hostname again in case it changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
24 #include "hostpid.h"
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25
279
49f4b0be0d87 Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents: 50
diff changeset
26 #include <stdio.h>
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 #include <stdlib.h>
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 #include <unistd.h>
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 #include <fcntl.h>
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 #include <syslog.h>
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 #include <sys/stat.h>
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32
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
33 /* Try to raise our fd limit this high at startup. If the limit is already
0e08960275f8 Grow file descriptors to 64k at startup, and drop them for login and imap
Timo Sirainen <tss@iki.fi>
parents: 6303
diff changeset
34 higher, it's not dropped. */
0e08960275f8 Grow file descriptors to 64k at startup, and drop them for login and imap
Timo Sirainen <tss@iki.fi>
parents: 6303
diff changeset
35 #define DOVECOT_MASTER_FD_MIN_LIMIT 65536
0e08960275f8 Grow file descriptors to 64k at startup, and drop them for login and imap
Timo Sirainen <tss@iki.fi>
parents: 6303
diff changeset
36
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
37 #define FATAL_FILENAME "master-fatal.lastlog"
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
38
635
90a65c017bf0 SIGHUP reloads now settings. Logged in clients are left untouched, but
Timo Sirainen <tss@iki.fi>
parents: 615
diff changeset
39 static const char *configfile = SYSCONFDIR "/" PACKAGE ".conf";
8323
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
40 static pid_t master_original_pid;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41
1000
0fbafade2d85 If auth/login process died unexpectedly, the exit status or killing signal
Timo Sirainen <tss@iki.fi>
parents: 945
diff changeset
42 struct ioloop *ioloop;
5432
2b4fa90860dd Before unlinking auth sockets at startup, try connecting to them first to
Timo Sirainen <tss@iki.fi>
parents: 5333
diff changeset
43 int null_fd = -1, inetd_login_fd;
1617
cc3cef25662c Replaced geteuid() calls with one in the beginning and saving it to
Timo Sirainen <tss@iki.fi>
parents: 1610
diff changeset
44 uid_t master_uid;
3989
e93e39326ae1 Added ssl-build-param binary to build the ssl-parameters.dat. This way
Timo Sirainen <tss@iki.fi>
parents: 3966
diff changeset
45 char program_path[PATH_MAX];
3889
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
46 char ssl_manual_key_password[100];
5843
f655c4d4a419 Moved child process handling to child-process.[ch]. The hash table now uses
Timo Sirainen <tss@iki.fi>
parents: 5824
diff changeset
47 const char *env_tz;
8301
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
48 bool auth_success_written;
2235
dcff4c088f1a DEBUG: If GDB environment is set, don't do fd leak checks.
Timo Sirainen <tss@iki.fi>
parents: 2047
diff changeset
49 #ifdef DEBUG
5843
f655c4d4a419 Moved child process handling to child-process.[ch]. The hash table now uses
Timo Sirainen <tss@iki.fi>
parents: 5824
diff changeset
50 bool gdb;
2235
dcff4c088f1a DEBUG: If GDB environment is set, don't do fd leak checks.
Timo Sirainen <tss@iki.fi>
parents: 2047
diff changeset
51 #endif
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52
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
53 static void ATTR_NORETURN ATTR_FORMAT(3, 0)
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
54 master_fatal_callback(enum log_type type, int status,
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
55 const char *format, va_list args)
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
56 {
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
57 const struct settings *set = settings_root->defaults;
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
58 const char *path, *str;
7351
6115fe69094c Fatals/panics logged by master weren't logged properly.
Timo Sirainen <tss@iki.fi>
parents: 7334
diff changeset
59 va_list args2;
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
60 int fd;
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
61
8323
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
62 /* if we already forked a child process, this isn't fatal for the
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
63 main process and there's no need to write the fatal file. */
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
64 if (getpid() == master_original_pid) {
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
65 /* write the error message to a file */
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
66 path = t_strconcat(set->base_dir, "/"FATAL_FILENAME, NULL);
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
67 fd = open(path, O_CREAT | O_TRUNC | O_WRONLY, 0600);
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
68 if (fd != -1) {
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
69 VA_COPY(args2, args);
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
70 str = t_strdup_vprintf(format, args2);
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
71 write_full(fd, str, strlen(str));
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
72 (void)close(fd);
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
73 }
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
74 }
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
75
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
76 /* write it to log as well */
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
77 if (*set->log_path == '\0')
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
78 i_syslog_fatal_handler(type, status, format, args);
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
79 else
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
80 default_fatal_handler(type, status, format, args);
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
81 }
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
82
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
83 static void fatal_log_check(void)
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
84 {
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
85 const struct settings *set = settings_root->defaults;
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
86 const char *path;
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
87 char buf[1024];
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
88 ssize_t ret;
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
89 int fd;
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
90
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
91 path = t_strconcat(set->base_dir, "/"FATAL_FILENAME, NULL);
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
92 fd = open(path, O_RDONLY);
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
93 if (fd == -1)
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
94 return;
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
95
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
96 ret = read(fd, buf, sizeof(buf));
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
97 if (ret < 0)
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
98 i_error("read(%s) failed: %m", path);
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
99 else {
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
100 buf[ret] = '\0';
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
101 i_warning("Last died with error (see error log for more "
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
102 "information): %s", buf);
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
103 }
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
104
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
105 close(fd);
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
106 if (unlink(path) < 0)
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
107 i_error("unlink(%s) failed: %m", path);
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
108 }
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
109
8305
e4d0ce4d3420 Don't show the WhyDoesItNotWork link if auth_debug=yes already.
Timo Sirainen <tss@iki.fi>
parents: 8301
diff changeset
110 static void auth_warning_print(const struct server_settings *set)
8301
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
111 {
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
112 struct stat st;
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
113
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
114 auth_success_written = stat(AUTH_SUCCESS_PATH, &st) == 0;
8305
e4d0ce4d3420 Don't show the WhyDoesItNotWork link if auth_debug=yes already.
Timo Sirainen <tss@iki.fi>
parents: 8301
diff changeset
115 if (!auth_success_written && !set->auths->debug &&
e4d0ce4d3420 Don't show the WhyDoesItNotWork link if auth_debug=yes already.
Timo Sirainen <tss@iki.fi>
parents: 8301
diff changeset
116 strcmp(set->defaults->protocols, "none") != 0) {
8301
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
117 i_info("If you have trouble with authentication failures,\n"
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
118 "enable auth_debug setting. "
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
119 "See http://wiki.dovecot.org/WhyDoesItNotWork");
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
120
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
121 }
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
122 }
d46579bb7a3c Print a help message about authentication at startup until the first successful authentication.
Timo Sirainen <tss@iki.fi>
parents: 8062
diff changeset
123
2306
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
124 static void set_logfile(struct settings *set)
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
125 {
3724
d22c883021da Added syslog_facility setting to config file.
Timo Sirainen <tss@iki.fi>
parents: 3620
diff changeset
126 int facility;
d22c883021da Added syslog_facility setting to config file.
Timo Sirainen <tss@iki.fi>
parents: 3620
diff changeset
127
4388
af61031c746f Settings parser nowadays returns "" instead of NULL when it reads an empty
Timo Sirainen <tss@iki.fi>
parents: 4375
diff changeset
128 if (*set->log_path == '\0') {
3724
d22c883021da Added syslog_facility setting to config file.
Timo Sirainen <tss@iki.fi>
parents: 3620
diff changeset
129 if (!syslog_facility_find(set->syslog_facility, &facility))
d22c883021da Added syslog_facility setting to config file.
Timo Sirainen <tss@iki.fi>
parents: 3620
diff changeset
130 facility = LOG_MAIL;
d22c883021da Added syslog_facility setting to config file.
Timo Sirainen <tss@iki.fi>
parents: 3620
diff changeset
131
d22c883021da Added syslog_facility setting to config file.
Timo Sirainen <tss@iki.fi>
parents: 3620
diff changeset
132 i_set_failure_syslog("dovecot", LOG_NDELAY, facility);
d22c883021da Added syslog_facility setting to config file.
Timo Sirainen <tss@iki.fi>
parents: 3620
diff changeset
133 } else {
2306
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
134 /* log to file or stderr */
5333
55260092b094 Fixes to handling log prefixes. imap/pop3 processes now log the
Timo Sirainen <tss@iki.fi>
parents: 5249
diff changeset
135 i_set_failure_file(set->log_path, "dovecot: ");
2306
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
136 }
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
137 i_set_fatal_handler(master_fatal_callback);
2306
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
138
4388
af61031c746f Settings parser nowadays returns "" instead of NULL when it reads an empty
Timo Sirainen <tss@iki.fi>
parents: 4375
diff changeset
139 if (*set->info_log_path != '\0')
2306
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
140 i_set_info_file(set->info_log_path);
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
141
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
142 i_set_failure_timestamp_format(set->log_timestamp);
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
143 }
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
144
635
90a65c017bf0 SIGHUP reloads now settings. Logged in clients are left untouched, but
Timo Sirainen <tss@iki.fi>
parents: 615
diff changeset
145 static void settings_reload(void)
90a65c017bf0 SIGHUP reloads now settings. Logged in clients are left untouched, but
Timo Sirainen <tss@iki.fi>
parents: 615
diff changeset
146 {
2306
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
147 struct server_settings *old_set = settings_root;
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
148
635
90a65c017bf0 SIGHUP reloads now settings. Logged in clients are left untouched, but
Timo Sirainen <tss@iki.fi>
parents: 615
diff changeset
149 i_warning("SIGHUP received - reloading configuration");
90a65c017bf0 SIGHUP reloads now settings. Logged in clients are left untouched, but
Timo Sirainen <tss@iki.fi>
parents: 615
diff changeset
150
90a65c017bf0 SIGHUP reloads now settings. Logged in clients are left untouched, but
Timo Sirainen <tss@iki.fi>
parents: 615
diff changeset
151 /* restart auth and login processes */
4670
5372b92be174 Reference counter fixes
Timo Sirainen <tss@iki.fi>
parents: 4578
diff changeset
152 login_processes_destroy_all();
635
90a65c017bf0 SIGHUP reloads now settings. Logged in clients are left untouched, but
Timo Sirainen <tss@iki.fi>
parents: 615
diff changeset
153 auth_processes_destroy_all();
8649
67c08c386702 Added dict_process_count setting for creating multiple dict processes.
Timo Sirainen <tss@iki.fi>
parents: 8595
diff changeset
154 dict_processes_kill();
1223
52e0830ade13 Added setting mail_drop_priv_before_exec.
Timo Sirainen <tss@iki.fi>
parents: 1124
diff changeset
155
8595
829b6555392b master: When receiving SIGHUP, get the hostname again in case it changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
156 /* see if hostname changed */
829b6555392b master: When receiving SIGHUP, get the hostname again in case it changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
157 hostpid_init();
829b6555392b master: When receiving SIGHUP, get the hostname again in case it changed.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
158
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
159 if (!master_settings_read(configfile, FALSE, FALSE))
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
160 i_warning("Invalid configuration, keeping old one");
2306
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
161 else {
5887
3f2eb1b9c555 Support listening multiple sockets. SIGHUP also doesn't anymore recreate
Timo Sirainen <tss@iki.fi>
parents: 5846
diff changeset
162 if (!IS_INETD())
3f2eb1b9c555 Support listening multiple sockets. SIGHUP also doesn't anymore recreate
Timo Sirainen <tss@iki.fi>
parents: 5846
diff changeset
163 listeners_open_fds(old_set, TRUE);
2306
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
164 set_logfile(settings_root->defaults);
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
165 }
635
90a65c017bf0 SIGHUP reloads now settings. Logged in clients are left untouched, but
Timo Sirainen <tss@iki.fi>
parents: 615
diff changeset
166 }
90a65c017bf0 SIGHUP reloads now settings. Logged in clients are left untouched, but
Timo Sirainen <tss@iki.fi>
parents: 615
diff changeset
167
6411
6a64e64fa3a3 Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents: 6397
diff changeset
168 static void sig_die(int signo, void *context ATTR_UNUSED)
3620
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
169 {
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
170 /* warn about being killed because of some signal, except SIGINT (^C)
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
171 which is too common at least while testing :) */
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
172 if (signo != SIGINT)
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
173 i_warning("Killed with signal %d", signo);
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
174 io_loop_stop(ioloop);
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
175 }
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
176
6411
6a64e64fa3a3 Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents: 6397
diff changeset
177 static void sig_reload_settings(int signo ATTR_UNUSED,
6a64e64fa3a3 Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents: 6397
diff changeset
178 void *context ATTR_UNUSED)
3620
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
179 {
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
180 settings_reload();
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
181 }
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
182
6411
6a64e64fa3a3 Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents: 6397
diff changeset
183 static void sig_reopen_logs(int signo ATTR_UNUSED,
6a64e64fa3a3 Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents: 6397
diff changeset
184 void *context ATTR_UNUSED)
3620
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
185 {
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
186 set_logfile(settings_root->defaults);
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
187 }
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
188
3863
55df57c028d4 Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents: 3853
diff changeset
189 static bool have_stderr_set(struct settings *set)
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
190 {
4388
af61031c746f Settings parser nowadays returns "" instead of NULL when it reads an empty
Timo Sirainen <tss@iki.fi>
parents: 4375
diff changeset
191 if (*set->log_path != '\0' &&
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
192 strcmp(set->log_path, "/dev/stderr") == 0)
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
193 return TRUE;
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
194
4388
af61031c746f Settings parser nowadays returns "" instead of NULL when it reads an empty
Timo Sirainen <tss@iki.fi>
parents: 4375
diff changeset
195 if (*set->info_log_path != '\0' &&
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
196 strcmp(set->info_log_path, "/dev/stderr") == 0)
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
197 return TRUE;
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
198
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
199 return FALSE;
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
200 }
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
201
3863
55df57c028d4 Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents: 3853
diff changeset
202 static bool have_stderr(struct server_settings *server)
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
203 {
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
204 while (server != NULL) {
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
205 if (server->imap != NULL && have_stderr_set(server->imap))
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
206 return TRUE;
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
207 if (server->pop3 != NULL && have_stderr_set(server->pop3))
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
208 return TRUE;
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
209
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
210 server = server->next;
1055
a72bba3f8a55 Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents: 1036
diff changeset
211 }
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
212
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
213 return FALSE;
1273
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
214 }
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
215
5437
2704fc574e70 /dev/null was opened too late.
Timo Sirainen <tss@iki.fi>
parents: 5432
diff changeset
216 static void open_null_fd(void)
1273
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
217 {
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
218 null_fd = open("/dev/null", O_RDONLY);
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
219 if (null_fd == -1)
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
220 i_fatal("Can't open /dev/null: %m");
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
221 fd_close_on_exec(null_fd, TRUE);
5437
2704fc574e70 /dev/null was opened too late.
Timo Sirainen <tss@iki.fi>
parents: 5432
diff changeset
222 }
1273
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
223
5437
2704fc574e70 /dev/null was opened too late.
Timo Sirainen <tss@iki.fi>
parents: 5432
diff changeset
224 static void open_fds(void)
2704fc574e70 /dev/null was opened too late.
Timo Sirainen <tss@iki.fi>
parents: 5432
diff changeset
225 {
1273
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
226 /* make sure all fds between 0..3 are used. */
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
227 while (null_fd < 4) {
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
228 null_fd = dup(null_fd);
4578
3bb3d5ad254f Cleanup + handle dup() failure.
Timo Sirainen <tss@iki.fi>
parents: 4553
diff changeset
229 if (null_fd == -1)
3bb3d5ad254f Cleanup + handle dup() failure.
Timo Sirainen <tss@iki.fi>
parents: 4553
diff changeset
230 i_fatal("dup(null_fd) failed: %m");
1273
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
231 fd_close_on_exec(null_fd, TRUE);
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
232 }
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
233
6940
414c9d631a81 Replaced t_push/t_pop calls with T_FRAME*() macros.
Timo Sirainen <tss@iki.fi>
parents: 6893
diff changeset
234 if (!IS_INETD()) {
7226
e6693a0ec8e1 Renamed T_FRAME_BEGIN/END to T_BEGIN/END. Removed T_FRAME() macro and
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
235 T_BEGIN {
6940
414c9d631a81 Replaced t_push/t_pop calls with T_FRAME*() macros.
Timo Sirainen <tss@iki.fi>
parents: 6893
diff changeset
236 listeners_open_fds(NULL, FALSE);
7226
e6693a0ec8e1 Renamed T_FRAME_BEGIN/END to T_BEGIN/END. Removed T_FRAME() macro and
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
237 } T_END;
6940
414c9d631a81 Replaced t_push/t_pop calls with T_FRAME*() macros.
Timo Sirainen <tss@iki.fi>
parents: 6893
diff changeset
238 }
1124
5e9430a39611 /dev/stderr works now in log paths.
Timo Sirainen <tss@iki.fi>
parents: 1100
diff changeset
239
4477
e414beaf1473 If something in io_loop_create() failed, we logged the error to /dev/null.
Timo Sirainen <tss@iki.fi>
parents: 4475
diff changeset
240 /* close stdin and stdout. */
1124
5e9430a39611 /dev/stderr works now in log paths.
Timo Sirainen <tss@iki.fi>
parents: 1100
diff changeset
241 if (dup2(null_fd, 0) < 0)
5e9430a39611 /dev/stderr works now in log paths.
Timo Sirainen <tss@iki.fi>
parents: 1100
diff changeset
242 i_fatal("dup2(0) failed: %m");
5e9430a39611 /dev/stderr works now in log paths.
Timo Sirainen <tss@iki.fi>
parents: 1100
diff changeset
243 if (dup2(null_fd, 1) < 0)
5e9430a39611 /dev/stderr works now in log paths.
Timo Sirainen <tss@iki.fi>
parents: 1100
diff changeset
244 i_fatal("dup2(1) failed: %m");
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
245 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
246
2524
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
247 static void create_pid_file(const char *path)
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
248 {
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
249 const char *pid;
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
250 int fd;
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
251
2534
9c55e054e57d crashfix in pid generation
Timo Sirainen <tss@iki.fi>
parents: 2524
diff changeset
252 pid = t_strconcat(dec2str(getpid()), "\n", NULL);
2524
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
253
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
254 fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, 0644);
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
255 if (fd == -1)
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
256 i_fatal("open(%s) failed: %m", path);
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
257 if (write_full(fd, pid, strlen(pid)) < 0)
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
258 i_fatal("write() failed in %s: %m", path);
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
259 (void)close(fd);
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
260 }
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
261
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
262 static void main_log_startup(void)
aad49536db41 If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents: 7914
diff changeset
263 {
aad49536db41 If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents: 7914
diff changeset
264 #define STARTUP_STRING PACKAGE_NAME" v"VERSION" starting up"
aad49536db41 If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents: 7914
diff changeset
265 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
266
aad49536db41 If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents: 7914
diff changeset
267 if (restrict_get_core_limit(&core_limit) == 0 && core_limit == 0)
aad49536db41 If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents: 7914
diff changeset
268 i_info(STARTUP_STRING" (core dumps disabled)");
aad49536db41 If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents: 7914
diff changeset
269 else
aad49536db41 If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents: 7914
diff changeset
270 i_info(STARTUP_STRING);
aad49536db41 If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents: 7914
diff changeset
271 }
aad49536db41 If core dump limit is 0, add "core dumps disabled" to startup log line.
Timo Sirainen <tss@iki.fi>
parents: 7914
diff changeset
272
5090
04b467f23400 Added --log-error command line option.
Timo Sirainen <tss@iki.fi>
parents: 5077
diff changeset
273 static void main_init(bool log_error)
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
274 {
5824
5d0aa827f130 Reordered initialization code. Capabilities are now dropped as soon as
root@hurina
parents: 5789
diff changeset
275 drop_capabilities();
5d0aa827f130 Reordered initialization code. Capabilities are now dropped as soon as
root@hurina
parents: 5789
diff changeset
276
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
277 /* deny file access from everyone else except owner */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
278 (void)umask(0077);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
279
5824
5d0aa827f130 Reordered initialization code. Capabilities are now dropped as soon as
root@hurina
parents: 5789
diff changeset
280 set_logfile(settings_root->defaults);
5d0aa827f130 Reordered initialization code. Capabilities are now dropped as soon as
root@hurina
parents: 5789
diff changeset
281 /* close stderr unless we're logging into /dev/stderr. */
4477
e414beaf1473 If something in io_loop_create() failed, we logged the error to /dev/null.
Timo Sirainen <tss@iki.fi>
parents: 4475
diff changeset
282 if (!have_stderr(settings_root)) {
e414beaf1473 If something in io_loop_create() failed, we logged the error to /dev/null.
Timo Sirainen <tss@iki.fi>
parents: 4475
diff changeset
283 if (dup2(null_fd, 2) < 0)
e414beaf1473 If something in io_loop_create() failed, we logged the error to /dev/null.
Timo Sirainen <tss@iki.fi>
parents: 4475
diff changeset
284 i_fatal("dup2(2) failed: %m");
e414beaf1473 If something in io_loop_create() failed, we logged the error to /dev/null.
Timo Sirainen <tss@iki.fi>
parents: 4475
diff changeset
285 }
2306
6aa77fdf152e SIGHUP correctly reloads configuration now
Timo Sirainen <tss@iki.fi>
parents: 2235
diff changeset
286
5696
b929827ddbe9 When using --log-error, log also a warning and an error.
Timo Sirainen <tss@iki.fi>
parents: 5639
diff changeset
287 if (log_error) {
6303
9e33d9b9905a --log-error improvements.
Timo Sirainen <tss@iki.fi>
parents: 5936
diff changeset
288 printf("Writing to error logs and killing myself..\n");
9e33d9b9905a --log-error improvements.
Timo Sirainen <tss@iki.fi>
parents: 5936
diff changeset
289 i_info("This is Dovecot's info log");
5696
b929827ddbe9 When using --log-error, log also a warning and an error.
Timo Sirainen <tss@iki.fi>
parents: 5639
diff changeset
290 i_warning("This is Dovecot's warning log");
b929827ddbe9 When using --log-error, log also a warning and an error.
Timo Sirainen <tss@iki.fi>
parents: 5639
diff changeset
291 i_error("This is Dovecot's error log");
b929827ddbe9 When using --log-error, log also a warning and an error.
Timo Sirainen <tss@iki.fi>
parents: 5639
diff changeset
292 i_fatal("This is Dovecot's fatal log");
b929827ddbe9 When using --log-error, log also a warning and an error.
Timo Sirainen <tss@iki.fi>
parents: 5639
diff changeset
293 }
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
294 main_log_startup();
5090
04b467f23400 Added --log-error command line option.
Timo Sirainen <tss@iki.fi>
parents: 5077
diff changeset
295
3620
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
296 lib_signals_init();
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
297 lib_signals_set_handler(SIGINT, TRUE, sig_die, NULL);
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
298 lib_signals_set_handler(SIGTERM, TRUE, sig_die, NULL);
4903
204d7edc7cdc Added context parameter type safety checks for most callback APIs.
Timo Sirainen <tss@iki.fi>
parents: 4745
diff changeset
299 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
300 lib_signals_ignore(SIGALRM, FALSE);
3620
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
301 lib_signals_set_handler(SIGHUP, TRUE, sig_reload_settings, NULL);
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
302 lib_signals_set_handler(SIGUSR1, TRUE, sig_reopen_logs, NULL);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
303
5843
f655c4d4a419 Moved child process handling to child-process.[ch]. The hash table now uses
Timo Sirainen <tss@iki.fi>
parents: 5824
diff changeset
304 child_processes_init();
5824
5d0aa827f130 Reordered initialization code. Capabilities are now dropped as soon as
root@hurina
parents: 5789
diff changeset
305 log_init();
615
0d852af6842e Master process generates DH/RSA parameters now and stores them into file
Timo Sirainen <tss@iki.fi>
parents: 610
diff changeset
306 ssl_init();
8649
67c08c386702 Added dict_process_count setting for creating multiple dict processes.
Timo Sirainen <tss@iki.fi>
parents: 8595
diff changeset
307 dict_processes_init();
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
308 auth_processes_init();
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
309 login_processes_init();
5843
f655c4d4a419 Moved child process handling to child-process.[ch]. The hash table now uses
Timo Sirainen <tss@iki.fi>
parents: 5824
diff changeset
310 mail_processes_init();
2524
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
311
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
312 create_pid_file(t_strconcat(settings_root->defaults->base_dir,
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
313 "/master.pid", NULL));
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
314 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
315
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
316 static void main_deinit(void)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
317 {
2524
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
318 (void)unlink(t_strconcat(settings_root->defaults->base_dir,
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
319 "/master.pid", NULL));
3730256bf3d3 Create PID file.
Timo Sirainen <tss@iki.fi>
parents: 2312
diff changeset
320
5846
21e529b8a701 Initial implementation for mail_max_user_connections setting.
Timo Sirainen <tss@iki.fi>
parents: 5844
diff changeset
321 login_processes_destroy_all();
21e529b8a701 Initial implementation for mail_max_user_connections setting.
Timo Sirainen <tss@iki.fi>
parents: 5844
diff changeset
322
21e529b8a701 Initial implementation for mail_max_user_connections setting.
Timo Sirainen <tss@iki.fi>
parents: 5844
diff changeset
323 mail_processes_deinit();
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
324 login_processes_deinit();
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
325 auth_processes_deinit();
8649
67c08c386702 Added dict_process_count setting for creating multiple dict processes.
Timo Sirainen <tss@iki.fi>
parents: 8595
diff changeset
326 dict_processes_deinit();
615
0d852af6842e Master process generates DH/RSA parameters now and stores them into file
Timo Sirainen <tss@iki.fi>
parents: 610
diff changeset
327 ssl_deinit();
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
328
5887
3f2eb1b9c555 Support listening multiple sockets. SIGHUP also doesn't anymore recreate
Timo Sirainen <tss@iki.fi>
parents: 5846
diff changeset
329 listeners_close_fds();
3f2eb1b9c555 Support listening multiple sockets. SIGHUP also doesn't anymore recreate
Timo Sirainen <tss@iki.fi>
parents: 5846
diff changeset
330
805
5ac361acb316 Marked all non-trivial buffer modifications with @UNSAFE tag. Several
Timo Sirainen <tss@iki.fi>
parents: 801
diff changeset
331 if (close(null_fd) < 0)
5ac361acb316 Marked all non-trivial buffer modifications with @UNSAFE tag. Several
Timo Sirainen <tss@iki.fi>
parents: 801
diff changeset
332 i_error("close(null_fd) failed: %m");
1055
a72bba3f8a55 Rewrote setting handling. Changed some existing settings also since POP3
Timo Sirainen <tss@iki.fi>
parents: 1036
diff changeset
333
8699
035037f388fa master: Don't crash at quit if there is some unwritten data in logs.
Timo Sirainen <tss@iki.fi>
parents: 8649
diff changeset
334 log_deinit();
035037f388fa master: Don't crash at quit if there is some unwritten data in logs.
Timo Sirainen <tss@iki.fi>
parents: 8649
diff changeset
335 /* log_deinit() may still want to look up child processes */
035037f388fa master: Don't crash at quit if there is some unwritten data in logs.
Timo Sirainen <tss@iki.fi>
parents: 8649
diff changeset
336 child_processes_deinit();
3620
3360cc019737 Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents: 3589
diff changeset
337 lib_signals_deinit();
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
338 closelog();
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
339 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
340
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
341 static void daemonize(struct settings *set)
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
342 {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
343 pid_t pid;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
344
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
345 pid = fork();
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
346 if (pid < 0)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
347 i_fatal("fork() failed: %m");
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
348
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
349 if (pid != 0)
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
350 _exit(0);
610
bc766660efc4 Call setsid() when daemonizing.
Timo Sirainen <tss@iki.fi>
parents: 575
diff changeset
351
801
86224ff16bf6 Drop root privileges earlier. Close syslog more later in imap-master when
Timo Sirainen <tss@iki.fi>
parents: 780
diff changeset
352 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
353 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
354
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
355 if (chdir(set->base_dir) < 0)
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
356 i_fatal("chdir(%s) failed: %m", set->base_dir);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
357 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
358
279
49f4b0be0d87 Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents: 50
diff changeset
359 static void print_help(void)
49f4b0be0d87 Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents: 50
diff changeset
360 {
3917
ae292bd41926 Added --build-ssl-parameters option to build them.
Timo Sirainen <tss@iki.fi>
parents: 3901
diff changeset
361 printf(
4475
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
362 "Usage: dovecot [-F] [-c <config file>] [-p] [-n] [-a]\n"
7334
ae8180a4febd Allow dovecot --exec-mail ext program arguments.
Timo Sirainen <tss@iki.fi>
parents: 7229
diff changeset
363 " [--version] [--build-options] [--exec-mail <protocol> [<args>]]\n");
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
364 }
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
365
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
366 static void print_build_options(void)
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
367 {
8782
e5cc81734221 Compile fix for systems where printf() is a macro.
Timo Sirainen <tss@iki.fi>
parents: 8699
diff changeset
368 static const char *build_options =
e5cc81734221 Compile fix for systems where printf() is a macro.
Timo Sirainen <tss@iki.fi>
parents: 8699
diff changeset
369 "Build options:"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
370 #ifdef IOLOOP_EPOLL
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
371 " ioloop=epoll"
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
372 #endif
4475
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
373 #ifdef IOLOOP_KQUEUE
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
374 " ioloop=kqueue"
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
375 #endif
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
376 #ifdef IOLOOP_POLL
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
377 " ioloop=poll"
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
378 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
379 #ifdef IOLOOP_SELECT
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
380 " ioloop=select"
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
381 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
382 #ifdef IOLOOP_NOTIFY_DNOTIFY
4475
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
383 " notify=dnotify"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
384 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
385 #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
386 " notify=inotify"
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
387 #endif
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
388 #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
389 " notify=kqueue"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
390 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
391 #ifdef HAVE_IPV6
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
392 " ipv6"
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
393 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
394 #ifdef HAVE_GNUTLS
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
395 " gnutls"
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
396 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
397 #ifdef HAVE_OPENSSL
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
398 " openssl"
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
399 #endif
6635
e4f9e2b94a90 Show mail storages in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
400 "\nMail storages: "MAIL_STORAGES"\n"
e4f9e2b94a90 Show mail storages in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
401 "SQL drivers:"
4475
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
402 #ifdef BUILD_MYSQL
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
403 " mysql"
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
404 #endif
4475
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
405 #ifdef BUILD_PGSQL
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
406 " postgresql"
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
407 #endif
4475
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
408 #ifdef BUILD_SQLITE
3919
b967ffb7e3a6 SQLite support. Patch by Jakob Hirsch.
Timo Sirainen <tss@iki.fi>
parents: 3917
diff changeset
409 " sqlite"
b967ffb7e3a6 SQLite support. Patch by Jakob Hirsch.
Timo Sirainen <tss@iki.fi>
parents: 3917
diff changeset
410 #endif
4475
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
411 "\nPassdb:"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
412 #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
413 " bsdauth"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
414 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
415 #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
416 " checkpassword"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
417 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
418 #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
419 " ldap"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
420 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
421 #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
422 " pam"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
423 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
424 #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
425 " passwd"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
426 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
427 #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
428 " passwd-file"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
429 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
430 #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
431 " shadow"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
432 #endif
6893
a9daec3c00b5 --build-options didn't list "sia" in passdbs.
Timo Sirainen <tss@iki.fi>
parents: 6635
diff changeset
433 #ifdef PASSDB_SIA
a9daec3c00b5 --build-options didn't list "sia" in passdbs.
Timo Sirainen <tss@iki.fi>
parents: 6635
diff changeset
434 " sia"
a9daec3c00b5 --build-options didn't list "sia" in passdbs.
Timo Sirainen <tss@iki.fi>
parents: 6635
diff changeset
435 #endif
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
436 #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
437 " sql"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
438 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
439 #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
440 " vpopmail"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
441 #endif
4475
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
442 "\nUserdb:"
7947
cd2789afcb09 Include "nss" in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents: 7946
diff changeset
443 #ifdef USERDB_NSS
cd2789afcb09 Include "nss" in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents: 7946
diff changeset
444 " nss"
cd2789afcb09 Include "nss" in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents: 7946
diff changeset
445 #endif
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
446 #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
447 " ldap"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
448 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
449 #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
450 " passwd"
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
451 #endif
7947
cd2789afcb09 Include "nss" in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents: 7946
diff changeset
452 #ifdef USERDB_PASSWD_FILE
cd2789afcb09 Include "nss" in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents: 7946
diff changeset
453 " passwd-file"
cd2789afcb09 Include "nss" in dovecot --build-options.
Timo Sirainen <tss@iki.fi>
parents: 7946
diff changeset
454 #endif
4475
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
455 #ifdef USERDB_PREFETCH
3a3ef25c62ab List -n and -a in short help. Fixes to --build-options.
Timo Sirainen <tss@iki.fi>
parents: 4464
diff changeset
456 " prefetch"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
457 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
458 #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
459 " sql"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
460 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
461 #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
462 " static"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
463 #endif
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
464 #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
465 " vpopmail"
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
466 #endif
8782
e5cc81734221 Compile fix for systems where printf() is a macro.
Timo Sirainen <tss@iki.fi>
parents: 8699
diff changeset
467 "\n";
e5cc81734221 Compile fix for systems where printf() is a macro.
Timo Sirainen <tss@iki.fi>
parents: 8699
diff changeset
468 puts(build_options);
279
49f4b0be0d87 Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents: 50
diff changeset
469 }
49f4b0be0d87 Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents: 50
diff changeset
470
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
471 int main(int argc, char *argv[])
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
472 {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
473 /* parse arguments */
7334
ae8180a4febd Allow dovecot --exec-mail ext program arguments.
Timo Sirainen <tss@iki.fi>
parents: 7229
diff changeset
474 const char *exec_protocol = NULL, **exec_args = NULL, *user, *home;
5090
04b467f23400 Added --log-error command line option.
Timo Sirainen <tss@iki.fi>
parents: 5077
diff changeset
475 bool foreground = FALSE, ask_key_pass = FALSE, log_error = FALSE;
4138
f9a6381adbe3 Added -a and -n parameters to dovecot to dump all/nondefault settings. A
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
476 bool dump_config = FALSE, dump_config_nondefaults = FALSE;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
477 int i;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
478
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
479 #ifdef DEBUG
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
480 gdb = getenv("GDB") != NULL;
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
481 #endif
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
482 lib_init();
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
483
1617
cc3cef25662c Replaced geteuid() calls with one in the beginning and saving it to
Timo Sirainen <tss@iki.fi>
parents: 1610
diff changeset
484 master_uid = geteuid();
1273
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
485 inetd_login_fd = -1;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
486 for (i = 1; i < argc; i++) {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
487 if (strcmp(argv[i], "-F") == 0) {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
488 /* foreground */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
489 foreground = TRUE;
4138
f9a6381adbe3 Added -a and -n parameters to dovecot to dump all/nondefault settings. A
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
490 } else if (strcmp(argv[i], "-a") == 0) {
f9a6381adbe3 Added -a and -n parameters to dovecot to dump all/nondefault settings. A
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
491 dump_config = TRUE;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
492 } else if (strcmp(argv[i], "-c") == 0) {
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
493 /* config file */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
494 i++;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
495 if (i == argc) i_fatal("Missing config file argument");
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
496 configfile = argv[i];
4138
f9a6381adbe3 Added -a and -n parameters to dovecot to dump all/nondefault settings. A
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
497 } else if (strcmp(argv[i], "-n") == 0) {
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
498 dump_config_nondefaults = dump_config = TRUE;
3889
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
499 } else if (strcmp(argv[i], "-p") == 0) {
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
500 /* 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
501 ask_key_pass = TRUE;
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
502 } else if (strcmp(argv[i], "--exec-mail") == 0) {
7334
ae8180a4febd Allow dovecot --exec-mail ext program arguments.
Timo Sirainen <tss@iki.fi>
parents: 7229
diff changeset
503 /* <protocol> [<args>]
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
504 read configuration and execute mail process */
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
505 i++;
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
506 if (i == argc) i_fatal("Missing protocol argument");
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
507 exec_protocol = argv[i];
7334
ae8180a4febd Allow dovecot --exec-mail ext program arguments.
Timo Sirainen <tss@iki.fi>
parents: 7229
diff changeset
508 exec_args = (const char **)&argv[i+1];
ae8180a4febd Allow dovecot --exec-mail ext program arguments.
Timo Sirainen <tss@iki.fi>
parents: 7229
diff changeset
509 break;
1260
e6e81ce8210b Added --version
Timo Sirainen <tss@iki.fi>
parents: 1229
diff changeset
510 } else if (strcmp(argv[i], "--version") == 0) {
e6e81ce8210b Added --version
Timo Sirainen <tss@iki.fi>
parents: 1229
diff changeset
511 printf("%s\n", VERSION);
e6e81ce8210b Added --version
Timo Sirainen <tss@iki.fi>
parents: 1229
diff changeset
512 return 0;
3589
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
513 } else if (strcmp(argv[i], "--build-options") == 0) {
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
514 print_build_options();
fead84acb13c Added --build-options parameter. Patch by Andrey Panin
Timo Sirainen <tss@iki.fi>
parents: 3535
diff changeset
515 return 0;
5090
04b467f23400 Added --log-error command line option.
Timo Sirainen <tss@iki.fi>
parents: 5077
diff changeset
516 } else if (strcmp(argv[i], "--log-error") == 0) {
04b467f23400 Added --log-error command line option.
Timo Sirainen <tss@iki.fi>
parents: 5077
diff changeset
517 log_error = TRUE;
04b467f23400 Added --log-error command line option.
Timo Sirainen <tss@iki.fi>
parents: 5077
diff changeset
518 foreground = TRUE;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
519 } else {
279
49f4b0be0d87 Print usage with invalid parameters.
Timo Sirainen <tss@iki.fi>
parents: 50
diff changeset
520 print_help();
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
521 i_fatal("Unknown argument: %s", argv[1]);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
522 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
523 }
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
524
5437
2704fc574e70 /dev/null was opened too late.
Timo Sirainen <tss@iki.fi>
parents: 5432
diff changeset
525 /* need to have this open before reading settings */
2704fc574e70 /dev/null was opened too late.
Timo Sirainen <tss@iki.fi>
parents: 5432
diff changeset
526 open_null_fd();
2704fc574e70 /dev/null was opened too late.
Timo Sirainen <tss@iki.fi>
parents: 5432
diff changeset
527
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
528 if (getenv("DOVECOT_INETD") != NULL) {
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
529 /* starting through inetd. */
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
530 inetd_login_fd = dup(0);
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
531 if (inetd_login_fd == -1)
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
532 i_fatal("dup(0) failed: %m");
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
533 fd_close_on_exec(inetd_login_fd, TRUE);
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
534 foreground = TRUE;
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
535 }
4558d1b196fd Added --exec-mail option to master. It can be used to parse Dovecot config
Timo Sirainen <tss@iki.fi>
parents: 2306
diff changeset
536
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
537 if (dump_config) {
8354
5339d2ebeb56 dovecot -n/-a: Print some information about the system.
Timo Sirainen <tss@iki.fi>
parents: 8323
diff changeset
538
4485
eb1e7932ade6 dovecot -n and -a: Print the config file path before parsing it so if there
Timo Sirainen <tss@iki.fi>
parents: 4477
diff changeset
539 /* print the config file path before parsing it, so in case
eb1e7932ade6 dovecot -n and -a: Print the config file path before parsing it so if there
Timo Sirainen <tss@iki.fi>
parents: 4477
diff changeset
540 of errors it's still shown */
5589
271c35971331 Print also Dovecot version with dovecot -n.
Timo Sirainen <tss@iki.fi>
parents: 5437
diff changeset
541 printf("# "VERSION": %s\n", configfile);
4485
eb1e7932ade6 dovecot -n and -a: Print the config file path before parsing it so if there
Timo Sirainen <tss@iki.fi>
parents: 4477
diff changeset
542 }
eb1e7932ade6 dovecot -n and -a: Print the config file path before parsing it so if there
Timo Sirainen <tss@iki.fi>
parents: 4477
diff changeset
543
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
544 /* read and verify settings before forking */
7226
e6693a0ec8e1 Renamed T_FRAME_BEGIN/END to T_BEGIN/END. Removed T_FRAME() macro and
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
545 T_BEGIN {
6940
414c9d631a81 Replaced t_push/t_pop calls with T_FRAME*() macros.
Timo Sirainen <tss@iki.fi>
parents: 6893
diff changeset
546 master_settings_init();
414c9d631a81 Replaced t_push/t_pop calls with T_FRAME*() macros.
Timo Sirainen <tss@iki.fi>
parents: 6893
diff changeset
547 if (!master_settings_read(configfile, exec_protocol != NULL,
414c9d631a81 Replaced t_push/t_pop calls with T_FRAME*() macros.
Timo Sirainen <tss@iki.fi>
parents: 6893
diff changeset
548 dump_config || log_error))
414c9d631a81 Replaced t_push/t_pop calls with T_FRAME*() macros.
Timo Sirainen <tss@iki.fi>
parents: 6893
diff changeset
549 i_fatal("Invalid configuration in %s", configfile);
7226
e6693a0ec8e1 Renamed T_FRAME_BEGIN/END to T_BEGIN/END. Removed T_FRAME() macro and
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
550 } T_END;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
551
4965
9246d9308caa -n and -a parameters shouldn't be deleting auth sockets.
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
552 if (dump_config) {
8354
5339d2ebeb56 dovecot -n/-a: Print some information about the system.
Timo Sirainen <tss@iki.fi>
parents: 8323
diff changeset
553 const char *info;
5339d2ebeb56 dovecot -n/-a: Print some information about the system.
Timo Sirainen <tss@iki.fi>
parents: 8323
diff changeset
554
5339d2ebeb56 dovecot -n/-a: Print some information about the system.
Timo Sirainen <tss@iki.fi>
parents: 8323
diff changeset
555 info = sysinfo_get(settings_root->defaults->mail_location);
5339d2ebeb56 dovecot -n/-a: Print some information about the system.
Timo Sirainen <tss@iki.fi>
parents: 8323
diff changeset
556 if (*info != '\0')
5339d2ebeb56 dovecot -n/-a: Print some information about the system.
Timo Sirainen <tss@iki.fi>
parents: 8323
diff changeset
557 printf("# %s\n", info);
5339d2ebeb56 dovecot -n/-a: Print some information about the system.
Timo Sirainen <tss@iki.fi>
parents: 8323
diff changeset
558
4138
f9a6381adbe3 Added -a and -n parameters to dovecot to dump all/nondefault settings. A
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
559 master_settings_dump(settings_root, dump_config_nondefaults);
f9a6381adbe3 Added -a and -n parameters to dovecot to dump all/nondefault settings. A
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
560 return 0;
f9a6381adbe3 Added -a and -n parameters to dovecot to dump all/nondefault settings. A
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
561 }
f9a6381adbe3 Added -a and -n parameters to dovecot to dump all/nondefault settings. A
Timo Sirainen <tss@iki.fi>
parents: 3989
diff changeset
562
7226
e6693a0ec8e1 Renamed T_FRAME_BEGIN/END to T_BEGIN/END. Removed T_FRAME() macro and
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
563 if (ask_key_pass) T_BEGIN {
3889
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
564 const char *prompt;
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
565
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
566 prompt = t_strdup_printf("Give the password for SSL key file "
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
567 "%s: ",
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
568 settings_root->defaults->ssl_key_file);
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
569 askpass(prompt, ssl_manual_key_password,
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
570 sizeof(ssl_manual_key_password));
7226
e6693a0ec8e1 Renamed T_FRAME_BEGIN/END to T_BEGIN/END. Removed T_FRAME() macro and
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
571 } T_END;
3889
c7462001227b Added support for password protected SSL private keys. The password can be
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
572
3535
08b3e3fd0bc5 The master process itself also needs the TZ environment
Timo Sirainen <tss@iki.fi>
parents: 3516
diff changeset
573 /* save TZ environment. AIX depends on it to get the timezone
08b3e3fd0bc5 The master process itself also needs the TZ environment
Timo Sirainen <tss@iki.fi>
parents: 3516
diff changeset
574 correctly. */
3516
71b0ccba8cf3 Preserve TZ environment to child processes so timezones aren't lost with
Timo Sirainen <tss@iki.fi>
parents: 3181
diff changeset
575 env_tz = getenv("TZ");
3897
9dc2f8f0eb59 When starting with --exec-mail, keep USER and HOME environments and clear
Timo Sirainen <tss@iki.fi>
parents: 3889
diff changeset
576 user = getenv("USER");
9dc2f8f0eb59 When starting with --exec-mail, keep USER and HOME environments and clear
Timo Sirainen <tss@iki.fi>
parents: 3889
diff changeset
577 home = getenv("HOME");
3516
71b0ccba8cf3 Preserve TZ environment to child processes so timezones aren't lost with
Timo Sirainen <tss@iki.fi>
parents: 3181
diff changeset
578
3535
08b3e3fd0bc5 The master process itself also needs the TZ environment
Timo Sirainen <tss@iki.fi>
parents: 3516
diff changeset
579 /* clean up the environment of everything */
1273
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
580 env_clean();
2cf2e08a6ee9 Somewhat working code to support loading Dovecot from inetd and such. It
Timo Sirainen <tss@iki.fi>
parents: 1268
diff changeset
581
3535
08b3e3fd0bc5 The master process itself also needs the TZ environment
Timo Sirainen <tss@iki.fi>
parents: 3516
diff changeset
582 /* put back the TZ */
08b3e3fd0bc5 The master process itself also needs the TZ environment
Timo Sirainen <tss@iki.fi>
parents: 3516
diff changeset
583 if (env_tz != NULL)
08b3e3fd0bc5 The master process itself also needs the TZ environment
Timo Sirainen <tss@iki.fi>
parents: 3516
diff changeset
584 env_put(t_strconcat("TZ=", env_tz, NULL));
08b3e3fd0bc5 The master process itself also needs the TZ environment
Timo Sirainen <tss@iki.fi>
parents: 3516
diff changeset
585
3897
9dc2f8f0eb59 When starting with --exec-mail, keep USER and HOME environments and clear
Timo Sirainen <tss@iki.fi>
parents: 3889
diff changeset
586 if (exec_protocol != NULL) {
9dc2f8f0eb59 When starting with --exec-mail, keep USER and HOME environments and clear
Timo Sirainen <tss@iki.fi>
parents: 3889
diff changeset
587 /* Put back user and home */
9dc2f8f0eb59 When starting with --exec-mail, keep USER and HOME environments and clear
Timo Sirainen <tss@iki.fi>
parents: 3889
diff changeset
588 env_put(t_strconcat("USER=", user, NULL));
9dc2f8f0eb59 When starting with --exec-mail, keep USER and HOME environments and clear
Timo Sirainen <tss@iki.fi>
parents: 3889
diff changeset
589 env_put(t_strconcat("HOME=", home, NULL));
7334
ae8180a4febd Allow dovecot --exec-mail ext program arguments.
Timo Sirainen <tss@iki.fi>
parents: 7229
diff changeset
590 mail_process_exec(exec_protocol, exec_args);
3897
9dc2f8f0eb59 When starting with --exec-mail, keep USER and HOME environments and clear
Timo Sirainen <tss@iki.fi>
parents: 3889
diff changeset
591 }
9dc2f8f0eb59 When starting with --exec-mail, keep USER and HOME environments and clear
Timo Sirainen <tss@iki.fi>
parents: 3889
diff changeset
592
6303
9e33d9b9905a --log-error improvements.
Timo Sirainen <tss@iki.fi>
parents: 5936
diff changeset
593 if (!log_error)
9e33d9b9905a --log-error improvements.
Timo Sirainen <tss@iki.fi>
parents: 5936
diff changeset
594 open_fds();
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
595
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
596 fatal_log_check();
8305
e4d0ce4d3420 Don't show the WhyDoesItNotWork link if auth_debug=yes already.
Timo Sirainen <tss@iki.fi>
parents: 8301
diff changeset
597 auth_warning_print(settings_root);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
598 if (!foreground)
1610
6850142c4e25 New configuration file code. Some syntax changes, but tries to be somewhat
Timo Sirainen <tss@iki.fi>
parents: 1423
diff changeset
599 daemonize(settings_root->defaults);
8323
60c48789841b master: Don't print "last died with error .." for fatals that were from forked child processes.
Timo Sirainen <tss@iki.fi>
parents: 8305
diff changeset
600 master_original_pid = getpid();
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
601
5249
784dc7224718 Removed pool parameter from io_loop_create()
Timo Sirainen <tss@iki.fi>
parents: 5201
diff changeset
602 ioloop = io_loop_create();
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
603
5090
04b467f23400 Added --log-error command line option.
Timo Sirainen <tss@iki.fi>
parents: 5077
diff changeset
604 main_init(log_error);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
605 io_loop_run(ioloop);
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
606 main_deinit();
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
607
1058
3b8fb7bf7ecc Moved settings parsing to lib-settings.
Timo Sirainen <tss@iki.fi>
parents: 1055
diff changeset
608 master_settings_deinit();
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
609 io_loop_destroy(&ioloop);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
610 lib_deinit();
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
611
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
612 return 0;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
613 }