From 16a0e9dc3449fb9de699486ad6db2c0bc62b616b Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 26 Sep 2013 22:02:02 +0200 Subject: gnu: shadow: Add record type for user groups. * gnu/system/shadow.scm (): New record type. (group-file): New procedure. * gnu/system/vm.scm (system-qemu-image): Use it. --- gnu/system/shadow.scm | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'gnu/system/shadow.scm') diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index c748596431..b2a2121b08 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -30,7 +30,15 @@ (define-module (gnu system shadow) user-account-home-directory user-account-shell - passwd-file)) + user-group + user-group? + user-group-name + user-group-password + user-group-id + user-group-members + + passwd-file + group-file)) ;;; Commentary: ;;; @@ -49,6 +57,31 @@ (define-record-type* (home-directory user-account-home-directory) (shell user-account-shell (default "/bin/sh"))) +(define-record-type* + user-group make-user-group + user-group? + (name user-group-name) + (password user-group-password (default #f)) + (id user-group-id) + (members user-group-members (default '()))) + +(define (group-file store groups) + "Return a /etc/group file for GROUPS, a list of objects." + (define contents + (let loop ((groups groups) + (result '())) + (match groups + ((($ name _ gid (users ...)) rest ...) + ;; XXX: Ignore the group password. + (loop rest + (cons (string-append name "::" (number->string gid) + ":" (string-join users ",")) + result))) + (() + (string-join (reverse result) "\n" 'suffix))))) + + (add-text-to-store store "group" contents)) + (define* (passwd-file store accounts #:key shadow?) "Return a password file for ACCOUNTS, a list of objects. If SHADOW? is true, then it is a /etc/shadow file, otherwise it is a /etc/passwd -- cgit v1.2.3