AboutSummaryRefsLogTreeCommitDiffStats
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2021-08-09 10:37:07 -0400
committerDale Mellor <mcron-lsfnyl@rdmp.org>2021-12-30 04:00:11 +0000
commit8b27157f579611666019c3ed517d3f6bc265f394 (patch)
tree2f0fd747ca260620604cf013c81218714df71727
parent271b1f21fa32493eb24dd207b45c84d4dc97a16e (diff)
downloadmcron-8b27157f579611666019c3ed517d3f6bc265f394.tar.gz
mcron-8b27157f579611666019c3ed517d3f6bc265f394.tar.bz2
mcron-8b27157f579611666019c3ed517d3f6bc265f394.zip
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.
-rw-r--r--src/mcron/base.scm12
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)))
(λ ()