journald: fix ignored filtering patterns for delegated cgroups

If a service defines Delegate=yes, its subcgroup won't inherit the
LogFilterPatterns= option, because the option is stored on the unit's
cgroup attributes, not on the subcgroup.

Fixed by using the unit's cgroup attributes instead.
This commit is contained in:
Quentin Deslandes
2023-02-08 16:52:51 +01:00
parent ee164216d3
commit 41b7fcc5e8
5 changed files with 47 additions and 5 deletions
@@ -0,0 +1,8 @@
[Unit]
Description=Test service for delegated logs filtering
[Service]
Type=simple
ExecStart=/usr/lib/systemd/tests/testdata/units/delegated_cgroup_filtering_payload.sh
Delegate=yes
SyslogLevel=notice
+12
View File
@@ -0,0 +1,12 @@
#!/bin/sh
# SPDX-License-Identifier: LGPL-2.1-or-later
mkdir /sys/fs/cgroup/system.slice/delegated-cgroup-filtering.service/the_child
/bin/sh /usr/lib/systemd/tests/testdata/units/delegated_cgroup_filtering_payload_child.sh &
while true
do
echo "parent_process: hello, world!"
echo "parent_process: hello, people!"
sleep .15
done
+11
View File
@@ -0,0 +1,11 @@
#!/bin/sh
# SPDX-License-Identifier: LGPL-2.1-or-later
echo $$ >/sys/fs/cgroup/system.slice/delegated-cgroup-filtering.service/the_child/cgroup.procs
while true
do
echo "child_process: hello, world!"
echo "child_process: hello, people!"
sleep .15
done
+9 -2
View File
@@ -185,8 +185,8 @@ function add_logs_filtering_override() {
LOG_FILTER=${3:-""}
mkdir -p /etc/systemd/system/"$UNIT".d/
echo "[Service]" >/etc/systemd/system/logs-filtering.service.d/"${OVERRIDE_NAME}".conf
echo "LogFilterPatterns=$LOG_FILTER" >>/etc/systemd/system/logs-filtering.service.d/"${OVERRIDE_NAME}".conf
echo "[Service]" >/etc/systemd/system/"$UNIT".d/"${OVERRIDE_NAME}".conf
echo "LogFilterPatterns=$LOG_FILTER" >>/etc/systemd/system/"$UNIT".d/"${OVERRIDE_NAME}".conf
systemctl daemon-reload
}
@@ -256,7 +256,14 @@ if is_xattr_supported; then
add_logs_filtering_override "logs-filtering.service" "10-allow-with-escape-char" "\x7emore~"
[[ -n $(run_service_and_fetch_logs "logs-filtering.service") ]]
add_logs_filtering_override "delegated-cgroup-filtering.service" "00-allow-all" ".*"
[[ -n $(run_service_and_fetch_logs "delegated-cgroup-filtering.service") ]]
add_logs_filtering_override "delegated-cgroup-filtering.service" "01-discard-hello" "~hello"
[[ -z $(run_service_and_fetch_logs "delegated-cgroup-filtering.service") ]]
rm -rf /etc/systemd/system/logs-filtering.service.d
rm -rf /etc/systemd/system/delegated-cgroup-filtering.service.d
fi
touch /testok