register CIDR format
authorDietmar Maurer <dietmar@proxmox.com>
Sat, 21 Dec 2013 08:01:14 +0000 (09:01 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Sat, 21 Dec 2013 08:01:14 +0000 (09:01 +0100)
data/PVE/JSONSchema.pm

index 8811207..94d2db2 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 use Storable; # for dclone
 use Getopt::Long;
 use Devel::Cycle -quiet; # todo: remove?
-use PVE::Tools qw(split_list);
+use PVE::Tools qw(split_list $IPV6RE $IPV4RE);
 use PVE::Exception qw(raise);
 use HTTP::Status qw(:constants);
 use Net::IP qw(:PROC);
@@ -191,6 +191,20 @@ sub pve_verify_ipv4mask {
     return $mask;
 }
 
+register_format('CIDR', \&pve_verify_cidr);
+sub pve_verify_cidr {
+    my ($cidr, $noerr) = @_;
+
+    if ($cidr =~ m!^(?:$IPV4RE)(?:/(\d+))$! && ($1 > 7) &&  ($1 < 32)) {
+       return $cidr;
+    } elsif ($cidr =~ m!^(?:$IPV6RE)(?:/(\d+))$! && ($1 > 7) &&  ($1 <= 120)) {
+       return $cidr;
+    }
+
+    return undef if $noerr;
+    die "value does not look like a valid CIDR network\n";
+}
+
 register_format('email', \&pve_verify_email);
 sub pve_verify_email {
     my ($email, $noerr) = @_;