Mercurial > dovecot > core-2.2
changeset 10915:7fd91455b66e HEAD
master: login dir was created with wrong group.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 16 Mar 2010 14:39:02 +0200 |
parents | 31184f3d868b |
children | 1630026e8803 |
files | src/master/master-settings.c src/master/service.c |
diffstat | 2 files changed, 26 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- 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); }
--- 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)