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?'.
This commit is contained in:
		
							parent
							
								
									ccc2678b0d
								
							
						
					
					
						commit
						45c5b47b96
					
				
					 1 changed files with 21 additions and 3 deletions
				
			
		|  | @ -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 | ||||
|  |  | |||
		Reference in a new issue