diff options
Diffstat (limited to 'src/mcron')
-rw-r--r-- | src/mcron/base.scm | 12 |
1 files changed, 11 insertions, 1 deletions
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))) (λ () |