Package: init-system-helpers Version: 1.47 Severity: serious Tags: patch Hi,
to fix #856429 I need to handle a unit with an escaped character correctly in the maintainer scripts generated by dh_systemd*. Unfortunately deb-systemd-invoke does not quote the unit name properly in a systemctl call, so it fails to handle the unit. A patch is attached, with it deb-systemd-invoke works as expected. I did not test my changes to t/001-deb-systemd-helper.t as I don't have the necessary perl module installed and didn't want to mess with CPAN. But I'd assume its correct. Thanks for fixing, Bernd -- Bernd Zeimetz Debian GNU/Linux Developer http://bzed.de http://www.debian.org GPG Fingerprint: ECA1 E3F2 8E11 2432 D485 DD95 EB36 171A 6FF9 435F
From f506723313b8b85e062b61ccda5e31d7adc3a176 Mon Sep 17 00:00:00 2001 From: Bernd Zeimetz <b...@debian.org> Date: Tue, 25 Apr 2017 21:40:00 +0200 Subject: [PATCH] Handle units with escaped characters correctly. Also see https://www.freedesktop.org/software/systemd/man/systemd-escape.html --- script/deb-systemd-invoke | 2 +- t/001-deb-systemd-helper.t | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/script/deb-systemd-invoke b/script/deb-systemd-invoke index 4255d06..a4b3fbc 100755 --- a/script/deb-systemd-invoke +++ b/script/deb-systemd-invoke @@ -85,7 +85,7 @@ if ($action eq "start" || $action eq "restart") { my $global_exit_code = 0; for my $unit (@units) { my $unit_installed = 0; - my $enabled_output = `/bin/systemctl is-enabled -- $unit`; + my $enabled_output = `/bin/systemctl is-enabled -- '$unit'`; # matching enabled and enabled-runtime as an installed non static unit if ($enabled_output =~ /enabled/) { $unit_installed = 1; diff --git a/t/001-deb-systemd-helper.t b/t/001-deb-systemd-helper.t index 64332e3..2d5da28 100644 --- a/t/001-deb-systemd-helper.t +++ b/t/001-deb-systemd-helper.t @@ -54,7 +54,7 @@ unless ($ENV{'TEST_ON_REAL_SYSTEM'}) { # ┃ Verify “is-enabled” is not true for a random, non-existing unit file. ┃ # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -my ($fh, $random_unit) = tempfile('unitXXXXX', +my ($fh, $random_unit) = tempfile('unit\x2dXXXXX', SUFFIX => '.service', TMPDIR => 1, UNLINK => 1); @@ -303,13 +303,13 @@ ExecStart=/bin/sleep 1 [Install] WantedBy=multi-user.target -Alias=footest.service +Alias=foo\x2dtest.service EOT close($fh); isnt_enabled($random_unit); -isnt_enabled('footest.service'); -my $alias_path = "/etc/systemd/system/footest.service"; +isnt_enabled('foo\x2dtest.service'); +my $alias_path = "/etc/systemd/system/foo\x2dtest.service"; ok(! -l $alias_path, 'alias link does not exist yet'); $retval = system("DPKG_MAINTSCRIPT_PACKAGE=test $dsh enable $random_unit"); is($retval, 0, "enable command succeeded"); @@ -376,7 +376,7 @@ EOT close($fh); isnt_enabled($random_unit); -isnt_enabled('footest.service'); +isnt_enabled('foo\x2dtest.service'); # note that in this case $alias_path and $mask_path are identical $retval = system("DPKG_MAINTSCRIPT_PACKAGE=test $dsh enable $random_unit"); is($retval, 0, "enable command succeeded"); -- 2.11.0