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