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