use PVE::Tools qw(split_list);
use PVE::Exception qw(raise);
use HTTP::Status qw(:constants);
+use Net::IP qw(:PROC);
use base 'Exporter';
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;
}
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";
}
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";
}
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;
}
$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}) {