[pve-devel] [PATCH common 1/5] jsonschema: register 'timezone' format and add verification method
Thomas Lamprecht
t.lamprecht at proxmox.com
Tue Jun 16 16:28:05 CEST 2020
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.bektas at 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 {
>
More information about the pve-devel
mailing list