[pve-devel] applied: [PATCH storage] fix #2099: escape systemd path names in mount unit

Thomas Lamprecht t.lamprecht at proxmox.com
Wed Feb 20 16:32:57 CET 2019


On 2/20/19 4:04 PM, Dominik Csapak wrote:
> 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(-)
> 

applied, with a comment followup to note that we do not adhere systemd-escape
rules fully, and another one to adhere a bit more to them  ^^
Thanks!

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




More information about the pve-devel mailing list