systemd-tmpfiles: deprecate F for f+
authorZach Smith <z@zxmth.us>
Mon, 28 Oct 2019 16:32:16 +0000 (09:32 -0700)
committerZach Smith <z@zxmth.us>
Fri, 1 Nov 2019 05:27:56 +0000 (22:27 -0700)
TODO
man/tmpfiles.d.xml
src/tmpfiles/tmpfiles.c

diff --git a/TODO b/TODO
index 03d38da..2d7798a 100644 (file)
--- 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
index 726ae93..3e23f39 100644 (file)
@@ -39,7 +39,7 @@
 
     <programlisting>#Type Path                                     Mode User Group Age         Argument
 f     /file/to/create                          mode user group -           content
-    /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>.
index fae9498..0bd05d4 100644 (file)
@@ -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;