summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2023-01-31 16:24:50 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2023-02-01 11:38:35 +0100
commitd173d5564f59426fcff234f6b8b2cf0157a6cd77 (patch)
treef48bd4bfcb192a9cc86f961b65c08f085cc79fa7
parente5b30f7232acfc2e99bce50ac1e683deaec57140 (diff)
downloadsystemd-d173d5564f59426fcff234f6b8b2cf0157a6cd77.tar.gz
basic/user-util: create /etc from take_etc_passwd_lock
This allows sysusers to operate with --root that is an empty directory. It may be useful to, for example, populate the user database before installing anything else. firstboot was already doing this, so drop the duplicated call there.
-rw-r--r--src/basic/user-util.c3
-rw-r--r--src/firstboot/firstboot.c2
2 files changed, 3 insertions, 2 deletions
diff --git a/src/basic/user-util.c b/src/basic/user-util.c
index 734122c2a3..6c5041230a 100644
--- a/src/basic/user-util.c
+++ b/src/basic/user-util.c
@@ -19,6 +19,7 @@
#include "fileio.h"
#include "format-util.h"
#include "macro.h"
+#include "mkdir.h"
#include "parse-util.h"
#include "path-util.h"
#include "path-util.h"
@@ -688,6 +689,8 @@ int take_etc_passwd_lock(const char *root) {
if (!path)
return log_oom_debug();
+ (void) mkdir_parents(path, 0755);
+
_cleanup_close_ int fd = open(path, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW, 0600);
if (fd < 0)
return log_debug_errno(errno, "Cannot open %s: %m", path);
diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c
index 45bb386da2..9e79f84691 100644
--- a/src/firstboot/firstboot.c
+++ b/src/firstboot/firstboot.c
@@ -904,8 +904,6 @@ static int process_root_account(void) {
return 0;
}
- (void) mkdir_parents(etc_passwd, 0755);
-
lock = take_etc_passwd_lock(arg_root);
if (lock < 0)
return log_error_errno(lock, "Failed to take a lock on %s: %m", etc_passwd);