diff options
-rw-r--r-- | TODO | 1 | ||||
-rw-r--r-- | man/tmpfiles.d.xml | 19 | ||||
-rw-r--r-- | src/tmpfiles/tmpfiles.c | 18 |
3 files changed, 15 insertions, 23 deletions
@@ -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 @@ <programlisting>#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</programlisting> <variablelist> <varlistentry> <term><varname>f</varname></term> - <listitem><para>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.</para></listitem> + <term><varname>f+</varname></term> + <listitem><para><varname>f</varname> 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. + <varname>f+</varname> will create or truncate the file. If the argument parameter is given, it will + be written to the file. Does not follow symlinks.</para></listitem> </varlistentry> <varlistentry> - <term><varname>F</varname></term> - <listitem><para>Create or truncate a file. If the argument - parameter is given, it will be written to the file. Does not follow symlinks.</para> - </listitem> - </varlistentry> - - <varlistentry> - <term><varname>w, w+</varname></term> + <term><varname>w</varname></term> + <term><varname>w+</varname></term> <listitem><para>Write the argument parameter to a file, if the file exists. If suffixed with <varname>+</varname>, the line will be appended to the file. If your configuration writes multiple lines to the same file, use <varname>w+</varname>. 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; - - case TRUNCATE_FILE: - RUN_WITH_UMASK(0000) - (void) mkdir_parents_label(i->path, 0755); + 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); - r = truncate_file(i, i->path); if (r < 0) return r; break; |