From 50ccd8645379e2c36f6437f6ef6ddb4d49e59342 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 24 Apr 2019 18:42:13 +0200 Subject: fileio: add new WRITE_STRING_FILE_MKDIR_0755 flag for mkdir'ing parent --- src/basic/fileio.c | 7 +++++++ src/basic/fileio.h | 1 + 2 files changed, 8 insertions(+) diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 16034fb9e8..4c18212668 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -21,6 +21,7 @@ #include "log.h" #include "macro.h" #include "missing.h" +#include "mkdir.h" #include "parse-util.h" #include "path-util.h" #include "stdio-util.h" @@ -174,6 +175,12 @@ int write_string_file_ts( /* We don't know how to verify whether the file contents was already on-disk. */ assert(!((flags & WRITE_STRING_FILE_VERIFY_ON_FAILURE) && (flags & WRITE_STRING_FILE_SYNC))); + if (flags & WRITE_STRING_FILE_MKDIR_0755) { + r = mkdir_parents(fn, 0755); + if (r < 0) + return r; + } + if (flags & WRITE_STRING_FILE_ATOMIC) { assert(flags & WRITE_STRING_FILE_CREATE); diff --git a/src/basic/fileio.h b/src/basic/fileio.h index eb551c7ac1..05f6c89da0 100644 --- a/src/basic/fileio.h +++ b/src/basic/fileio.h @@ -21,6 +21,7 @@ typedef enum { WRITE_STRING_FILE_SYNC = 1 << 4, WRITE_STRING_FILE_DISABLE_BUFFER = 1 << 5, WRITE_STRING_FILE_NOFOLLOW = 1 << 6, + WRITE_STRING_FILE_MKDIR_0755 = 1 << 7, /* And before you wonder, why write_string_file_atomic_label_ts() is a separate function instead of just one more flag here: it's about linking: we don't want to pull -lselinux into all users of write_string_file() -- cgit v1.2.3 From 22e596d6d5fa80fb33ab84451db8962e2facb17a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 24 Apr 2019 18:43:16 +0200 Subject: tree-wide: voidify a few calls --- src/binfmt/binfmt.c | 2 +- src/firstboot/firstboot.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c index 66e2f0131c..dda979cc42 100644 --- a/src/binfmt/binfmt.c +++ b/src/binfmt/binfmt.c @@ -213,7 +213,7 @@ static int run(int argc, char *argv[]) { } /* Flush out all rules */ - write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER); + (void) write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER); STRV_FOREACH(f, files) { k = apply_file(*f, true); diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c index c21cf76b93..d8d17cb5bd 100644 --- a/src/firstboot/firstboot.c +++ b/src/firstboot/firstboot.c @@ -253,7 +253,7 @@ static int process_locale(void) { if (arg_copy_locale && arg_root) { - mkdir_parents(etc_localeconf, 0755); + (void) mkdir_parents(etc_localeconf, 0755); r = copy_file("/etc/locale.conf", etc_localeconf, 0, 0644, 0, 0, COPY_REFLINK); if (r != -ENOENT) { if (r < 0) @@ -278,7 +278,7 @@ static int process_locale(void) { locales[i] = NULL; - mkdir_parents(etc_localeconf, 0755); + (void) mkdir_parents(etc_localeconf, 0755); r = write_env_file(etc_localeconf, locales); if (r < 0) return log_error_errno(r, "Failed to write %s: %m", etc_localeconf); @@ -327,7 +327,7 @@ static int process_keymap(void) { if (arg_copy_keymap && arg_root) { - mkdir_parents(etc_vconsoleconf, 0755); + (void) mkdir_parents(etc_vconsoleconf, 0755); r = copy_file("/etc/vconsole.conf", etc_vconsoleconf, 0, 0644, 0, 0, COPY_REFLINK); if (r != -ENOENT) { if (r < 0) @@ -411,7 +411,7 @@ static int process_timezone(void) { if (r < 0) return log_error_errno(r, "Failed to read host timezone: %m"); - mkdir_parents(etc_localtime, 0755); + (void) mkdir_parents(etc_localtime, 0755); if (symlink(p, etc_localtime) < 0) return log_error_errno(errno, "Failed to create %s symlink: %m", etc_localtime); @@ -429,7 +429,7 @@ static int process_timezone(void) { e = strjoina("../usr/share/zoneinfo/", arg_timezone); - mkdir_parents(etc_localtime, 0755); + (void) mkdir_parents(etc_localtime, 0755); if (symlink(e, etc_localtime) < 0) return log_error_errno(errno, "Failed to create %s symlink: %m", etc_localtime); @@ -624,7 +624,7 @@ static int process_root_password(void) { if (laccess(etc_shadow, F_OK) >= 0) return 0; - mkdir_parents(etc_shadow, 0755); + (void) mkdir_parents(etc_shadow, 0755); lock = take_etc_passwd_lock(arg_root); if (lock < 0) -- cgit v1.2.3 From e82e549fb2cd97966bd3a5d38dfab15e3d9cd7b6 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 24 Apr 2019 18:43:56 +0200 Subject: tree-wide: make use of the new WRITE_STRING_FILE_MKDIR_0755 flag --- src/firstboot/firstboot.c | 6 ++---- src/gpt-auto-generator/gpt-auto-generator.c | 3 +-- src/nspawn/nspawn-cgroup.c | 3 +-- src/rfkill/rfkill.c | 8 ++------ 4 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c index d8d17cb5bd..ae2b1fd7fc 100644 --- a/src/firstboot/firstboot.c +++ b/src/firstboot/firstboot.c @@ -490,9 +490,8 @@ static int process_hostname(void) { if (isempty(arg_hostname)) return 0; - mkdir_parents(etc_hostname, 0755); r = write_string_file(etc_hostname, arg_hostname, - WRITE_STRING_FILE_CREATE | WRITE_STRING_FILE_SYNC); + WRITE_STRING_FILE_CREATE | WRITE_STRING_FILE_SYNC | WRITE_STRING_FILE_MKDIR_0755); if (r < 0) return log_error_errno(r, "Failed to write %s: %m", etc_hostname); @@ -512,9 +511,8 @@ static int process_machine_id(void) { if (sd_id128_is_null(arg_machine_id)) return 0; - mkdir_parents(etc_machine_id, 0755); r = write_string_file(etc_machine_id, sd_id128_to_string(arg_machine_id, id), - WRITE_STRING_FILE_CREATE | WRITE_STRING_FILE_SYNC); + WRITE_STRING_FILE_CREATE | WRITE_STRING_FILE_SYNC | WRITE_STRING_FILE_MKDIR_0755); if (r < 0) return log_error_errno(r, "Failed to write machine id: %m"); diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c index 0f1e184eea..6c70054d93 100644 --- a/src/gpt-auto-generator/gpt-auto-generator.c +++ b/src/gpt-auto-generator/gpt-auto-generator.c @@ -521,13 +521,12 @@ static int add_root_rw(DissectedPartition *p) { (void) generator_enable_remount_fs_service(arg_dest); path = strjoina(arg_dest, "/systemd-remount-fs.service.d/50-remount-rw.conf"); - (void) mkdir_parents(path, 0755); r = write_string_file(path, "# Automatically generated by systemd-gpt-generator\n\n" "[Service]\n" "Environment=SYSTEMD_REMOUNT_ROOT_RW=1\n", - WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_NOFOLLOW); + WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_NOFOLLOW|WRITE_STRING_FILE_MKDIR_0755); if (r < 0) return log_error_errno(r, "Failed to write drop-in file %s: %m", path); diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c index ec62b64b00..f84bb39796 100644 --- a/src/nspawn/nspawn-cgroup.c +++ b/src/nspawn/nspawn-cgroup.c @@ -121,10 +121,9 @@ int sync_cgroup(pid_t pid, CGroupUnified unified_requested, uid_t uid_shift) { (void) rm_rf(fn, REMOVE_ROOT|REMOVE_ONLY_DIRECTORIES); fn = strjoina(tree, cgroup, "/cgroup.procs"); - (void) mkdir_parents(fn, 0755); sprintf(pid_string, PID_FMT, pid); - r = write_string_file(fn, pid_string, WRITE_STRING_FILE_DISABLE_BUFFER); + r = write_string_file(fn, pid_string, WRITE_STRING_FILE_DISABLE_BUFFER|WRITE_STRING_FILE_MKDIR_0755); if (r < 0) { log_error_errno(r, "Failed to move process: %m"); goto finish; diff --git a/src/rfkill/rfkill.c b/src/rfkill/rfkill.c index 16610cd476..fe26566fa3 100644 --- a/src/rfkill/rfkill.c +++ b/src/rfkill/rfkill.c @@ -154,7 +154,7 @@ static int load_state(Context *c, const struct rfkill_event *event) { if (IN_SET(r, -ENOENT, 0)) { /* No state file or it's truncated? Then save the current state */ - r = write_string_file(state_file, one_zero(event->soft), WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_ATOMIC); + r = write_string_file(state_file, one_zero(event->soft), WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_ATOMIC|WRITE_STRING_FILE_MKDIR_0755); if (r < 0) return log_error_errno(r, "Failed to write state file %s: %m", state_file); @@ -246,7 +246,7 @@ static int save_state_cancel(Context *c, const struct rfkill_event *event) { static int save_state_write_one(struct write_queue_item *item) { int r; - r = write_string_file(item->file, one_zero(item->state), WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_ATOMIC); + r = write_string_file(item->file, one_zero(item->state), WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_ATOMIC|WRITE_STRING_FILE_MKDIR_0755); if (r < 0) return log_error_errno(r, "Failed to write state file %s: %m", item->file); @@ -280,10 +280,6 @@ static int run(int argc, char *argv[]) { umask(0022); - r = mkdir_p("/var/lib/systemd/rfkill", 0755); - if (r < 0) - return log_error_errno(r, "Failed to create rfkill directory: %m"); - n = sd_listen_fds(false); if (n < 0) return log_error_errno(n, "Failed to determine whether we got any file descriptors passed: %m"); -- cgit v1.2.3