* 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
<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 -
<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>.
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',
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
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;