X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FRESTHandler.pm;h=dda58ea1d8430ce7d5ea3a5311b5d80acd81dd8b;hp=41531925fe1ab7cc0be9f190494ec28e00739598;hb=aeac55e13854fe8d7aeeef545c3f5d65edc34971;hpb=b51b16e6f58de4cb385bd461d97866b3d94c93ec diff --git a/src/PVE/RESTHandler.pm b/src/PVE/RESTHandler.pm index 4153192..dda58ea 100644 --- a/src/PVE/RESTHandler.pm +++ b/src/PVE/RESTHandler.pm @@ -9,7 +9,7 @@ use PVE::JSONSchema; use PVE::PodParser; use HTTP::Status qw(:constants :is status_message); use Text::Wrap; -use Storable qw(dclone); +use Clone qw(clone); my $method_registry = {}; my $method_by_name = {}; @@ -27,7 +27,7 @@ sub api_clone_schema { foreach my $k (keys %$schema) { my $d = $schema->{$k}; if ($k ne 'properties') { - $res->{$k} = ref($d) ? dclone($d) : $d; + $res->{$k} = ref($d) ? clone($d) : $d; next; } # convert indexed parameters like -net\d+ to -net[n] @@ -40,7 +40,7 @@ sub api_clone_schema { next; } } - $res->{$k}->{$p} = ref($pd) ? dclone($pd) : $pd; + $res->{$k}->{$p} = ref($pd) ? clone($pd) : $pd; } } @@ -105,7 +105,7 @@ sub api_dump_full { $data->{$k} = api_clone_schema($d); } else { - $data->{$k} = ref($d) ? dclone($d) : $d; + $data->{$k} = ref($d) ? clone($d) : $d; } } $res->{info}->{$info->{method}} = $data; @@ -275,8 +275,6 @@ sub AUTOLOAD { my $sub = $AUTOLOAD; (my $method = $sub) =~ s/.*:://; - $method =~ s/.*:://; - my $info = $this->map_method_by_name($method); *{$sub} = sub { @@ -388,16 +386,18 @@ sub handle { # warn "validate ". Dumper($param}) . "\n" . Dumper($schema); PVE::JSONSchema::validate($param, $schema); # untaint data (already validated) + my $extra = delete $param->{'extra-args'}; while (my ($key, $val) = each %$param) { ($param->{$key}) = $val =~ /^(.*)$/s; } + $param->{'extra-args'} = [map { /^(.*)$/ } @$extra] if $extra; } my $result = &$func($param); # todo: this is only to be safe - disable? if (my $schema = $info->{returns}) { - PVE::JSONSchema::validate($result, $schema, "Result verification vailed\n"); + PVE::JSONSchema::validate($result, $schema, "Result verification failed\n"); } return $result;