From 8b27157f579611666019c3ed517d3f6bc265f394 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Mon, 9 Aug 2021 10:37:07 -0400 Subject: base: Handle nonexistent user home directories. This is useful for running jobs as the "nobody" user, for example. * src/mcron/base.scm (run-job): Catch the ENOENT (2, "No such file or directory") error when attempting to change directory to the user home directory. --- src/mcron/base.scm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/mcron/base.scm') diff --git a/src/mcron/base.scm b/src/mcron/base.scm index f7b727d..037a9b7 100644 --- a/src/mcron/base.scm +++ b/src/mcron/base.scm @@ -182,7 +182,17 @@ next value." (λ () (setgid (passwd:gid (job:user job))) (setuid (passwd:uid (job:user job))) - (chdir (passwd:dir (job:user job))) + ;; Handle the case where the home directory points to a nonexistent + ;; location, as can be the case when running the job as the "nobody" + ;; user. + (catch 'system-error + (lambda () + (chdir (passwd:dir (job:user job)))) + (lambda args + (let ((errno (system-error-errno args))) + (cond + ((= ENOENT errno) (chdir "/")) + (else (throw 'system-error args)))))) (modify-environment (job:environment job) (job:user job)) ((job:action job))) (λ () -- cgit v1.2.3