[pve-devel] [PATCH common 1/5] jsonschema: register 'timezone' format and add verification method

Oguz Bektas o.bektas at proxmox.com
Tue Jun 16 15:36:29 CEST 2020


/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
+    push @valid_tzlist, 'UTC'; # not in $zonetab
+    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 {
-- 
2.20.1




More information about the pve-devel mailing list