tzsetup: add baseline file to control parsed zonetab contents

Introduce undocumented option -d to dump parsed zonetab file contents
and add a "baseline" target along with instructions on updating it.

Reviewed by:	philip
Differential Revision:	https://reviews.freebsd.org/D39634
This commit is contained in:
Yuri Pankov 2023-04-23 10:31:53 +02:00
parent f70719fcbd
commit 336c4682b6
4 changed files with 733 additions and 2 deletions

View File

@ -29,6 +29,12 @@
# (write a meaningful commit message)
# $ git push freebsd HEAD:stable/12
#
#
# If there are changes to zone1970.tab, update the baseline file by running
# `make baseline` in usr.sbin/tzsetup to check if tzsetup is able to parse new
# contents (if not, report/fix tzsetup). Check that update does not
# introduce breaking/unexpected changes to continents/countries/zones,
# and commit the updated baseline file.
.include <src.opts.mk>

View File

@ -13,4 +13,10 @@ CFLAGS+= -I${SRCTOP}/contrib/bsddialog/lib -DHAVE_BSDDIALOG
LIBADD= bsddialog
.endif
ZONETAB= ${SRCTOP}/contrib/tzdata/zone1970.tab
baseline: ${PROG} ${ZONETAB}
${.OBJDIR}/${PROG} -d ${ZONETAB} > ${.CURDIR}/baseline
.PHONY: baseline
.include <bsd.prog.mk>

670
usr.sbin/tzsetup/baseline Normal file
View File

@ -0,0 +1,670 @@
AF:Afghanistan
Asia:Asia/Kabul
AL:Albania
Europe:Europe/Tirane
DZ:Algeria
Africa:Africa/Algiers
AS:American Samoa
Pacific:Pacific/Pago_Pago
AD:Andorra
Europe:Europe/Andorra
AO:Angola
Africa:Africa/Lagos
AI:Anguilla
America:America/Puerto_Rico
AQ:Antarctica
Antarctica:Antarctica/Casey
Antarctica:Antarctica/Davis
Antarctica:Antarctica/Mawson
Antarctica:Antarctica/Palmer
Antarctica:Antarctica/Rothera
Antarctica:Antarctica/Troll
Asia:Asia/Urumqi
Pacific:Pacific/Auckland
Pacific:Pacific/Port_Moresby
Asia:Asia/Riyadh
AG:Antigua and Barbuda
America:America/Puerto_Rico
AR:Argentina
America:America/Argentina/Buenos_Aires
America:America/Argentina/Cordoba
America:America/Argentina/Salta
America:America/Argentina/Jujuy
America:America/Argentina/Tucuman
America:America/Argentina/Catamarca
America:America/Argentina/La_Rioja
America:America/Argentina/San_Juan
America:America/Argentina/Mendoza
America:America/Argentina/San_Luis
America:America/Argentina/Rio_Gallegos
America:America/Argentina/Ushuaia
AM:Armenia
Asia:Asia/Yerevan
AW:Aruba
America:America/Puerto_Rico
AU:Australia
Australia:Australia/Lord_Howe
Antarctica:Antarctica/Macquarie
Australia:Australia/Hobart
Australia:Australia/Melbourne
Australia:Australia/Sydney
Australia:Australia/Broken_Hill
Australia:Australia/Brisbane
Australia:Australia/Lindeman
Australia:Australia/Adelaide
Australia:Australia/Darwin
Australia:Australia/Perth
Australia:Australia/Eucla
AT:Austria
Europe:Europe/Vienna
AZ:Azerbaijan
Asia:Asia/Baku
BS:Bahamas
America:America/Toronto
BH:Bahrain
Asia:Asia/Qatar
BD:Bangladesh
Asia:Asia/Dhaka
BB:Barbados
America:America/Barbados
BY:Belarus
Europe:Europe/Minsk
BE:Belgium
Europe:Europe/Brussels
BZ:Belize
America:America/Belize
BJ:Benin
Africa:Africa/Lagos
BM:Bermuda
Atlantic:Atlantic/Bermuda
BT:Bhutan
Asia:Asia/Thimphu
BO:Bolivia, Plurinational State of
America:America/La_Paz
BQ:Bonaire, Sint Eustatius and Saba
America:America/Puerto_Rico
BA:Bosnia and Herzegovina
Europe:Europe/Belgrade
BW:Botswana
Africa:Africa/Maputo
BV:Bouvet Island
BR:Brazil
America:America/Noronha
America:America/Belem
America:America/Fortaleza
America:America/Recife
America:America/Araguaina
America:America/Maceio
America:America/Bahia
America:America/Sao_Paulo
America:America/Campo_Grande
America:America/Cuiaba
America:America/Santarem
America:America/Porto_Velho
America:America/Boa_Vista
America:America/Manaus
America:America/Eirunepe
America:America/Rio_Branco
IO:British Indian Ocean Territory
Indian:Indian/Chagos
BN:Brunei Darussalam
Asia:Asia/Kuching
BG:Bulgaria
Europe:Europe/Sofia
BF:Burkina Faso
Africa:Africa/Abidjan
BI:Burundi
Africa:Africa/Maputo
CV:Cabo Verde
Atlantic:Atlantic/Cape_Verde
KH:Cambodia
Asia:Asia/Bangkok
CM:Cameroon
Africa:Africa/Lagos
CA:Canada
America:America/St_Johns
America:America/Halifax
America:America/Glace_Bay
America:America/Moncton
America:America/Goose_Bay
America:America/Toronto
America:America/Iqaluit
America:America/Winnipeg
America:America/Resolute
America:America/Rankin_Inlet
America:America/Regina
America:America/Swift_Current
America:America/Edmonton
America:America/Cambridge_Bay
America:America/Inuvik
America:America/Dawson_Creek
America:America/Fort_Nelson
America:America/Whitehorse
America:America/Dawson
America:America/Vancouver
America:America/Panama
America:America/Puerto_Rico
America:America/Phoenix
KY:Cayman Islands
America:America/Panama
CF:Central African Republic
Africa:Africa/Lagos
TD:Chad
Africa:Africa/Ndjamena
CL:Chile
America:America/Santiago
America:America/Punta_Arenas
Pacific:Pacific/Easter
CN:China
Asia:Asia/Shanghai
Asia:Asia/Urumqi
CX:Christmas Island
Asia:Asia/Bangkok
CC:Cocos (Keeling) Islands
Asia:Asia/Yangon
CO:Colombia
America:America/Bogota
KM:Comoros
Africa:Africa/Nairobi
CG:Congo
Africa:Africa/Lagos
CD:Congo, Democratic Republic of the
Africa:Africa/Maputo
Africa:Africa/Lagos
CK:Cook Islands
Pacific:Pacific/Rarotonga
CR:Costa Rica
America:America/Costa_Rica
HR:Croatia
Europe:Europe/Belgrade
CU:Cuba
America:America/Havana
CW:Curaçao
America:America/Puerto_Rico
CY:Cyprus
Asia:Asia/Nicosia
Asia:Asia/Famagusta
CZ:Czech Republic
Europe:Europe/Prague
CI:Côte d'Ivoire
Africa:Africa/Abidjan
DK:Denmark
Europe:Europe/Berlin
DJ:Djibouti
Africa:Africa/Nairobi
DM:Dominica
America:America/Puerto_Rico
DO:Dominican Republic
America:America/Santo_Domingo
EC:Ecuador
America:America/Guayaquil
Pacific:Pacific/Galapagos
EG:Egypt
Africa:Africa/Cairo
SV:El Salvador
America:America/El_Salvador
GQ:Equatorial Guinea
Africa:Africa/Lagos
ER:Eritrea
Africa:Africa/Nairobi
EE:Estonia
Europe:Europe/Tallinn
SZ:Eswatini
Africa:Africa/Johannesburg
ET:Ethiopia
Africa:Africa/Nairobi
FK:Falkland Islands (Malvinas)
Atlantic:Atlantic/Stanley
FO:Faroe Islands
Atlantic:Atlantic/Faroe
FJ:Fiji
Pacific:Pacific/Fiji
FI:Finland
Europe:Europe/Helsinki
FR:France
Europe:Europe/Paris
GF:French Guiana
America:America/Cayenne
PF:French Polynesia
Pacific:Pacific/Tahiti
Pacific:Pacific/Marquesas
Pacific:Pacific/Gambier
TF:French Southern Territories
Asia:Asia/Dubai
Indian:Indian/Maldives
GA:Gabon
Africa:Africa/Lagos
GM:Gambia
Africa:Africa/Abidjan
GE:Georgia
Asia:Asia/Tbilisi
DE:Germany
Europe:Europe/Zurich
Europe:Europe/Berlin
GH:Ghana
Africa:Africa/Abidjan
GI:Gibraltar
Europe:Europe/Gibraltar
GR:Greece
Europe:Europe/Athens
GL:Greenland
America:America/Nuuk
America:America/Danmarkshavn
America:America/Scoresbysund
America:America/Thule
GD:Grenada
America:America/Puerto_Rico
GP:Guadeloupe
America:America/Puerto_Rico
GU:Guam
Pacific:Pacific/Guam
GT:Guatemala
America:America/Guatemala
GG:Guernsey
Europe:Europe/London
GN:Guinea
Africa:Africa/Abidjan
GW:Guinea-Bissau
Africa:Africa/Bissau
GY:Guyana
America:America/Guyana
HT:Haiti
America:America/Port-au-Prince
HM:Heard Island and McDonald Islands
VA:Holy See
Europe:Europe/Rome
HN:Honduras
America:America/Tegucigalpa
HK:Hong Kong
Asia:Asia/Hong_Kong
HU:Hungary
Europe:Europe/Budapest
IS:Iceland
Africa:Africa/Abidjan
IN:India
Asia:Asia/Kolkata
ID:Indonesia
Asia:Asia/Jakarta
Asia:Asia/Pontianak
Asia:Asia/Makassar
Asia:Asia/Jayapura
IR:Iran (Islamic Republic of)
Asia:Asia/Tehran
IQ:Iraq
Asia:Asia/Baghdad
IE:Ireland
Europe:Europe/Dublin
IM:Isle of Man
Europe:Europe/London
IL:Israel
Asia:Asia/Jerusalem
IT:Italy
Europe:Europe/Rome
JM:Jamaica
America:America/Jamaica
JP:Japan
Asia:Asia/Tokyo
JE:Jersey
Europe:Europe/London
JO:Jordan
Asia:Asia/Amman
KZ:Kazakhstan
Asia:Asia/Almaty
Asia:Asia/Qyzylorda
Asia:Asia/Qostanay
Asia:Asia/Aqtobe
Asia:Asia/Aqtau
Asia:Asia/Atyrau
Asia:Asia/Oral
KE:Kenya
Africa:Africa/Nairobi
KI:Kiribati
Pacific:Pacific/Tarawa
Pacific:Pacific/Kanton
Pacific:Pacific/Kiritimati
KP:Korea (Democratic People's Republic of)
Asia:Asia/Pyongyang
KR:Korea (Republic of)
Asia:Asia/Seoul
KW:Kuwait
Asia:Asia/Riyadh
KG:Kyrgyzstan
Asia:Asia/Bishkek
LA:Lao People's Democratic Republic
Asia:Asia/Bangkok
LV:Latvia
Europe:Europe/Riga
LB:Lebanon
Asia:Asia/Beirut
LS:Lesotho
Africa:Africa/Johannesburg
LR:Liberia
Africa:Africa/Monrovia
LY:Libya
Africa:Africa/Tripoli
LI:Liechtenstein
Europe:Europe/Zurich
LT:Lithuania
Europe:Europe/Vilnius
LU:Luxembourg
Europe:Europe/Brussels
MO:Macao
Asia:Asia/Macau
MK:Macedonia (the former Yugoslav Republic of)
Europe:Europe/Belgrade
MG:Madagascar
Africa:Africa/Nairobi
MW:Malawi
Africa:Africa/Maputo
MY:Malaysia
Asia:Asia/Kuching
Asia:Asia/Singapore
MV:Maldives
Indian:Indian/Maldives
ML:Mali
Africa:Africa/Abidjan
MT:Malta
Europe:Europe/Malta
MH:Marshall Islands
Pacific:Pacific/Tarawa
Pacific:Pacific/Kwajalein
MQ:Martinique
America:America/Martinique
MR:Mauritania
Africa:Africa/Abidjan
MU:Mauritius
Indian:Indian/Mauritius
YT:Mayotte
Africa:Africa/Nairobi
MX:Mexico
America:America/Mexico_City
America:America/Cancun
America:America/Merida
America:America/Monterrey
America:America/Matamoros
America:America/Chihuahua
America:America/Ciudad_Juarez
America:America/Ojinaga
America:America/Mazatlan
America:America/Bahia_Banderas
America:America/Hermosillo
America:America/Tijuana
FM:Micronesia (Federated States of)
Pacific:Pacific/Kosrae
Pacific:Pacific/Port_Moresby
Pacific:Pacific/Guadalcanal
MD:Moldova (Republic of)
Europe:Europe/Chisinau
MC:Monaco
Europe:Europe/Paris
MN:Mongolia
Asia:Asia/Ulaanbaatar
Asia:Asia/Hovd
Asia:Asia/Choibalsan
ME:Montenegro
Europe:Europe/Belgrade
MS:Montserrat
America:America/Puerto_Rico
MA:Morocco
Africa:Africa/Casablanca
MZ:Mozambique
Africa:Africa/Maputo
MM:Myanmar
Asia:Asia/Yangon
NA:Namibia
Africa:Africa/Windhoek
NR:Nauru
Pacific:Pacific/Nauru
NP:Nepal
Asia:Asia/Kathmandu
NL:Netherlands
Europe:Europe/Brussels
NC:New Caledonia
Pacific:Pacific/Noumea
NZ:New Zealand
Pacific:Pacific/Auckland
Pacific:Pacific/Chatham
NI:Nicaragua
America:America/Managua
NE:Niger
Africa:Africa/Lagos
NG:Nigeria
Africa:Africa/Lagos
NU:Niue
Pacific:Pacific/Niue
NF:Norfolk Island
Pacific:Pacific/Norfolk
MP:Northern Mariana Islands
Pacific:Pacific/Guam
NO:Norway
Europe:Europe/Berlin
OM:Oman
Asia:Asia/Dubai
PK:Pakistan
Asia:Asia/Karachi
PW:Palau
Pacific:Pacific/Palau
PS:Palestine, State of
Asia:Asia/Gaza
Asia:Asia/Hebron
PA:Panama
America:America/Panama
PG:Papua New Guinea
Pacific:Pacific/Port_Moresby
Pacific:Pacific/Bougainville
PY:Paraguay
America:America/Asuncion
PE:Peru
America:America/Lima
PH:Philippines
Asia:Asia/Manila
PN:Pitcairn
Pacific:Pacific/Pitcairn
PL:Poland
Europe:Europe/Warsaw
PT:Portugal
Europe:Europe/Lisbon
Atlantic:Atlantic/Madeira
Atlantic:Atlantic/Azores
PR:Puerto Rico
America:America/Puerto_Rico
QA:Qatar
Asia:Asia/Qatar
RO:Romania
Europe:Europe/Bucharest
RU:Russian Federation
Europe:Europe/Kaliningrad
Europe:Europe/Moscow
Europe:Europe/Simferopol
Europe:Europe/Kirov
Europe:Europe/Volgograd
Europe:Europe/Astrakhan
Europe:Europe/Saratov
Europe:Europe/Ulyanovsk
Europe:Europe/Samara
Asia:Asia/Yekaterinburg
Asia:Asia/Omsk
Asia:Asia/Novosibirsk
Asia:Asia/Barnaul
Asia:Asia/Tomsk
Asia:Asia/Novokuznetsk
Asia:Asia/Krasnoyarsk
Asia:Asia/Irkutsk
Asia:Asia/Chita
Asia:Asia/Yakutsk
Asia:Asia/Khandyga
Asia:Asia/Vladivostok
Asia:Asia/Ust-Nera
Asia:Asia/Magadan
Asia:Asia/Sakhalin
Asia:Asia/Srednekolymsk
Asia:Asia/Kamchatka
Asia:Asia/Anadyr
RW:Rwanda
Africa:Africa/Maputo
RE:Réunion
Asia:Asia/Dubai
BL:Saint Barthélemy
America:America/Puerto_Rico
SH:Saint Helena Ascension and Tristan da Cunha
Africa:Africa/Abidjan
KN:Saint Kitts and Nevis
America:America/Puerto_Rico
LC:Saint Lucia
America:America/Puerto_Rico
MF:Saint Martin (French part)
America:America/Puerto_Rico
PM:Saint Pierre and Miquelon
America:America/Miquelon
VC:Saint Vincent and the Grenadines
America:America/Puerto_Rico
WS:Samoa
Pacific:Pacific/Apia
SM:San Marino
Europe:Europe/Rome
ST:Sao Tome and Principe
Africa:Africa/Sao_Tome
SA:Saudi Arabia
Asia:Asia/Riyadh
SN:Senegal
Africa:Africa/Abidjan
RS:Serbia
Europe:Europe/Belgrade
SC:Seychelles
Asia:Asia/Dubai
SL:Sierra Leone
Africa:Africa/Abidjan
SG:Singapore
Asia:Asia/Singapore
SX:Sint Maarten (Dutch part)
America:America/Puerto_Rico
SK:Slovakia
Europe:Europe/Prague
SI:Slovenia
Europe:Europe/Belgrade
SB:Solomon Islands
Pacific:Pacific/Guadalcanal
SO:Somalia
Africa:Africa/Nairobi
ZA:South Africa
Africa:Africa/Johannesburg
GS:South Georgia and the South Sandwich Islands
Atlantic:Atlantic/South_Georgia
SS:South Sudan
Africa:Africa/Juba
ES:Spain
Europe:Europe/Madrid
Africa:Africa/Ceuta
Atlantic:Atlantic/Canary
LK:Sri Lanka
Asia:Asia/Colombo
SD:Sudan
Africa:Africa/Khartoum
SR:Suriname
America:America/Paramaribo
SJ:Svalbard and Jan Mayen
Europe:Europe/Berlin
SE:Sweden
Europe:Europe/Berlin
CH:Switzerland
Europe:Europe/Zurich
SY:Syrian Arab Republic
Asia:Asia/Damascus
TW:Taiwan
Asia:Asia/Taipei
TJ:Tajikistan
Asia:Asia/Dushanbe
TZ:Tanzania United Republic of
Africa:Africa/Nairobi
TH:Thailand
Asia:Asia/Bangkok
TL:Timor-Leste
Asia:Asia/Dili
TG:Togo
Africa:Africa/Abidjan
TK:Tokelau
Pacific:Pacific/Fakaofo
TO:Tonga
Pacific:Pacific/Tongatapu
TT:Trinidad and Tobago
America:America/Puerto_Rico
TN:Tunisia
Africa:Africa/Tunis
TR:Turkey
Europe:Europe/Istanbul
TM:Turkmenistan
Asia:Asia/Ashgabat
TC:Turks and Caicos Islands
America:America/Grand_Turk
TV:Tuvalu
Pacific:Pacific/Tarawa
UG:Uganda
Africa:Africa/Nairobi
UA:Ukraine
Europe:Europe/Simferopol
Europe:Europe/Kyiv
AE:United Arab Emirates
Asia:Asia/Dubai
GB:United Kingdom of Great Britain and Northern Ireland
Europe:Europe/London
UM:United States Minor Outlying Islands
Pacific:Pacific/Pago_Pago
Pacific:Pacific/Tarawa
US:United States of America
America:America/New_York
America:America/Detroit
America:America/Kentucky/Louisville
America:America/Kentucky/Monticello
America:America/Indiana/Indianapolis
America:America/Indiana/Vincennes
America:America/Indiana/Winamac
America:America/Indiana/Marengo
America:America/Indiana/Petersburg
America:America/Indiana/Vevay
America:America/Chicago
America:America/Indiana/Tell_City
America:America/Indiana/Knox
America:America/Menominee
America:America/North_Dakota/Center
America:America/North_Dakota/New_Salem
America:America/North_Dakota/Beulah
America:America/Denver
America:America/Boise
America:America/Phoenix
America:America/Los_Angeles
America:America/Anchorage
America:America/Juneau
America:America/Sitka
America:America/Metlakatla
America:America/Yakutat
America:America/Nome
America:America/Adak
Pacific:Pacific/Honolulu
UY:Uruguay
America:America/Montevideo
UZ:Uzbekistan
Asia:Asia/Samarkand
Asia:Asia/Tashkent
VU:Vanuatu
Pacific:Pacific/Efate
VE:Venezuela, Bolivarian Republic of
America:America/Caracas
VN:Viet Nam
Asia:Asia/Bangkok
Asia:Asia/Ho_Chi_Minh
VG:Virgin Islands (British)
America:America/Puerto_Rico
VI:Virgin Islands (U.S.)
America:America/Puerto_Rico
WF:Wallis and Futuna
Pacific:Pacific/Tarawa
EH:Western Sahara
Africa:Africa/El_Aaiun
YE:Yemen
Asia:Asia/Riyadh
ZM:Zambia
Africa:Africa/Maputo
ZW:Zimbabwe
Africa:Africa/Maputo
AX:Åland Islands
Europe:Europe/Helsinki

View File

@ -32,6 +32,11 @@
* files provided in newer tzdata releases.
*/
/*
* When making changes to parser code, run baseline target, check that there are
* no unintended changes and commit updated file.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
@ -244,6 +249,17 @@ find_continent(const char *name)
return (0);
}
static const char *
find_continent_name(struct continent *cont)
{
int i;
for (i = 0; i < NCONTINENTS; i++)
if (cont == continent_names[i].continent)
return (continent_names[i].name);
return ("Unknown");
}
struct country {
char *name;
char *tlc;
@ -783,6 +799,27 @@ install_zoneinfo(const char *zoneinfo)
return (rv);
}
static void
dump_zonetab(void)
{
struct country *cp;
struct zone *zp;
const char *cont;
for (cp = countries; cp->name != NULL; cp++) {
printf("%s:%s\n", cp->tlc, cp->name);
if (cp->nzones < 0) {
cont = find_continent_name(cp->continent);
printf(" %s:%s\n", cont, cp->filename);
} else {
TAILQ_FOREACH(zp, &cp->zones, link) {
cont = find_continent_name(zp->continent);
printf(" %s:%s\n", cont, zp->filename);
}
}
}
}
static void
usage(void)
{
@ -802,7 +839,9 @@ main(int argc, char **argv)
int c, rv, skiputc;
char vm_guest[16] = "";
size_t len = sizeof(vm_guest);
char *dztpath;
dztpath = NULL;
skiputc = 0;
#ifdef HAVE_BSDDIALOG
@ -814,11 +853,14 @@ main(int argc, char **argv)
strcmp(vm_guest, "none") != 0)
skiputc = 1;
while ((c = getopt(argc, argv, "C:nrs")) != -1) {
while ((c = getopt(argc, argv, "C:d:nrs")) != -1) {
switch(c) {
case 'C':
chrootenv = optarg;
break;
case 'd':
dztpath = optarg;
break;
case 'n':
reallydoit = 0;
break;
@ -840,7 +882,10 @@ main(int argc, char **argv)
usage();
if (chrootenv == NULL) {
strcpy(path_zonetab, _PATH_ZONETAB);
if (dztpath == NULL)
strcpy(path_zonetab, _PATH_ZONETAB);
else
strlcpy(path_zonetab, dztpath, sizeof(path_zonetab));
strcpy(path_iso3166, _PATH_ISO3166);
strcpy(path_zoneinfo, _PATH_ZONEINFO);
strcpy(path_localtime, _PATH_LOCALTIME);
@ -902,6 +947,10 @@ main(int argc, char **argv)
read_iso3166_table();
read_zones();
sort_countries();
if (dztpath != NULL) {
dump_zonetab();
return (0);
}
make_menus();
bsddialog_initconf(&conf);