From 703c1f88314782ecb054745ab4f41858c753cbe1 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Mon, 21 Sep 2015 12:11:08 +0200 Subject: [PATCH] JSONSchema: pve-ipv4/6-config and CIDR split Split CIDR schema into CIDRv4 and CIDRv6 and added pve-ipv4-config and pve-ipv6-config formats. --- src/PVE/JSONSchema.pm | 54 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/src/PVE/JSONSchema.pm b/src/PVE/JSONSchema.pm index e392f58..e94b5fc 100644 --- a/src/PVE/JSONSchema.pm +++ b/src/PVE/JSONSchema.pm @@ -227,18 +227,62 @@ sub pve_verify_ipv4mask { return $mask; } -register_format('CIDR', \&pve_verify_cidr); -sub pve_verify_cidr { +register_format('CIDRv6', \&pve_verify_cidrv6); +sub pve_verify_cidrv6 { my ($cidr, $noerr) = @_; - if ($cidr =~ m!^(?:$IPV4RE)(?:/(\d+))$! && ($1 > 7) && ($1 < 32)) { + if ($cidr =~ m!^(?:$IPV6RE)(?:/(\d+))$! && ($1 > 7) && ($1 <= 120)) { return $cidr; - } elsif ($cidr =~ m!^(?:$IPV6RE)(?:/(\d+))$! && ($1 > 7) && ($1 <= 120)) { + } + + return undef if $noerr; + die "value does not look like a valid IPv6 CIDR network\n"; +} + +register_format('CIDRv4', \&pve_verify_cidrv4); +sub pve_verify_cidrv4 { + my ($cidr, $noerr) = @_; + + if ($cidr =~ m!^(?:$IPV4RE)(?:/(\d+))$! && ($1 > 7) && ($1 < 32)) { return $cidr; } return undef if $noerr; - die "value does not look like a valid CIDR network\n"; + die "value does not look like a valid IPv4 CIDR network\n"; +} + +register_format('CIDR', \&pve_verify_cidr); +sub pve_verify_cidr { + my ($cidr, $noerr) = @_; + + if (!(pve_verify_cidrv4($cidr, 1) || + pve_verify_cidrv6($cidr, 1))) + { + return undef if $noerr; + die "value does not look like a valid CIDR network\n"; + } + + return $cidr; +} + +register_format('pve-ipv4-config', \&pve_verify_ipv4_config); +sub pve_verify_ipv4_config { + my ($config, $noerr) = @_; + + return $config if $config =~ /^(?:dhcp|manual)$/ || + pve_verify_cidrv4($config, 1); + return undef if $noerr; + die "value does not look like a valid ipv4 network configuration\n"; +} + +register_format('pve-ipv6-config', \&pve_verify_ipv6_config); +sub pve_verify_ipv6_config { + my ($config, $noerr) = @_; + + return $config if $config =~ /^(?:auto|dhcp|manual)$/ || + pve_verify_cidrv6($config, 1); + return undef if $noerr; + die "value does not look like a valid ipv6 network configuration\n"; } register_format('email', \&pve_verify_email); -- 2.39.2