guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: services: user-homes: Do not create home directories marked as no


From: Ludovic Courtès
Subject: 01/01: services: user-homes: Do not create home directories marked as no-create.
Date: Thu, 18 May 2017 04:57:42 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit 41f76ae08a7a830cdeb1eaac271d714cb58fbce3
Author: Ludovic Courtès <address@hidden>
Date:   Thu May 18 10:08:55 2017 +0200

    services: user-homes: Do not create home directories marked as no-create.
    
    Fixes a bug whereby GuixSD would create the /nonexistent directory, from
    user 'nobody', even though it has 'create-home-directory?' set to #f.
    
    * gnu/build/activation.scm (activate-users+groups): Add comment for
    \#:create-home?.
    (activate-user-home)[ensure-user-home]: Skip when CREATE-HOME? is #f or
    SYSTEM? is #t.
    * gnu/tests/base.scm (run-basic-test)["no extra home directories"]: New
    tests.
---
 gnu/build/activation.scm |  9 ++++++++-
 gnu/tests/base.scm       | 22 ++++++++++++++++++++++
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm
index beee56d..a1d2a9c 100644
--- a/gnu/build/activation.scm
+++ b/gnu/build/activation.scm
@@ -227,7 +227,11 @@ numeric gid or #f."
                      #:supplementary-groups supplementary-groups
                      #:comment comment
                      #:home home
+
+                     ;; Home directories of non-system accounts are created by
+                     ;; 'activate-user-home'.
                      #:create-home? (and create-home? system?)
+
                      #:shell shell
                      #:password password)
 
@@ -282,7 +286,10 @@ they already exist."
     (match-lambda
       ((name uid group supplementary-groups comment home create-home?
              shell password system?)
-       (unless (or (not home) (directory-exists? home))
+       ;; The home directories of system accounts are created during
+       ;; activation, not here.
+       (unless (or (not home) (not create-home?) system?
+                   (directory-exists? home))
          (let* ((pw  (getpwnam name))
                 (uid (passwd:uid pw))
                 (gid (passwd:gid pw)))
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index 37aab8e..e5ac320 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -199,6 +199,28 @@ info --version")
                          ',users+homes))
                marionette)))
 
+          (test-equal "no extra home directories"
+            '()
+
+            ;; Make sure the home directories that are not supposed to be
+            ;; created are indeed not created.
+            (let ((nonexistent
+                   '#$(filter-map (lambda (user)
+                                    (and (not
+                                          (user-account-create-home-directory?
+                                           user))
+                                         (user-account-home-directory user)))
+                                  (operating-system-user-accounts os))))
+              (marionette-eval
+               `(begin
+                  (use-modules (srfi srfi-1))
+
+                  ;; Note: Do not flag "/var/empty".
+                  (filter file-exists?
+                          ',(remove (cut string-prefix? "/var/" <>)
+                                    nonexistent)))
+               marionette)))
+
           (test-equal "login on tty1"
             "root\n"
             (begin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]