Am 6/16/20 um 3:36 PM schrieb Oguz Bektas: > /usr/share/zoneinfo/zone.tab has the valid list of time zones. > > Signed-off-by: Oguz Bektas <o.bek...@proxmox.com> > --- > src/PVE/JSONSchema.pm | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/src/PVE/JSONSchema.pm b/src/PVE/JSONSchema.pm > index 84fb694..ff97a3d 100644 > --- a/src/PVE/JSONSchema.pm > +++ b/src/PVE/JSONSchema.pm > @@ -482,6 +482,30 @@ sub pve_verify_dns_name { > return $name; > } > > +register_format('timezone', \&pve_verify_timezone); > +sub pve_verify_timezone { > + my ($timezone, $noerr) = @_; > + > + my $zonetab = "/usr/share/zoneinfo/zone.tab"; > + my @valid_tzlist; > + push @valid_tzlist, 'host'; # host localtime
do not add that here, this isn't a timezone - filter that value out in pve-container API as it's just a special value there. > + push @valid_tzlist, 'UTC'; # not in $zonetab Don push unconditionally on array you just declared, rather: my @valid_tzlist = ('UTC'); But actually that array isn't required at all: Rather do: return $timezone if $timezone eq 'UTC'; open(my $fh, "<", $zonetab); while(my $line = <$fh>) { next if $line =~ /^#/; chomp $line; return $timezone if $line eq $timezone; # found } close $fh; die "invalid time zone '$timezone'\n"; Shorter and faster. > + open(my $fh, "<", $zonetab); > + while(my $line = <$fh>) { > + next if $line =~ /^#/; > + chomp $line; > + push @valid_tzlist, (split /\t/, $line)[2]; > + } > + close $fh; > + > + if (grep (/^$timezone$/, @valid_tzlist) eq 0) { > + return undef if $noerr; > + die "invalid time zone '$timezone'\n"; > + } > + > + return $timezone; > +} > + > # network interface name > register_format('pve-iface', \&pve_verify_iface); > sub pve_verify_iface { > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel