Mercurial > dovecot > core-2.2
annotate src/lib-master/master-service.c @ 22488:052396bac097
lib-master: master_service_import_environment() - use a data stack frame
This way the caller doesn't have to do it.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 08 Jun 2017 00:33:32 +0300 |
parents | e60f0e893992 |
children | a9c51256847e |
rev | line source |
---|---|
21390
2e2563132d5f
Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21389
diff
changeset
|
1 /* Copyright (c) 2005-2017 Dovecot authors, see the included COPYING file */ |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "lib-signals.h" |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "ioloop.h" |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
6 #include "abspath.h" |
9239
1cb45d4389d4
Binaries now take -o key=value parameters to override settings.
Timo Sirainen <tss@iki.fi>
parents:
9235
diff
changeset
|
7 #include "array.h" |
13877
cdf2c63ece6a
Listener names are now in struct master_service_connection.name
Timo Sirainen <tss@iki.fi>
parents:
13726
diff
changeset
|
8 #include "strescape.h" |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #include "env-util.h" |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 #include "home-expand.h" |
10120
b584904d3bc7
Moved process title init to lib-master. With Linux-hack enabled it now preserves command args.
Timo Sirainen <tss@iki.fi>
parents:
10119
diff
changeset
|
11 #include "process-title.h" |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 #include "restrict-access.h" |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 #include "fd-close-on-exec.h" |
9300 | 14 #include "settings-parser.h" |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 #include "syslog-util.h" |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
16 #include "master-instance.h" |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10472
diff
changeset
|
17 #include "master-login.h" |
15931
6b0c284ecede
lib-master: If ssl settings are used, initialize ssl context automatically.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
18 #include "master-service-ssl.h" |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 #include "master-service-private.h" |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 #include "master-service-settings.h" |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 #include <unistd.h> |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
23 #include <sys/stat.h> |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 #include <syslog.h> |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 #define DEFAULT_CONFIG_FILE_PATH SYSCONFDIR"/dovecot.conf" |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 /* getenv(MASTER_CONFIG_FILE_ENV) provides path to configuration file/socket */ |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 #define MASTER_CONFIG_FILE_ENV "CONFIG_FILE" |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 /* getenv(MASTER_DOVECOT_VERSION_ENV) provides master's version number */ |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 #define MASTER_DOVECOT_VERSION_ENV "DOVECOT_VERSION" |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
34 /* when we're full of connections, how often to check if login state has |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
35 changed. we normally notice it immediately because of a signal, so this is |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
36 just a fallback against race conditions. */ |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
37 #define MASTER_SERVICE_STATE_CHECK_MSECS 1000 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
38 |
10171
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
39 /* If die callback hasn't managed to stop the service for this many seconds, |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
40 force it. */ |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
41 #define MASTER_SERVICE_DIE_TIMEOUT_MSECS (30*1000) |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
42 |
9348
0c587f108916
lib-master has now a global master_service variable that all binaries use.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
43 struct master_service *master_service; |
0c587f108916
lib-master has now a global master_service variable that all binaries use.
Timo Sirainen <tss@iki.fi>
parents:
9345
diff
changeset
|
44 |
10472
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
45 static void master_service_io_listeners_close(struct master_service *service); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
46 static void master_service_refresh_login_state(struct master_service *service); |
18940
ec912a6039f5
lib-master: If idle-die callback returns FALSE, notify master that we don't want to die.
Timo Sirainen <tss@iki.fi>
parents:
18939
diff
changeset
|
47 static void |
ec912a6039f5
lib-master: If idle-die callback returns FALSE, notify master that we don't want to die.
Timo Sirainen <tss@iki.fi>
parents:
18939
diff
changeset
|
48 master_status_send(struct master_service *service, bool important_update); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
49 |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 const char *master_service_getopt_string(void) |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 { |
14096
dd4626a996b6
lib-master no longer uses 's' option, but it wasn't removed from getopt string.
Timo Sirainen <tss@iki.fi>
parents:
14069
diff
changeset
|
52 return "c:i:ko:OL"; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 static void sig_die(const siginfo_t *si, void *context) |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 { |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 struct master_service *service = context; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 |
10440
e6362e056ef2
lib-master: Die on SIGINT only if we're running standalone or not handling clients.
Timo Sirainen <tss@iki.fi>
parents:
10276
diff
changeset
|
59 /* SIGINT comes either from master process or from keyboard. we don't |
e6362e056ef2
lib-master: Die on SIGINT only if we're running standalone or not handling clients.
Timo Sirainen <tss@iki.fi>
parents:
10276
diff
changeset
|
60 want to log it in either case.*/ |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 if (si->si_signo != SIGINT) { |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 i_warning("Killed with signal %d (by pid=%s uid=%s code=%s)", |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 si->si_signo, dec2str(si->si_pid), |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 dec2str(si->si_uid), |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 lib_signal_code_to_str(si->si_signo, si->si_code)); |
11626
c9e8144974f1
lib-master: MASTER_SERVICE_FLAG_NO_IDLE_DIE wasn't actually working.
Timo Sirainen <tss@iki.fi>
parents:
11596
diff
changeset
|
66 } else if ((service->flags & MASTER_SERVICE_FLAG_NO_IDLE_DIE) != 0) { |
c9e8144974f1
lib-master: MASTER_SERVICE_FLAG_NO_IDLE_DIE wasn't actually working.
Timo Sirainen <tss@iki.fi>
parents:
11596
diff
changeset
|
67 /* never die when idling */ |
c9e8144974f1
lib-master: MASTER_SERVICE_FLAG_NO_IDLE_DIE wasn't actually working.
Timo Sirainen <tss@iki.fi>
parents:
11596
diff
changeset
|
68 return; |
c9e8144974f1
lib-master: MASTER_SERVICE_FLAG_NO_IDLE_DIE wasn't actually working.
Timo Sirainen <tss@iki.fi>
parents:
11596
diff
changeset
|
69 } else if ((service->flags & MASTER_SERVICE_FLAG_STANDALONE) == 0) { |
10440
e6362e056ef2
lib-master: Die on SIGINT only if we're running standalone or not handling clients.
Timo Sirainen <tss@iki.fi>
parents:
10276
diff
changeset
|
70 /* SIGINT came from master. die only if we're not handling |
e6362e056ef2
lib-master: Die on SIGINT only if we're running standalone or not handling clients.
Timo Sirainen <tss@iki.fi>
parents:
10276
diff
changeset
|
71 any clients currently. */ |
e6362e056ef2
lib-master: Die on SIGINT only if we're running standalone or not handling clients.
Timo Sirainen <tss@iki.fi>
parents:
10276
diff
changeset
|
72 if (service->master_status.available_count != |
e6362e056ef2
lib-master: Die on SIGINT only if we're running standalone or not handling clients.
Timo Sirainen <tss@iki.fi>
parents:
10276
diff
changeset
|
73 service->total_available_count) |
e6362e056ef2
lib-master: Die on SIGINT only if we're running standalone or not handling clients.
Timo Sirainen <tss@iki.fi>
parents:
10276
diff
changeset
|
74 return; |
13082
c55ea4fc3344
lib-master: Added master_service_set_idle_die_callback()
Timo Sirainen <tss@iki.fi>
parents:
13081
diff
changeset
|
75 |
c55ea4fc3344
lib-master: Added master_service_set_idle_die_callback()
Timo Sirainen <tss@iki.fi>
parents:
13081
diff
changeset
|
76 if (service->idle_die_callback != NULL && |
18940
ec912a6039f5
lib-master: If idle-die callback returns FALSE, notify master that we don't want to die.
Timo Sirainen <tss@iki.fi>
parents:
18939
diff
changeset
|
77 !service->idle_die_callback()) { |
ec912a6039f5
lib-master: If idle-die callback returns FALSE, notify master that we don't want to die.
Timo Sirainen <tss@iki.fi>
parents:
18939
diff
changeset
|
78 /* we don't want to die - send a notification to master |
ec912a6039f5
lib-master: If idle-die callback returns FALSE, notify master that we don't want to die.
Timo Sirainen <tss@iki.fi>
parents:
18939
diff
changeset
|
79 so it doesn't think we're ignoring it completely. */ |
ec912a6039f5
lib-master: If idle-die callback returns FALSE, notify master that we don't want to die.
Timo Sirainen <tss@iki.fi>
parents:
18939
diff
changeset
|
80 master_status_send(service, FALSE); |
13082
c55ea4fc3344
lib-master: Added master_service_set_idle_die_callback()
Timo Sirainen <tss@iki.fi>
parents:
13081
diff
changeset
|
81 return; |
18940
ec912a6039f5
lib-master: If idle-die callback returns FALSE, notify master that we don't want to die.
Timo Sirainen <tss@iki.fi>
parents:
18939
diff
changeset
|
82 } |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 } |
10440
e6362e056ef2
lib-master: Die on SIGINT only if we're running standalone or not handling clients.
Timo Sirainen <tss@iki.fi>
parents:
10276
diff
changeset
|
84 |
11897
b60e225386bf
doveadm: Added client/server architecture support for running mail commands.
Timo Sirainen <tss@iki.fi>
parents:
11735
diff
changeset
|
85 service->killed = TRUE; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 io_loop_stop(service->ioloop); |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 |
22027
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
89 static void sig_close_listeners(const siginfo_t *si ATTR_UNUSED, void *context) |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
90 { |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
91 struct master_service *service = context; |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
92 |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
93 /* We're in a signal handler: Close listeners immediately so master |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
94 can successfully restart. We can safely close only those listeners |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
95 that don't have an io, but this shouldn't be a big problem. If there |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
96 is an active io, the service is unlikely to be unresposive for |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
97 longer periods of time, so the listener gets closed soon enough via |
22075
baa85b2663b5
lib-master: Replace listeners with /dev/null in SIGQUIT instead of closing
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22027
diff
changeset
|
98 master_status_error(). |
baa85b2663b5
lib-master: Replace listeners with /dev/null in SIGQUIT instead of closing
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22027
diff
changeset
|
99 |
baa85b2663b5
lib-master: Replace listeners with /dev/null in SIGQUIT instead of closing
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22027
diff
changeset
|
100 For extra safety we don't actually close() the fd, but instead |
baa85b2663b5
lib-master: Replace listeners with /dev/null in SIGQUIT instead of closing
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22027
diff
changeset
|
101 replace it with /dev/null. This way it won't be replaced with some |
baa85b2663b5
lib-master: Replace listeners with /dev/null in SIGQUIT instead of closing
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22027
diff
changeset
|
102 other new fd and attempted to be used in unexpected ways. */ |
22027
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
103 for (unsigned int i = 0; i < service->socket_count; i++) { |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
104 if (service->listeners[i].fd != -1 && |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
105 service->listeners[i].io == NULL) { |
22075
baa85b2663b5
lib-master: Replace listeners with /dev/null in SIGQUIT instead of closing
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22027
diff
changeset
|
106 if (dup2(dev_null_fd, service->listeners[i].fd) < 0) |
baa85b2663b5
lib-master: Replace listeners with /dev/null in SIGQUIT instead of closing
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22027
diff
changeset
|
107 lib_signals_syscall_error("signal: dup2(/dev/null, listener) failed: "); |
baa85b2663b5
lib-master: Replace listeners with /dev/null in SIGQUIT instead of closing
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22027
diff
changeset
|
108 service->listeners[i].closed = TRUE; |
22027
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
109 } |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
110 } |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
111 } |
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
112 |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
113 static void |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
114 sig_state_changed(const siginfo_t *si ATTR_UNUSED, void *context) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
115 { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
116 struct master_service *service = context; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
117 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
118 master_service_refresh_login_state(service); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
119 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
120 |
11458
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
121 static void master_service_verify_version_string(struct master_service *service) |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 { |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 if (service->version_string != NULL && |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
124 strcmp(service->version_string, PACKAGE_VERSION) != 0) { |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
125 i_fatal("Dovecot version mismatch: " |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
126 "Master is v%s, %s is v"PACKAGE_VERSION" " |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 "(if you don't care, set version_ignore=yes)", |
11118
a0d0ed6a2b63
lib-master: Fixed version mismatch error message.
Timo Sirainen <tss@iki.fi>
parents:
11102
diff
changeset
|
128 service->version_string, service->name); |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
129 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
130 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
131 |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
132 static void master_service_init_socket_listeners(struct master_service *service) |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
133 { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
134 unsigned int i; |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
135 const char *value; |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
136 bool have_ssl_sockets = FALSE; |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
137 |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
138 if (service->socket_count == 0) |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
139 return; |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
140 |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
141 service->listeners = |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
142 i_new(struct master_service_listener, service->socket_count); |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
143 |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
144 for (i = 0; i < service->socket_count; i++) { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
145 struct master_service_listener *l = &service->listeners[i]; |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
146 |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
147 l->service = service; |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
148 l->fd = MASTER_LISTEN_FD_FIRST + i; |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
149 |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
150 value = getenv(t_strdup_printf("SOCKET%u_SETTINGS", i)); |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
151 if (value != NULL) { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
152 const char *const *settings = |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
153 t_strsplit_tabescaped(value); |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
154 |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
155 if (*settings != NULL) { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
156 l->name = i_strdup_empty(*settings); |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
157 settings++; |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
158 } |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
159 while (*settings != NULL) { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
160 if (strcmp(*settings, "ssl") == 0) { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
161 l->ssl = TRUE; |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
162 have_ssl_sockets = TRUE; |
18952
4d7a83ddb644
lib-master: Added support for HAProxy protocol.
Timo Sirainen <tss@iki.fi>
parents:
18951
diff
changeset
|
163 } else if (strcmp(*settings, "haproxy") == 0) { |
4d7a83ddb644
lib-master: Added support for HAProxy protocol.
Timo Sirainen <tss@iki.fi>
parents:
18951
diff
changeset
|
164 l->haproxy = TRUE; |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
165 } |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
166 settings++; |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
167 } |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
168 } |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
169 } |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
170 service->want_ssl_settings = have_ssl_sockets || |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
171 (service->flags & MASTER_SERVICE_FLAG_USE_SSL_SETTINGS) != 0; |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
172 } |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
173 |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
174 struct master_service * |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
175 master_service_init(const char *name, enum master_service_flags flags, |
10120
b584904d3bc7
Moved process title init to lib-master. With Linux-hack enabled it now preserves command args.
Timo Sirainen <tss@iki.fi>
parents:
10119
diff
changeset
|
176 int *argc, char **argv[], const char *getopt_str) |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
177 { |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
178 struct master_service *service; |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
179 unsigned int count; |
13726
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
180 const char *value; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
181 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
182 i_assert(name != NULL); |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
183 |
9214
7def7fa61d68
master: Fixes to handling logging.
Timo Sirainen <tss@iki.fi>
parents:
9159
diff
changeset
|
184 #ifdef DEBUG |
9396
674024d7bcb7
DEBUG: lib-master no longer verifies fd leaks for programs running standalone.
Timo Sirainen <tss@iki.fi>
parents:
9348
diff
changeset
|
185 if (getenv("GDB") == NULL && |
674024d7bcb7
DEBUG: lib-master no longer verifies fd leaks for programs running standalone.
Timo Sirainen <tss@iki.fi>
parents:
9348
diff
changeset
|
186 (flags & MASTER_SERVICE_FLAG_STANDALONE) == 0) { |
13726
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
187 value = getenv("SOCKET_COUNT"); |
19036
f78e38c7cba2
Removed all invocations of atoi().
Stephan Bosch <stephan@rename-it.nl>
parents:
19001
diff
changeset
|
188 if (value == NULL || str_to_uint(value, &count) < 0) |
f78e38c7cba2
Removed all invocations of atoi().
Stephan Bosch <stephan@rename-it.nl>
parents:
19001
diff
changeset
|
189 count = 0; |
9214
7def7fa61d68
master: Fixes to handling logging.
Timo Sirainen <tss@iki.fi>
parents:
9159
diff
changeset
|
190 fd_debug_verify_leaks(MASTER_LISTEN_FD_FIRST + count, 1024); |
7def7fa61d68
master: Fixes to handling logging.
Timo Sirainen <tss@iki.fi>
parents:
9159
diff
changeset
|
191 } |
7def7fa61d68
master: Fixes to handling logging.
Timo Sirainen <tss@iki.fi>
parents:
9159
diff
changeset
|
192 #endif |
10951
edd11ffa467c
lib-master: If binary isn't standalone, enable core dumping at startup.
Timo Sirainen <tss@iki.fi>
parents:
10944
diff
changeset
|
193 if ((flags & MASTER_SERVICE_FLAG_STANDALONE) == 0) { |
edd11ffa467c
lib-master: If binary isn't standalone, enable core dumping at startup.
Timo Sirainen <tss@iki.fi>
parents:
10944
diff
changeset
|
194 /* make sure we can dump core, at least until |
edd11ffa467c
lib-master: If binary isn't standalone, enable core dumping at startup.
Timo Sirainen <tss@iki.fi>
parents:
10944
diff
changeset
|
195 privileges are dropped. (i'm not really sure why this |
edd11ffa467c
lib-master: If binary isn't standalone, enable core dumping at startup.
Timo Sirainen <tss@iki.fi>
parents:
10944
diff
changeset
|
196 is needed, because doing the same just before exec |
edd11ffa467c
lib-master: If binary isn't standalone, enable core dumping at startup.
Timo Sirainen <tss@iki.fi>
parents:
10944
diff
changeset
|
197 doesn't help, and exec shouldn't affect this with |
edd11ffa467c
lib-master: If binary isn't standalone, enable core dumping at startup.
Timo Sirainen <tss@iki.fi>
parents:
10944
diff
changeset
|
198 non-setuid/gid binaries..) */ |
edd11ffa467c
lib-master: If binary isn't standalone, enable core dumping at startup.
Timo Sirainen <tss@iki.fi>
parents:
10944
diff
changeset
|
199 restrict_access_allow_coredumps(TRUE); |
edd11ffa467c
lib-master: If binary isn't standalone, enable core dumping at startup.
Timo Sirainen <tss@iki.fi>
parents:
10944
diff
changeset
|
200 } |
9214
7def7fa61d68
master: Fixes to handling logging.
Timo Sirainen <tss@iki.fi>
parents:
9159
diff
changeset
|
201 |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
202 /* NOTE: we start rooted, so keep the code minimal until |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
203 restrict_access_by_env() is called */ |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
204 lib_init(); |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
205 /* Set a logging prefix temporarily. This will be ignored once the log |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
206 is properly initialized */ |
15201
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15183
diff
changeset
|
207 i_set_failure_prefix("%s(init): ", name); |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
208 |
10796
aee98ecae688
lib-master: Ignore SIGALRM and SIGPIPE as early as possible.
Timo Sirainen <tss@iki.fi>
parents:
10794
diff
changeset
|
209 /* ignore these signals as early as possible */ |
16508
754d244b8249
Call master_service_init_finish() only after all of the initialization is done.
Timo Sirainen <tss@iki.fi>
parents:
16319
diff
changeset
|
210 lib_signals_init(); |
10796
aee98ecae688
lib-master: Ignore SIGALRM and SIGPIPE as early as possible.
Timo Sirainen <tss@iki.fi>
parents:
10794
diff
changeset
|
211 lib_signals_ignore(SIGPIPE, TRUE); |
aee98ecae688
lib-master: Ignore SIGALRM and SIGPIPE as early as possible.
Timo Sirainen <tss@iki.fi>
parents:
10794
diff
changeset
|
212 lib_signals_ignore(SIGALRM, FALSE); |
aee98ecae688
lib-master: Ignore SIGALRM and SIGPIPE as early as possible.
Timo Sirainen <tss@iki.fi>
parents:
10794
diff
changeset
|
213 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
214 if (getenv(MASTER_UID_ENV) == NULL) |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
215 flags |= MASTER_SERVICE_FLAG_STANDALONE; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
216 |
10188
affb52c62add
Fixed Linux proctitle hack and enabled it by default now.
Timo Sirainen <tss@iki.fi>
parents:
10171
diff
changeset
|
217 process_title_init(argv); |
10120
b584904d3bc7
Moved process title init to lib-master. With Linux-hack enabled it now preserves command args.
Timo Sirainen <tss@iki.fi>
parents:
10119
diff
changeset
|
218 |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
219 service = i_new(struct master_service, 1); |
10120
b584904d3bc7
Moved process title init to lib-master. With Linux-hack enabled it now preserves command args.
Timo Sirainen <tss@iki.fi>
parents:
10119
diff
changeset
|
220 service->argc = *argc; |
b584904d3bc7
Moved process title init to lib-master. With Linux-hack enabled it now preserves command args.
Timo Sirainen <tss@iki.fi>
parents:
10119
diff
changeset
|
221 service->argv = *argv; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
222 service->name = i_strdup(name); |
10147
ef1ca7e1a9f9
lib-master: Fixed getopt_string containing "+" GNU extension.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
223 /* keep getopt_str first in case it contains "+" */ |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14370
diff
changeset
|
224 service->getopt_str = *getopt_str == '\0' ? |
10147
ef1ca7e1a9f9
lib-master: Fixed getopt_string containing "+" GNU extension.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
225 i_strdup(master_service_getopt_string()) : |
ef1ca7e1a9f9
lib-master: Fixed getopt_string containing "+" GNU extension.
Timo Sirainen <tss@iki.fi>
parents:
10120
diff
changeset
|
226 i_strconcat(getopt_str, master_service_getopt_string(), NULL); |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
227 service->flags = flags; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
228 service->ioloop = io_loop_create(); |
15904
d3cf06639864
Replaced all -1U and (unsigned int)-1 with UINT_MAX.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
229 service->service_count_left = UINT_MAX; |
9282
6bb773332683
lib-master: Added support for keeping config connection open and reusing it for later requests.
Timo Sirainen <tss@iki.fi>
parents:
9269
diff
changeset
|
230 service->config_fd = -1; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
231 |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
232 service->config_path = i_strdup(getenv(MASTER_CONFIG_FILE_ENV)); |
17794
ccc5701dae72
lib-master: Earlier config file path fix broke reusing existing config socket lookups.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
233 if (service->config_path == NULL) |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
234 service->config_path = i_strdup(DEFAULT_CONFIG_FILE_PATH); |
17794
ccc5701dae72
lib-master: Earlier config file path fix broke reusing existing config socket lookups.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
235 else |
ccc5701dae72
lib-master: Earlier config file path fix broke reusing existing config socket lookups.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
236 service->config_path_from_master = TRUE; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
237 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
238 if ((flags & MASTER_SERVICE_FLAG_STANDALONE) == 0) { |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
239 service->version_string = getenv(MASTER_DOVECOT_VERSION_ENV); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
240 service->socket_count = 1; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
241 } else { |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
242 service->version_string = PACKAGE_VERSION; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
243 } |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
244 |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
245 /* listener configuration */ |
13726
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
246 value = getenv("SOCKET_COUNT"); |
19036
f78e38c7cba2
Removed all invocations of atoi().
Stephan Bosch <stephan@rename-it.nl>
parents:
19001
diff
changeset
|
247 if (value != NULL && str_to_uint(value, &service->socket_count) < 0) |
f78e38c7cba2
Removed all invocations of atoi().
Stephan Bosch <stephan@rename-it.nl>
parents:
19001
diff
changeset
|
248 i_fatal("Invalid SOCKET_COUNT environment"); |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
249 T_BEGIN { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
250 master_service_init_socket_listeners(service); |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
251 } T_END; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
252 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
253 /* set up some kind of logging until we know exactly how and where |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
254 we want to log */ |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
255 if (getenv("LOG_SERVICE") != NULL) |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
256 i_set_failure_internal(); |
15201
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15183
diff
changeset
|
257 if (getenv("USER") != NULL) |
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15183
diff
changeset
|
258 i_set_failure_prefix("%s(%s): ", name, getenv("USER")); |
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15183
diff
changeset
|
259 else |
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15183
diff
changeset
|
260 i_set_failure_prefix("%s: ", name); |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
261 |
13726
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
262 if ((flags & MASTER_SERVICE_FLAG_STANDALONE) == 0) { |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
263 /* initialize master_status structure */ |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
264 value = getenv(MASTER_UID_ENV); |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
265 if (value == NULL || |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
266 str_to_uint(value, &service->master_status.uid) < 0) |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
267 i_fatal(MASTER_UID_ENV" missing"); |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
268 service->master_status.pid = getpid(); |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
269 |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
270 /* set the default limit */ |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
271 value = getenv(MASTER_CLIENT_LIMIT_ENV); |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
272 if (value == NULL || str_to_uint(value, &count) < 0 || |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
273 count == 0) |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
274 i_fatal(MASTER_CLIENT_LIMIT_ENV" missing"); |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
275 master_service_set_client_limit(service, count); |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
276 |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
277 /* seve the process limit */ |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
278 value = getenv(MASTER_PROCESS_LIMIT_ENV); |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
279 if (value != NULL && str_to_uint(value, &count) == 0 && |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
280 count > 0) |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
281 service->process_limit = count; |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
282 |
16178
c32bfc54bc50
lib-master: Added master_service_get_process_min_avail()
Timo Sirainen <tss@iki.fi>
parents:
16140
diff
changeset
|
283 value = getenv(MASTER_PROCESS_MIN_AVAIL_ENV); |
c32bfc54bc50
lib-master: Added master_service_get_process_min_avail()
Timo Sirainen <tss@iki.fi>
parents:
16140
diff
changeset
|
284 if (value != NULL && str_to_uint(value, &count) == 0 && |
c32bfc54bc50
lib-master: Added master_service_get_process_min_avail()
Timo Sirainen <tss@iki.fi>
parents:
16140
diff
changeset
|
285 count > 0) |
c32bfc54bc50
lib-master: Added master_service_get_process_min_avail()
Timo Sirainen <tss@iki.fi>
parents:
16140
diff
changeset
|
286 service->process_min_avail = count; |
c32bfc54bc50
lib-master: Added master_service_get_process_min_avail()
Timo Sirainen <tss@iki.fi>
parents:
16140
diff
changeset
|
287 |
13726
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
288 /* set the default service count */ |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
289 value = getenv(MASTER_SERVICE_COUNT_ENV); |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
290 if (value != NULL && str_to_uint(value, &count) == 0 && |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
291 count > 0) |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
292 master_service_set_service_count(service, count); |
13969
3963862a4086
lib-master: Send service's idle_kill value to process in environment.
Timo Sirainen <tss@iki.fi>
parents:
13877
diff
changeset
|
293 |
3963862a4086
lib-master: Send service's idle_kill value to process in environment.
Timo Sirainen <tss@iki.fi>
parents:
13877
diff
changeset
|
294 /* set the idle kill timeout */ |
3963862a4086
lib-master: Send service's idle_kill value to process in environment.
Timo Sirainen <tss@iki.fi>
parents:
13877
diff
changeset
|
295 value = getenv(MASTER_SERVICE_IDLE_KILL_ENV); |
3963862a4086
lib-master: Send service's idle_kill value to process in environment.
Timo Sirainen <tss@iki.fi>
parents:
13877
diff
changeset
|
296 if (value != NULL && str_to_uint(value, &count) == 0) |
3963862a4086
lib-master: Send service's idle_kill value to process in environment.
Timo Sirainen <tss@iki.fi>
parents:
13877
diff
changeset
|
297 service->idle_kill_secs = count; |
13726
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
298 } else { |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
299 master_service_set_client_limit(service, 1); |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
300 master_service_set_service_count(service, 1); |
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
301 } |
16627
eb63eca74471
lib-master: If MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN is set, open the config socket before dropping privileges.
Timo Sirainen <tss@iki.fi>
parents:
16508
diff
changeset
|
302 if ((flags & MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN) != 0) { |
eb63eca74471
lib-master: If MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN is set, open the config socket before dropping privileges.
Timo Sirainen <tss@iki.fi>
parents:
16508
diff
changeset
|
303 /* since we're going to keep the config socket open anyway, |
eb63eca74471
lib-master: If MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN is set, open the config socket before dropping privileges.
Timo Sirainen <tss@iki.fi>
parents:
16508
diff
changeset
|
304 open it now so we can read settings even after privileges |
eb63eca74471
lib-master: If MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN is set, open the config socket before dropping privileges.
Timo Sirainen <tss@iki.fi>
parents:
16508
diff
changeset
|
305 are dropped. */ |
eb63eca74471
lib-master: If MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN is set, open the config socket before dropping privileges.
Timo Sirainen <tss@iki.fi>
parents:
16508
diff
changeset
|
306 master_service_config_socket_try_open(service); |
eb63eca74471
lib-master: If MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN is set, open the config socket before dropping privileges.
Timo Sirainen <tss@iki.fi>
parents:
16508
diff
changeset
|
307 } |
13726
c6f5203bf59f
lib-master: Set service/client limits already in master_service_init()
Timo Sirainen <tss@iki.fi>
parents:
13293
diff
changeset
|
308 |
11458
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
309 master_service_verify_version_string(service); |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
310 return service; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
311 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
312 |
10119
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
313 int master_getopt(struct master_service *service) |
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
314 { |
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
315 int c; |
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
316 |
18925
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
317 i_assert(master_getopt_str_is_valid(service->getopt_str)); |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
318 |
10119
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
319 while ((c = getopt(service->argc, service->argv, |
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
320 service->getopt_str)) > 0) { |
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
321 if (!master_service_parse_option(service, c, optarg)) |
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
322 break; |
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
323 } |
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
324 return c; |
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
325 } |
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
326 |
18925
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
327 bool master_getopt_str_is_valid(const char *str) |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
328 { |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
329 unsigned int i, j; |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
330 |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
331 /* make sure there are no duplicates. there are few enough characters |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
332 that this should be fast enough. */ |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
333 for (i = 0; str[i] != '\0'; i++) { |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
334 if (str[i] == ':' || str[i] == '+' || str[i] == '-') |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
335 continue; |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
336 for (j = i+1; str[j] != '\0'; j++) { |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
337 if (str[i] == str[j]) |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
338 return FALSE; |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
339 } |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
340 } |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
341 return TRUE; |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
342 } |
ff17864ba6e0
lib-master: Make sure we can't accidentally add duplicate getopt args.
Timo Sirainen <tss@iki.fi>
parents:
18671
diff
changeset
|
343 |
9912
37bc3a3d4464
Removed mail_log_max_lines_per_sec setting and related code.
Timo Sirainen <tss@iki.fi>
parents:
9881
diff
changeset
|
344 void master_service_init_log(struct master_service *service, |
37bc3a3d4464
Removed mail_log_max_lines_per_sec setting and related code.
Timo Sirainen <tss@iki.fi>
parents:
9881
diff
changeset
|
345 const char *prefix) |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
346 { |
18320
13021170e269
lib-master: Get log timestamp prefix from LOG_STDERR_TIMESTAMP environment.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
347 const char *path, *timestamp; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
348 |
9345
0dbc2dc0877c
master process shouldn't log to stderr. Changed the lib-master flag to _DONT_LOG_TO_STDERR.
Timo Sirainen <tss@iki.fi>
parents:
9337
diff
changeset
|
349 if ((service->flags & MASTER_SERVICE_FLAG_STANDALONE) != 0 && |
0dbc2dc0877c
master process shouldn't log to stderr. Changed the lib-master flag to _DONT_LOG_TO_STDERR.
Timo Sirainen <tss@iki.fi>
parents:
9337
diff
changeset
|
350 (service->flags & MASTER_SERVICE_FLAG_DONT_LOG_TO_STDERR) == 0) { |
18320
13021170e269
lib-master: Get log timestamp prefix from LOG_STDERR_TIMESTAMP environment.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
351 timestamp = getenv("LOG_STDERR_TIMESTAMP"); |
13021170e269
lib-master: Get log timestamp prefix from LOG_STDERR_TIMESTAMP environment.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
352 if (timestamp != NULL) |
13021170e269
lib-master: Get log timestamp prefix from LOG_STDERR_TIMESTAMP environment.
Timo Sirainen <tss@iki.fi>
parents:
18137
diff
changeset
|
353 i_set_failure_timestamp_format(timestamp); |
9066 | 354 i_set_failure_file("/dev/stderr", ""); |
355 return; | |
356 } | |
357 | |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
358 if (getenv("LOG_SERVICE") != NULL && !service->log_directly) { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
359 /* logging via log service */ |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
360 i_set_failure_internal(); |
15201
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15183
diff
changeset
|
361 i_set_failure_prefix("%s", prefix); |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
362 return; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
363 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
364 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
365 if (service->set == NULL) { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
366 i_set_failure_file("/dev/stderr", prefix); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
367 return; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
368 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
369 |
11557
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
370 if (strcmp(service->set->log_path, "syslog") != 0) { |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
371 /* error logging goes to file or stderr */ |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
372 path = home_expand(service->set->log_path); |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
373 i_set_failure_file(path, prefix); |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
374 } |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
375 |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
376 if (strcmp(service->set->log_path, "syslog") == 0 || |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
377 strcmp(service->set->info_log_path, "syslog") == 0 || |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
378 strcmp(service->set->debug_log_path, "syslog") == 0) { |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
379 /* something gets logged to syslog */ |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
380 int facility; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
381 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
382 if (!syslog_facility_find(service->set->syslog_facility, |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
383 &facility)) |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
384 facility = LOG_MAIL; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
385 i_set_failure_syslog("dovecot", LOG_NDELAY, facility); |
15201
d00cf8e0dae7
i_set_failure_prefix() now takes printf-like parameters.
Timo Sirainen <tss@iki.fi>
parents:
15183
diff
changeset
|
386 i_set_failure_prefix("%s", prefix); |
11557
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
387 |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
388 if (strcmp(service->set->log_path, "syslog") != 0) { |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
389 /* set error handlers back to file */ |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14370
diff
changeset
|
390 i_set_fatal_handler(default_fatal_handler); |
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
14370
diff
changeset
|
391 i_set_error_handler(default_error_handler); |
11557
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
392 } |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
393 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
394 |
11557
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
395 if (*service->set->info_log_path != '\0' && |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
396 strcmp(service->set->info_log_path, "syslog") != 0) { |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
397 path = home_expand(service->set->info_log_path); |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
398 if (*path != '\0') |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
399 i_set_info_file(path); |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
400 } |
9959
80472a77d765
Added debug_log_path setting and i_debug() call.
Timo Sirainen <tss@iki.fi>
parents:
9923
diff
changeset
|
401 |
11557
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
402 if (*service->set->debug_log_path != '\0' && |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
403 strcmp(service->set->debug_log_path, "syslog") != 0) { |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
404 path = home_expand(service->set->debug_log_path); |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
405 if (*path != '\0') |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
406 i_set_debug_file(path); |
3edf323da761
Log paths now support "syslog" string.
Timo Sirainen <tss@iki.fi>
parents:
11516
diff
changeset
|
407 } |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
408 i_set_failure_timestamp_format(service->set->log_timestamp); |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
409 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
410 |
9878
c58c40a83bbd
lib-master: Added master_service_set_die_with_master.
Timo Sirainen <tss@iki.fi>
parents:
9868
diff
changeset
|
411 void master_service_set_die_with_master(struct master_service *service, |
c58c40a83bbd
lib-master: Added master_service_set_die_with_master.
Timo Sirainen <tss@iki.fi>
parents:
9868
diff
changeset
|
412 bool set) |
c58c40a83bbd
lib-master: Added master_service_set_die_with_master.
Timo Sirainen <tss@iki.fi>
parents:
9868
diff
changeset
|
413 { |
c58c40a83bbd
lib-master: Added master_service_set_die_with_master.
Timo Sirainen <tss@iki.fi>
parents:
9868
diff
changeset
|
414 service->die_with_master = set; |
c58c40a83bbd
lib-master: Added master_service_set_die_with_master.
Timo Sirainen <tss@iki.fi>
parents:
9868
diff
changeset
|
415 } |
c58c40a83bbd
lib-master: Added master_service_set_die_with_master.
Timo Sirainen <tss@iki.fi>
parents:
9868
diff
changeset
|
416 |
10171
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
417 void master_service_set_die_callback(struct master_service *service, |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
418 void (*callback)(void)) |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
419 { |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
420 service->die_callback = callback; |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
421 } |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
422 |
13082
c55ea4fc3344
lib-master: Added master_service_set_idle_die_callback()
Timo Sirainen <tss@iki.fi>
parents:
13081
diff
changeset
|
423 void master_service_set_idle_die_callback(struct master_service *service, |
c55ea4fc3344
lib-master: Added master_service_set_idle_die_callback()
Timo Sirainen <tss@iki.fi>
parents:
13081
diff
changeset
|
424 bool (*callback)(void)) |
c55ea4fc3344
lib-master: Added master_service_set_idle_die_callback()
Timo Sirainen <tss@iki.fi>
parents:
13081
diff
changeset
|
425 { |
c55ea4fc3344
lib-master: Added master_service_set_idle_die_callback()
Timo Sirainen <tss@iki.fi>
parents:
13081
diff
changeset
|
426 service->idle_die_callback = callback; |
c55ea4fc3344
lib-master: Added master_service_set_idle_die_callback()
Timo Sirainen <tss@iki.fi>
parents:
13081
diff
changeset
|
427 } |
c55ea4fc3344
lib-master: Added master_service_set_idle_die_callback()
Timo Sirainen <tss@iki.fi>
parents:
13081
diff
changeset
|
428 |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
429 static bool get_instance_config(const char *name, const char **config_path_r) |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
430 { |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
431 struct master_instance_list *list; |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
432 const struct master_instance *inst; |
14950
543852ebb327
Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents:
14921
diff
changeset
|
433 const char *instance_path, *path; |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
434 |
15183
04cd35e86025
lib-master: Fixed crashing with -i <instance> parameter handling.
Timo Sirainen <tss@iki.fi>
parents:
15088
diff
changeset
|
435 /* note that we don't have any settings yet. we're just finding out |
04cd35e86025
lib-master: Fixed crashing with -i <instance> parameter handling.
Timo Sirainen <tss@iki.fi>
parents:
15088
diff
changeset
|
436 which dovecot.conf we even want to read! so we must use the |
04cd35e86025
lib-master: Fixed crashing with -i <instance> parameter handling.
Timo Sirainen <tss@iki.fi>
parents:
15088
diff
changeset
|
437 hardcoded state_dir path. */ |
04cd35e86025
lib-master: Fixed crashing with -i <instance> parameter handling.
Timo Sirainen <tss@iki.fi>
parents:
15088
diff
changeset
|
438 instance_path = t_strconcat(PKG_STATEDIR"/"MASTER_INSTANCE_FNAME, NULL); |
14950
543852ebb327
Made PKG_STATEDIR configurable with state_dir setting.
Timo Sirainen <tss@iki.fi>
parents:
14921
diff
changeset
|
439 list = master_instance_list_init(instance_path); |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
440 inst = master_instance_list_find_by_name(list, name); |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
441 if (inst != NULL) { |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
442 path = t_strdup_printf("%s/dovecot.conf", inst->base_dir); |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
443 if (t_readlink(path, config_path_r) < 0) |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
444 i_fatal("readlink(%s) failed: %m", path); |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
445 } |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
446 master_instance_list_deinit(&list); |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
447 return inst != NULL; |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
448 } |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
449 |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
450 bool master_service_parse_option(struct master_service *service, |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
451 int opt, const char *arg) |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
452 { |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
453 const char *path; |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
454 |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
455 switch (opt) { |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
456 case 'c': |
20688
f5aefbab9677
lib-master: don't leak config path
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
19552
diff
changeset
|
457 i_free(service->config_path); |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
458 service->config_path = i_strdup(arg); |
17794
ccc5701dae72
lib-master: Earlier config file path fix broke reusing existing config socket lookups.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
459 service->config_path_changed_with_param = TRUE; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
460 break; |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
461 case 'i': |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
462 if (!get_instance_config(arg, &path)) |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
463 i_fatal("Unknown instance name: %s", arg); |
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
464 service->config_path = i_strdup(path); |
17794
ccc5701dae72
lib-master: Earlier config file path fix broke reusing existing config socket lookups.
Timo Sirainen <tss@iki.fi>
parents:
17130
diff
changeset
|
465 service->config_path_changed_with_param = TRUE; |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
466 break; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
467 case 'k': |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
468 service->keep_environment = TRUE; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
469 break; |
9239
1cb45d4389d4
Binaries now take -o key=value parameters to override settings.
Timo Sirainen <tss@iki.fi>
parents:
9235
diff
changeset
|
470 case 'o': |
1cb45d4389d4
Binaries now take -o key=value parameters to override settings.
Timo Sirainen <tss@iki.fi>
parents:
9235
diff
changeset
|
471 if (!array_is_created(&service->config_overrides)) |
1cb45d4389d4
Binaries now take -o key=value parameters to override settings.
Timo Sirainen <tss@iki.fi>
parents:
9235
diff
changeset
|
472 i_array_init(&service->config_overrides, 16); |
1cb45d4389d4
Binaries now take -o key=value parameters to override settings.
Timo Sirainen <tss@iki.fi>
parents:
9235
diff
changeset
|
473 array_append(&service->config_overrides, &arg, 1); |
1cb45d4389d4
Binaries now take -o key=value parameters to override settings.
Timo Sirainen <tss@iki.fi>
parents:
9235
diff
changeset
|
474 break; |
9336
fa195866a79a
lib-master: Added -O parameter to use program default settings.
Timo Sirainen <tss@iki.fi>
parents:
9300
diff
changeset
|
475 case 'O': |
10092
4d21bb0fff3a
lib-master: Added _NO_CONFIG_SETTIGS and _NO_ENV_SETTINGS flags.
Timo Sirainen <tss@iki.fi>
parents:
10089
diff
changeset
|
476 service->flags |= MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS; |
9336
fa195866a79a
lib-master: Added -O parameter to use program default settings.
Timo Sirainen <tss@iki.fi>
parents:
9300
diff
changeset
|
477 break; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
478 case 'L': |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
479 service->log_directly = TRUE; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
480 break; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
481 default: |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
482 return FALSE; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
483 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
484 return TRUE; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
485 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
486 |
9807
41188b7db88a
lib-master: If accept() fails and there are no clients, die instead of waiting forever.
Timo Sirainen <tss@iki.fi>
parents:
9441
diff
changeset
|
487 static void master_service_error(struct master_service *service) |
41188b7db88a
lib-master: If accept() fails and there are no clients, die instead of waiting forever.
Timo Sirainen <tss@iki.fi>
parents:
9441
diff
changeset
|
488 { |
10264
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
489 master_service_stop_new_connections(service); |
9807
41188b7db88a
lib-master: If accept() fails and there are no clients, die instead of waiting forever.
Timo Sirainen <tss@iki.fi>
parents:
9441
diff
changeset
|
490 if (service->master_status.available_count == |
10171
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
491 service->total_available_count || service->die_with_master) { |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
492 if (service->die_callback == NULL) |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
493 master_service_stop(service); |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
494 else { |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
495 service->to_die = |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
496 timeout_add(MASTER_SERVICE_DIE_TIMEOUT_MSECS, |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
497 master_service_stop, |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
498 service); |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
499 service->die_callback(); |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
500 } |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
501 } |
9807
41188b7db88a
lib-master: If accept() fails and there are no clients, die instead of waiting forever.
Timo Sirainen <tss@iki.fi>
parents:
9441
diff
changeset
|
502 } |
41188b7db88a
lib-master: If accept() fails and there are no clients, die instead of waiting forever.
Timo Sirainen <tss@iki.fi>
parents:
9441
diff
changeset
|
503 |
14921
d3db2ba15d00
Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents:
14728
diff
changeset
|
504 static void master_status_error(struct master_service *service) |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
505 { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
506 /* status fd is a write-only pipe, so if we're here it means the |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
507 master wants us to die (or died itself). don't die until all |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
508 service connections are finished. */ |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
509 io_remove(&service->io_status_error); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
510 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
511 /* the log fd may also be closed already, don't die when trying to |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
512 log later */ |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
513 i_set_failure_ignore_errors(TRUE); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
514 |
9807
41188b7db88a
lib-master: If accept() fails and there are no clients, die instead of waiting forever.
Timo Sirainen <tss@iki.fi>
parents:
9441
diff
changeset
|
515 master_service_error(service); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
516 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
517 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
518 void master_service_init_finish(struct master_service *service) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
519 { |
13065
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
520 enum libsig_flags sigint_flags = LIBSIG_FLAG_DELAYED; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
521 struct stat st; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
522 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
523 /* set default signal handlers */ |
13065
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
524 if ((service->flags & MASTER_SERVICE_FLAG_STANDALONE) == 0) |
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
525 sigint_flags |= LIBSIG_FLAG_RESTART; |
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
526 lib_signals_set_handler(SIGINT, sigint_flags, sig_die, service); |
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
527 lib_signals_set_handler(SIGTERM, LIBSIG_FLAG_DELAYED, sig_die, service); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
528 if ((service->flags & MASTER_SERVICE_FLAG_TRACK_LOGIN_STATE) != 0) { |
13065
6fdee880c5dc
Use SA_RESTART flag for signals wherever possible.
Timo Sirainen <tss@iki.fi>
parents:
12782
diff
changeset
|
529 lib_signals_set_handler(SIGUSR1, LIBSIG_FLAGS_SAFE, |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
530 sig_state_changed, service); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
531 } |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
532 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
533 if ((service->flags & MASTER_SERVICE_FLAG_STANDALONE) == 0) { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
534 if (fstat(MASTER_STATUS_FD, &st) < 0 || !S_ISFIFO(st.st_mode)) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
535 i_fatal("Must be started by dovecot master process"); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
536 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
537 /* start listening errors for status fd, it means master died */ |
12564
b0ec48006d57
master-child API change: Use a separate fd for tracking when master dies.
Timo Sirainen <tss@iki.fi>
parents:
12439
diff
changeset
|
538 service->io_status_error = io_add(MASTER_DEAD_FD, IO_ERROR, |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
539 master_status_error, service); |
22027
38826e486570
lib-master: When running under master, close listeners immediately on SIGQUIT
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22026
diff
changeset
|
540 lib_signals_set_handler(SIGQUIT, 0, sig_close_listeners, service); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
541 } |
9923
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
542 master_service_io_listeners_add(service); |
15962
effecdd32cb0
login: Don't fail at startup by trying to load SSL plugin.
Timo Sirainen <tss@iki.fi>
parents:
15931
diff
changeset
|
543 if (service->want_ssl_settings && |
effecdd32cb0
login: Don't fail at startup by trying to load SSL plugin.
Timo Sirainen <tss@iki.fi>
parents:
15931
diff
changeset
|
544 (service->flags & MASTER_SERVICE_FLAG_NO_SSL_INIT) == 0) |
15931
6b0c284ecede
lib-master: If ssl settings are used, initialize ssl context automatically.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
545 master_service_ssl_ctx_init(service); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
546 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
547 if ((service->flags & MASTER_SERVICE_FLAG_STD_CLIENT) != 0) { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
548 /* we already have a connection to be served */ |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
549 service->master_status.available_count--; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
550 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
551 master_status_update(service); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
552 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
553 |
22488
052396bac097
lib-master: master_service_import_environment() - use a data stack frame
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22487
diff
changeset
|
554 static void master_service_import_environment_real(const char *import_environment) |
22487
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
555 { |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
556 const char *const *envs, *key, *value; |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
557 ARRAY_TYPE(const_string) keys; |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
558 |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
559 if (*import_environment == '\0') |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
560 return; |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
561 |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
562 t_array_init(&keys, 8); |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
563 /* preserve existing DOVECOT_PRESERVE_ENVS */ |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
564 value = getenv(DOVECOT_PRESERVE_ENVS_ENV); |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
565 if (value != NULL) |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
566 array_append(&keys, &value, 1); |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
567 /* add new environments */ |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
568 envs = t_strsplit_spaces(import_environment, " "); |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
569 for (; *envs != NULL; envs++) { |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
570 value = strchr(*envs, '='); |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
571 if (value == NULL) |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
572 key = *envs; |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
573 else { |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
574 key = t_strdup_until(*envs, value); |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
575 env_put(*envs); |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
576 } |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
577 array_append(&keys, &key, 1); |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
578 } |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
579 array_append_zero(&keys); |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
580 |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
581 value = t_strarray_join(array_idx(&keys, 0), " "); |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
582 env_put(t_strconcat(DOVECOT_PRESERVE_ENVS_ENV"=", value, NULL)); |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
583 } |
e60f0e893992
master: Move master_set_import_environment() to lib-master
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22075
diff
changeset
|
584 |
22488
052396bac097
lib-master: master_service_import_environment() - use a data stack frame
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22487
diff
changeset
|
585 void master_service_import_environment(const char *import_environment) |
052396bac097
lib-master: master_service_import_environment() - use a data stack frame
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22487
diff
changeset
|
586 { |
052396bac097
lib-master: master_service_import_environment() - use a data stack frame
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22487
diff
changeset
|
587 T_BEGIN { |
052396bac097
lib-master: master_service_import_environment() - use a data stack frame
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22487
diff
changeset
|
588 master_service_import_environment_real(import_environment); |
052396bac097
lib-master: master_service_import_environment() - use a data stack frame
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22487
diff
changeset
|
589 } T_END; |
052396bac097
lib-master: master_service_import_environment() - use a data stack frame
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22487
diff
changeset
|
590 } |
052396bac097
lib-master: master_service_import_environment() - use a data stack frame
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22487
diff
changeset
|
591 |
12726
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
592 void master_service_env_clean(void) |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
593 { |
12726
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
594 const char *value = getenv(DOVECOT_PRESERVE_ENVS_ENV); |
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
595 |
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
596 if (value == NULL || *value == '\0') |
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
597 env_clean(); |
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
598 else T_BEGIN { |
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
599 value = t_strconcat(value, " "DOVECOT_PRESERVE_ENVS_ENV, NULL); |
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
600 env_clean_except(t_strsplit_spaces(value, " ")); |
cec7fa92ff48
Added import_environment setting.
Timo Sirainen <tss@iki.fi>
parents:
12564
diff
changeset
|
601 } T_END; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
602 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
603 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
604 void master_service_set_client_limit(struct master_service *service, |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
605 unsigned int client_limit) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
606 { |
9868
63d2755c9211
lib-master: Make sure master_status.available_count is updated correctly.
Timo Sirainen <tss@iki.fi>
parents:
9864
diff
changeset
|
607 unsigned int used; |
63d2755c9211
lib-master: Make sure master_status.available_count is updated correctly.
Timo Sirainen <tss@iki.fi>
parents:
9864
diff
changeset
|
608 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
609 i_assert(service->master_status.available_count == |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
610 service->total_available_count); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
611 |
9868
63d2755c9211
lib-master: Make sure master_status.available_count is updated correctly.
Timo Sirainen <tss@iki.fi>
parents:
9864
diff
changeset
|
612 used = service->total_available_count - |
63d2755c9211
lib-master: Make sure master_status.available_count is updated correctly.
Timo Sirainen <tss@iki.fi>
parents:
9864
diff
changeset
|
613 service->master_status.available_count; |
63d2755c9211
lib-master: Make sure master_status.available_count is updated correctly.
Timo Sirainen <tss@iki.fi>
parents:
9864
diff
changeset
|
614 i_assert(client_limit >= used); |
63d2755c9211
lib-master: Make sure master_status.available_count is updated correctly.
Timo Sirainen <tss@iki.fi>
parents:
9864
diff
changeset
|
615 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
616 service->total_available_count = client_limit; |
9868
63d2755c9211
lib-master: Make sure master_status.available_count is updated correctly.
Timo Sirainen <tss@iki.fi>
parents:
9864
diff
changeset
|
617 service->master_status.available_count = client_limit - used; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
618 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
619 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
620 unsigned int master_service_get_client_limit(struct master_service *service) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
621 { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
622 return service->total_available_count; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
623 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
624 |
13081
a5ab569ee4cd
master process now tells its children their service's process_limit.
Timo Sirainen <tss@iki.fi>
parents:
13065
diff
changeset
|
625 unsigned int master_service_get_process_limit(struct master_service *service) |
a5ab569ee4cd
master process now tells its children their service's process_limit.
Timo Sirainen <tss@iki.fi>
parents:
13065
diff
changeset
|
626 { |
a5ab569ee4cd
master process now tells its children their service's process_limit.
Timo Sirainen <tss@iki.fi>
parents:
13065
diff
changeset
|
627 return service->process_limit; |
a5ab569ee4cd
master process now tells its children their service's process_limit.
Timo Sirainen <tss@iki.fi>
parents:
13065
diff
changeset
|
628 } |
a5ab569ee4cd
master process now tells its children their service's process_limit.
Timo Sirainen <tss@iki.fi>
parents:
13065
diff
changeset
|
629 |
16178
c32bfc54bc50
lib-master: Added master_service_get_process_min_avail()
Timo Sirainen <tss@iki.fi>
parents:
16140
diff
changeset
|
630 unsigned int master_service_get_process_min_avail(struct master_service *service) |
c32bfc54bc50
lib-master: Added master_service_get_process_min_avail()
Timo Sirainen <tss@iki.fi>
parents:
16140
diff
changeset
|
631 { |
c32bfc54bc50
lib-master: Added master_service_get_process_min_avail()
Timo Sirainen <tss@iki.fi>
parents:
16140
diff
changeset
|
632 return service->process_min_avail; |
c32bfc54bc50
lib-master: Added master_service_get_process_min_avail()
Timo Sirainen <tss@iki.fi>
parents:
16140
diff
changeset
|
633 } |
c32bfc54bc50
lib-master: Added master_service_get_process_min_avail()
Timo Sirainen <tss@iki.fi>
parents:
16140
diff
changeset
|
634 |
13969
3963862a4086
lib-master: Send service's idle_kill value to process in environment.
Timo Sirainen <tss@iki.fi>
parents:
13877
diff
changeset
|
635 unsigned int master_service_get_idle_kill_secs(struct master_service *service) |
3963862a4086
lib-master: Send service's idle_kill value to process in environment.
Timo Sirainen <tss@iki.fi>
parents:
13877
diff
changeset
|
636 { |
3963862a4086
lib-master: Send service's idle_kill value to process in environment.
Timo Sirainen <tss@iki.fi>
parents:
13877
diff
changeset
|
637 return service->idle_kill_secs; |
3963862a4086
lib-master: Send service's idle_kill value to process in environment.
Timo Sirainen <tss@iki.fi>
parents:
13877
diff
changeset
|
638 } |
3963862a4086
lib-master: Send service's idle_kill value to process in environment.
Timo Sirainen <tss@iki.fi>
parents:
13877
diff
changeset
|
639 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
640 void master_service_set_service_count(struct master_service *service, |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
641 unsigned int count) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
642 { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
643 unsigned int used; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
644 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
645 used = service->total_available_count - |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
646 service->master_status.available_count; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
647 i_assert(count >= used); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
648 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
649 if (service->total_available_count > count) { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
650 service->total_available_count = count; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
651 service->master_status.available_count = count - used; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
652 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
653 service->service_count_left = count; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
654 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
655 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
656 unsigned int master_service_get_service_count(struct master_service *service) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
657 { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
658 return service->service_count_left; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
659 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
660 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
661 unsigned int master_service_get_socket_count(struct master_service *service) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
662 { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
663 return service->socket_count; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
664 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
665 |
18671
5614bc437643
lib-master: Added master_service_get_socket_name()
Timo Sirainen <tss@iki.fi>
parents:
18320
diff
changeset
|
666 const char *master_service_get_socket_name(struct master_service *service, |
5614bc437643
lib-master: Added master_service_get_socket_name()
Timo Sirainen <tss@iki.fi>
parents:
18320
diff
changeset
|
667 int listen_fd) |
5614bc437643
lib-master: Added master_service_get_socket_name()
Timo Sirainen <tss@iki.fi>
parents:
18320
diff
changeset
|
668 { |
5614bc437643
lib-master: Added master_service_get_socket_name()
Timo Sirainen <tss@iki.fi>
parents:
18320
diff
changeset
|
669 unsigned int i; |
5614bc437643
lib-master: Added master_service_get_socket_name()
Timo Sirainen <tss@iki.fi>
parents:
18320
diff
changeset
|
670 |
5614bc437643
lib-master: Added master_service_get_socket_name()
Timo Sirainen <tss@iki.fi>
parents:
18320
diff
changeset
|
671 i_assert(listen_fd >= MASTER_LISTEN_FD_FIRST); |
5614bc437643
lib-master: Added master_service_get_socket_name()
Timo Sirainen <tss@iki.fi>
parents:
18320
diff
changeset
|
672 |
5614bc437643
lib-master: Added master_service_get_socket_name()
Timo Sirainen <tss@iki.fi>
parents:
18320
diff
changeset
|
673 i = listen_fd - MASTER_LISTEN_FD_FIRST; |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
674 i_assert(i < service->socket_count); |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
675 return service->listeners[i].name != NULL ? |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
676 service->listeners[i].name : ""; |
18671
5614bc437643
lib-master: Added master_service_get_socket_name()
Timo Sirainen <tss@iki.fi>
parents:
18320
diff
changeset
|
677 } |
5614bc437643
lib-master: Added master_service_get_socket_name()
Timo Sirainen <tss@iki.fi>
parents:
18320
diff
changeset
|
678 |
9923
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
679 void master_service_set_avail_overflow_callback(struct master_service *service, |
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
680 void (*callback)(void)) |
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
681 { |
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
682 service->avail_overflow_callback = callback; |
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
683 } |
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
684 |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
685 const char *master_service_get_config_path(struct master_service *service) |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
686 { |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
687 return service->config_path; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
688 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
689 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
690 const char *master_service_get_version_string(struct master_service *service) |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
691 { |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
692 return service->version_string; |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
693 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
694 |
9413
84f96a722fcc
lib-master: Added master_service_get_name().
Timo Sirainen <tss@iki.fi>
parents:
9396
diff
changeset
|
695 const char *master_service_get_name(struct master_service *service) |
84f96a722fcc
lib-master: Added master_service_get_name().
Timo Sirainen <tss@iki.fi>
parents:
9396
diff
changeset
|
696 { |
84f96a722fcc
lib-master: Added master_service_get_name().
Timo Sirainen <tss@iki.fi>
parents:
9396
diff
changeset
|
697 return service->name; |
84f96a722fcc
lib-master: Added master_service_get_name().
Timo Sirainen <tss@iki.fi>
parents:
9396
diff
changeset
|
698 } |
84f96a722fcc
lib-master: Added master_service_get_name().
Timo Sirainen <tss@iki.fi>
parents:
9396
diff
changeset
|
699 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
700 void master_service_run(struct master_service *service, |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
701 master_service_connection_callback_t *callback) |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
702 { |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
703 service->callback = callback; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
704 io_loop_run(service->ioloop); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
705 service->callback = NULL; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
706 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
707 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
708 void master_service_stop(struct master_service *service) |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
709 { |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
710 io_loop_stop(service->ioloop); |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
711 } |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
712 |
10264
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
713 void master_service_stop_new_connections(struct master_service *service) |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
714 { |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
715 unsigned int current_count; |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
716 |
10472
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
717 if (service->stopping) |
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
718 return; |
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
719 |
10264
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
720 service->stopping = TRUE; |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
721 master_service_io_listeners_remove(service); |
10472
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
722 master_service_io_listeners_close(service); |
10264
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
723 |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
724 /* make sure we stop after servicing current connections */ |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
725 current_count = service->total_available_count - |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
726 service->master_status.available_count; |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
727 service->service_count_left = current_count; |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
728 service->total_available_count = current_count; |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
729 |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
730 if (current_count == 0) |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
731 master_service_stop(service); |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
732 else { |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
733 /* notify master that we're not accepting any more |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
734 connections */ |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
735 service->master_status.available_count = 0; |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
736 master_status_update(service); |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
737 } |
10473
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10472
diff
changeset
|
738 if (service->login != NULL) |
a0d99b374aa4
imap, pop3: Close auth/config connections when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10472
diff
changeset
|
739 master_login_stop(service->login); |
10264
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
740 } |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
741 |
11897
b60e225386bf
doveadm: Added client/server architecture support for running mail commands.
Timo Sirainen <tss@iki.fi>
parents:
11735
diff
changeset
|
742 bool master_service_is_killed(struct master_service *service) |
b60e225386bf
doveadm: Added client/server architecture support for running mail commands.
Timo Sirainen <tss@iki.fi>
parents:
11735
diff
changeset
|
743 { |
b60e225386bf
doveadm: Added client/server architecture support for running mail commands.
Timo Sirainen <tss@iki.fi>
parents:
11735
diff
changeset
|
744 return service->killed; |
b60e225386bf
doveadm: Added client/server architecture support for running mail commands.
Timo Sirainen <tss@iki.fi>
parents:
11735
diff
changeset
|
745 } |
b60e225386bf
doveadm: Added client/server architecture support for running mail commands.
Timo Sirainen <tss@iki.fi>
parents:
11735
diff
changeset
|
746 |
16319
b8be0d35228e
lib-master: Added master_service_is_master_stopped()
Timo Sirainen <tss@iki.fi>
parents:
16178
diff
changeset
|
747 bool master_service_is_master_stopped(struct master_service *service) |
b8be0d35228e
lib-master: Added master_service_is_master_stopped()
Timo Sirainen <tss@iki.fi>
parents:
16178
diff
changeset
|
748 { |
19392
52cbfa793147
lib-master: master_service_is_master_stopped() now returns FALSE if running standalone.
Timo Sirainen <tss@iki.fi>
parents:
19191
diff
changeset
|
749 return service->io_status_error == NULL && |
52cbfa793147
lib-master: master_service_is_master_stopped() now returns FALSE if running standalone.
Timo Sirainen <tss@iki.fi>
parents:
19191
diff
changeset
|
750 (service->flags & MASTER_SERVICE_FLAG_STANDALONE) == 0; |
16319
b8be0d35228e
lib-master: Added master_service_is_master_stopped()
Timo Sirainen <tss@iki.fi>
parents:
16178
diff
changeset
|
751 } |
b8be0d35228e
lib-master: Added master_service_is_master_stopped()
Timo Sirainen <tss@iki.fi>
parents:
16178
diff
changeset
|
752 |
9235
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
753 void master_service_anvil_send(struct master_service *service, const char *cmd) |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
754 { |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
755 ssize_t ret; |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
756 |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
757 if ((service->flags & MASTER_SERVICE_FLAG_STANDALONE) != 0) |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
758 return; |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
759 |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
760 ret = write(MASTER_ANVIL_FD, cmd, strlen(cmd)); |
9880
cce684dfe3e7
anvil: Stop immediately when master asks, instead of waiting for clients to finish.
Timo Sirainen <tss@iki.fi>
parents:
9878
diff
changeset
|
761 if (ret < 0) { |
cce684dfe3e7
anvil: Stop immediately when master asks, instead of waiting for clients to finish.
Timo Sirainen <tss@iki.fi>
parents:
9878
diff
changeset
|
762 if (errno == EPIPE) { |
cce684dfe3e7
anvil: Stop immediately when master asks, instead of waiting for clients to finish.
Timo Sirainen <tss@iki.fi>
parents:
9878
diff
changeset
|
763 /* anvil process was probably recreated, don't bother |
cce684dfe3e7
anvil: Stop immediately when master asks, instead of waiting for clients to finish.
Timo Sirainen <tss@iki.fi>
parents:
9878
diff
changeset
|
764 logging an error about losing connection to it */ |
cce684dfe3e7
anvil: Stop immediately when master asks, instead of waiting for clients to finish.
Timo Sirainen <tss@iki.fi>
parents:
9878
diff
changeset
|
765 return; |
cce684dfe3e7
anvil: Stop immediately when master asks, instead of waiting for clients to finish.
Timo Sirainen <tss@iki.fi>
parents:
9878
diff
changeset
|
766 } |
9235
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
767 i_error("write(anvil) failed: %m"); |
9880
cce684dfe3e7
anvil: Stop immediately when master asks, instead of waiting for clients to finish.
Timo Sirainen <tss@iki.fi>
parents:
9878
diff
changeset
|
768 } else if (ret == 0) |
9235
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
769 i_error("write(anvil) failed: EOF"); |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
770 else { |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
771 i_assert((size_t)ret == strlen(cmd)); |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
772 } |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
773 } |
2e2b957f1cca
Implemented anvil service, which is used to implement mail_max_userip_connections.
Timo Sirainen <tss@iki.fi>
parents:
9218
diff
changeset
|
774 |
13277
030e33bde821
lib-master: Added master_service_client_connection_created()
Timo Sirainen <tss@iki.fi>
parents:
13082
diff
changeset
|
775 void master_service_client_connection_created(struct master_service *service) |
030e33bde821
lib-master: Added master_service_client_connection_created()
Timo Sirainen <tss@iki.fi>
parents:
13082
diff
changeset
|
776 { |
030e33bde821
lib-master: Added master_service_client_connection_created()
Timo Sirainen <tss@iki.fi>
parents:
13082
diff
changeset
|
777 i_assert(service->master_status.available_count > 0); |
030e33bde821
lib-master: Added master_service_client_connection_created()
Timo Sirainen <tss@iki.fi>
parents:
13082
diff
changeset
|
778 service->master_status.available_count--; |
030e33bde821
lib-master: Added master_service_client_connection_created()
Timo Sirainen <tss@iki.fi>
parents:
13082
diff
changeset
|
779 master_status_update(service); |
030e33bde821
lib-master: Added master_service_client_connection_created()
Timo Sirainen <tss@iki.fi>
parents:
13082
diff
changeset
|
780 } |
030e33bde821
lib-master: Added master_service_client_connection_created()
Timo Sirainen <tss@iki.fi>
parents:
13082
diff
changeset
|
781 |
22026
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
782 static bool master_service_want_listener(struct master_service *service) |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
783 { |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
784 if (service->master_status.available_count > 0) { |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
785 /* more concurrent clients can still be added */ |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
786 return TRUE; |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
787 } |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
788 if (service->service_count_left == 1) { |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
789 /* after handling this client, the whole process will stop. */ |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
790 return FALSE; |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
791 } |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
792 if (service->avail_overflow_callback != NULL) { |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
793 /* overflow callback is set. it's possible that the current |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
794 existing client may be replaced by a new client, which needs |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
795 the listener to try to accept new connections. */ |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
796 return TRUE; |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
797 } |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
798 /* the listener isn't needed until the current client is disconnected */ |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
799 return FALSE; |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
800 } |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
801 |
18948
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
802 void master_service_client_connection_handled(struct master_service *service, |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
803 struct master_service_connection *conn) |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
804 { |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
805 if (!conn->accepted) { |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
806 if (close(conn->fd) < 0) |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
807 i_error("close(service connection) failed: %m"); |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
808 master_service_client_connection_destroyed(service); |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
809 } else if (conn->fifo) { |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
810 /* reading FIFOs stays open forever, don't count them |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
811 as real clients */ |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
812 master_service_client_connection_destroyed(service); |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
813 } |
22026
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
814 if (!master_service_want_listener(service)) { |
18948
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
815 i_assert(service->listeners != NULL); |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
816 master_service_io_listeners_remove(service); |
22026
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
817 if (service->service_count_left == 1) { |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
818 /* we're not going to accept any more connections after |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
819 this. go ahead and close the connection early. don't |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
820 do this before calling callback, because it may want |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
821 to access the listen_fd (e.g. to check socket |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
822 permissions). */ |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
823 master_service_io_listeners_close(service); |
7835a8a35d66
lib-master: Remove listener's IO earlier if possible
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21390
diff
changeset
|
824 } |
18948
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
825 } |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
826 } |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
827 |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
828 void master_service_client_connection_callback(struct master_service *service, |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
829 struct master_service_connection *conn) |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
830 { |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
831 service->callback(conn); |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
832 |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
833 master_service_client_connection_handled(service, conn); |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
834 } |
b9ccd6349654
lib-master: Moved connection accepting code to its own functions.
Timo Sirainen <tss@iki.fi>
parents:
18940
diff
changeset
|
835 |
11388
b8d3c96e61a7
lib-master API changed to avoid accidentally leaking client connections.
Timo Sirainen <tss@iki.fi>
parents:
11118
diff
changeset
|
836 void master_service_client_connection_accept(struct master_service_connection *conn) |
b8d3c96e61a7
lib-master API changed to avoid accidentally leaking client connections.
Timo Sirainen <tss@iki.fi>
parents:
11118
diff
changeset
|
837 { |
b8d3c96e61a7
lib-master API changed to avoid accidentally leaking client connections.
Timo Sirainen <tss@iki.fi>
parents:
11118
diff
changeset
|
838 conn->accepted = TRUE; |
b8d3c96e61a7
lib-master API changed to avoid accidentally leaking client connections.
Timo Sirainen <tss@iki.fi>
parents:
11118
diff
changeset
|
839 } |
b8d3c96e61a7
lib-master API changed to avoid accidentally leaking client connections.
Timo Sirainen <tss@iki.fi>
parents:
11118
diff
changeset
|
840 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
841 void master_service_client_connection_destroyed(struct master_service *service) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
842 { |
9437
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
843 /* we can listen again */ |
9923
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
844 master_service_io_listeners_add(service); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
845 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
846 i_assert(service->total_available_count > 0); |
10944
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
847 i_assert(service->service_count_left > 0); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
848 |
10944
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
849 if (service->service_count_left == service->total_available_count) { |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
850 service->total_available_count--; |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
851 service->service_count_left--; |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
852 } else { |
15904
d3cf06639864
Replaced all -1U and (unsigned int)-1 with UINT_MAX.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
853 if (service->service_count_left != UINT_MAX) |
10944
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
854 service->service_count_left--; |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
855 |
9868
63d2755c9211
lib-master: Make sure master_status.available_count is updated correctly.
Timo Sirainen <tss@iki.fi>
parents:
9864
diff
changeset
|
856 i_assert(service->master_status.available_count < |
63d2755c9211
lib-master: Make sure master_status.available_count is updated correctly.
Timo Sirainen <tss@iki.fi>
parents:
9864
diff
changeset
|
857 service->total_available_count); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
858 service->master_status.available_count++; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
859 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
860 |
10944
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
861 if (service->service_count_left == 0) { |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
862 i_assert(service->master_status.available_count == |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
863 service->total_available_count); |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
864 master_service_stop(service); |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
865 } else if ((service->io_status_error == NULL || |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
866 service->listeners == NULL) && |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
867 service->master_status.available_count == |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
868 service->total_available_count) { |
9441
d43232f22ace
lib-master: Non-listening processes should die when their std-client is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
9438
diff
changeset
|
869 /* we've finished handling all clients, and |
d43232f22ace
lib-master: Non-listening processes should die when their std-client is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
9438
diff
changeset
|
870 a) master has closed the connection |
d43232f22ace
lib-master: Non-listening processes should die when their std-client is destroyed.
Timo Sirainen <tss@iki.fi>
parents:
9438
diff
changeset
|
871 b) there are no listeners (std-client?) */ |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
872 master_service_stop(service); |
10944
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
873 } else { |
183b1b4f6386
lib-master: Don't assert-crash if client_limit < service_count.
Timo Sirainen <tss@iki.fi>
parents:
10833
diff
changeset
|
874 master_status_update(service); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
875 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
876 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
877 |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
878 static void master_service_set_login_state(struct master_service *service, |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
879 enum master_login_state state) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
880 { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
881 if (service->to_overflow_state != NULL) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
882 timeout_remove(&service->to_overflow_state); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
883 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
884 switch (state) { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
885 case MASTER_LOGIN_STATE_NONFULL: |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
886 service->call_avail_overflow = FALSE; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
887 if (service->master_status.available_count > 0) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
888 return; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
889 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
890 /* some processes should now be able to handle new connections, |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
891 although we can't. but there may be race conditions, so |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
892 make sure that we'll check again soon if the state has |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
893 changed to "full" without our knowledge. */ |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
894 service->to_overflow_state = |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
895 timeout_add(MASTER_SERVICE_STATE_CHECK_MSECS, |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
896 master_service_refresh_login_state, |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
897 service); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
898 return; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
899 case MASTER_LOGIN_STATE_FULL: |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
900 /* make sure we're listening for more connections */ |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
901 service->call_avail_overflow = TRUE; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
902 master_service_io_listeners_add(service); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
903 return; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
904 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
905 i_error("Invalid master login state: %d", state); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
906 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
907 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
908 static void master_service_refresh_login_state(struct master_service *service) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
909 { |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
910 int ret; |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
911 |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
912 ret = lseek(MASTER_LOGIN_NOTIFY_FD, 0, SEEK_CUR); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
913 if (ret < 0) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
914 i_error("lseek(login notify fd) failed: %m"); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
915 else |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
916 master_service_set_login_state(service, ret); |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
917 } |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
918 |
10194
40d8df2b4111
imap, pop3: Connection counting fixes.
Timo Sirainen <tss@iki.fi>
parents:
10188
diff
changeset
|
919 void master_service_close_config_fd(struct master_service *service) |
10033
40a71105529b
lib-master: If config fd is kept open, close it after last connection has been created.
Timo Sirainen <tss@iki.fi>
parents:
9959
diff
changeset
|
920 { |
40a71105529b
lib-master: If config fd is kept open, close it after last connection has been created.
Timo Sirainen <tss@iki.fi>
parents:
9959
diff
changeset
|
921 if (service->config_fd != -1) { |
40a71105529b
lib-master: If config fd is kept open, close it after last connection has been created.
Timo Sirainen <tss@iki.fi>
parents:
9959
diff
changeset
|
922 if (close(service->config_fd) < 0) |
40a71105529b
lib-master: If config fd is kept open, close it after last connection has been created.
Timo Sirainen <tss@iki.fi>
parents:
9959
diff
changeset
|
923 i_error("close(master config fd) failed: %m"); |
40a71105529b
lib-master: If config fd is kept open, close it after last connection has been created.
Timo Sirainen <tss@iki.fi>
parents:
9959
diff
changeset
|
924 service->config_fd = -1; |
40a71105529b
lib-master: If config fd is kept open, close it after last connection has been created.
Timo Sirainen <tss@iki.fi>
parents:
9959
diff
changeset
|
925 } |
40a71105529b
lib-master: If config fd is kept open, close it after last connection has been created.
Timo Sirainen <tss@iki.fi>
parents:
9959
diff
changeset
|
926 } |
40a71105529b
lib-master: If config fd is kept open, close it after last connection has been created.
Timo Sirainen <tss@iki.fi>
parents:
9959
diff
changeset
|
927 |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
928 void master_service_deinit(struct master_service **_service) |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
929 { |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
930 struct master_service *service = *_service; |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
931 unsigned int i; |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
932 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
933 *_service = NULL; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
934 |
18952
4d7a83ddb644
lib-master: Added support for HAProxy protocol.
Timo Sirainen <tss@iki.fi>
parents:
18951
diff
changeset
|
935 master_service_haproxy_abort(service); |
4d7a83ddb644
lib-master: Added support for HAProxy protocol.
Timo Sirainen <tss@iki.fi>
parents:
18951
diff
changeset
|
936 |
10199
9d13e9f78d52
lib-master: Fixes to handling master-login services.
Timo Sirainen <tss@iki.fi>
parents:
10194
diff
changeset
|
937 master_service_io_listeners_remove(service); |
15931
6b0c284ecede
lib-master: If ssl settings are used, initialize ssl context automatically.
Timo Sirainen <tss@iki.fi>
parents:
15904
diff
changeset
|
938 master_service_ssl_ctx_deinit(service); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
939 |
10033
40a71105529b
lib-master: If config fd is kept open, close it after last connection has been created.
Timo Sirainen <tss@iki.fi>
parents:
9959
diff
changeset
|
940 master_service_close_config_fd(service); |
10171
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
941 if (service->to_die != NULL) |
7f0ccd367351
Handle shutdown_clients globally for all services.
Timo Sirainen <tss@iki.fi>
parents:
10147
diff
changeset
|
942 timeout_remove(&service->to_die); |
10101
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
943 if (service->to_overflow_state != NULL) |
4fe8c4382712
Redesigned how login process passes connections to mail processes and changed related APIs.
Timo Sirainen <tss@iki.fi>
parents:
10092
diff
changeset
|
944 timeout_remove(&service->to_overflow_state); |
10833
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
945 if (service->to_status != NULL) |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
946 timeout_remove(&service->to_status); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
947 if (service->io_status_error != NULL) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
948 io_remove(&service->io_status_error); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
949 if (service->io_status_write != NULL) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
950 io_remove(&service->io_status_write); |
9239
1cb45d4389d4
Binaries now take -o key=value parameters to override settings.
Timo Sirainen <tss@iki.fi>
parents:
9235
diff
changeset
|
951 if (array_is_created(&service->config_overrides)) |
1cb45d4389d4
Binaries now take -o key=value parameters to override settings.
Timo Sirainen <tss@iki.fi>
parents:
9235
diff
changeset
|
952 array_free(&service->config_overrides); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
953 |
9300 | 954 if (service->set_parser != NULL) { |
955 settings_parser_deinit(&service->set_parser); | |
956 pool_unref(&service->set_pool); | |
957 } | |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
958 lib_signals_deinit(); |
16923
5eae6c491d44
Call lib_atexit() callbacks before destroying the lib-master ioloop.
Timo Sirainen <tss@iki.fi>
parents:
16875
diff
changeset
|
959 /* run atexit callbacks before destroying ioloop */ |
5eae6c491d44
Call lib_atexit() callbacks before destroying the lib-master ioloop.
Timo Sirainen <tss@iki.fi>
parents:
16875
diff
changeset
|
960 lib_atexit_run(); |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
961 io_loop_destroy(&service->ioloop); |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
962 |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
963 for (i = 0; i < service->socket_count; i++) |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
964 i_free(service->listeners[i].name); |
9881 | 965 i_free(service->listeners); |
10119
1e63221f5c83
Moved most of getopt() handling to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
10101
diff
changeset
|
966 i_free(service->getopt_str); |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
967 i_free(service->name); |
14069
3fa544e4f26b
lib-master: Added -i parameter to read config by instance name rather than path.
Timo Sirainen <tss@iki.fi>
parents:
13969
diff
changeset
|
968 i_free(service->config_path); |
9059
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
969 i_free(service); |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
970 |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
971 lib_deinit(); |
94ecf8a8ed68
Added lib-master and mail-storage-service code that makes it easier to build new Dovecot binaries.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
972 } |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
973 |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
974 static void master_service_listen(struct master_service_listener *l) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
975 { |
9923
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
976 struct master_service *service = l->service; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
977 struct master_service_connection conn; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
978 |
9923
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
979 if (service->master_status.available_count == 0) { |
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
980 /* we are full. stop listening for now, unless overflow |
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
981 callback destroys one of the existing connections */ |
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
982 if (service->call_avail_overflow && |
11516
67b8de25154c
lib-master: Try to send master status more reliably.
Timo Sirainen <tss@iki.fi>
parents:
11458
diff
changeset
|
983 service->avail_overflow_callback != NULL) |
9923
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
984 service->avail_overflow_callback(); |
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
985 |
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
986 if (service->master_status.available_count == 0) { |
10199
9d13e9f78d52
lib-master: Fixes to handling master-login services.
Timo Sirainen <tss@iki.fi>
parents:
10194
diff
changeset
|
987 master_service_io_listeners_remove(service); |
9923
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
988 return; |
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
989 } |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
990 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
991 |
21389
59437f8764c6
global: Replaced all instances of memset(p, 0, sizeof(*p)) with the new i_zero() macro.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents:
21322
diff
changeset
|
992 i_zero(&conn); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
993 conn.listen_fd = l->fd; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
994 conn.fd = net_accept(l->fd, &conn.remote_ip, &conn.remote_port); |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
995 if (conn.fd < 0) { |
12011
565f18727209
lib-master: Fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
11897
diff
changeset
|
996 struct stat st; |
565f18727209
lib-master: Fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
11897
diff
changeset
|
997 int orig_errno = errno; |
565f18727209
lib-master: Fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
11897
diff
changeset
|
998 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
999 if (conn.fd == -1) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1000 return; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1001 |
12011
565f18727209
lib-master: Fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
11897
diff
changeset
|
1002 if (errno == ENOTSOCK) { |
565f18727209
lib-master: Fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
11897
diff
changeset
|
1003 /* it's not a socket. should be a fifo. */ |
565f18727209
lib-master: Fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
11897
diff
changeset
|
1004 } else if (errno == EINVAL && |
12278
3385e9028410
lib-master: Properly fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
12011
diff
changeset
|
1005 (fstat(l->fd, &st) == 0 && S_ISFIFO(st.st_mode))) { |
12011
565f18727209
lib-master: Fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
11897
diff
changeset
|
1006 /* BSDI fails accept(fifo) with EINVAL. */ |
565f18727209
lib-master: Fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
11897
diff
changeset
|
1007 } else { |
565f18727209
lib-master: Fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
11897
diff
changeset
|
1008 errno = orig_errno; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1009 i_error("net_accept() failed: %m"); |
14188
701709f472e9
lib-master: If accept() fails, stop listening only temporarily, not permanently.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
1010 /* try again later after one of the existing |
701709f472e9
lib-master: If accept() fails, stop listening only temporarily, not permanently.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
1011 connections has died */ |
701709f472e9
lib-master: If accept() fails, stop listening only temporarily, not permanently.
Timo Sirainen <tss@iki.fi>
parents:
14133
diff
changeset
|
1012 master_service_io_listeners_remove(service); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1013 return; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1014 } |
12011
565f18727209
lib-master: Fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
11897
diff
changeset
|
1015 /* use the "listener" as the connection fd and stop the |
565f18727209
lib-master: Fixed accepting FIFO connections with BSDI.
Timo Sirainen <tss@iki.fi>
parents:
11897
diff
changeset
|
1016 listener. */ |
9864
5b36fa967538
lib-master: Fixes to handling FIFO connections. Also expose the FIFOness to caller.
Timo Sirainen <tss@iki.fi>
parents:
9839
diff
changeset
|
1017 conn.fd = l->fd; |
9438
27dfd1f5d46b
log, lib-master: More fifo handling fixes.
Timo Sirainen <tss@iki.fi>
parents:
9437
diff
changeset
|
1018 conn.listen_fd = l->fd; |
9864
5b36fa967538
lib-master: Fixes to handling FIFO connections. Also expose the FIFOness to caller.
Timo Sirainen <tss@iki.fi>
parents:
9839
diff
changeset
|
1019 conn.fifo = TRUE; |
5b36fa967538
lib-master: Fixes to handling FIFO connections. Also expose the FIFOness to caller.
Timo Sirainen <tss@iki.fi>
parents:
9839
diff
changeset
|
1020 |
5b36fa967538
lib-master: Fixes to handling FIFO connections. Also expose the FIFOness to caller.
Timo Sirainen <tss@iki.fi>
parents:
9839
diff
changeset
|
1021 io_remove(&l->io); |
5b36fa967538
lib-master: Fixes to handling FIFO connections. Also expose the FIFOness to caller.
Timo Sirainen <tss@iki.fi>
parents:
9839
diff
changeset
|
1022 l->fd = -1; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1023 } |
9218
4a42f694b762
inet_listeners now support ssl=yes. For now only login processes support it.
Timo Sirainen <tss@iki.fi>
parents:
9214
diff
changeset
|
1024 conn.ssl = l->ssl; |
19001
acfe208a656d
lib-master: struct master_service_connection.name must never be NULL, use "" instead.
Timo Sirainen <tss@iki.fi>
parents:
18952
diff
changeset
|
1025 conn.name = master_service_get_socket_name(service, conn.listen_fd); |
18949
71f4b77c519f
lib-master: Added local and real IP addresses and ports to struct master_service_connection.
Stephan Bosch <stephan@rename-it.nl>
parents:
18948
diff
changeset
|
1026 |
71f4b77c519f
lib-master: Added local and real IP addresses and ports to struct master_service_connection.
Stephan Bosch <stephan@rename-it.nl>
parents:
18948
diff
changeset
|
1027 (void)net_getsockname(conn.fd, &conn.local_ip, &conn.local_port); |
71f4b77c519f
lib-master: Added local and real IP addresses and ports to struct master_service_connection.
Stephan Bosch <stephan@rename-it.nl>
parents:
18948
diff
changeset
|
1028 conn.real_remote_ip = conn.remote_ip; |
71f4b77c519f
lib-master: Added local and real IP addresses and ports to struct master_service_connection.
Stephan Bosch <stephan@rename-it.nl>
parents:
18948
diff
changeset
|
1029 conn.real_remote_port = conn.remote_port; |
71f4b77c519f
lib-master: Added local and real IP addresses and ports to struct master_service_connection.
Stephan Bosch <stephan@rename-it.nl>
parents:
18948
diff
changeset
|
1030 conn.real_local_ip = conn.local_ip; |
71f4b77c519f
lib-master: Added local and real IP addresses and ports to struct master_service_connection.
Stephan Bosch <stephan@rename-it.nl>
parents:
18948
diff
changeset
|
1031 conn.real_local_port = conn.local_port; |
71f4b77c519f
lib-master: Added local and real IP addresses and ports to struct master_service_connection.
Stephan Bosch <stephan@rename-it.nl>
parents:
18948
diff
changeset
|
1032 |
9268
f389f56a68a8
master services: When accepting connections, set them nonblocking.
Timo Sirainen <tss@iki.fi>
parents:
9239
diff
changeset
|
1033 net_set_nonblock(conn.fd, TRUE); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1034 |
13277
030e33bde821
lib-master: Added master_service_client_connection_created()
Timo Sirainen <tss@iki.fi>
parents:
13082
diff
changeset
|
1035 master_service_client_connection_created(service); |
18952
4d7a83ddb644
lib-master: Added support for HAProxy protocol.
Timo Sirainen <tss@iki.fi>
parents:
18951
diff
changeset
|
1036 if (l->haproxy) |
4d7a83ddb644
lib-master: Added support for HAProxy protocol.
Timo Sirainen <tss@iki.fi>
parents:
18951
diff
changeset
|
1037 master_service_haproxy_new(service, &conn); |
4d7a83ddb644
lib-master: Added support for HAProxy protocol.
Timo Sirainen <tss@iki.fi>
parents:
18951
diff
changeset
|
1038 else |
4d7a83ddb644
lib-master: Added support for HAProxy protocol.
Timo Sirainen <tss@iki.fi>
parents:
18951
diff
changeset
|
1039 master_service_client_connection_callback(service, &conn); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1040 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1041 |
9923
77228b5431e1
*-login: Fixed dropping oldest connection when reaching all limits.
Timo Sirainen <tss@iki.fi>
parents:
9912
diff
changeset
|
1042 void master_service_io_listeners_add(struct master_service *service) |
9437
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1043 { |
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1044 unsigned int i; |
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1045 |
11102
64bead0067b0
lib-master: Changed post-login process's client counting to make sense again.
Timo Sirainen <tss@iki.fi>
parents:
11086
diff
changeset
|
1046 if (service->stopping) |
10264
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
1047 return; |
7bdb5816f797
lib-master: Added master_service_stop_new_connections().
Timo Sirainen <tss@iki.fi>
parents:
10199
diff
changeset
|
1048 |
9437
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1049 for (i = 0; i < service->socket_count; i++) { |
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1050 struct master_service_listener *l = &service->listeners[i]; |
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1051 |
22075
baa85b2663b5
lib-master: Replace listeners with /dev/null in SIGQUIT instead of closing
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22027
diff
changeset
|
1052 if (l->io == NULL && l->fd != -1 && !l->closed) { |
9437
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1053 l->io = io_add(MASTER_LISTEN_FD_FIRST + i, IO_READ, |
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1054 master_service_listen, l); |
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1055 } |
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1056 } |
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1057 } |
e18fb0a361ef
lib-master: Fixed crashing on deinit when listening on fifos.
Timo Sirainen <tss@iki.fi>
parents:
9431
diff
changeset
|
1058 |
10199
9d13e9f78d52
lib-master: Fixes to handling master-login services.
Timo Sirainen <tss@iki.fi>
parents:
10194
diff
changeset
|
1059 void master_service_io_listeners_remove(struct master_service *service) |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1060 { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1061 unsigned int i; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1062 |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1063 for (i = 0; i < service->socket_count; i++) { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1064 if (service->listeners[i].io != NULL) |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1065 io_remove(&service->listeners[i].io); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1066 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1067 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1068 |
14728
983c6ff12cc9
Moved ssl_* settings from login-common to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
14674
diff
changeset
|
1069 void master_service_ssl_io_listeners_remove(struct master_service *service) |
983c6ff12cc9
Moved ssl_* settings from login-common to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
14674
diff
changeset
|
1070 { |
983c6ff12cc9
Moved ssl_* settings from login-common to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
14674
diff
changeset
|
1071 unsigned int i; |
983c6ff12cc9
Moved ssl_* settings from login-common to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
14674
diff
changeset
|
1072 |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1073 for (i = 0; i < service->socket_count; i++) { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1074 if (service->listeners[i].io != NULL && |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1075 service->listeners[i].ssl) |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1076 io_remove(&service->listeners[i].io); |
14728
983c6ff12cc9
Moved ssl_* settings from login-common to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
14674
diff
changeset
|
1077 } |
983c6ff12cc9
Moved ssl_* settings from login-common to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
14674
diff
changeset
|
1078 } |
983c6ff12cc9
Moved ssl_* settings from login-common to lib-master.
Timo Sirainen <tss@iki.fi>
parents:
14674
diff
changeset
|
1079 |
10472
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
1080 static void master_service_io_listeners_close(struct master_service *service) |
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
1081 { |
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
1082 unsigned int i; |
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
1083 |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1084 /* close via listeners. some fds might be pipes that are |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1085 currently handled as clients. we don't want to close them. */ |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1086 for (i = 0; i < service->socket_count; i++) { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1087 if (service->listeners[i].fd != -1) { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1088 if (close(service->listeners[i].fd) < 0) { |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1089 i_error("close(listener %d) failed: %m", |
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1090 service->listeners[i].fd); |
10472
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
1091 } |
18951
52368e60177c
master: Changed passing of listener settings from master to process to be more flexible.
Timo Sirainen <tss@iki.fi>
parents:
18949
diff
changeset
|
1092 service->listeners[i].fd = -1; |
10472
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
1093 } |
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
1094 } |
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
1095 } |
32949365f28d
lib-master: Close listener fds when we stop accepting more connections.
Timo Sirainen <tss@iki.fi>
parents:
10440
diff
changeset
|
1096 |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1097 static bool master_status_update_is_important(struct master_service *service) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1098 { |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1099 if (service->master_status.available_count == 0) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1100 return TRUE; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1101 if (!service->initial_status_sent) |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1102 return TRUE; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1103 return FALSE; |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1104 } |
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1105 |
18939
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1106 static void |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1107 master_status_send(struct master_service *service, bool important_update) |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1108 { |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1109 ssize_t ret; |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1110 |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1111 if (service->to_status != NULL) |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1112 timeout_remove(&service->to_status); |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1113 |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1114 ret = write(MASTER_STATUS_FD, &service->master_status, |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1115 sizeof(service->master_status)); |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1116 if (ret == sizeof(service->master_status)) { |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1117 /* success */ |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1118 if (service->io_status_write != NULL) { |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1119 /* delayed important update sent successfully */ |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1120 io_remove(&service->io_status_write); |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1121 } |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1122 service->last_sent_status_time = ioloop_time; |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1123 service->last_sent_status_avail_count = |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1124 service->master_status.available_count; |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1125 service->initial_status_sent = TRUE; |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1126 } else if (ret >= 0) { |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1127 /* shouldn't happen? */ |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1128 i_error("write(master_status_fd) returned %d", (int)ret); |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1129 service->master_status.pid = 0; |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1130 } else if (errno != EAGAIN) { |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1131 /* failure */ |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1132 if (errno != EPIPE) |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1133 i_error("write(master_status_fd) failed: %m"); |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1134 service->master_status.pid = 0; |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1135 } else if (important_update) { |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1136 /* reader is busy, but it's important to get this notification |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1137 through. send it when possible. */ |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1138 if (service->io_status_write == NULL) { |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1139 service->io_status_write = |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1140 io_add(MASTER_STATUS_FD, IO_WRITE, |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1141 master_status_update, service); |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1142 } |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1143 } |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1144 } |
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1145 |
10194
40d8df2b4111
imap, pop3: Connection counting fixes.
Timo Sirainen <tss@iki.fi>
parents:
10188
diff
changeset
|
1146 void master_status_update(struct master_service *service) |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1147 { |
10833
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1148 bool important_update; |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1149 |
12372
4d91cec713cf
lib-master: Added MASTER_SERVICE_FLAG_UPDATE_PROCTITLE for showing number of connections in ps.
Timo Sirainen <tss@iki.fi>
parents:
12348
diff
changeset
|
1150 if ((service->flags & MASTER_SERVICE_FLAG_UPDATE_PROCTITLE) != 0 && |
4d91cec713cf
lib-master: Added MASTER_SERVICE_FLAG_UPDATE_PROCTITLE for showing number of connections in ps.
Timo Sirainen <tss@iki.fi>
parents:
12348
diff
changeset
|
1151 service->set != NULL && service->set->verbose_proctitle) T_BEGIN { |
4d91cec713cf
lib-master: Added MASTER_SERVICE_FLAG_UPDATE_PROCTITLE for showing number of connections in ps.
Timo Sirainen <tss@iki.fi>
parents:
12348
diff
changeset
|
1152 unsigned int used_count = service->total_available_count - |
4d91cec713cf
lib-master: Added MASTER_SERVICE_FLAG_UPDATE_PROCTITLE for showing number of connections in ps.
Timo Sirainen <tss@iki.fi>
parents:
12348
diff
changeset
|
1153 service->master_status.available_count; |
4d91cec713cf
lib-master: Added MASTER_SERVICE_FLAG_UPDATE_PROCTITLE for showing number of connections in ps.
Timo Sirainen <tss@iki.fi>
parents:
12348
diff
changeset
|
1154 |
4d91cec713cf
lib-master: Added MASTER_SERVICE_FLAG_UPDATE_PROCTITLE for showing number of connections in ps.
Timo Sirainen <tss@iki.fi>
parents:
12348
diff
changeset
|
1155 process_title_set(t_strdup_printf("[%u connections]", |
4d91cec713cf
lib-master: Added MASTER_SERVICE_FLAG_UPDATE_PROCTITLE for showing number of connections in ps.
Timo Sirainen <tss@iki.fi>
parents:
12348
diff
changeset
|
1156 used_count)); |
4d91cec713cf
lib-master: Added MASTER_SERVICE_FLAG_UPDATE_PROCTITLE for showing number of connections in ps.
Timo Sirainen <tss@iki.fi>
parents:
12348
diff
changeset
|
1157 } T_END; |
4d91cec713cf
lib-master: Added MASTER_SERVICE_FLAG_UPDATE_PROCTITLE for showing number of connections in ps.
Timo Sirainen <tss@iki.fi>
parents:
12348
diff
changeset
|
1158 |
10833
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1159 important_update = master_status_update_is_important(service); |
11516
67b8de25154c
lib-master: Try to send master status more reliably.
Timo Sirainen <tss@iki.fi>
parents:
11458
diff
changeset
|
1160 if (service->master_status.pid == 0 || |
10833
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1161 service->master_status.available_count == |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1162 service->last_sent_status_avail_count) { |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1163 /* a) closed, b) updating to same state */ |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1164 if (service->to_status != NULL) |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1165 timeout_remove(&service->to_status); |
11516
67b8de25154c
lib-master: Try to send master status more reliably.
Timo Sirainen <tss@iki.fi>
parents:
11458
diff
changeset
|
1166 if (service->io_status_write != NULL) |
67b8de25154c
lib-master: Try to send master status more reliably.
Timo Sirainen <tss@iki.fi>
parents:
11458
diff
changeset
|
1167 io_remove(&service->io_status_write); |
10833
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1168 return; |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1169 } |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1170 if (ioloop_time == service->last_sent_status_time && |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1171 !important_update) { |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1172 /* don't spam master */ |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1173 if (service->to_status != NULL) |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1174 timeout_reset(service->to_status); |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1175 else { |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1176 service->to_status = |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1177 timeout_add(1000, master_status_update, |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1178 service); |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1179 } |
11516
67b8de25154c
lib-master: Try to send master status more reliably.
Timo Sirainen <tss@iki.fi>
parents:
11458
diff
changeset
|
1180 if (service->io_status_write != NULL) |
67b8de25154c
lib-master: Try to send master status more reliably.
Timo Sirainen <tss@iki.fi>
parents:
11458
diff
changeset
|
1181 io_remove(&service->io_status_write); |
10833
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1182 return; |
df4d4fd0db00
lib-master: Avoid sending status updates to master too often.
Timo Sirainen <tss@iki.fi>
parents:
10796
diff
changeset
|
1183 } |
18939
10df63e74ed6
lib-master: Code cleanup - split master_status_update() to two functions.
Timo Sirainen <tss@iki.fi>
parents:
18925
diff
changeset
|
1184 master_status_send(service, important_update); |
9159
6324a79d3ee1
Initial commit for v2.0 master rewrite. Several features are still missing.
Timo Sirainen <tss@iki.fi>
parents:
9066
diff
changeset
|
1185 } |
11458
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1186 |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1187 bool version_string_verify(const char *line, const char *service_name, |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1188 unsigned major_version) |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1189 { |
16022
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1190 unsigned int minor_version; |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1191 |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1192 return version_string_verify_full(line, service_name, |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1193 major_version, &minor_version); |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1194 } |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1195 |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1196 bool version_string_verify_full(const char *line, const char *service_name, |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1197 unsigned major_version, |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1198 unsigned int *minor_version_r) |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1199 { |
21322
5ab8dc1a4a6f
global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21114
diff
changeset
|
1200 size_t service_name_len = strlen(service_name); |
11458
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1201 bool ret; |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1202 |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1203 if (strncmp(line, "VERSION\t", 8) != 0) |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1204 return FALSE; |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1205 line += 8; |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1206 |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1207 if (strncmp(line, service_name, service_name_len) != 0 || |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1208 line[service_name_len] != '\t') |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1209 return FALSE; |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1210 line += service_name_len + 1; |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1211 |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1212 T_BEGIN { |
16022
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1213 const char *p = strchr(line, '\t'); |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1214 |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1215 if (p == NULL) |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1216 ret = FALSE; |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1217 else { |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1218 ret = str_uint_equals(t_strdup_until(line, p), |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1219 major_version); |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1220 if (str_to_uint(p+1, minor_version_r) < 0) |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1221 ret = FALSE; |
9a8eaf97559d
lib-master: Added version_string_verify_full()
Timo Sirainen <tss@iki.fi>
parents:
15962
diff
changeset
|
1222 } |
11458
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1223 } T_END; |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1224 return ret; |
4274d1549fa0
Added version_string_verify() and removed code duplication with it.
Timo Sirainen <tss@iki.fi>
parents:
11388
diff
changeset
|
1225 } |