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

Reply via email to