systemd-tests-249.17-alt2.x86_64	unsafe-tmp-usage-in-scripts	fail	The test discovered scripts with errors which may be used by a user for damaging important system files. For example if a script uses in its work a temp file which is created in /tmp directory, then every user can create symlinks with the same name (pattern) in this directory in order to destroy or rewrite some system or another user's files. Scripts _must_ _use_ mktemp/tempfile or must use $TMPDIR. mktemp/tempfile is safest. $TMPDIR is safer than /tmp/ because libpam-tmpdir creates a subdirectory of /tmp that is only accessible by that user, and then sets TMPDIR and other variables to that. Hence, it doesn't matter nearly as much if you create a non-random filename, because nobody but you can access it. Found error in /usr/lib/systemd/tests/testdata/units/testsuite-58.sh: $ grep -A5 -B5 /tmp/ /usr/lib/systemd/tests/testdata/units/testsuite-58.sh fi export SYSTEMD_LOG_LEVEL=debug export PAGER=cat rm -f /var/tmp/testsuite-58.img /var/tmp/testsuite-58.2.img /tmp/testsuite-58.dump mkdir -p /tmp/testsuite-58-defs/ # First part: create a disk image and verify its in order cat >/tmp/testsuite-58-defs/esp.conf <<EOF [Partition] Type=esp SizeMinBytes=10M Format=vfat EOF cat >/tmp/testsuite-58-defs/usr.conf <<EOF [Partition] Type=usr SizeMinBytes=10M Format=ext4 ReadOnly=yes EOF cat >/tmp/testsuite-58-defs/root.conf <<EOF [Partition] Type=root SizeMinBytes=10M Format=ext4 MakeDirectories=/usr /efi EOF systemd-repart --definitions=/tmp/testsuite-58-defs/ \ --empty=create \ --size=auto \ --seed=750b6cd5c4ae4012a15e7be3c29e6a47 \ /var/tmp/testsuite-58.img sfdisk --dump /var/tmp/testsuite-58.img | tee /tmp/testsuite-58.dump grep -qxF '/var/tmp/testsuite-58.img1 : start= 2048, size= 20480, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=39107B09-615D-48FB-BA37-C663885FCE67, name="esp"' /tmp/testsuite-58.dump grep -qxF '/var/tmp/testsuite-58.img2 : start= 22528, size= 20480, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=60F33797-1D71-4DCB-AA6F-20564F036CD0, name="root-x86-64", attrs="GUID:59"' /tmp/testsuite-58.dump grep -qxF '/var/tmp/testsuite-58.img3 : start= 43008, size= 20480, type=8484680C-9521-48C6-9C11-B0720656F69E, uuid=7E3369DD-D653-4513-ADF5-B993A9F20C16, name="usr-x86-64", attrs="GUID:60"' /tmp/testsuite-58.dump # Second part, duplicate it with CopyBlocks=auto cat >/tmp/testsuite-58-defs/esp.conf <<EOF [Partition] Type=esp CopyBlocks=auto EOF cat >/tmp/testsuite-58-defs/usr.conf <<EOF [Partition] Type=usr ReadOnly=yes CopyBlocks=auto EOF cat >/tmp/testsuite-58-defs/root.conf <<EOF [Partition] Type=root CopyBlocks=auto EOF systemd-repart --definitions=/tmp/testsuite-58-defs/ \ --empty=create \ --size=auto \ --seed=750b6cd5c4ae4012a15e7be3c29e6a47 \ --image=/var/tmp/testsuite-58.img \ /var/tmp/testsuite-58.2.img cmp /var/tmp/testsuite-58.img /var/tmp/testsuite-58.2.img rm /var/tmp/testsuite-58.img /var/tmp/testsuite-58.2.img /tmp/testsuite-58.dump rm -r /tmp/testsuite-58-defs/ echo OK >/testok exit 0 Found error in /usr/lib/systemd/tests/testdata/units/testsuite-57-short-lived.sh: $ grep -A5 -B5 /tmp/ /usr/lib/systemd/tests/testdata/units/testsuite-57-short-lived.sh #!/usr/bin/env bash set -ex if [ -f /tmp/testsuite-57.counter ] ; then read -r counter < /tmp/testsuite-57.counter counter=$(("$counter" + 1)) else counter=0 fi echo "$counter" > /tmp/testsuite-57.counter if [ "$counter" -eq 5 ] ; then systemctl kill --kill-who=main -sUSR1 testsuite-57.service fi Found error in /usr/lib/systemd/tests/testdata/units/testsuite-54.sh: $ grep -A5 -B5 /tmp/ /usr/lib/systemd/tests/testdata/units/testsuite-54.sh -p LoadCredential=shadow:/etc/shadow \ -p SetCredential=dog:wuff \ -p DynamicUser=1 \ --wait \ --pipe \ cat '${CREDENTIALS_DIRECTORY}/passwd' '${CREDENTIALS_DIRECTORY}/shadow' '${CREDENTIALS_DIRECTORY}/dog' >/tmp/ts54-concat ( cat /etc/passwd /etc/shadow && echo -n wuff ) | cmp /tmp/ts54-concat rm /tmp/ts54-concat # Verify that the creds are immutable systemd-run -p LoadCredential=passwd:/etc/passwd \ -p DynamicUser=1 \ --wait \ Found error in /usr/lib/systemd/tests/testdata/units/testsuite-46.sh: $ grep -A5 -B5 /tmp/ /usr/lib/systemd/tests/testdata/units/testsuite-46.sh # filesystems, let's drop these fields before comparing the outputs to # avoid unexpected fails. To see the full outputs of both homectl & # userdbctl (for debugging purposes) drop the fields just before the # comparison. local USERNAME="${1:?missing argument}" homectl inspect "$USERNAME" | tee /tmp/a userdbctl user "$USERNAME" | tee /tmp/b diff -I '/^\s*Disk (Size|Free|Floor|Ceiling):/' /tmp/{a,b} rm /tmp/{a,b} } systemd-analyze log-level debug systemd-analyze log-target console Found error in /usr/lib/systemd/tests/testdata/units/testsuite-44.sh: $ grep -A5 -B5 /tmp/ /usr/lib/systemd/tests/testdata/units/testsuite-44.sh systemd-analyze log-level debug systemd-run --wait -p LogNamespace=foobar echo "hello world" journalctl --namespace=foobar --sync journalctl -o cat --namespace=foobar >/tmp/hello-world journalctl -o cat >/tmp/no-hello-world grep "^hello world$" /tmp/hello-world grep "^hello world$" /tmp/no-hello-world && { echo 'unexpected success'; exit 1; } systemd-analyze log-level info echo OK >/testok Found error in /usr/lib/systemd/tests/testdata/units/testsuite-42.sh: $ grep -A5 -B5 /tmp/ /usr/lib/systemd/tests/testdata/units/testsuite-42.sh systemd-run --unit=exec2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=exec -p ExecStopPost='/bin/touch /run/exec2' sh -c 'sleep 1; false' \ && { echo 'unexpected success'; exit 1; } test -f /run/exec2 cat >/tmp/forking1.sh <<EOF #!/usr/bin/env bash set -eux sleep 4 & MAINPID=\$! disown systemd-notify MAINPID=\$MAINPID EOF chmod +x /tmp/forking1.sh systemd-run --unit=forking1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=forking -p NotifyAccess=exec -p ExecStopPost='/bin/touch /run/forking1' /tmp/forking1.sh test -f /run/forking1 cat >/tmp/forking2.sh <<EOF #!/usr/bin/env bash set -eux ( sleep 4; exit 1 ) & MAINPID=\$! disown systemd-notify MAINPID=\$MAINPID EOF chmod +x /tmp/forking2.sh systemd-run --unit=forking2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=forking -p NotifyAccess=exec -p ExecStopPost='/bin/touch /run/forking2' /tmp/forking2.sh \ && { echo 'unexpected success'; exit 1; } test -f /run/forking2 systemd-run --unit=oneshot1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=oneshot -p ExecStopPost='/bin/touch /run/oneshot1' true test -f /run/oneshot1 -- # https://github.com/systemd/systemd/issues/19920 systemd-run --unit=dbus3.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=dbus -p ExecStopPost='/bin/touch /run/dbus3' true \ && { echo 'unexpected success'; exit 1; } cat >/tmp/notify1.sh <<EOF #!/usr/bin/env bash set -eux systemd-notify --ready EOF chmod +x /tmp/notify1.sh systemd-run --unit=notify1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=notify -p ExecStopPost='/bin/touch /run/notify1' /tmp/notify1.sh test -f /run/notify1 systemd-run --unit=notify2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=notify -p ExecStopPost='/bin/touch /run/notify2' true \ && { echo 'unexpected success'; exit 1; } test -f /run/notify2 Found error in /usr/lib/systemd/tests/testdata/units/testsuite-22.03.sh: $ grep -A5 -B5 /tmp/ /usr/lib/systemd/tests/testdata/units/testsuite-22.03.sh # set -eux set -o pipefail rm -fr /tmp/{f,F,w} mkdir /tmp/{f,F,w} touch /tmp/file-owned-by-root # # 'f' # systemd-tmpfiles --create - <<EOF f /tmp/f/1 0644 - - - - f /tmp/f/2 0644 - - - This string should be written EOF ### '1' should exist and be empty test -f /tmp/f/1; test ! -s /tmp/f/1 test "$(stat -c %U:%G:%a /tmp/f/1)" = "root:root:644" test "$(stat -c %U:%G:%a /tmp/f/2)" = "root:root:644" test "$(< /tmp/f/2)" = "This string should be written" ### The perms are supposed to be updated even if the file already exists. systemd-tmpfiles --create - <<EOF f /tmp/f/1 0666 daemon daemon - This string should not be written EOF # file should be empty test ! -s /tmp/f/1 test "$(stat -c %U:%G:%a /tmp/f/1)" = "daemon:daemon:666" ### But we shouldn't try to set perms on an existing file which is not a ### regular one. mkfifo /tmp/f/fifo chmod 644 /tmp/f/fifo systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } f /tmp/f/fifo 0666 daemon daemon - This string should not be written EOF test -p /tmp/f/fifo test "$(stat -c %U:%G:%a /tmp/f/fifo)" = "root:root:644" ### 'f' should not follow symlinks. ln -s missing /tmp/f/dangling ln -s /tmp/file-owned-by-root /tmp/f/symlink systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } f /tmp/f/dangling 0644 daemon daemon - - f /tmp/f/symlink 0644 daemon daemon - - EOF test ! -e /tmp/f/missing test "$(stat -c %U:%G:%a /tmp/file-owned-by-root)" = "root:root:644" ### Handle read-only filesystem gracefully: we shouldn't fail if the target ### already exists and have the correct perms. mkdir /tmp/f/rw-fs mkdir /tmp/f/ro-fs touch /tmp/f/rw-fs/foo chmod 644 /tmp/f/rw-fs/foo mount -o bind,ro /tmp/f/rw-fs /tmp/f/ro-fs systemd-tmpfiles --create - <<EOF f /tmp/f/ro-fs/foo 0644 - - - - This string should not be written EOF test -f /tmp/f/ro-fs/foo; test ! -s /tmp/f/ro-fs/foo systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } f /tmp/f/ro-fs/foo 0666 - - - - EOF test "$(stat -c %U:%G:%a /tmp/f/fifo)" = "root:root:644" systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } f /tmp/f/ro-fs/bar 0644 - - - - EOF test ! -e /tmp/f/ro-fs/bar ### 'f' shouldn't follow unsafe paths. mkdir /tmp/f/daemon ln -s /root /tmp/f/daemon/unsafe-symlink chown -R --no-dereference daemon:daemon /tmp/f/daemon systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } f /tmp/f/daemon/unsafe-symlink/exploit 0644 daemon daemon - - EOF test ! -e /tmp/f/daemon/unsafe-symlink/exploit # # 'F' # echo "This should be truncated" >/tmp/F/truncated echo "This should be truncated" >/tmp/F/truncated-with-content systemd-tmpfiles --create - <<EOF F /tmp/F/created 0644 - - - - F /tmp/F/created-with-content 0644 - - - new content F /tmp/F/truncated 0666 daemon daemon - - F /tmp/F/truncated-with-content 0666 daemon daemon - new content EOF test -f /tmp/F/created; test ! -s /tmp/F/created test -f /tmp/F/created-with-content test "$(< /tmp/F/created-with-content)" = "new content" test -f /tmp/F/truncated; test ! -s /tmp/F/truncated test "$(stat -c %U:%G:%a /tmp/F/truncated)" = "daemon:daemon:666" test -s /tmp/F/truncated-with-content test "$(stat -c %U:%G:%a /tmp/F/truncated-with-content)" = "daemon:daemon:666" ### We shouldn't try to truncate anything but regular files since the behavior is ### unspecified in the other cases. mkfifo /tmp/F/fifo systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } F /tmp/F/fifo 0644 - - - - EOF test -p /tmp/F/fifo ### 'F' should not follow symlinks. ln -s missing /tmp/F/dangling ln -s /tmp/file-owned-by-root /tmp/F/symlink systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } f /tmp/F/dangling 0644 daemon daemon - - f /tmp/F/symlink 0644 daemon daemon - - EOF test ! -e /tmp/F/missing test "$(stat -c %U:%G:%a /tmp/file-owned-by-root)" = "root:root:644" ### Handle read-only filesystem gracefully: we shouldn't fail if the target ### already exists and is empty. mkdir /tmp/F/rw-fs mkdir /tmp/F/ro-fs touch /tmp/F/rw-fs/foo chmod 644 /tmp/F/rw-fs/foo mount -o bind,ro /tmp/F/rw-fs /tmp/F/ro-fs systemd-tmpfiles --create - <<EOF F /tmp/F/ro-fs/foo 0644 - - - - EOF test -f /tmp/F/ro-fs/foo; test ! -s /tmp/F/ro-fs/foo echo "truncating is not allowed anymore" >/tmp/F/rw-fs/foo systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } F /tmp/F/ro-fs/foo 0644 - - - - EOF systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } F /tmp/F/ro-fs/foo 0644 - - - - This string should not be written EOF test -f /tmp/F/ro-fs/foo grep -q 'truncating is not allowed' /tmp/F/ro-fs/foo # Trying to change the perms should fail. : >/tmp/F/rw-fs/foo systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } F /tmp/F/ro-fs/foo 0666 - - - - EOF test "$(stat -c %U:%G:%a /tmp/F/ro-fs/foo)" = "root:root:644" ### Try to create a new file. systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } F /tmp/F/ro-fs/bar 0644 - - - - EOF test ! -e /tmp/F/ro-fs/bar ### 'F' shouldn't follow unsafe paths. mkdir /tmp/F/daemon ln -s /root /tmp/F/daemon/unsafe-symlink chown -R --no-dereference daemon:daemon /tmp/F/daemon systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } F /tmp/F/daemon/unsafe-symlink/exploit 0644 daemon daemon - - EOF test ! -e /tmp/F/daemon/unsafe-symlink/exploit # # 'w' # touch /tmp/w/overwritten ### nop if the target does not exist. systemd-tmpfiles --create - <<EOF w /tmp/w/unexistent 0644 - - - new content EOF test ! -e /tmp/w/unexistent ### no argument given -> fails. systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } w /tmp/w/unexistent 0644 - - - - EOF ### write into an empty file. systemd-tmpfiles --create - <<EOF w /tmp/w/overwritten 0644 - - - old content EOF test -f /tmp/w/overwritten test "$(< /tmp/w/overwritten)" = "old content" ### new content is overwritten systemd-tmpfiles --create - <<EOF w /tmp/w/overwritten 0644 - - - new content EOF test -f /tmp/w/overwritten test "$(< /tmp/w/overwritten)" = "new content" ### writing into an 'exotic' file should be allowed. systemd-tmpfiles --create - <<EOF w /dev/null - - - - new content EOF ### 'w' follows symlinks ln -s ./overwritten /tmp/w/symlink systemd-tmpfiles --create - <<EOF w /tmp/w/symlink - - - - $(readlink -e /tmp/w/symlink) EOF readlink -e /tmp/w/symlink test "$(< /tmp/w/overwritten)" = "/tmp/w/overwritten" ### 'w' shouldn't follow unsafe paths. mkdir /tmp/w/daemon ln -s /root /tmp/w/daemon/unsafe-symlink chown -R --no-dereference daemon:daemon /tmp/w/daemon systemd-tmpfiles --create - <<EOF && { echo 'unexpected success'; exit 1; } f /tmp/w/daemon/unsafe-symlink/exploit 0644 daemon daemon - - EOF test ! -e /tmp/w/daemon/unsafe-symlink/exploit Found error in /usr/lib/systemd/tests/testdata/units/testsuite-20.sh: $ grep -A5 -B5 /tmp/ /usr/lib/systemd/tests/testdata/units/testsuite-20.sh # Update it back to our own PID, this should also work systemd-notify --uid=1000 MAINPID=$$ test "$(systemctl show -P MainPID testsuite-20.service)" -eq $$ cat >/tmp/test20-mainpid.sh <<EOF #!/usr/bin/env bash set -eux set -o pipefail -- sleep infinity & disown echo \$MAINPID >/run/mainpidsh/pid EOF chmod +x /tmp/test20-mainpid.sh systemd-run --unit=test20-mainpidsh.service -p StandardOutput=tty -p StandardError=tty -p Type=forking -p RuntimeDirectory=mainpidsh -p PIDFile=/run/mainpidsh/pid /tmp/test20-mainpid.sh test "$(systemctl show -P MainPID test20-mainpidsh.service)" -eq "$(cat /run/mainpidsh/pid)" cat >/tmp/test20-mainpid2.sh <<EOF #!/usr/bin/env bash set -eux set -o pipefail -- disown echo \$MAINPID >/run/mainpidsh2/pid chown 1001:1001 /run/mainpidsh2/pid EOF chmod +x /tmp/test20-mainpid2.sh systemd-run --unit=test20-mainpidsh2.service -p StandardOutput=tty -p StandardError=tty -p Type=forking -p RuntimeDirectory=mainpidsh2 -p PIDFile=/run/mainpidsh2/pid /tmp/test20-mainpid2.sh test "$(systemctl show -P MainPID test20-mainpidsh2.service)" -eq "$(cat /run/mainpidsh2/pid)" cat >/dev/shm/test20-mainpid3.sh <<EOF #!/usr/bin/env bash Found error in /usr/lib/systemd/tests/testdata/units/testsuite-13.sh: $ grep -A5 -B5 /tmp/ /usr/lib/systemd/tests/testdata/units/testsuite-13.sh export SYSTEMD_LOG_LEVEL=debug # check cgroup-v2 is_v2_supported=no mkdir -p /tmp/cgroup2 if mount -t cgroup2 cgroup2 /tmp/cgroup2; then is_v2_supported=yes umount /tmp/cgroup2 fi rmdir /tmp/cgroup2 # check cgroup namespaces is_cgns_supported=no if [[ -f /proc/1/ns/cgroup ]]; then is_cgns_supported=yes -- function check_bind_tmp_path { # https://github.com/systemd/systemd/issues/4789 local _root="/var/lib/machines/testsuite-13.bind-tmp-path" rm -rf "$_root" /usr/lib/systemd/tests/testdata/create-busybox-container "$_root" : >/tmp/bind systemd-nspawn "${SUSE_OPTS[@]}" --register=no -D "$_root" --bind=/tmp/bind /bin/sh -c 'test -e /tmp/bind' } function check_norbind { # https://github.com/systemd/systemd/issues/13170 local _root="/var/lib/machines/testsuite-13.norbind-path" rm -rf "$_root" mkdir -p /tmp/binddir/subdir echo -n "outer" >/tmp/binddir/subdir/file mount -t tmpfs tmpfs /tmp/binddir/subdir echo -n "inner" >/tmp/binddir/subdir/file /usr/lib/systemd/tests/testdata/create-busybox-container "$_root" systemd-nspawn "${SUSE_OPTS[@]}" --register=no -D "$_root" --bind=/tmp/binddir:/mnt:norbind /bin/sh -c 'CONTENT=$(cat /mnt/subdir/file); if [[ $CONTENT != "outer" ]]; then echo "*** unexpected content: $CONTENT"; return 1; fi' } function check_notification_socket { # https://github.com/systemd/systemd/issues/4944 local _cmd='echo a | $(busybox which nc) -U -u -w 1 /run/host/notify' -- systemd-nspawn "${SUSE_OPTS[@]}" --register=no -D /testsuite-13.nc-container /bin/sh -x -c "$_cmd" systemd-nspawn "${SUSE_OPTS[@]}" --register=no -D /testsuite-13.nc-container -U /bin/sh -x -c "$_cmd" } function check_os_release { local _cmd='. /tmp/os-release if [ -n "${ID:+set}" ] && [ "${ID}" != "${container_host_id}" ]; then exit 1; fi if [ -n "${VERSION_ID:+set}" ] && [ "${VERSION_ID}" != "${container_host_version_id}" ]; then exit 1; fi if [ -n "${BUILD_ID:+set}" ] && [ "${BUILD_ID}" != "${container_host_build_id}" ]; then exit 1; fi if [ -n "${VARIANT_ID:+set}" ] && [ "${VARIANT_ID}" != "${container_host_variant_id}" ]; then exit 1; fi cd /tmp; (cd /run/host; md5sum os-release) | md5sum -c -- # Ensure that /etc always wins if available cp /usr/lib/os-release /etc echo MARKER=1 >>/etc/os-release fi systemd-nspawn "${SUSE_OPTS[@]}" --register=no -D /testsuite-13.nc-container --bind="${_os_release_source}":/tmp/os-release /bin/sh -x -e -c "$_cmd" if grep -q MARKER /etc/os-release; then rm /etc/os-release ln -s ../usr/lib/os-release /etc/os-release fi } function check_machinectl_bind { local _cmd='for i in $(seq 1 20); do if test -f /tmp/marker; then exit 0; fi; sleep 0.5; done; exit 1;' cat >/run/systemd/system/nspawn_machinectl_bind.service <<EOF [Service] Type=notify ExecStart=systemd-nspawn ${SUSE_OPTS[@]} -D /testsuite-13.nc-container --notify-ready=no /bin/sh -x -e -c "$_cmd" EOF systemctl start nspawn_machinectl_bind.service touch /tmp/marker machinectl bind --mkdir testsuite-13.nc-container /tmp/marker while systemctl show -P SubState nspawn_machinectl_bind.service | grep -q running do sleep 0.1 done -- # https://github.com/systemd/systemd/issues/13297 mkdir -p /run/systemd/nspawn/ cat >/run/systemd/nspawn/testsuite-13.nc-container.nspawn <<EOF [Files] BindReadOnly=/tmp/ephemeral-config EOF touch /tmp/ephemeral-config # /testsuite-13.nc-container is prepared by test.sh systemd-nspawn --register=no -D /testsuite-13.nc-container --ephemeral /bin/sh -x -c "test -f /tmp/ephemeral-config" systemd-nspawn --register=no -D /testsuite-13.nc-container --ephemeral --machine foobar /bin/sh -x -c "! test -f /tmp/ephemeral-config" rm -f /run/systemd/nspawn/testsuite-13.nc-container.nspawn } function run {; 
udev-249.17-alt2.x86_64	sisyphus_check-check-dirlist	warn	sisyphus_check --check-dirlist failed: package contains a directory /etc/udev/rules.d that exclusively belongs to package udev-rules; sisyphus_check --check-dirlist failed: package contains a directory /lib/udev/rules.d that exclusively belongs to package udev-rules; 
