From eccebf4b0dcbacf0fb57bc114e2423066aeee100 Mon Sep 17 00:00:00 2001 From: Zach Smith Date: Mon, 28 Oct 2019 09:32:16 -0700 Subject: [PATCH] systemd-tmpfiles: deprecate F for f+ --- TODO | 1 - man/tmpfiles.d.xml | 19 ++++++++----------- src/tmpfiles/tmpfiles.c | 18 +++++++----------- 3 files changed, 15 insertions(+), 23 deletions(-) diff --git a/TODO b/TODO index 03d38da9a0..2d7798a5ad 100644 --- a/TODO +++ b/TODO @@ -943,7 +943,6 @@ Features: * tmpfiles: - apply "x" on "D" too (see patch from William Douglas) - - replace F with f+. - instead of ignoring unknown fields, reject them. - creating new directories/subvolumes/fifos/device nodes should not follow symlinks. None of the other adjustment or creation diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml index 726ae93e71..3e23f3927c 100644 --- a/man/tmpfiles.d.xml +++ b/man/tmpfiles.d.xml @@ -39,7 +39,7 @@ #Type Path Mode User Group Age Argument f /file/to/create mode user group - content -F /file/to/create-or-truncate mode user group - content +f+ /file/to/create-or-truncate mode user group - content w /file/to/write-to - - - - content d /directory/to/create-and-cleanup mode user group cleanup-age - D /directory/to/create-and-remove mode user group cleanup-age - @@ -155,19 +155,16 @@ L /tmp/foobar - - - - /dev/null f - Create a file if it does not exist yet. If the argument parameter is given and the file did - not exist yet, it will be written to the file. Does not follow symlinks. + f+ + f will create a file if it does not exist yet. If the argument + parameter is given and the file did not exist yet, it will be written to the file. + f+ will create or truncate the file. If the argument parameter is given, it will + be written to the file. Does not follow symlinks. - F - Create or truncate a file. If the argument - parameter is given, it will be written to the file. Does not follow symlinks. - - - - - w, w+ + w + w+ Write the argument parameter to a file, if the file exists. If suffixed with +, the line will be appended to the file. If your configuration writes multiple lines to the same file, use w+. diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c index fae949863a..0bd05d46ef 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -77,7 +77,7 @@ typedef enum OperationMask { typedef enum ItemType { /* These ones take file names */ CREATE_FILE = 'f', - TRUNCATE_FILE = 'F', + TRUNCATE_FILE = 'F', /* deprecated: use f+ */ CREATE_DIRECTORY = 'd', TRUNCATE_DIRECTORY = 'D', CREATE_SUBVOLUME = 'v', @@ -1370,7 +1370,7 @@ static int truncate_file(Item *i, const char *path) { assert(i); assert(path); - assert(i->type == TRUNCATE_FILE); + assert(i->type == TRUNCATE_FILE || (i->type == CREATE_FILE && i->append_or_force)); /* We want to operate on regular file exclusively especially since * O_TRUNC is unspecified if the file is neither a regular file nor a @@ -1927,20 +1927,16 @@ static int create_item(Item *i) { case RECURSIVE_REMOVE_PATH: return 0; + case TRUNCATE_FILE: case CREATE_FILE: RUN_WITH_UMASK(0000) (void) mkdir_parents_label(i->path, 0755); - r = create_file(i, i->path); - if (r < 0) - return r; - break; + if ((i->type == CREATE_FILE && i->append_or_force) || i->type == TRUNCATE_FILE) + r = truncate_file(i, i->path); + else + r = create_file(i, i->path); - case TRUNCATE_FILE: - RUN_WITH_UMASK(0000) - (void) mkdir_parents_label(i->path, 0755); - - r = truncate_file(i, i->path); if (r < 0) return r; break;