Compare commits

..

No commits in common. "9e9dd3e329a69a3aad5698552697b3257fdc3845" and "68f98816cb04d80a538eb00ec68c3debebc75e5f" have entirely different histories.

4 changed files with 26 additions and 24 deletions

1
TODO
View File

@ -949,6 +949,7 @@ 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

View File

@ -39,9 +39,8 @@
<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
w+ /file/to/append-to - - - - content
d /directory/to/create-and-cleanup mode user group cleanup-age -
D /directory/to/create-and-remove mode user group cleanup-age -
e /directory/to/cleanup mode user group cleanup-age -
@ -49,13 +48,10 @@ v /subvolume/to/create mode user group - -
v /subvolume-or-directory/to/create mode user group - -
Q /subvolume/to/create mode user group - -
p /fifo/to/create mode user group - -
p+ /fifo/to/[re]create mode user group - -
L /symlink/to/create - - - - symlink/target/path
L+ /symlink/to/[re]create - - - - symlink/target/path
c /dev/char-device-to-create mode user group - -
c+ /dev/char-device-to-[re]create mode user group - -
b /dev/block-device-to-create mode user group - -
b+ /dev/block-device-to-[re]create mode user group - -
# p+, L+, c+, b+ create target unconditionally, w+ appends to the file
C /target/to/create - - - - /source/to/copy
x /path-or-glob/to/ignore - - - - -
X /path-or-glob/to/ignore/recursively - - - - -
@ -68,10 +64,8 @@ T /path-or-glob/to/set/xattrs/recursively - - - - xattr
h /path-or-glob/to/set/attrs - - - - file attrs
H /path-or-glob/to/set/attrs/recursively - - - - file attrs
a /path-or-glob/to/set/acls - - - - POSIX ACLs
a+ /path-or-glob/to/append/acls - - - - POSIX ACLs
A /path-or-glob/to/set/acls/recursively - - - - POSIX ACLs
A+ /path-or-glob/to/append/acls/recursively - - - - POSIX ACLs
# a+, A+ append ACLs
</programlisting>
</refsynopsisdiv>
@ -161,16 +155,19 @@ L /tmp/foobar - - - - /dev/null</programlisting>
<variablelist>
<varlistentry>
<term><varname>f</varname></term>
<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>
<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>
</varlistentry>
<varlistentry>
<term><varname>w</varname></term>
<term><varname>w+</varname></term>
<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>
<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>.

View File

@ -72,7 +72,7 @@ typedef enum OperationMask {
typedef enum ItemType {
/* These ones take file names */
CREATE_FILE = 'f',
TRUNCATE_FILE = 'F', /* deprecated: use f+ */
TRUNCATE_FILE = 'F',
CREATE_DIRECTORY = 'd',
TRUNCATE_DIRECTORY = 'D',
CREATE_SUBVOLUME = 'v',
@ -1365,7 +1365,7 @@ static int truncate_file(Item *i, const char *path) {
assert(i);
assert(path);
assert(i->type == TRUNCATE_FILE || (i->type == CREATE_FILE && i->append_or_force));
assert(i->type == TRUNCATE_FILE);
/* We want to operate on regular file exclusively especially since
* O_TRUNC is unspecified if the file is neither a regular file nor a
@ -1922,16 +1922,20 @@ 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);
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);
if (r < 0)
return r;
break;
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;

View File

@ -2102,7 +2102,7 @@ static int udev_rule_apply_token_to_event(
(void) udev_event_apply_format(event, token->value, value, sizeof(value), false);
log_rule_debug(dev, rules, "ATTR '%s' writing '%s'", buf, value);
r = write_string_file(buf, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_AVOID_NEWLINE);
r = write_string_file(buf, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_DISABLE_BUFFER);
if (r < 0)
log_rule_error_errno(dev, rules, r, "Failed to write ATTR{%s}, ignoring: %m", buf);
break;