X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=data%2FPVE%2FJSONSchema.pm;h=6866f18a3030d973e33e4f704d1947a30ba1fd16;hb=957753df143fc5212f1754927c2368d79b01fd61;hp=816083a2be1fe7e2d32dae8831a742fd62cad5d9;hpb=34ebb22690b05bd812b660ad91d790317f231981;p=pve-common.git diff --git a/data/PVE/JSONSchema.pm b/data/PVE/JSONSchema.pm index 816083a..6866f18 100644 --- a/data/PVE/JSONSchema.pm +++ b/data/PVE/JSONSchema.pm @@ -8,6 +8,7 @@ use Devel::Cycle -quiet; # todo: remove? use PVE::Tools qw(split_list); use PVE::Exception qw(raise); use HTTP::Status qw(:constants); +use Net::IP qw(:PROC); use base 'Exporter'; @@ -97,7 +98,7 @@ sub pve_verify_configid { if ($id !~ m/^[a-z][a-z0-9_]+$/i) { return undef if $noerr; - die "invalid cofiguration ID '$id'\n"; + die "invalid configuration ID '$id'\n"; } return $id; } @@ -129,8 +130,7 @@ register_format('pve-node', \&pve_verify_node_name); sub pve_verify_node_name { my ($node, $noerr) = @_; - # todo: use better regex ? - if ($node !~ m/^[A-Za-z][[:alnum:]\-]*[[:alnum:]]+$/) { + if ($node !~ m/^([a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?)$/) { return undef if $noerr; die "value does not look like a valid node name\n"; } @@ -141,21 +141,51 @@ register_format('ipv4', \&pve_verify_ipv4); sub pve_verify_ipv4 { my ($ipv4, $noerr) = @_; - if ($ipv4 !~ m/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ || - !(($1 > 0) && ($1 < 255) && - ($2 <= 255) && ($3 <= 255) && - ($4 > 0) && ($4 < 255))) { - return undef if $noerr; + if (!Net::IP::ip_is_ipv4($ipv4)) { + return undef if $noerr; die "value does not look like a valid IP address\n"; } return $ipv4; } + +my $ipv4_mask_hash = { + '128.0.0.0' => 1, + '192.0.0.0' => 2, + '224.0.0.0' => 3, + '240.0.0.0' => 4, + '248.0.0.0' => 5, + '252.0.0.0' => 6, + '254.0.0.0' => 7, + '255.0.0.0' => 8, + '255.128.0.0' => 9, + '255.192.0.0' => 10, + '255.224.0.0' => 11, + '255.240.0.0' => 12, + '255.248.0.0' => 13, + '255.252.0.0' => 14, + '255.254.0.0' => 15, + '255.255.0.0' => 16, + '255.255.128.0' => 17, + '255.255.192.0' => 18, + '255.255.224.0' => 19, + '255.255.240.0' => 20, + '255.255.248.0' => 21, + '255.255.252.0' => 22, + '255.255.254.0' => 23, + '255.255.255.0' => 24, + '255.255.255.128' => 25, + '255.255.255.192' => 26, + '255.255.255.224' => 27, + '255.255.255.240' => 28, + '255.255.255.248' => 29, + '255.255.255.252' => 30 +}; + register_format('ipv4mask', \&pve_verify_ipv4mask); sub pve_verify_ipv4mask { my ($mask, $noerr) = @_; - if ($mask !~ m/^255\.255\.(\d{1,3})\.(\d{1,3})$/ || - !(($1 <= 255) && ($2 <= 255))) { + if (!defined($ipv4_mask_hash->{$mask})) { return undef if $noerr; die "value does not look like a valid IP netmask\n"; } @@ -178,7 +208,7 @@ register_format('dns-name', \&pve_verify_dns_name); sub pve_verify_dns_name { my ($name, $noerr) = @_; - my $namere = "([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])"; + my $namere = "([a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?)"; if ($name !~ /^(${namere}\.)*${namere}$/) { return undef if $noerr; @@ -954,9 +984,6 @@ sub get_options { } $opts = PVE::Tools::decode_utf8_parameters($opts); - if ($opts->{description}) { - print "TEST: " . PVE::Tools::encode_text($opts->{description}) . "\n"; - } foreach my $p (keys %$opts) { if (my $pd = $schema->{properties}->{$p}) {