5
0
mirror of git://git.proxmox.com/git/pve-storage.git synced 2025-08-29 09:49:31 +03:00

fix #2099: escape systemd path names in mount unit

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@proxmox.com>
This commit is contained in:
Dominik Csapak
2019-02-20 16:04:34 +01:00
committed by Thomas Lamprecht
parent 035eb9dfb5
commit 43e04c681e

View File

@ -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 {