1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-22 17:35:35 +03:00

systemctl-edit: ignore ENOENT from unit_is_masked()

If a specified unit does not exist, then it is definitely not masked.

Fixes #35632.

(cherry picked from commit b58b00e4c3)
This commit is contained in:
Yu Watanabe 2024-12-16 12:37:17 +09:00 committed by Luca Boccassi
parent b5dc1922f9
commit 48b404d546
2 changed files with 13 additions and 2 deletions

View File

@ -349,8 +349,8 @@ int verb_edit(int argc, char *argv[], void *userdata) {
STRV_FOREACH(tmp, names) { STRV_FOREACH(tmp, names) {
r = unit_is_masked(bus, *tmp); r = unit_is_masked(bus, *tmp);
if (r < 0) if (r < 0 && r != -ENOENT)
return r; return log_error_errno(r, "Failed to check if unit %s is masked: %m", *tmp);
if (r > 0) if (r > 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot edit %s: unit is masked.", *tmp); return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot edit %s: unit is masked.", *tmp);
} }

View File

@ -21,6 +21,7 @@ at_exit() {
# the 'revert' verb as well # the 'revert' verb as well
export UNIT_NAME="systemctl-test-$RANDOM.service" export UNIT_NAME="systemctl-test-$RANDOM.service"
export UNIT_NAME2="systemctl-test-$RANDOM.service" export UNIT_NAME2="systemctl-test-$RANDOM.service"
export UNIT_NAME_TEMPLATE="systemctl-test-${RANDOM}@.service"
cat >"/usr/lib/systemd/system/$UNIT_NAME" <<\EOF cat >"/usr/lib/systemd/system/$UNIT_NAME" <<\EOF
[Unit] [Unit]
@ -65,6 +66,16 @@ EOF
printf '%s\n' '[Unit]' 'Description=spectacular' '# this comment should remain' | \ printf '%s\n' '[Unit]' 'Description=spectacular' '# this comment should remain' | \
cmp - "/etc/systemd/system/$UNIT_NAME.d/override2.conf" cmp - "/etc/systemd/system/$UNIT_NAME.d/override2.conf"
# Edit nonexistent template unit, see issue #35632.
systemctl edit "$UNIT_NAME_TEMPLATE" --stdin --runtime --force --full <<EOF
[Unit]
Description=template unit test
# this comment should remain
EOF
printf '%s\n' '[Unit]' 'Description=template unit test' '# this comment should remain' | \
cmp - "/run/systemd/system/$UNIT_NAME_TEMPLATE"
# Test simultaneous editing of two units and creation of drop-in for a nonexistent unit # Test simultaneous editing of two units and creation of drop-in for a nonexistent unit
systemctl edit "$UNIT_NAME" "$UNIT_NAME2" --stdin --force --drop-in=override2.conf <<<'[X-Section]' systemctl edit "$UNIT_NAME" "$UNIT_NAME2" --stdin --force --drop-in=override2.conf <<<'[X-Section]'
printf '%s\n' '[X-Section]' | cmp - "/etc/systemd/system/$UNIT_NAME.d/override2.conf" printf '%s\n' '[X-Section]' | cmp - "/etc/systemd/system/$UNIT_NAME.d/override2.conf"