From: Timo Sirainen Date: Tue, 13 Jan 2009 18:12:21 +0000 (-0500) Subject: Always send LOGIN_DIR environment to login processes. X-Git-Tag: 1.2.beta1~123 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=555ed72a50b5d655f808a5f7fe7b8eb68c9a4ab3;p=thirdparty%2Fdovecot%2Fcore.git Always send LOGIN_DIR environment to login processes. --HG-- branch : HEAD --- diff --git a/src/login-common/main.c b/src/login-common/main.c index 7ef360567c..62ae015046 100644 --- a/src/login-common/main.c +++ b/src/login-common/main.c @@ -264,10 +264,10 @@ static void drop_privileges(void) /* if we don't chroot, we must chdir */ value = getenv("LOGIN_DIR"); - if (value != NULL) { - if (chdir(value) < 0) - i_error("chdir(%s) failed: %m", value); - } + if (value == NULL) + i_fatal("LOGIN_DIR environment missing"); + if (chdir(value) < 0) + i_error("chdir(%s) failed: %m", value); } /* Initialize SSL proxy so it can read certificate and private diff --git a/src/master/login-process.c b/src/master/login-process.c index b8751a1025..8971d12751 100644 --- a/src/master/login-process.c +++ b/src/master/login-process.c @@ -617,6 +617,7 @@ static void login_process_init_env(struct login_group *group, pid_t pid) env_put(t_strconcat("TRUSTED_NETWORKS=", set->login_trusted_networks, NULL)); } + env_put(t_strconcat("LOGIN_DIR=", set->login_dir, NULL)); } static pid_t create_login_process(struct login_group *group) @@ -714,14 +715,6 @@ static pid_t create_login_process(struct login_group *group) env_put(t_strdup_printf("LISTEN_FDS=%u", listen_count)); env_put(t_strdup_printf("SSL_LISTEN_FDS=%u", ssl_listen_count)); - if (!group->set->login_chroot) { - /* no chrooting, but still change to the directory */ - if (chdir(group->set->login_dir) < 0) { - i_fatal("chdir(%s) failed: %m", - group->set->login_dir); - } - } - restrict_process_size(group->set->login_process_size, (unsigned int)-1); /* make sure we don't leak syslog fd, but do it last so that @@ -892,16 +885,6 @@ static int login_process_send_env(struct login_process *p) } } - if (!p->group->set->login_chroot) { - /* if we're not chrooting, we need to tell login process - where its base directory is */ - const char *str = t_strdup_printf("LOGIN_DIR=%s\n", - p->group->set->login_dir); - len = strlen(str); - if (o_stream_send(p->output, str, len) != len) - ret = -1; - } - if (ret == 0 && o_stream_send(p->output, "\n", 1) != 1) ret = -1;