mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-03 01:17:45 +03:00
tmpfiles: avoid double specifier expansion in L lines
Starting with commit2f3b873a49
, when the path contains a specifier and the argument is omitted, tmpfiles used to perform specifier expansions twice: first specifier expansion was applied to the path itself, and afterwards the result of the first expansion was used in the constructed argument and expanded once again. Resolves: #26244 Fixes:2f3b873a49
("tmpfiles: copy/link /usr/share/factory/ files when the source argument is omitted") (cherry picked from commit05381430a5
)
This commit is contained in:
parent
80b5af843b
commit
212aa36d03
@ -3311,12 +3311,6 @@ static int parse_line(
|
||||
*invalid_config = true;
|
||||
return log_syntax(NULL, LOG_ERR, fname, line, SYNTHETIC_ERRNO(EBADMSG), "base64 decoding not supported for symlink targets.");
|
||||
}
|
||||
|
||||
if (!i.argument) {
|
||||
i.argument = path_join("/usr/share/factory", i.path);
|
||||
if (!i.argument)
|
||||
return log_oom();
|
||||
}
|
||||
break;
|
||||
|
||||
case WRITE_FILE:
|
||||
@ -3425,6 +3419,14 @@ static int parse_line(
|
||||
}
|
||||
|
||||
switch (i.type) {
|
||||
case CREATE_SYMLINK:
|
||||
if (!i.argument) {
|
||||
i.argument = path_join("/usr/share/factory", i.path);
|
||||
if (!i.argument)
|
||||
return log_oom();
|
||||
}
|
||||
break;
|
||||
|
||||
case COPY_FILES:
|
||||
if (!i.argument) {
|
||||
i.argument = path_join("/usr/share/factory", i.path);
|
||||
|
32
test/units/testsuite-22.15.sh
Executable file
32
test/units/testsuite-22.15.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
#
|
||||
# Check specifier expansion in L lines.
|
||||
#
|
||||
set -eux
|
||||
|
||||
rm -fr /tmp/L
|
||||
mkdir /tmp/L
|
||||
|
||||
# Check that %h expands to $home.
|
||||
home='/somewhere'
|
||||
dst='/tmp/L/1'
|
||||
src="$home"
|
||||
HOME="$home" \
|
||||
systemd-tmpfiles --create - <<EOF
|
||||
L $dst - - - - %h
|
||||
EOF
|
||||
test "$(readlink "$dst")" = "$src"
|
||||
|
||||
# Check that %h in the path is expanded, but
|
||||
# the result of this expansion is not expanded once again.
|
||||
root='/tmp/L/2'
|
||||
home='/%U'
|
||||
src="/usr/share/factory$home"
|
||||
mkdir -p "$root$src"
|
||||
dst="$root$home"
|
||||
HOME="$home" \
|
||||
systemd-tmpfiles --create --root="$root" - <<EOF
|
||||
L %h - - - -
|
||||
EOF
|
||||
test "$(readlink "$dst")" = "$src"
|
Loading…
Reference in New Issue
Block a user