diff options
author | Ludovic Courtès <ludo@gnu.org> | 2019-08-27 22:38:04 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2019-08-28 00:27:14 +0200 |
commit | dd4e46edda6c255ca170a6650c6f92b16ff50a3f (patch) | |
tree | 545a8eaf37525b31fbdba3765a5f71c32334f0f9 | |
parent | 114f02bac47d86c04bf211e33864beffcde74aab (diff) | |
download | guix-dd4e46edda6c255ca170a6650c6f92b16ff50a3f.tar.gz |
accounts: Delete duplicate entries.
When adding multiple instances of a service requiring some user account/group, we could end up with multiple entries for that account or group in /etc/passwd or /etc/group. * gnu/build/accounts.scm (database-writer)[write-entries]: Add call to 'delete-duplicates'. * tests/accounts.scm ("write-passwd with duplicate entry"): New test.
-rw-r--r-- | gnu/build/accounts.scm | 2 | ||||
-rw-r--r-- | tests/accounts.scm | 19 |
2 files changed, 20 insertions, 1 deletions
diff --git a/gnu/build/accounts.scm b/gnu/build/accounts.scm index 5094456ab1..f60d68d9b3 100644 --- a/gnu/build/accounts.scm +++ b/gnu/build/accounts.scm @@ -238,7 +238,7 @@ to it atomically and set the appropriate permissions." (for-each (lambda (entry) (display (entry->string entry) port) (newline port)) - entries)) + (delete-duplicates entries))) (if (port? file-or-port) (write-entries file-or-port) diff --git a/tests/accounts.scm b/tests/accounts.scm index 673dd42432..78136390bb 100644 --- a/tests/accounts.scm +++ b/tests/accounts.scm @@ -62,6 +62,25 @@ nobody:!:0::::::\n")) (shell "/bin/sh"))) port)))) +(test-equal "write-passwd with duplicate entry" + %passwd-sample + (call-with-output-string + (lambda (port) + (let ((charlie (password-entry + (name "charlie") + (uid 1000) (gid 998) + (real-name "Charlie") + (directory "/home/charlie") + (shell "/bin/sh")))) + (write-passwd (list (password-entry + (name "root") + (uid 0) (gid 0) + (real-name "Admin") + (directory "/root") + (shell "/bin/sh")) + charlie charlie) + port))))) + (test-equal "read-passwd + write-passwd" %passwd-sample (call-with-output-string |