[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