Use the new JSONSchema provided parser which also verifies
the parameters with their schemas.
---
 src/PVE/LXC.pm | 33 +++++++++------------------------
 1 file changed, 9 insertions(+), 24 deletions(-)

diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm
index f5b3a5b..7a6803e 100644
--- a/src/PVE/LXC.pm
+++ b/src/PVE/LXC.pm
@@ -862,28 +862,15 @@ sub parse_ct_mountpoint {
 
     $data //= '';
 
-    my $res = {};
-
-    foreach my $p (split (/,/, $data)) {
-       next if $p =~ m/^\s*$/;
-
-       if ($p =~ m/^(volume|backup|size|mp)=(.+)$/) {
-           my ($k, $v) = ($1, $2);
-           return undef if defined($res->{$k});
-           $res->{$k} = $v;
-       } else {
-           if (!$res->{volume} && $p !~ m/=/) {
-               $res->{volume} = $p;
-           } else {
-               return undef;
-           }
-       }
+    my $res;
+    eval { $res = PVE::JSONSchema::parse_property_string($mp_desc, $data) };
+    if ($@) {
+       warn $@;
+       return undef;
     }
 
     return undef if !defined($res->{volume});
 
-    return undef if $res->{backup} && $res->{backup} !~ m/^(yes|no)$/;
-
     if ($res->{size}) {
        return undef if !defined($res->{size} = &$parse_size($res->{size}));
     }
@@ -933,12 +920,10 @@ sub parse_lxc_network {
 
     return $res if !$data;
 
-    foreach my $pv (split (/,/, $data)) {
-       if ($pv =~ 
m/^(bridge|hwaddr|mtu|name|ip|ip6|gw|gw6|firewall|tag)=(\S+)$/) {
-           $res->{$1} = $2;
-       } else {
-           return undef;
-       }
+    eval { $res = PVE::JSONSchema::parse_property_string($netconf_desc, $data) 
};
+    if ($@) {
+       warn $@;
+       return undef;
     }
 
     $res->{type} = 'veth';
-- 
2.1.4


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to