From 51fe9cd38d4d64b5fade8a899d5323da0e217d5c Mon Sep 17 00:00:00 2001
From: Ludovic Courtès <ludo@gnu.org>
Date: Thu, 18 May 2017 10:08:55 +0200
Subject: 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 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

(limited to 'gnu/build')

diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm
index beee56d437..a1d2a9cc7d 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)))
-- 
cgit 1.4.1