civodul pushed a commit to branch devel
in repository shepherd.
commit b759b70f6a57a39ae8a1d0167e22ebff307c3fee
Author: Ludovic Courtès <[email protected]>
AuthorDate: Thu Oct 31 10:39:09 2024 +0100
timer: Set ‘HOME’ when running as a different user.
* modules/shepherd/service/timer.scm
(timer-arguments->calendar-event+command):
Set ‘HOME’ environment variable when USER is true.
* tests/services/timer-events.scm ("timer-arguments->calendar-event,
\"as\""):
Adjust accordingly.
---
modules/shepherd/service/timer.scm | 23 ++++++++++++++---------
tests/services/timer-events.scm | 6 +++++-
2 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/modules/shepherd/service/timer.scm
b/modules/shepherd/service/timer.scm
index 28dbf73..2bac299 100644
--- a/modules/shepherd/service/timer.scm
+++ b/modules/shepherd/service/timer.scm
@@ -876,15 +876,20 @@ first occurrence of that event. Raise an error if
@var{spec} is invalid."
(invalid-argument (l10n "Timer spec lacks 'at TIME'.")))
(unless (pair? arguments)
(invalid-argument (l10n "Timer spec lacks a command to run.")))
- (values event
- (command arguments
- #:user user
- #:group (and=> user user-group)
- ;; FIXME: Should set #:supplementary-groups as
- ;; returned by 'getgrouplist' for USER.
- #:directory
- (or (and=> user user-home)
- (default-service-directory)))))
+ (let ((home (and=> user user-home)))
+ (values event
+ (command arguments
+ #:user user
+ #:group (and=> user user-group)
+ ;; FIXME: Should set #:supplementary-groups as
+ ;; returned by 'getgrouplist' for USER.
+ #:directory
+ (or home (default-service-directory))
+ #:environment-variables
+ (if home
+ (cons (string-append "HOME=" home)
+ (default-environment-variables))
+ (default-environment-variables))))))
(("at" time-spec rest ...)
(loop rest (string->calendar-event time-spec) user arguments))
(("as" user rest ...)
diff --git a/tests/services/timer-events.scm b/tests/services/timer-events.scm
index e373a18..482a9ef 100644
--- a/tests/services/timer-events.scm
+++ b/tests/services/timer-events.scm
@@ -17,6 +17,7 @@
;; along with the GNU Shepherd. If not, see <http://www.gnu.org/licenses/>.
(define-module (test-timer)
+ #:use-module ((shepherd service) #:select (default-environment-variables))
#:use-module (shepherd service timer)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-19)
@@ -245,7 +246,10 @@ invalid ~a field"
(command '("echo" "hello")
#:user (passwd:name me)
#:group (group:name (getgrgid (passwd:gid me)))
- #:directory (passwd:dir me))))
+ #:directory (passwd:dir me)
+ #:environment-variables
+ (cons (string-append "HOME=" (passwd:dir me))
+ (default-environment-variables)))))
(call-with-values
(lambda ()
(timer-arguments->calendar-event+command