Signed-off-by: Damien PIQUET <piqu...@gmail.com> --- data/PVE/JSONSchema.pm | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-)
diff --git a/data/PVE/JSONSchema.pm b/data/PVE/JSONSchema.pm index 4b33646..d0d11f8 100644 --- a/data/PVE/JSONSchema.pm +++ b/data/PVE/JSONSchema.pm @@ -140,14 +140,47 @@ 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; + my $valid = 0; + + if ($ipv4 =~ m/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) { + # got a class A address + if ($1 < 128) { + if (($1 > 0)&& + ($2 <= 255)&&($2 >= 0) && + ($3 <= 255)&&($3 >= 0) && + ($4 <= 255)&&($4 >= 0) && + ($2+$3+$4 > 0)&&($2+$3+$4 < 765)) { + $valid = 1; + } + } + # got a class B address + elsif ($1 < 192) { + if (($1 > 0)&& + ($2 <= 255)&&($2 >= 0) && + ($3 <= 255)&&($3 >= 0) && + ($4 < 255)&&($4 > 0) && + ($3+$4 > 0)&&($3+$4 < 510)) { + $valid = 1; + } + } + # got a class C address + else { + if (($1 > 0)&& + ($2 <= 255)&&($2 >= 0) && + ($3 <= 255)&&($3 >= 0) && + ($4 < 255)&&($4 > 0)) { + $valid = 1; + } + } + } + + if($valid) { + return $ipv4; + } + else { + return undef if $noerr; die "value does not look like a valid IP address\n"; } - return $ipv4; } my $ipv4_mask_hash = { -- 1.7.10.4 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel