diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-12-13 22:30:44 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-12-13 22:31:08 +0100 |
commit | 45c5b47b96a238c764c2d32966267f7f897bcc3d (patch) | |
tree | 178b38364658d1d2f948ddc3a18bc99ec9b269c1 | |
parent | ccc2678b0d43dd2c265502805312710b3f5d5459 (diff) | |
download | guix-45c5b47b96a238c764c2d32966267f7f897bcc3d.tar.gz |
activation: Copy the account skeletons when creating the 'root' account.
* gnu/build/activation.scm (%skeleton-directory): New variable. (dot-or-dot-dot?, copy-account-skeletons): New procedure. (add-user): Use 'copy-account-skeletons'. (activate-etc): Use 'dot-or-dot-dot?'.
-rw-r--r-- | gnu/build/activation.scm | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm index c27cda3666..dfadde326c 100644 --- a/gnu/build/activation.scm +++ b/gnu/build/activation.scm @@ -50,6 +50,25 @@ ,name))) (zero? (apply system* "groupadd" args)))) +(define %skeleton-directory + ;; Directory containing skeleton files for new accounts. + ;; Note: keep the trailing '/' so that 'scandir' enters it. + "/etc/skel/") + +(define (dot-or-dot-dot? file) + (member file '("." ".."))) + +(define* (copy-account-skeletons home + #:optional (directory %skeleton-directory)) + "Copy the account skeletons from DIRECTORY to HOME." + (let ((files (scandir directory (negate dot-or-dot-dot?) + string<?))) + (mkdir-p home) + (for-each (lambda (file) + (copy-file (string-append directory "/" file) + (string-append home "/" file))) + files))) + (define* (add-user name group #:key uid comment home shell password system? (supplementary-groups '()) @@ -70,6 +89,7 @@ properties. Return #t on success." (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")) #t) ;; Use 'useradd' from the Shadow package. @@ -198,9 +218,7 @@ numeric gid or #f." ;; XXX: Dirty hack to meet sudo's expectations. (when (string=? (basename target) "sudoers") (chmod target #o440)))) - (scandir etc - (lambda (file) - (not (member file '("." "..")))) + (scandir etc (negate dot-or-dot-dot?) ;; The default is 'string-locale<?', but we don't have ;; it when run from the initrd's statically-linked |