From d497b6ab397273cd250003b6266f22ad74f4c20d Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 3 Jun 2019 17:14:17 +0200 Subject: activation: Lock /etc/.pwd.lock before accessing databases. Suggested by Florian Pelz in . * gnu/build/accounts.scm (%password-lock-file): New variable. * gnu/build/activation.scm (activate-users+groups): Wrap calls to 'user+group-databases', 'write-group', etc. into 'with-file-lock'. --- gnu/build/accounts.scm | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'gnu/build/accounts.scm') diff --git a/gnu/build/accounts.scm b/gnu/build/accounts.scm index c43ce85b60..8687446aa6 100644 --- a/gnu/build/accounts.scm +++ b/gnu/build/accounts.scm @@ -51,6 +51,7 @@ (define-module (gnu build accounts) group-entry-gid group-entry-members + %password-lock-file write-group write-passwd write-shadow @@ -224,6 +225,11 @@ (define-database-entry ; (serialization list->comma-separated comma-separated->list) (default '()))) +(define %password-lock-file + ;; The password database lock file used by libc's 'lckpwdf'. Users should + ;; grab this lock with 'with-file-lock' when they access the databases. + "/etc/.pwd.lock") + (define (database-writer file mode entry->string) (lambda* (entries #:optional (file-or-port file)) "Write ENTRIES to FILE-OR-PORT. When FILE-OR-PORT is a file name, write -- cgit v1.2.3