dovecot-2.0: master: Allow unix_listeners to also have user=$def...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Mar 14 15:30:29 EET 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/1e333d2918f1
changeset: 10909:1e333d2918f1
user: Timo Sirainen <tss at iki.fi>
date: Sun Mar 14 15:27:23 2010 +0200
description:
master: Allow unix_listeners to also have user=$default_*_user
diffstat:
src/master/service.c | 31 +++++++++++++++++++------------
1 files changed, 19 insertions(+), 12 deletions(-)
diffs (63 lines):
diff -r 4ca5dfd58d47 -r 1e333d2918f1 src/master/service.c
--- a/src/master/service.c Sun Mar 14 15:09:14 2010 +0200
+++ b/src/master/service.c Sun Mar 14 15:27:23 2010 +0200
@@ -31,6 +31,20 @@
va_end(args);
}
+static int
+get_uidgid_expanded(const char *user, const struct master_settings *set,
+ uid_t *uid_r, gid_t *gid_r, const char **error_r)
+{
+ /* $variable expansion is typically done by doveconf, but these
+ variables can come from built-in settings, so we need to expand
+ them here */
+ if (strcmp(user, "$default_internal_user") == 0)
+ user = set->default_internal_user;
+ else if (strcmp(user, "$default_login_user") == 0)
+ user = set->default_login_user;
+ return get_uidgid(user, uid_r, gid_r, error_r);
+}
+
static struct service_listener *
service_create_file_listener(struct service *service,
enum service_listener_type type,
@@ -46,7 +60,8 @@
l->fd = -1;
l->set.fileset.set = set;
- if (get_uidgid(set->user, &l->set.fileset.uid, &gid, error_r) < 0)
+ if (get_uidgid_expanded(set->user, service->set->master_set,
+ &l->set.fileset.uid, &gid, error_r) < 0)
return NULL;
if (get_gid(set->group, &l->set.fileset.gid, error_r) < 0)
return NULL;
@@ -166,7 +181,7 @@
struct inet_listener_settings *const *inet_listeners;
struct service *service;
struct service_listener *l;
- const char *user, *const *tmp;
+ const char *const *tmp;
string_t *str;
unsigned int i, unix_count, fifo_count, inet_count;
@@ -200,17 +215,9 @@
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(user, &service->uid, &service->gid, error_r) < 0)
+ if (get_uidgid_expanded(set->user, set->master_set, &service->uid,
+ &service->gid, error_r) < 0)
return NULL;
if (*set->group != '\0') {
if (get_gid(set->group, &service->gid, error_r) < 0)
More information about the dovecot-cvs
mailing list