dovecot-2.0: Fail at startup if process_limit>1 for services tha...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Sep 23 21:25:25 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/ce75971127a2
changeset: 12166:ce75971127a2
user: Timo Sirainen <tss at iki.fi>
date: Thu Sep 23 19:25:22 2010 +0100
description:
Fail at startup if process_limit>1 for services that don't support it.
diffstat:
src/anvil/anvil-settings.c | 4 +++-
src/auth/auth-settings.c | 4 +++-
src/director/director-settings.c | 4 +++-
src/lib-master/service-settings.h | 5 +++++
src/log/log-settings.c | 4 +++-
src/master/master-settings.c | 29 +++++++++++++++++++++++++++++
6 files changed, 46 insertions(+), 4 deletions(-)
diffs (118 lines):
diff -r acd30d4601f9 -r ce75971127a2 src/anvil/anvil-settings.c
--- a/src/anvil/anvil-settings.c Thu Sep 23 19:00:31 2010 +0100
+++ b/src/anvil/anvil-settings.c Thu Sep 23 19:25:22 2010 +0100
@@ -44,5 +44,7 @@
.unix_listeners = { { &anvil_unix_listeners_buf,
sizeof(anvil_unix_listeners[0]) } },
.fifo_listeners = ARRAY_INIT,
- .inet_listeners = ARRAY_INIT
+ .inet_listeners = ARRAY_INIT,
+
+ .process_limit_1 = TRUE
};
diff -r acd30d4601f9 -r ce75971127a2 src/auth/auth-settings.c
--- a/src/auth/auth-settings.c Thu Sep 23 19:00:31 2010 +0100
+++ b/src/auth/auth-settings.c Thu Sep 23 19:25:22 2010 +0100
@@ -57,7 +57,9 @@
.unix_listeners = { { &auth_unix_listeners_buf,
sizeof(auth_unix_listeners[0]) } },
.fifo_listeners = ARRAY_INIT,
- .inet_listeners = ARRAY_INIT
+ .inet_listeners = ARRAY_INIT,
+
+ .process_limit_1 = TRUE
};
/* <settings checks> */
diff -r acd30d4601f9 -r ce75971127a2 src/director/director-settings.c
--- a/src/director/director-settings.c Thu Sep 23 19:00:31 2010 +0100
+++ b/src/director/director-settings.c Thu Sep 23 19:25:22 2010 +0100
@@ -55,7 +55,9 @@
sizeof(director_unix_listeners[0]) } },
.fifo_listeners = { { &director_fifo_listeners_buf,
sizeof(director_fifo_listeners[0]) } },
- .inet_listeners = ARRAY_INIT
+ .inet_listeners = ARRAY_INIT,
+
+ .process_limit_1 = TRUE
};
#undef DEF
#define DEF(type, name) \
diff -r acd30d4601f9 -r ce75971127a2 src/lib-master/service-settings.h
--- a/src/lib-master/service-settings.h Thu Sep 23 19:00:31 2010 +0100
+++ b/src/lib-master/service-settings.h Thu Sep 23 19:25:22 2010 +0100
@@ -63,6 +63,11 @@
enum service_type parsed_type;
enum service_user_default user_default;
unsigned int login_dump_core:1;
+
+ /* -- flags that can be set internally -- */
+
+ /* process_limit must not be higher than 1 */
+ unsigned int process_limit_1:1;
};
ARRAY_DEFINE_TYPE(service_settings, struct service_settings *);
diff -r acd30d4601f9 -r ce75971127a2 src/log/log-settings.c
--- a/src/log/log-settings.c Thu Sep 23 19:00:31 2010 +0100
+++ b/src/log/log-settings.c Thu Sep 23 19:25:22 2010 +0100
@@ -28,6 +28,8 @@
.unix_listeners = ARRAY_INIT,
.fifo_listeners = ARRAY_INIT,
- .inet_listeners = ARRAY_INIT
+ .inet_listeners = ARRAY_INIT,
+
+ .process_limit_1 = TRUE
};
diff -r acd30d4601f9 -r ce75971127a2 src/master/master-settings.c
--- a/src/master/master-settings.c Thu Sep 23 19:00:31 2010 +0100
+++ b/src/master/master-settings.c Thu Sep 23 19:25:22 2010 +0100
@@ -354,10 +354,28 @@
return FALSE;
}
+#ifdef CONFIG_BINARY
+static const struct service_settings *
+master_default_settings_get_service(const char *name)
+{
+ extern struct master_settings master_default_settings;
+ struct service_settings *const *setp;
+
+ array_foreach(&master_default_settings.services, setp) {
+ if (strcmp((*setp)->name, name) == 0)
+ return *setp;
+ }
+ return NULL;
+}
+#endif
+
static bool
master_settings_verify(void *_set, pool_t pool, const char **error_r)
{
static int warned_auth = FALSE;
+#ifdef CONFIG_BINARY
+ const struct service_settings *default_service;
+#endif
struct master_settings *set = _set;
struct service_settings *const *services;
const char *const *strings;
@@ -466,6 +484,17 @@
return FALSE;
}
+#ifdef CONFIG_BINARY
+ default_service =
+ master_default_settings_get_service(service->name);
+ if (default_service != NULL &&
+ default_service->process_limit_1 && process_limit > 1) {
+ *error_r = t_strdup_printf("service(%s): "
+ "process_limit must be 1", service->name);
+ return FALSE;
+ }
+#endif
+
if (strcmp(service->name, "auth") == 0) {
auth_client_limit = service->client_limit != 0 ?
service->client_limit :
More information about the dovecot-cvs
mailing list