(remote) export: check and untaint format
this format comes from the remote cluster, so it might not be supported on the source side - checking whether it's known (as additional safeguard) and untainting (to avoid open3 failure) is required. Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com> [ T: squashed in canonical perl array ref access ] Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
committed by
Thomas Lamprecht
parent
47d1125bfe
commit
71460c8ace
@ -30,8 +30,6 @@ use PVE::CLIHandler;
|
|||||||
|
|
||||||
use base qw(PVE::CLIHandler);
|
use base qw(PVE::CLIHandler);
|
||||||
|
|
||||||
my $KNOWN_EXPORT_FORMATS = ['raw+size', 'tar+size', 'qcow2+size', 'vmdk+size', 'zfs', 'btrfs'];
|
|
||||||
|
|
||||||
my $nodename = PVE::INotify::nodename();
|
my $nodename = PVE::INotify::nodename();
|
||||||
|
|
||||||
sub param_mapping {
|
sub param_mapping {
|
||||||
@ -269,7 +267,7 @@ __PACKAGE__->register_method ({
|
|||||||
format => {
|
format => {
|
||||||
description => "Export stream format",
|
description => "Export stream format",
|
||||||
type => 'string',
|
type => 'string',
|
||||||
enum => $KNOWN_EXPORT_FORMATS,
|
enum => $PVE::Storage::KNOWN_EXPORT_FORMATS,
|
||||||
},
|
},
|
||||||
filename => {
|
filename => {
|
||||||
description => "Destination file name",
|
description => "Destination file name",
|
||||||
@ -355,7 +353,7 @@ __PACKAGE__->register_method ({
|
|||||||
format => {
|
format => {
|
||||||
description => "Import stream format",
|
description => "Import stream format",
|
||||||
type => 'string',
|
type => 'string',
|
||||||
enum => $KNOWN_EXPORT_FORMATS,
|
enum => $PVE::Storage::KNOWN_EXPORT_FORMATS,
|
||||||
},
|
},
|
||||||
filename => {
|
filename => {
|
||||||
description => "Source file name. For '-' stdin is used, the " .
|
description => "Source file name. For '-' stdin is used, the " .
|
||||||
|
|||||||
@ -48,6 +48,8 @@ use constant APIVER => 10;
|
|||||||
# see https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
|
# see https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
|
||||||
use constant APIAGE => 1;
|
use constant APIAGE => 1;
|
||||||
|
|
||||||
|
our $KNOWN_EXPORT_FORMATS = ['raw+size', 'tar+size', 'qcow2+size', 'vmdk+size', 'zfs', 'btrfs'];
|
||||||
|
|
||||||
# load standard plugins
|
# load standard plugins
|
||||||
PVE::Storage::DirPlugin->register();
|
PVE::Storage::DirPlugin->register();
|
||||||
PVE::Storage::LVMPlugin->register();
|
PVE::Storage::LVMPlugin->register();
|
||||||
@ -1949,6 +1951,12 @@ sub volume_import_start {
|
|||||||
sub volume_export_start {
|
sub volume_export_start {
|
||||||
my ($cfg, $volid, $format, $log, $opts) = @_;
|
my ($cfg, $volid, $format, $log, $opts) = @_;
|
||||||
|
|
||||||
|
my $known_format = [ grep { $_ eq $format } $KNOWN_EXPORT_FORMATS->@* ];
|
||||||
|
if (!$known_format->@*) {
|
||||||
|
die "Cannot export '$volid' using unknown export format '$format'\n";
|
||||||
|
}
|
||||||
|
$format = $known_format->[0];
|
||||||
|
|
||||||
my $run_command_params = delete $opts->{cmd} // {};
|
my $run_command_params = delete $opts->{cmd} // {};
|
||||||
|
|
||||||
my $cmds = $volume_export_prepare->($cfg, $volid, $format, $log, $opts);
|
my $cmds = $volume_export_prepare->($cfg, $volid, $format, $log, $opts);
|
||||||
|
|||||||
Reference in New Issue
Block a user