[pve-devel] [PATCH storage] fix #2099: escape systemd path names in mount unit
Dominik Csapak
d.csapak at proxmox.com
Wed Feb 20 16:04:34 CET 2019
we only allow '-' '_' and '.' int storage-ids and names,
and we do not need to escape '_' and '.' (see man 5 systemd.unit)
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
PVE/API2/Disks/Directory.pm | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/PVE/API2/Disks/Directory.pm b/PVE/API2/Disks/Directory.pm
index 02cc72a..630d1cd 100644
--- a/PVE/API2/Disks/Directory.pm
+++ b/PVE/API2/Disks/Directory.pm
@@ -87,6 +87,22 @@ my $write_ini = sub {
file_set_contents($filename, $content);
};
+sub systemd_escape {
+ my ($val) = @_;
+
+ $val =~ s/\-/\\x2d/g;
+
+ return $val;
+}
+
+sub systemd_unescape {
+ my ($val) = @_;
+
+ $val =~ s/\\x([a-fA-F0-9]{2})/chr(hex($1))/eg;
+
+ return $val;
+}
+
__PACKAGE__->register_method ({
name => 'index',
path => '',
@@ -138,6 +154,7 @@ __PACKAGE__->register_method ({
dir_glob_foreach('/etc/systemd/system', '^mnt-pve-(.+)\.mount$', sub {
my ($filename, $storid) = @_;
+ $storid = systemd_unescape($storid);
my $unitfile = "/etc/systemd/system/$filename";
my $unit = $read_ini->($unitfile);
@@ -206,7 +223,7 @@ __PACKAGE__->register_method ({
my $worker = sub {
my $path = "/mnt/pve/$name";
- my $mountunitname = "mnt-pve-$name.mount";
+ my $mountunitname = "mnt-pve-".systemd_escape($name).".mount";
my $mountunitpath = "/etc/systemd/system/$mountunitname";
PVE::Diskmanage::locked_disk_action(sub {
--
2.11.0
More information about the pve-devel
mailing list