From: Timo Sirainen Date: Sat, 13 Feb 2010 06:08:57 +0000 (+0200) Subject: Added default_internal_user and default_login_user settings, which services use as... X-Git-Tag: 2.0.beta3~93 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b00adcd8d0ce70e855582c2ec64069aef4063293;p=thirdparty%2Fdovecot%2Fcore.git Added default_internal_user and default_login_user settings, which services use as default users. --HG-- branch : HEAD --- diff --git a/doc/example-config/conf.d/master.conf b/doc/example-config/conf.d/master.conf index 2d7e2590a0..dd6a72ad50 100644 --- a/doc/example-config/conf.d/master.conf +++ b/doc/example-config/conf.d/master.conf @@ -2,6 +2,9 @@ #default_client_limit = 1000 #default_vsz_limit = 256M +#default_login_user = dovecot +#default_internal_user = dovecot + service imap-login { inet_listener imap { #port = 143 diff --git a/src/anvil/anvil-settings.c b/src/anvil/anvil-settings.c index 501e71bb1b..f28d6b7186 100644 --- a/src/anvil/anvil-settings.c +++ b/src/anvil/anvil-settings.c @@ -26,7 +26,7 @@ struct service_settings anvil_service_settings = { .protocol = "", .type = "anvil", .executable = "anvil", - .user = "dovecot", + .user = "$default_internal_user", .group = "", .privileged_group = "", .extra_groups = "", diff --git a/src/dict/dict-settings.c b/src/dict/dict-settings.c index ae7696ede8..0f9e8a28fe 100644 --- a/src/dict/dict-settings.c +++ b/src/dict/dict-settings.c @@ -23,7 +23,7 @@ struct service_settings dict_service_settings = { .protocol = "", .type = "", .executable = "dict", - .user = "dovecot", + .user = "$default_internal_user", .group = "", .privileged_group = "", .extra_groups = "", diff --git a/src/dns/dns-client-settings.c b/src/dns/dns-client-settings.c index 87ecb7a2e0..89db9c0018 100644 --- a/src/dns/dns-client-settings.c +++ b/src/dns/dns-client-settings.c @@ -26,7 +26,7 @@ struct service_settings dns_client_service_settings = { .protocol = "", .type = "", .executable = "dns-client", - .user = "dovecot", + .user = "$default_internal_user", .group = "", .privileged_group = "", .extra_groups = "", diff --git a/src/imap-login/imap-login-settings.c b/src/imap-login/imap-login-settings.c index 8fb20e9a61..d1469608e1 100644 --- a/src/imap-login/imap-login-settings.c +++ b/src/imap-login/imap-login-settings.c @@ -28,7 +28,7 @@ struct service_settings imap_login_service_settings = { .protocol = "imap", .type = "login", .executable = "imap-login", - .user = "dovecot", + .user = "$default_login_user", .group = "", .privileged_group = "", .extra_groups = "", diff --git a/src/master/master-settings.c b/src/master/master-settings.c index b632d98e85..6700339f56 100644 --- a/src/master/master-settings.c +++ b/src/master/master-settings.c @@ -171,6 +171,8 @@ static const struct setting_define master_setting_defines[] = { DEF(SET_STR, protocols), DEF(SET_STR, listen), DEF(SET_ENUM, ssl), + DEF(SET_STR, default_internal_user), + DEF(SET_STR, default_login_user), DEF(SET_UINT, default_process_limit), DEF(SET_UINT, default_client_limit), DEF(SET_SIZE, default_vsz_limit), @@ -195,6 +197,8 @@ static const struct master_settings master_default_settings = { .protocols = "imap pop3 lmtp", .listen = "*, ::", .ssl = "yes:no:required", + .default_internal_user = "dovecot", + .default_login_user = "dovecot", .default_process_limit = 100, .default_client_limit = 1000, .default_vsz_limit = 256*1024*1024, diff --git a/src/master/master-settings.h b/src/master/master-settings.h index 9e325c6ad5..b899e99475 100644 --- a/src/master/master-settings.h +++ b/src/master/master-settings.h @@ -9,6 +9,8 @@ struct master_settings { const char *protocols; const char *listen; const char *ssl; + const char *default_internal_user; + const char *default_login_user; unsigned int default_process_limit; unsigned int default_client_limit; uoff_t default_vsz_limit; diff --git a/src/master/service.c b/src/master/service.c index c95069bf2b..aa4a41f9c9 100644 --- a/src/master/service.c +++ b/src/master/service.c @@ -168,7 +168,7 @@ service_create(pool_t pool, const struct service_settings *set, struct inet_listener_settings *const *inet_listeners; struct service *service; struct service_listener *l; - const char *const *tmp; + const char *user, *const *tmp; string_t *str; unsigned int i, unix_count, fifo_count, inet_count; @@ -202,8 +202,17 @@ service_create(pool_t pool, const struct service_settings *set, return NULL; } + /* $variable expansion is typically done by doveconf, but these + variables can come from built-in settings, so we need to expand + them here */ + user = set->user; + if (strcmp(user, "$default_internal_user") == 0) + user = set->master_set->default_internal_user; + else if (strcmp(user, "$default_login_user") == 0) + user = set->master_set->default_login_user; + /* default gid to user's primary group */ - if (get_uidgid(set->user, &service->uid, &service->gid, error_r) < 0) + if (get_uidgid(user, &service->uid, &service->gid, error_r) < 0) return NULL; if (*set->group != '\0') { if (get_gid(set->group, &service->gid, error_r) < 0) diff --git a/src/pop3-login/pop3-login-settings.c b/src/pop3-login/pop3-login-settings.c index 220278b65b..3ae9513eb9 100644 --- a/src/pop3-login/pop3-login-settings.c +++ b/src/pop3-login/pop3-login-settings.c @@ -28,7 +28,7 @@ struct service_settings pop3_login_service_settings = { .protocol = "pop3", .type = "login", .executable = "pop3-login", - .user = "dovecot", + .user = "$default_login_user", .group = "", .privileged_group = "", .extra_groups = "", diff --git a/src/util/tcpwrap-settings.c b/src/util/tcpwrap-settings.c index 9bb62b394c..f22724459e 100644 --- a/src/util/tcpwrap-settings.c +++ b/src/util/tcpwrap-settings.c @@ -12,7 +12,7 @@ struct service_settings tcpwrap_service_settings = { .protocol = "", .type = "", .executable = "tcpwrap", - .user = "dovecot", + .user = "$default_internal_user", .group = "", .privileged_group = "", .extra_groups = "",