core: don't fail to run services in --user instances if $HOME is missing

Otherwise we cannot even invoke systemd-exit.service anymore, thus not
even exit.

https://bugs.freedesktop.org/show_bug.cgi?id=83100
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=759320
This commit is contained in:
Lennart Poettering
2015-02-12 12:21:16 +01:00
parent a38d99451f
commit 4c08c8242a
3 changed files with 7 additions and 1 deletions
+2 -1
View File
@@ -1617,7 +1617,8 @@ static int exec_child(
return -errno;
}
if (chdir(context->working_directory ? context->working_directory : "/") < 0) {
if (chdir(context->working_directory ?: "/") < 0 &&
!context->working_directory_missing_ok) {
*exit_status = EXIT_CHDIR;
return -errno;
}
+1
View File
@@ -99,6 +99,7 @@ struct ExecContext {
struct rlimit *rlimit[_RLIMIT_MAX];
char *working_directory, *root_directory;
bool working_directory_missing_ok;
mode_t umask;
int oom_score_adjust;
+4
View File
@@ -3178,6 +3178,10 @@ int unit_patch_contexts(Unit *u) {
r = get_home_dir(&ec->working_directory);
if (r < 0)
return r;
/* Allow user services to run, even if the
* home directory is missing */
ec->working_directory_missing_ok = true;
}
if (u->manager->running_as == SYSTEMD_USER &&