dovecot-2.0: master: login dir was created with wrong group.

dovecot at dovecot.org dovecot at dovecot.org
Tue Mar 16 14:39:05 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/7fd91455b66e
changeset: 10915:7fd91455b66e
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Mar 16 14:39:02 2010 +0200
description:
master: login dir was created with wrong group.

diffstat:

 src/master/master-settings.c |  32 ++++++++++++++++++++++++--------
 src/master/service.c         |  20 ++------------------
 2 files changed, 26 insertions(+), 26 deletions(-)

diffs (112 lines):

diff -r 31184f3d868b -r 7fd91455b66e src/master/master-settings.c
--- a/src/master/master-settings.c	Tue Mar 16 14:33:40 2010 +0200
+++ b/src/master/master-settings.c	Tue Mar 16 14:39:02 2010 +0200
@@ -234,12 +234,25 @@
 };
 
 /* <settings checks> */
-static void fix_file_listener_paths(ARRAY_TYPE(file_listener_settings) *l,
-				    pool_t pool, const char *base_dir,
-				    ARRAY_TYPE(const_string) *all_listeners)
+static void
+expand_user(const char **user, const struct master_settings *set)
+{
+	/* $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;
+}
+
+static void
+fix_file_listener_paths(ARRAY_TYPE(file_listener_settings) *l,
+			pool_t pool, const struct master_settings *master_set,
+			ARRAY_TYPE(const_string) *all_listeners)
 {
 	struct file_listener_settings *const *sets;
-	unsigned int base_dir_len = strlen(base_dir);
+	unsigned int base_dir_len = strlen(master_set->base_dir);
 
 	if (!array_is_created(l))
 		return;
@@ -247,10 +260,12 @@
 	array_foreach(l, sets) {
 		struct file_listener_settings *set = *sets;
 
+		expand_user(&set->user, master_set);
 		if (*set->path != '/') {
-			set->path = p_strconcat(pool, base_dir, "/",
+			set->path = p_strconcat(pool, master_set->base_dir, "/",
 						set->path, NULL);
-		} else if (strncmp(set->path, base_dir, base_dir_len) == 0 &&
+		} else if (strncmp(set->path, master_set->base_dir,
+				   base_dir_len) == 0 &&
 			   set->path[base_dir_len] == '/') {
 			i_warning("You should remove base_dir prefix from "
 				  "unix_listener: %s", set->path);
@@ -372,6 +387,7 @@
 				return FALSE;
 			}
 		}
+		expand_user(&service->user, set);
 		service_set_login_dump_core(service);
 	}
 
@@ -411,9 +427,9 @@
 			return FALSE;
 		}
 		fix_file_listener_paths(&service->unix_listeners,
-					pool, set->base_dir, &all_listeners);
+					pool, set, &all_listeners);
 		fix_file_listener_paths(&service->fifo_listeners,
-					pool, set->base_dir, &all_listeners);
+					pool, set, &all_listeners);
 		add_inet_listeners(&service->inet_listeners, &all_listeners);
 	}
 
diff -r 31184f3d868b -r 7fd91455b66e src/master/service.c
--- a/src/master/service.c	Tue Mar 16 14:33:40 2010 +0200
+++ b/src/master/service.c	Tue Mar 16 14:39:02 2010 +0200
@@ -31,20 +31,6 @@
 	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,
@@ -60,8 +46,7 @@
 	l->fd = -1;
 	l->set.fileset.set = set;
 
-	if (get_uidgid_expanded(set->user, service->set->master_set,
-				&l->set.fileset.uid, &gid, error_r) < 0)
+	if (get_uidgid(set->user, &l->set.fileset.uid, &gid, error_r) < 0)
 		return NULL;
 	if (get_gid(set->group, &l->set.fileset.gid, error_r) < 0)
 		return NULL;
@@ -216,8 +201,7 @@
 	}
 
 	/* default gid to user's primary group */
-	if (get_uidgid_expanded(set->user, set->master_set, &service->uid,
-				&service->gid, error_r) < 0)
+	if (get_uidgid(set->user, &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