~ruther/guix-local

41db5a756369f5b14d1e67a523ee0940cad56744 — Ludovic Courtès 8 years ago 151cb97
activation: Change permissions on /root to #o700.

Reported by Alex Griffin <a@ajgrf.com>.
Fixes <http://bugs.gnu.org/27135>.

* gnu/build/activation.scm (add-user): When UID is zero, add 'chmod'
call.
* gnu/tests/base.scm (run-basic-test)["permissions on /root"]: New test.
2 files changed, 12 insertions(+), 2 deletions(-)

M gnu/build/activation.scm
M gnu/tests/base.scm
M gnu/build/activation.scm => gnu/build/activation.scm +3 -2
@@ 130,14 130,15 @@ properties.  Return #t on success."
      ;; 'useradd' fails with "Cannot determine your user name" if the root
      ;; account doesn't exist.  Thus, for bootstrapping purposes, create that
      ;; one manually.
      (begin
      (let ((home (or home "/root")))
        (call-with-output-file "/etc/shadow"
          (cut format <> "~a::::::::~%" name))
        (call-with-output-file "/etc/passwd"
          (cut format <> "~a:x:~a:~a:~a:~a:~a~%"
               name "0" "0" comment home shell))
        (chmod "/etc/shadow" #o600)
        (copy-account-skeletons (or home "/root"))
        (copy-account-skeletons home)
        (chmod home #o700)
        #t)

      ;; Use 'useradd' from the Shadow package.

M gnu/tests/base.scm => gnu/tests/base.scm +9 -0
@@ 199,6 199,15 @@ info --version")
                         ',users+homes))
               marionette)))

          (test-equal "permissions on /root"
            #o700
            (let ((root-home #$(any (lambda (account)
                                      (and (zero? (user-account-uid account))
                                           (user-account-home-directory
                                            account)))
                                    (operating-system-user-accounts os))))
              (stat:perms (marionette-eval `(stat ,root-home) marionette))))

          (test-equal "no extra home directories"
            '()