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:
committed by
Thomas Lamprecht
parent
035eb9dfb5
commit
43e04c681e
@ -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 {
|
||||
|
Reference in New Issue
Block a user