Hi all ! Sent a patch to improve ipv4 validation procedure. Now you can enter ip addresses like 10.1.0.0 (final 0 was denied in previous version).
However, this is a classful validation, a better way to do this would be comparing the address with the associated mask. Is it possible to send the mask to this function, or should we merge the two functions in a new one ? Damien 2013/2/22 Damien PIQUET <piqu...@gmail.com>: > > 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