Compare commits
26 Commits
6ab6b7c2a4
...
404337736d
Author | SHA1 | Date | |
---|---|---|---|
|
404337736d | ||
|
13b8fe5dcd | ||
|
4f19a40541 | ||
|
ad43a49a86 | ||
|
08d499dd70 | ||
|
22954f3f10 | ||
|
421819df94 | ||
|
89aa88a2ff | ||
|
3a3649ec3f | ||
|
c8c2762402 | ||
|
753d65a19a | ||
|
10571c04c9 | ||
|
66c7b53d95 | ||
|
95499c4561 | ||
|
a1e014e892 | ||
|
c3c13035ef | ||
|
e81b1bd17f | ||
|
8838c650cb | ||
|
1ee7e4ba70 | ||
|
0bcdf24a7c | ||
|
c4b78085d8 | ||
|
b6aebce51f | ||
|
dd35207e20 | ||
|
fff5c5fe91 | ||
|
4867d7d34d | ||
|
7ab877cb3f |
@ -12636,6 +12636,7 @@ OLD_FILES+=usr/share/zoneinfo/SystemV/EST5
|
||||
OLD_FILES+=usr/share/zoneinfo/SystemV/AST4ADT
|
||||
OLD_FILES+=usr/share/zoneinfo/SystemV/CST6
|
||||
OLD_FILES+=usr/share/zoneinfo/SystemV/AST4
|
||||
OLD_DIRS+=usr/share/zoneinfo/SystemV
|
||||
OLD_FILES+=usr/share/doc/ntp/accopt.htm
|
||||
OLD_FILES+=usr/share/doc/ntp/assoc.htm
|
||||
OLD_FILES+=usr/share/doc/ntp/audio.htm
|
||||
|
36
UPDATING
36
UPDATING
@ -12,6 +12,42 @@ Items affecting the ports and packages system can be found in
|
||||
/usr/ports/UPDATING. Please read that file before updating system packages
|
||||
and/or ports.
|
||||
|
||||
20221129:
|
||||
13.1-RELEASE-p5 FreeBSD-SA-22:15.ping
|
||||
FreeBSD-EN-22:28.heimdal
|
||||
|
||||
Stack overflow in ping [SA-22:15.ping]
|
||||
|
||||
Regression in Heimdal KDC [EN-22:28.heimdal]
|
||||
|
||||
20221116:
|
||||
13.1-RELEASE-p4 FreeBSD-SA-22:14.heimdal
|
||||
|
||||
Multiple vulnerabilities in Heimdal [SA-22:14.heimdal]
|
||||
|
||||
20221101:
|
||||
13.1-RELEASE-p3 FreeBSD-EN-22:21.zfs
|
||||
FreeBSD-EN-22:22.tzdata
|
||||
FreeBSD-EN-22:23.vm
|
||||
FreeBSD-EN-22:24.zfs
|
||||
FreeBSD-EN-22:25.tcp
|
||||
FreeBSD-EN-22:26.cam
|
||||
FreeBSD-EN-22:27.loader
|
||||
|
||||
ZFS B-Tree use-after-free [EN-22:21.zfs]
|
||||
|
||||
Timezone database information update [EN-22:22.tzdata]
|
||||
|
||||
Memory pages become unreclaimable [EN-22:23.vm]
|
||||
|
||||
ZFS snapshot directories not accessible over NFS [EN-22:24.zfs]
|
||||
|
||||
Possible data corruption with TCP SACK retransmissions [EN-22:25.tcp]
|
||||
|
||||
CAM ioctl(2) compatibility breakage [EN-22:26.cam]
|
||||
|
||||
UEFI loader failing to boot older amd64 kernels [EN-22:27.loader]
|
||||
|
||||
20220830:
|
||||
13.1-RELEASE-p2 FreeBSD-SA-22:13.zlib
|
||||
FreeBSD-EN-22:20.tzdata
|
||||
|
@ -210,7 +210,8 @@ LDLIBS=
|
||||
# -DHAVE_DECL_ENVIRON if <unistd.h> declares 'environ'
|
||||
# -DHAVE_DIRECT_H if mkdir needs <direct.h> (MS-Windows)
|
||||
# -DHAVE_GENERIC=0 if _Generic does not work
|
||||
# -DHAVE_GETTEXT if 'gettext' works (e.g., GNU/Linux, FreeBSD, Solaris)
|
||||
# -DHAVE_GETRANDOM if getgrandom works (e.g., GNU/Linux)*
|
||||
# -DHAVE_GETTEXT if 'gettext' works (e.g., GNU/Linux, FreeBSD, Solaris)*
|
||||
# -DHAVE_INCOMPATIBLE_CTIME_R if your system's time.h declares
|
||||
# ctime_r and asctime_r incompatibly with the POSIX standard
|
||||
# (Solaris when _POSIX_PTHREAD_SEMANTICS is not defined).
|
||||
@ -222,16 +223,17 @@ LDLIBS=
|
||||
# -DHAVE_MALLOC_ERRNO=0 if malloc etc. do not set errno on failure.
|
||||
# -DHAVE_POSIX_DECLS=0 if your system's include files do not declare
|
||||
# functions like 'link' or variables like 'tzname' required by POSIX
|
||||
# -DHAVE_SETENV=0 if your system lacks the setenv function
|
||||
# -DHAVE_SNPRINTF=0 if your system lacks the snprintf function
|
||||
# -DHAVE_STDBOOL_H if you have a non-C99 compiler with <stdbool.h>
|
||||
# -DHAVE_STDINT_H if you have a non-C99 compiler with <stdint.h>
|
||||
# -DHAVE_STDINT_H if you have a non-C99 compiler with <stdint.h>*
|
||||
# -DHAVE_STRFTIME_L if <time.h> declares locale_t and strftime_l
|
||||
# -DHAVE_STRDUP=0 if your system lacks the strdup function
|
||||
# -DHAVE_STRTOLL=0 if your system lacks the strtoll function
|
||||
# -DHAVE_SYMLINK=0 if your system lacks the symlink function
|
||||
# -DHAVE_SYS_STAT_H=0 if your compiler lacks a <sys/stat.h>
|
||||
# -DHAVE_SYS_STAT_H=0 if your compiler lacks a <sys/stat.h>*
|
||||
# -DHAVE_TZSET=0 if your system lacks a tzset function
|
||||
# -DHAVE_UNISTD_H=0 if your compiler lacks a <unistd.h>
|
||||
# -DHAVE_UNISTD_H=0 if your compiler lacks a <unistd.h>*
|
||||
# -DHAVE_UTMPX_H=0 if your compiler lacks a <utmpx.h>*
|
||||
# -Dlocale_t=XXX if your system uses XXX instead of locale_t
|
||||
# -DRESERVE_STD_EXT_IDS if your platform reserves standard identifiers
|
||||
# with external linkage, e.g., applications cannot define 'localtime'.
|
||||
@ -254,14 +256,17 @@ LDLIBS=
|
||||
# Also set TZDOBJS=zdump.o and CHECK_TIME_T_ALTERNATIVES= below.
|
||||
# -DZIC_BLOAT_DEFAULT=\"fat\" to default zic's -b option to "fat", and
|
||||
# similarly for "slim". Fat TZif files work around incompatibilities
|
||||
# and bugs in some TZif readers, notably readers that mishandle 64-bit
|
||||
# data in TZif files. Slim TZif files are more efficient and do not
|
||||
# work around these incompatibilities and bugs. If not given, the
|
||||
# default is "slim".
|
||||
# and bugs in some TZif readers, notably older ones that
|
||||
# ignore or otherwise mishandle 64-bit data in TZif files;
|
||||
# however, fat TZif files may trigger bugs in newer TZif readers.
|
||||
# Slim TZif files are more efficient, and are the default.
|
||||
# -DZIC_MAX_ABBR_LEN_WO_WARN=3
|
||||
# (or some other number) to set the maximum time zone abbreviation length
|
||||
# that zic will accept without a warning (the default is 6)
|
||||
# $(GCC_DEBUG_FLAGS) if you are using recent GCC and want lots of checking
|
||||
#
|
||||
# * Options marked "*" can be omitted if your compiler is C23 compatible.
|
||||
#
|
||||
# Select instrumentation via "make GCC_INSTRUMENT='whatever'".
|
||||
GCC_INSTRUMENT = \
|
||||
-fsanitize=undefined -fsanitize-address-use-after-scope \
|
||||
@ -397,8 +402,9 @@ ZIC= $(zic) $(ZFLAGS)
|
||||
|
||||
# To shrink the size of installed TZif files,
|
||||
# append "-r @N" to omit data before N-seconds-after-the-Epoch.
|
||||
# To grow the files and work around older application bugs, append "-b fat";
|
||||
# see ZIC_BLOAT_DEFAULT above.
|
||||
# To grow the files and work around bugs in older applications,
|
||||
# possibly at the expense of introducing bugs in newer ones,
|
||||
# append "-b fat"; see ZIC_BLOAT_DEFAULT above.
|
||||
# See the zic man page for more about -b and -r.
|
||||
ZFLAGS=
|
||||
|
||||
@ -818,13 +824,19 @@ check_slashed_abbrs: $(TDATA_TO_CHECK)
|
||||
CHECK_CC_LIST = { n = split($$1,a,/,/); for (i=2; i<=n; i++) print a[1], a[i]; }
|
||||
|
||||
check_sorted: backward backzone iso3166.tab zone.tab zone1970.tab
|
||||
$(AWK) '/^Link/ {print $$3}' backward | LC_ALL=C sort -cu
|
||||
$(AWK) '/^Link/ {printf "%.5d %s\n", g, $$3} /^$$/ {g++}' \
|
||||
backward | LC_ALL=C sort -cu
|
||||
$(AWK) '/^Zone/ {print $$2}' backzone | LC_ALL=C sort -cu
|
||||
touch $@
|
||||
|
||||
check_links: checklinks.awk $(TDATA_TO_CHECK) tzdata.zi
|
||||
$(AWK) -f checklinks.awk $(TDATA_TO_CHECK)
|
||||
$(AWK) -f checklinks.awk tzdata.zi
|
||||
$(AWK) \
|
||||
-v DATAFORM=$(DATAFORM) \
|
||||
-v backcheck=backward \
|
||||
-f checklinks.awk $(TDATA_TO_CHECK)
|
||||
$(AWK) \
|
||||
-v DATAFORM=$(DATAFORM) \
|
||||
-f checklinks.awk tzdata.zi
|
||||
touch $@
|
||||
|
||||
check_tables: checktab.awk $(YDATA) backward $(ZONETABLES)
|
||||
|
@ -1,5 +1,149 @@
|
||||
News for the tz database
|
||||
|
||||
Release 2022f - 2022-10-28 18:04:57 -0700
|
||||
|
||||
Briefly:
|
||||
Mexico will no longer observe DST except near the US border.
|
||||
Chihuahua moves to year-round -06 on 2022-10-30.
|
||||
Fiji no longer observes DST.
|
||||
Move links to 'backward'.
|
||||
In vanguard form, GMT is now a Zone and Etc/GMT a link.
|
||||
zic now supports links to links, and vanguard form uses this.
|
||||
Simplify four Ontario zones.
|
||||
Fix a Y2438 bug when reading TZif data.
|
||||
Enable 64-bit time_t on 32-bit glibc platforms.
|
||||
Omit large-file support when no longer needed.
|
||||
In C code, use some C23 features if available.
|
||||
Remove no-longer-needed workaround for Qt bug 53071.
|
||||
|
||||
Changes to future timestamps.
|
||||
|
||||
Mexico will no longer observe DST after 2022, except for areas
|
||||
near the US border that continue to observe US DST rules.
|
||||
On 2022-10-30 at 02:00 the Mexican state of Chihuahua moves
|
||||
from -07 (-06 with DST) to year-round -06, thus not changing
|
||||
its clocks that day. The new law states that Chihuahua
|
||||
near the US border no longer observes US DST.
|
||||
|
||||
Fiji will not observe DST in 2022/3. (Thanks to Shalvin Narayan.)
|
||||
For now, assume DST is suspended indefinitely.
|
||||
|
||||
Changes to data
|
||||
|
||||
Move links to 'backward' to ease and simplify link maintenance.
|
||||
This affects generated data only if you use 'make BACKWARD='.
|
||||
|
||||
GMT is now a Zone and Etc/GMT a link instead of vice versa,
|
||||
as GMT is needed for leap second support whereas Etc/GMT is not.
|
||||
However, this change exposes a bug in TZUpdater 2.3.2 so it is
|
||||
present only in vanguard form for now.
|
||||
|
||||
Vanguard form now uses links to links, as zic now supports this.
|
||||
|
||||
Changes to past timestamps
|
||||
|
||||
Simplify four Ontario zones, as most of the post-1970 differences
|
||||
seem to have been imaginary. (Problem reported by Chris Walton.)
|
||||
Move America/Nipigon, America/Rainy_River, and America/Thunder_Bay
|
||||
to 'backzone'; backward-compatibility links still work, albeit
|
||||
with some different timestamps before November 2005.
|
||||
|
||||
Changes to code
|
||||
|
||||
zic now supports links to links regardless of input line order.
|
||||
For example, if Australia/Sydney is a Zone, the lines
|
||||
Link Australia/Canberra Australia/ACT
|
||||
Link Australia/Sydney Australia/Canberra
|
||||
now work correctly, even though the shell commands
|
||||
ln Australia/Canberra Australia/ACT
|
||||
ln Australia/Sydney Australia/Canberra
|
||||
would fail because the first command attempts to use a link
|
||||
Australia/Canberra that does not exist until after the second
|
||||
command is executed. Previously, zic had unspecified behavior if
|
||||
a Link line's target was another link, and zic often misbehaved if
|
||||
a Link line's target was a later Link line.
|
||||
|
||||
Fix line number in zic's diagnostic for a link to a link.
|
||||
|
||||
Fix a bug that caused localtime to mishandle timestamps starting
|
||||
in the year 2438 when reading data generated by 'zic -b fat' when
|
||||
distant-future DST transitions occur at times given in standard
|
||||
time or in UT, not the usual case of local time. This occurs when
|
||||
the corresponding .zi Rule lines specify DST transitions with TO
|
||||
columns of 'max' and AT columns that end in 's' or 'u'. The
|
||||
number 2438 comes from the 32-bit limit in the year 2038, plus the
|
||||
400-year Gregorian cycle. (Problem reported by Bradley White.)
|
||||
|
||||
On glibc 2.34 and later, which optionally supports 64-bit time_t
|
||||
on platforms like x86 where time_t was traditionally 32 bits,
|
||||
default time_t to 64 instead of 32 bits. This lets functions like
|
||||
localtime support timestamps after the year 2038, and fixes
|
||||
year-2038 problems in zic when accessing files dated after 2038.
|
||||
To continue to limit time_t to 32 bits on these platforms, use
|
||||
"make CFLAGS='-D_TIME_BITS=32'".
|
||||
|
||||
In C code, do not enable large-file support on platforms like AIX
|
||||
and macOS that no longer need it now that tzcode does not use
|
||||
off_t or related functions like 'stat'. Large-file support is
|
||||
still enabled by default on GNU/Linux, as it is needed for 64-bit
|
||||
time_t support.
|
||||
|
||||
In C code, prefer C23 keywords to pre-C23 macros for alignof,
|
||||
bool, false, and true. Also, use the following C23 features if
|
||||
available: __has_include, unreachable.
|
||||
|
||||
zic no longer works around Qt bug 53071, as the relevant Qt
|
||||
releases have been out of support since 2019. This change affects
|
||||
only fat TZif files, as thin files never had the workaround.
|
||||
|
||||
zdump no longer modifies the environ vector when compiled on
|
||||
platforms lacking tm_zone or when compiled with -DUSE_LTZ=0.
|
||||
This avoid undefined behavior on POSIX platforms.
|
||||
|
||||
|
||||
Release 2022e - 2022-10-11 11:13:02 -0700
|
||||
|
||||
Briefly:
|
||||
Jordan and Syria switch from +02/+03 with DST to year-round +03.
|
||||
|
||||
Changes to future timestamps
|
||||
|
||||
Jordan and Syria are abandoning the DST regime and are changing to
|
||||
permanent +03, so they will not fall back from +03 to +02 on
|
||||
2022-10-28. (Thanks to Steffen Thorsen and Issam Al-Zuwairi.)
|
||||
|
||||
Changes to past timestamps
|
||||
|
||||
On 1922-01-01 Tijuana adopted standard time at 00:00, not 01:00.
|
||||
|
||||
Changes to past time zone abbreviations and DST flags
|
||||
|
||||
The temporary advancement of clocks in central Mexico in summer
|
||||
1931 is now treated as daylight saving time, instead of as two
|
||||
changes to standard time.
|
||||
|
||||
|
||||
Release 2022d - 2022-09-23 12:02:57 -0700
|
||||
|
||||
Briefly:
|
||||
Palestine transitions are now Saturdays at 02:00.
|
||||
Simplify three Ukraine zones into one.
|
||||
|
||||
Changes to future timestamps
|
||||
|
||||
Palestine now springs forward and falls back at 02:00 on the
|
||||
first Saturday on or after March 24 and October 24, respectively.
|
||||
This means 2022 falls back 10-29 at 02:00, not 10-28 at 01:00.
|
||||
(Thanks to Heba Hamad.)
|
||||
|
||||
Changes to past timestamps
|
||||
|
||||
Simplify three Ukraine zones to one, since the post-1970
|
||||
differences seem to have been imaginary. Move Europe/Uzhgorod and
|
||||
Europe/Zaporozhye to 'backzone'; backward-compatibility links
|
||||
still work, albeit with different timestamps before October 1991.
|
||||
|
||||
|
||||
Release 2022c - 2022-08-15 17:47:18 -0700
|
||||
|
||||
Briefly:
|
||||
|
@ -97,22 +97,6 @@ Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 16
|
||||
0:00 Algeria WE%sT 1981 May
|
||||
1:00 - CET
|
||||
|
||||
# Angola
|
||||
# Benin
|
||||
# See Africa/Lagos.
|
||||
|
||||
# Botswana
|
||||
# See Africa/Maputo.
|
||||
|
||||
# Burkina Faso
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Burundi
|
||||
# See Africa/Maputo.
|
||||
|
||||
# Cameroon
|
||||
# See Africa/Lagos.
|
||||
|
||||
# Cape Verde / Cabo Verde
|
||||
#
|
||||
# From Paul Eggert (2018-02-16):
|
||||
@ -127,9 +111,6 @@ Zone Atlantic/Cape_Verde -1:34:04 - LMT 1912 Jan 01 2:00u # Praia
|
||||
-2:00 - -02 1975 Nov 25 2:00
|
||||
-1:00 - -01
|
||||
|
||||
# Central African Republic
|
||||
# See Africa/Lagos.
|
||||
|
||||
# Chad
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena
|
||||
@ -137,33 +118,29 @@ Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena
|
||||
1:00 1:00 WAST 1980 Mar 8
|
||||
1:00 - WAT
|
||||
|
||||
# Comoros
|
||||
# See Africa/Nairobi.
|
||||
# Burkina Faso
|
||||
# Côte d'Ivoire (Ivory Coast)
|
||||
# The Gambia
|
||||
# Ghana
|
||||
# Guinea
|
||||
# Iceland
|
||||
# Mali
|
||||
# Mauritania
|
||||
# St Helena
|
||||
# Senegal
|
||||
# Sierra Leone
|
||||
# Togo
|
||||
|
||||
# Democratic Republic of the Congo
|
||||
# See Africa/Lagos for the western part and Africa/Maputo for the eastern.
|
||||
# The other parts of the St Helena territory are similar:
|
||||
# Tristan da Cunha: on GMT, say Whitman and the CIA
|
||||
# Ascension: on GMT, say the USNO (1995-12-21) and the CIA
|
||||
# Gough (scientific station since 1955; sealers wintered previously):
|
||||
# on GMT, says the CIA
|
||||
# Inaccessible, Nightingale: uninhabited
|
||||
|
||||
# Republic of the Congo
|
||||
# See Africa/Lagos.
|
||||
|
||||
# Côte d'Ivoire / Ivory Coast
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Abidjan -0:16:08 - LMT 1912
|
||||
0:00 - GMT
|
||||
Link Africa/Abidjan Africa/Accra # Ghana
|
||||
Link Africa/Abidjan Africa/Bamako # Mali
|
||||
Link Africa/Abidjan Africa/Banjul # The Gambia
|
||||
Link Africa/Abidjan Africa/Conakry # Guinea
|
||||
Link Africa/Abidjan Africa/Dakar # Senegal
|
||||
Link Africa/Abidjan Africa/Freetown # Sierra Leone
|
||||
Link Africa/Abidjan Africa/Lome # Togo
|
||||
Link Africa/Abidjan Africa/Nouakchott # Mauritania
|
||||
Link Africa/Abidjan Africa/Ouagadougou # Burkina Faso
|
||||
Link Africa/Abidjan Atlantic/Reykjavik # Iceland
|
||||
Link Africa/Abidjan Atlantic/St_Helena # St Helena
|
||||
|
||||
# Djibouti
|
||||
# See Africa/Nairobi.
|
||||
|
||||
###############################################################################
|
||||
|
||||
@ -359,33 +336,6 @@ Rule Egypt 2014 only - Sep lastThu 24:00 0 -
|
||||
Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
|
||||
2:00 Egypt EE%sT
|
||||
|
||||
# Equatorial Guinea
|
||||
# See Africa/Lagos.
|
||||
|
||||
# Eritrea
|
||||
# See Africa/Nairobi.
|
||||
|
||||
# Eswatini (formerly Swaziland)
|
||||
# See Africa/Johannesburg.
|
||||
|
||||
# Ethiopia
|
||||
# See Africa/Nairobi.
|
||||
#
|
||||
# Unfortunately tzdb records only Western clock time in use in Ethiopia,
|
||||
# as the tzdb format is not up to properly recording a common Ethiopian
|
||||
# timekeeping practice that is based on solar time. See:
|
||||
# Mortada D. If you have a meeting in Ethiopia, you'd better double
|
||||
# check the time. PRI's The World. 2015-01-30 15:15 -05.
|
||||
# https://www.pri.org/stories/2015-01-30/if-you-have-meeting-ethiopia-you-better-double-check-time
|
||||
|
||||
# Gabon
|
||||
# See Africa/Lagos.
|
||||
|
||||
# The Gambia
|
||||
# Ghana
|
||||
# Guinea
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Guinea-Bissau
|
||||
#
|
||||
# From Paul Eggert (2018-02-16):
|
||||
@ -398,7 +348,16 @@ Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
|
||||
-1:00 - -01 1975
|
||||
0:00 - GMT
|
||||
|
||||
# Comoros
|
||||
# Djibouti
|
||||
# Eritrea
|
||||
# Ethiopia
|
||||
# Kenya
|
||||
# Madagascar
|
||||
# Mayotte
|
||||
# Somalia
|
||||
# Tanzania
|
||||
# Uganda
|
||||
|
||||
# From P Chan (2020-10-24):
|
||||
#
|
||||
@ -441,6 +400,14 @@ Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
|
||||
# The 1908-05-01 announcement does not give an effective date,
|
||||
# so just say "1908 May".
|
||||
|
||||
# From Paul Eggert (2018-09-11):
|
||||
# Unfortunately tzdb records only Western clock time in use in Ethiopia,
|
||||
# as the tzdb format is not up to properly recording a common Ethiopian
|
||||
# timekeeping practice that is based on solar time. See:
|
||||
# Mortada D. If you have a meeting in Ethiopia, you'd better double
|
||||
# check the time. PRI's The World. 2015-01-30 15:15 -05.
|
||||
# https://www.pri.org/stories/2015-01-30/if-you-have-meeting-ethiopia-you-better-double-check-time
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Nairobi 2:27:16 - LMT 1908 May
|
||||
2:30 - +0230 1928 Jun 30 24:00
|
||||
@ -448,18 +415,6 @@ Zone Africa/Nairobi 2:27:16 - LMT 1908 May
|
||||
2:30 - +0230 1936 Dec 31 24:00
|
||||
2:45 - +0245 1942 Jul 31 24:00
|
||||
3:00 - EAT
|
||||
Link Africa/Nairobi Africa/Addis_Ababa # Ethiopia
|
||||
Link Africa/Nairobi Africa/Asmara # Eritrea
|
||||
Link Africa/Nairobi Africa/Dar_es_Salaam # Tanzania
|
||||
Link Africa/Nairobi Africa/Djibouti
|
||||
Link Africa/Nairobi Africa/Kampala # Uganda
|
||||
Link Africa/Nairobi Africa/Mogadishu # Somalia
|
||||
Link Africa/Nairobi Indian/Antananarivo # Madagascar
|
||||
Link Africa/Nairobi Indian/Comoro
|
||||
Link Africa/Nairobi Indian/Mayotte
|
||||
|
||||
# Lesotho
|
||||
# See Africa/Johannesburg.
|
||||
|
||||
# Liberia
|
||||
#
|
||||
@ -540,16 +495,6 @@ Zone Africa/Tripoli 0:52:44 - LMT 1920
|
||||
1:00 Libya CE%sT 2013 Oct 25 2:00
|
||||
2:00 - EET
|
||||
|
||||
# Madagascar
|
||||
# See Africa/Nairobi.
|
||||
|
||||
# Malawi
|
||||
# See Africa/Maputo.
|
||||
|
||||
# Mali
|
||||
# Mauritania
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Mauritius
|
||||
|
||||
# From Steffen Thorsen (2008-06-25):
|
||||
@ -643,12 +588,6 @@ Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
|
||||
# Agalega Is, Rodriguez
|
||||
# no information; probably like Indian/Mauritius
|
||||
|
||||
# Mayotte
|
||||
# See Africa/Nairobi.
|
||||
|
||||
# Morocco
|
||||
# See Africa/Ceuta for Spanish Morocco.
|
||||
|
||||
# From Alex Krivenyshev (2008-05-09):
|
||||
# Here is an article that Morocco plan to introduce Daylight Saving Time between
|
||||
# 1 June, 2008 and 27 September, 2008.
|
||||
@ -1137,7 +1076,14 @@ Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
|
||||
0:00 Morocco +00/+01 2018 Oct 28 3:00
|
||||
1:00 Morocco +01/+00
|
||||
|
||||
# Botswana
|
||||
# Burundi
|
||||
# Democratic Republic of the Congo (eastern)
|
||||
# Malawi
|
||||
# Mozambique
|
||||
# Rwanda
|
||||
# Zambia
|
||||
# Zimbabwe
|
||||
#
|
||||
# Shanks gives 1903-03-01 for the transition to CAT.
|
||||
# Perhaps the 1911-05-26 Portuguese decree
|
||||
@ -1147,14 +1093,6 @@ Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
|
||||
2:00 - CAT
|
||||
Link Africa/Maputo Africa/Blantyre # Malawi
|
||||
Link Africa/Maputo Africa/Bujumbura # Burundi
|
||||
Link Africa/Maputo Africa/Gaborone # Botswana
|
||||
Link Africa/Maputo Africa/Harare # Zimbabwe
|
||||
Link Africa/Maputo Africa/Kigali # Rwanda
|
||||
Link Africa/Maputo Africa/Lubumbashi # E Dem. Rep. of Congo
|
||||
Link Africa/Maputo Africa/Lusaka # Zambia
|
||||
|
||||
|
||||
# Namibia
|
||||
|
||||
@ -1233,9 +1171,16 @@ Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
|
||||
# 2:00 - CAT
|
||||
# End of rearguard section.
|
||||
|
||||
# Niger
|
||||
# See Africa/Lagos.
|
||||
|
||||
# Angola
|
||||
# Benin
|
||||
# Cameroon
|
||||
# Central African Republic
|
||||
# Democratic Republic of the Congo (western)
|
||||
# Republic of the Congo
|
||||
# Equatorial Guinea
|
||||
# Gabon
|
||||
# Niger
|
||||
# Nigeria
|
||||
|
||||
# From P Chan (2020-12-03):
|
||||
@ -1301,32 +1246,6 @@ Zone Africa/Lagos 0:13:35 - LMT 1905 Jul 1
|
||||
0:13:35 - LMT 1914 Jan 1
|
||||
0:30 - +0030 1919 Sep 1
|
||||
1:00 - WAT
|
||||
Link Africa/Lagos Africa/Bangui # Central African Republic
|
||||
Link Africa/Lagos Africa/Brazzaville # Rep. of the Congo
|
||||
Link Africa/Lagos Africa/Douala # Cameroon
|
||||
Link Africa/Lagos Africa/Kinshasa # Dem. Rep. of the Congo (west)
|
||||
Link Africa/Lagos Africa/Libreville # Gabon
|
||||
Link Africa/Lagos Africa/Luanda # Angola
|
||||
Link Africa/Lagos Africa/Malabo # Equatorial Guinea
|
||||
Link Africa/Lagos Africa/Niamey # Niger
|
||||
Link Africa/Lagos Africa/Porto-Novo # Benin
|
||||
|
||||
# Réunion
|
||||
# See Asia/Dubai.
|
||||
#
|
||||
# The Crozet Islands also observe Réunion time; see the 'antarctica' file.
|
||||
|
||||
# Rwanda
|
||||
# See Africa/Maputo.
|
||||
|
||||
# St Helena
|
||||
# See Africa/Abidjan.
|
||||
# The other parts of the St Helena territory are similar:
|
||||
# Tristan da Cunha: on GMT, say Whitman and the CIA
|
||||
# Ascension: on GMT, say the USNO (1995-12-21) and the CIA
|
||||
# Gough (scientific station since 1955; sealers wintered previously):
|
||||
# on GMT, says the CIA
|
||||
# Inaccessible, Nightingale: uninhabited
|
||||
|
||||
# São Tomé and Príncipe
|
||||
|
||||
@ -1355,19 +1274,10 @@ Zone Africa/Sao_Tome 0:26:56 - LMT 1884
|
||||
1:00 - WAT 2019 Jan 1 02:00
|
||||
0:00 - GMT
|
||||
|
||||
# Senegal
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Seychelles
|
||||
# See Asia/Dubai.
|
||||
|
||||
# Sierra Leone
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Somalia
|
||||
# See Africa/Nairobi.
|
||||
|
||||
# Eswatini (Swaziland)
|
||||
# Lesotho
|
||||
# South Africa
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 -
|
||||
Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
|
||||
@ -1375,8 +1285,6 @@ Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
|
||||
Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8
|
||||
1:30 - SAST 1903 Mar
|
||||
2:00 SA SAST
|
||||
Link Africa/Johannesburg Africa/Maseru # Lesotho
|
||||
Link Africa/Johannesburg Africa/Mbabane # Eswatini
|
||||
#
|
||||
# Marion and Prince Edward Is
|
||||
# scientific station since 1947
|
||||
@ -1425,12 +1333,6 @@ Zone Africa/Juba 2:06:28 - LMT 1931
|
||||
3:00 - EAT 2021 Feb 1 00:00
|
||||
2:00 - CAT
|
||||
|
||||
# Tanzania
|
||||
# See Africa/Nairobi.
|
||||
|
||||
# Togo
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Tunisia
|
||||
|
||||
# From Gwillim Law (2005-04-30):
|
||||
@ -1528,10 +1430,3 @@ Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
|
||||
Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
|
||||
0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
|
||||
1:00 Tunisia CE%sT
|
||||
|
||||
# Uganda
|
||||
# See Africa/Nairobi.
|
||||
|
||||
# Zambia
|
||||
# Zimbabwe
|
||||
# See Africa/Maputo.
|
||||
|
@ -306,4 +306,4 @@ Zone Antarctica/Rothera 0 - -00 1976 Dec 1
|
||||
# we have to go around and set them back 5 minutes or so.
|
||||
# Maybe if we let them run fast all of the time, we'd get to leave here sooner!!
|
||||
#
|
||||
# See 'australasia' for Antarctica/McMurdo.
|
||||
# See Pacific/Auckland.
|
||||
|
@ -149,9 +149,6 @@ Zone Asia/Baku 3:19:24 - LMT 1924 May 2
|
||||
4:00 EUAsia +04/+05 1997
|
||||
4:00 Azer +04/+05
|
||||
|
||||
# Bahrain
|
||||
# See Asia/Qatar.
|
||||
|
||||
# Bangladesh
|
||||
# From Alexander Krivenyshev (2009-05-13):
|
||||
# According to newspaper Asian Tribune (May 6, 2009) Bangladesh may introduce
|
||||
@ -254,10 +251,8 @@ Zone Indian/Chagos 4:49:40 - LMT 1907
|
||||
5:00 - +05 1996
|
||||
6:00 - +06
|
||||
|
||||
# Brunei
|
||||
# See Asia/Kuching.
|
||||
|
||||
# Burma / Myanmar
|
||||
# Cocos (Keeling) Islands
|
||||
# Myanmar (Burma)
|
||||
|
||||
# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
|
||||
|
||||
@ -273,11 +268,6 @@ Zone Asia/Yangon 6:24:47 - LMT 1880 # or Rangoon
|
||||
6:30 - +0630 1942 May
|
||||
9:00 - +09 1945 May 3
|
||||
6:30 - +0630
|
||||
Link Asia/Yangon Indian/Cocos
|
||||
|
||||
# Cambodia
|
||||
# See Asia/Bangkok.
|
||||
|
||||
|
||||
# China
|
||||
|
||||
@ -665,10 +655,9 @@ Zone Asia/Shanghai 8:05:43 - LMT 1901
|
||||
8:00 PRC C%sT
|
||||
# Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi
|
||||
# / Wulumuqi. (Please use Asia/Shanghai if you prefer Beijing time.)
|
||||
# Vostok base in Antarctica matches this since 1970.
|
||||
Zone Asia/Urumqi 5:50:20 - LMT 1928
|
||||
6:00 - +06
|
||||
Link Asia/Urumqi Antarctica/Vostok
|
||||
|
||||
|
||||
# Hong Kong
|
||||
|
||||
@ -1172,10 +1161,6 @@ Zone Asia/Famagusta 2:15:48 - LMT 1921 Nov 14
|
||||
3:00 - +03 2017 Oct 29 1:00u
|
||||
2:00 EUAsia EE%sT
|
||||
|
||||
# Classically, Cyprus belongs to Asia; e.g. see Herodotus, Histories, I.72.
|
||||
# However, for various reasons many users expect to find it under Europe.
|
||||
Link Asia/Nicosia Europe/Nicosia
|
||||
|
||||
# Georgia
|
||||
# From Paul Eggert (1994-11-19):
|
||||
# Today's _Economist_ (p 60) reports that Georgia moved its clocks forward
|
||||
@ -2231,6 +2216,17 @@ Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
|
||||
# From the Arabic version, it seems to say it would be at midnight
|
||||
# (assume 24:00) on the last Thursday in February, starting from 2022.
|
||||
|
||||
# From Issam Al-Zuwairi (2022-10-05):
|
||||
# The Council of Ministers in Jordan decided Wednesday 5th October 2022,
|
||||
# that daylight saving time (DST) will be throughout the year....
|
||||
#
|
||||
# From Brian Inglis (2022-10-06):
|
||||
# https://petra.gov.jo/Include/InnerPage.jsp?ID=45567&lang=en&name=en_news
|
||||
#
|
||||
# From Paul Eggert (2022-10-05):
|
||||
# Like Syria, model this as a transition from EEST +03 (DST) to plain +03
|
||||
# (non-DST) at the point where DST would otherwise have ended.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Jordan 1973 only - Jun 6 0:00 1:00 S
|
||||
Rule Jordan 1973 1975 - Oct 1 0:00 0 -
|
||||
@ -2262,11 +2258,12 @@ Rule Jordan 2005 only - Sep lastFri 0:00s 0 -
|
||||
Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 -
|
||||
Rule Jordan 2013 only - Dec 20 0:00 0 -
|
||||
Rule Jordan 2014 2021 - Mar lastThu 24:00 1:00 S
|
||||
Rule Jordan 2014 max - Oct lastFri 0:00s 0 -
|
||||
Rule Jordan 2022 max - Feb lastThu 24:00 1:00 S
|
||||
Rule Jordan 2014 2022 - Oct lastFri 0:00s 0 -
|
||||
Rule Jordan 2022 only - Feb lastThu 24:00 1:00 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Amman 2:23:44 - LMT 1931
|
||||
2:00 Jordan EE%sT
|
||||
2:00 Jordan EE%sT 2022 Oct 28 0:00s
|
||||
3:00 - +03
|
||||
|
||||
|
||||
# Kazakhstan
|
||||
@ -2692,14 +2689,6 @@ Zone Asia/Pyongyang 8:23:00 - LMT 1908 Apr 1
|
||||
8:30 - KST 2018 May 4 23:30
|
||||
9:00 - KST
|
||||
|
||||
###############################################################################
|
||||
|
||||
# Kuwait
|
||||
# See Asia/Riyadh.
|
||||
|
||||
# Laos
|
||||
# See Asia/Bangkok.
|
||||
|
||||
|
||||
# Lebanon
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
@ -2731,7 +2720,9 @@ Rule Lebanon 1999 max - Oct lastSun 0:00 0 -
|
||||
Zone Asia/Beirut 2:22:00 - LMT 1880
|
||||
2:00 Lebanon EE%sT
|
||||
|
||||
# Malaysia
|
||||
# Brunei
|
||||
# Malaysia (eastern)
|
||||
#
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 -
|
||||
Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
|
||||
@ -2748,14 +2739,12 @@ Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
|
||||
8:00 NBorneo +08/+0820 1942 Feb 16
|
||||
9:00 - +09 1945 Sep 12
|
||||
8:00 - +08
|
||||
Link Asia/Kuching Asia/Brunei
|
||||
|
||||
# Maldives
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Maldives 4:54:00 - LMT 1880 # Malé
|
||||
4:54:00 - MMT 1960 # Malé Mean Time
|
||||
5:00 - +05
|
||||
Link Indian/Maldives Indian/Kerguelen
|
||||
|
||||
# Mongolia
|
||||
|
||||
@ -2918,9 +2907,6 @@ Zone Asia/Kathmandu 5:41:16 - LMT 1920
|
||||
5:30 - +0530 1986
|
||||
5:45 - +0545
|
||||
|
||||
# Oman
|
||||
# See Asia/Dubai.
|
||||
|
||||
# Pakistan
|
||||
|
||||
# From Rives McDow (2002-03-13):
|
||||
@ -3375,10 +3361,6 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
|
||||
# The winter time in 2015 started on October 23 at 01:00.
|
||||
# https://wafa.ps/ar_page.aspx?id=CgpCdYa670694628582aCgpCdY
|
||||
# http://www.palestinecabinet.gov.ps/portal/meeting/details/27583
|
||||
#
|
||||
# From Paul Eggert (2019-04-10):
|
||||
# For now, guess spring-ahead transitions are at 00:00 on the Saturday
|
||||
# preceding March's last Sunday (i.e., Sat>=24).
|
||||
|
||||
# From P Chan (2021-10-18):
|
||||
# http://wafa.ps/Pages/Details/34701
|
||||
@ -3395,6 +3377,18 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
|
||||
# From Heba Hamad (2022-03-10):
|
||||
# summer time will begin in Palestine from Sunday 03-27-2022, 00:00 AM.
|
||||
|
||||
# From Heba Hamad (2022-08-30):
|
||||
# winter time will begin in Palestine from Saturday 10-29, 02:00 AM by
|
||||
# 60 minutes backwards. Also the state of Palestine adopted the summer
|
||||
# and winter time for the years: 2023,2024,2025,2026 ...
|
||||
# https://mm.icann.org/pipermail/tz/attachments/20220830/9f024566/Time-0001.pdf
|
||||
# (2022-08-31): ... the Saturday before the last Sunday in March and October
|
||||
# at 2:00 AM ,for the years from 2023 to 2026.
|
||||
# (2022-09-05): https://mtit.pna.ps/Site/New/1453
|
||||
#
|
||||
# From Paul Eggert (2022-08-31):
|
||||
# For now, assume that this rule will also be used after 2026.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
|
||||
Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 -
|
||||
@ -3425,14 +3419,16 @@ Rule Palestine 2013 only - Sep 27 0:00 0 -
|
||||
Rule Palestine 2014 only - Oct 24 0:00 0 -
|
||||
Rule Palestine 2015 only - Mar 28 0:00 1:00 S
|
||||
Rule Palestine 2015 only - Oct 23 1:00 0 -
|
||||
Rule Palestine 2016 2018 - Mar Sat>=24 1:00 1:00 S
|
||||
Rule Palestine 2016 2018 - Oct Sat>=24 1:00 0 -
|
||||
Rule Palestine 2016 2018 - Mar Sat<=30 1:00 1:00 S
|
||||
Rule Palestine 2016 2018 - Oct Sat<=30 1:00 0 -
|
||||
Rule Palestine 2019 only - Mar 29 0:00 1:00 S
|
||||
Rule Palestine 2019 only - Oct Sat>=24 0:00 0 -
|
||||
Rule Palestine 2020 2021 - Mar Sat>=24 0:00 1:00 S
|
||||
Rule Palestine 2019 only - Oct Sat<=30 0:00 0 -
|
||||
Rule Palestine 2020 2021 - Mar Sat<=30 0:00 1:00 S
|
||||
Rule Palestine 2020 only - Oct 24 1:00 0 -
|
||||
Rule Palestine 2021 max - Oct Fri>=23 1:00 0 -
|
||||
Rule Palestine 2022 max - Mar Sun>=25 0:00 1:00 S
|
||||
Rule Palestine 2021 only - Oct 29 1:00 0 -
|
||||
Rule Palestine 2022 only - Mar 27 0:00 1:00 S
|
||||
Rule Palestine 2022 max - Oct Sat<=30 2:00 0 -
|
||||
Rule Palestine 2023 max - Mar Sat<=30 2:00 1:00 S
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
|
||||
@ -3521,14 +3517,18 @@ Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31
|
||||
9:00 - JST 1944 Nov
|
||||
8:00 Phil P%sT
|
||||
|
||||
# Bahrain
|
||||
# Qatar
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
|
||||
4:00 - +04 1972 Jun
|
||||
3:00 - +03
|
||||
Link Asia/Qatar Asia/Bahrain
|
||||
|
||||
# Kuwait
|
||||
# Saudi Arabia
|
||||
# Yemen
|
||||
#
|
||||
# Japan's year-round bases in Antarctica match this since 1970.
|
||||
#
|
||||
# From Paul Eggert (2018-08-29):
|
||||
# Time in Saudi Arabia and other countries in the Arabian peninsula was not
|
||||
@ -3573,9 +3573,6 @@ Link Asia/Qatar Asia/Bahrain
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
|
||||
3:00 - +03
|
||||
Link Asia/Riyadh Antarctica/Syowa
|
||||
Link Asia/Riyadh Asia/Aden # Yemen
|
||||
Link Asia/Riyadh Asia/Kuwait
|
||||
|
||||
# Singapore
|
||||
# taken from Mok Ly Yng (2003-10-30)
|
||||
@ -3590,7 +3587,6 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
|
||||
9:00 - +09 1945 Sep 12
|
||||
7:30 - +0730 1982 Jan 1
|
||||
8:00 - +08
|
||||
Link Asia/Singapore Asia/Kuala_Lumpur
|
||||
|
||||
# Spratly Is
|
||||
# no information
|
||||
@ -3805,19 +3801,27 @@ Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
|
||||
# Our brief summary:
|
||||
# https://www.timeanddate.com/news/time/syria-dst-2012.html
|
||||
|
||||
# From Arthur David Olson (2012-03-27):
|
||||
# Assume last Friday in March going forward XXX.
|
||||
# From Steffen Thorsen (2022-10-05):
|
||||
# Syria is adopting year-round DST, starting this autumn....
|
||||
# From https://www.enabbaladi.net/archives/607812
|
||||
# "This [the decision] came after the weekly government meeting today,
|
||||
# Tuesday 4 October ..."
|
||||
#
|
||||
# From Paul Eggert (2022-10-05):
|
||||
# Like Jordan, model this as a transition from EEST +03 (DST) to plain +03
|
||||
# (non-DST) at the point where DST would otherwise have ended.
|
||||
|
||||
Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S
|
||||
Rule Syria 2008 only - Nov 1 0:00 0 -
|
||||
Rule Syria 2009 only - Mar lastFri 0:00 1:00 S
|
||||
Rule Syria 2010 2011 - Apr Fri>=1 0:00 1:00 S
|
||||
Rule Syria 2012 max - Mar lastFri 0:00 1:00 S
|
||||
Rule Syria 2009 max - Oct lastFri 0:00 0 -
|
||||
Rule Syria 2012 2022 - Mar lastFri 0:00 1:00 S
|
||||
Rule Syria 2009 2022 - Oct lastFri 0:00 0 -
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
|
||||
2:00 Syria EE%sT
|
||||
2:00 Syria EE%sT 2022 Oct 28 0:00
|
||||
3:00 - +03
|
||||
|
||||
# Tajikistan
|
||||
# From Shanks & Pottenger.
|
||||
@ -3828,14 +3832,15 @@ Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
|
||||
5:00 1:00 +06 1991 Sep 9 2:00s
|
||||
5:00 - +05
|
||||
|
||||
# Cambodia
|
||||
# Christmas I
|
||||
# Laos
|
||||
# Thailand
|
||||
# Vietnam (northern)
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Bangkok 6:42:04 - LMT 1880
|
||||
6:42:04 - BMT 1920 Apr # Bangkok Mean Time
|
||||
7:00 - +07
|
||||
Link Asia/Bangkok Asia/Phnom_Penh # Cambodia
|
||||
Link Asia/Bangkok Asia/Vientiane # Laos
|
||||
Link Asia/Bangkok Indian/Christmas
|
||||
|
||||
# Turkmenistan
|
||||
# From Shanks & Pottenger.
|
||||
@ -3846,13 +3851,15 @@ Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
|
||||
4:00 RussiaAsia +04/+05 1992 Jan 19 2:00
|
||||
5:00 - +05
|
||||
|
||||
# Oman
|
||||
# Réunion
|
||||
# Seychelles
|
||||
# United Arab Emirates
|
||||
#
|
||||
# The Crozet Is also observe Réunion time; see the 'antarctica' file.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Dubai 3:41:12 - LMT 1920
|
||||
4:00 - +04
|
||||
Link Asia/Dubai Asia/Muscat # Oman
|
||||
Link Asia/Dubai Indian/Mahe
|
||||
Link Asia/Dubai Indian/Reunion
|
||||
|
||||
# Uzbekistan
|
||||
# Byalokoz 1919 says Uzbekistan was 4:27:53.
|
||||
@ -3872,7 +3879,7 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
||||
5:00 RussiaAsia +05/+06 1992
|
||||
5:00 - +05
|
||||
|
||||
# Vietnam
|
||||
# Vietnam (southern)
|
||||
|
||||
# From Paul Eggert (2014-10-04):
|
||||
# Milne gives 7:16:56 for the meridian of Saigon in 1899, as being
|
||||
@ -3946,7 +3953,3 @@ Zone Asia/Ho_Chi_Minh 7:06:30 - LMT 1906 Jul 1
|
||||
# For timestamps in north Vietnam back to 1970 (the tzdb cutoff),
|
||||
# use Asia/Bangkok; see the VN entries in the file zone1970.tab.
|
||||
# For timestamps before 1970, see Asia/Hanoi in the file 'backzone'.
|
||||
|
||||
|
||||
# Yemen
|
||||
# See Asia/Riyadh.
|
||||
|
@ -251,13 +251,6 @@ Zone Antarctica/Macquarie 0 - -00 1899 Nov
|
||||
10:00 1:00 AEDT 2011
|
||||
10:00 AT AE%sT
|
||||
|
||||
# Christmas
|
||||
# See Asia/Bangkok.
|
||||
|
||||
# Cocos (Keeling) Is
|
||||
# See Asia/Yangon.
|
||||
|
||||
|
||||
# Fiji
|
||||
|
||||
# Milne gives 11:55:44 for Suva.
|
||||
@ -393,8 +386,14 @@ Zone Antarctica/Macquarie 0 - -00 1899 Nov
|
||||
# concerned shifting arrival and departure times, which may look like a simple
|
||||
# thing but requires some significant logistical adjustments domestically and
|
||||
# internationally."
|
||||
# Assume for now that DST will resume with the recent pre-2020 rules for the
|
||||
# 2022/2023 season.
|
||||
|
||||
# From Shalvin Narayan (2022-10-27):
|
||||
# Please note that there will not be any daylight savings time change
|
||||
# in Fiji for 2022-2023....
|
||||
# https://www.facebook.com/FijianGovernment/posts/pfbid0mmWVTYmTibn66ybpFda75pDcf34SSpoSaskJW5gXwaKo5Sgc7273Q4fXWc6kQV6Hl
|
||||
#
|
||||
# From Paul Eggert (2022-10-27):
|
||||
# For now, assume DST is suspended indefinitely.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 -
|
||||
@ -409,8 +408,6 @@ Rule Fiji 2014 2018 - Nov Sun>=1 2:00 1:00 -
|
||||
Rule Fiji 2015 2021 - Jan Sun>=12 3:00 0 -
|
||||
Rule Fiji 2019 only - Nov Sun>=8 2:00 1:00 -
|
||||
Rule Fiji 2020 only - Dec 20 2:00 1:00 -
|
||||
Rule Fiji 2022 max - Nov Sun>=8 2:00 1:00 -
|
||||
Rule Fiji 2023 max - Jan Sun>=12 3:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
|
||||
12:00 Fiji +12/+13
|
||||
@ -426,7 +423,9 @@ Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
|
||||
# Clipperton (near North America) is administered from French Polynesia;
|
||||
# it is uninhabited.
|
||||
|
||||
|
||||
# Guam
|
||||
# N Mariana Is
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
# http://guamlegislature.com/Public_Laws_5th/PL05-025.pdf
|
||||
@ -466,17 +465,20 @@ Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
|
||||
9:00 - +09 1944 Jul 31
|
||||
10:00 Guam G%sT 2000 Dec 23
|
||||
10:00 - ChST # Chamorro Standard Time
|
||||
Link Pacific/Guam Pacific/Saipan # N Mariana Is
|
||||
|
||||
# Kiribati
|
||||
|
||||
# Kiribati (Gilbert Is)
|
||||
# Marshall Is
|
||||
# Tuvalu
|
||||
# Wake
|
||||
# Wallis & Futuna
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
|
||||
12:00 - +12
|
||||
Link Pacific/Tarawa Pacific/Funafuti
|
||||
Link Pacific/Tarawa Pacific/Majuro
|
||||
Link Pacific/Tarawa Pacific/Wake
|
||||
Link Pacific/Tarawa Pacific/Wallis
|
||||
|
||||
# Kiribati (except Gilbert Is)
|
||||
# See Pacific/Tarawa for the Gilbert Is.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Kanton 0 - -00 1937 Aug 31
|
||||
-12:00 - -12 1979 Oct
|
||||
-11:00 - -11 1994 Dec 31
|
||||
@ -486,9 +488,6 @@ Zone Pacific/Kiritimati -10:29:20 - LMT 1901
|
||||
-10:00 - -10 1994 Dec 31
|
||||
14:00 - +14
|
||||
|
||||
# N Mariana Is
|
||||
# See Pacific/Guam.
|
||||
|
||||
# Marshall Is
|
||||
# See Pacific/Tarawa for most locations.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
@ -538,6 +537,7 @@ Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13 # Nouméa
|
||||
###############################################################################
|
||||
|
||||
# New Zealand
|
||||
# McMurdo Station and Scott Base in Antarctica use Auckland time.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule NZ 1927 only - Nov 6 2:00 1:00 S
|
||||
@ -573,7 +573,6 @@ Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 -
|
||||
Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
|
||||
11:30 NZ NZ%sT 1946 Jan 1
|
||||
12:00 NZ NZ%sT
|
||||
Link Pacific/Auckland Antarctica/McMurdo
|
||||
|
||||
Zone Pacific/Chatham 12:13:48 - LMT 1868 Nov 2
|
||||
12:15 - +1215 1946 Jan 1
|
||||
@ -672,8 +671,6 @@ Zone Pacific/Palau -15:02:04 - LMT 1844 Dec 31 # Koror
|
||||
Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
|
||||
9:48:32 - PMMT 1895 # Port Moresby Mean Time
|
||||
10:00 - +10
|
||||
Link Pacific/Port_Moresby Antarctica/DumontDUrville
|
||||
Link Pacific/Port_Moresby Pacific/Chuuk
|
||||
#
|
||||
# From Paul Eggert (2014-10-13):
|
||||
# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
|
||||
@ -706,10 +703,10 @@ Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
|
||||
-8:00 - -08
|
||||
|
||||
# American Samoa
|
||||
# Midway
|
||||
Zone Pacific/Pago_Pago 12:37:12 - LMT 1892 Jul 5
|
||||
-11:22:48 - LMT 1911
|
||||
-11:00 - SST # S=Samoa
|
||||
Link Pacific/Pago_Pago Pacific/Midway # in US minor outlying islands
|
||||
|
||||
# Samoa (formerly and also known as Western Samoa)
|
||||
|
||||
@ -801,7 +798,6 @@ Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
|
||||
11:00 - +11
|
||||
Link Pacific/Guadalcanal Pacific/Pohnpei
|
||||
|
||||
# Tokelau
|
||||
#
|
||||
@ -841,9 +837,6 @@ Zone Pacific/Tongatapu 12:19:12 - LMT 1945 Sep 10
|
||||
13:00 - +13 1999
|
||||
13:00 Tonga +13/+14
|
||||
|
||||
# Tuvalu
|
||||
# See Pacific/Tarawa.
|
||||
|
||||
|
||||
# US minor outlying islands
|
||||
|
||||
@ -894,15 +887,9 @@ Zone Pacific/Tongatapu 12:19:12 - LMT 1945 Sep 10
|
||||
# Kingman
|
||||
# uninhabited
|
||||
|
||||
# Midway
|
||||
# See Pacific/Pago_Pago.
|
||||
|
||||
# Palmyra
|
||||
# uninhabited since World War II; was probably like Pacific/Kiritimati
|
||||
|
||||
# Wake
|
||||
# See Pacific/Tarawa.
|
||||
|
||||
|
||||
# Vanuatu
|
||||
|
||||
@ -939,9 +926,6 @@ Rule Vanuatu 1992 only - Oct Sat>=22 24:00 1:00 -
|
||||
Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
|
||||
11:00 Vanuatu +11/+12
|
||||
|
||||
# Wallis and Futuna
|
||||
# See Pacific/Tarawa.
|
||||
|
||||
###############################################################################
|
||||
|
||||
# NOTES
|
||||
|
@ -4,7 +4,7 @@
|
||||
# 2009-05-17 by Arthur David Olson.
|
||||
|
||||
# This file provides links from old or merged timezone names to current ones.
|
||||
# Many names changed in late 1993, and many merged names moved here
|
||||
# Many names changed in 1993 and in 1995, and many merged names moved here
|
||||
# in the period from 2013 through 2022. Several of these names are
|
||||
# also present in the file 'backzone', which has data important only
|
||||
# for pre-1970 timestamps and so is out of scope for tzdb proper.
|
||||
@ -13,50 +13,24 @@
|
||||
# building with 'make BACKWARD=', in practice downstream users
|
||||
# typically use this file for backward compatibility.
|
||||
|
||||
# Link TARGET LINK-NAME
|
||||
Link Africa/Nairobi Africa/Asmera
|
||||
Link Africa/Abidjan Africa/Timbuktu
|
||||
Link America/Argentina/Catamarca America/Argentina/ComodRivadavia
|
||||
Link America/Adak America/Atka
|
||||
Link America/Argentina/Buenos_Aires America/Buenos_Aires
|
||||
Link America/Argentina/Catamarca America/Catamarca
|
||||
Link America/Panama America/Coral_Harbour
|
||||
Link America/Argentina/Cordoba America/Cordoba
|
||||
Link America/Tijuana America/Ensenada
|
||||
Link America/Indiana/Indianapolis America/Fort_Wayne
|
||||
Link America/Nuuk America/Godthab
|
||||
Link America/Indiana/Indianapolis America/Indianapolis
|
||||
Link America/Argentina/Jujuy America/Jujuy
|
||||
Link America/Indiana/Knox America/Knox_IN
|
||||
Link America/Kentucky/Louisville America/Louisville
|
||||
Link America/Argentina/Mendoza America/Mendoza
|
||||
Link America/Toronto America/Montreal
|
||||
Link America/Rio_Branco America/Porto_Acre
|
||||
Link America/Argentina/Cordoba America/Rosario
|
||||
Link America/Tijuana America/Santa_Isabel
|
||||
Link America/Denver America/Shiprock
|
||||
Link America/Puerto_Rico America/Virgin
|
||||
Link Pacific/Auckland Antarctica/South_Pole
|
||||
Link Asia/Ashgabat Asia/Ashkhabad
|
||||
Link Asia/Kolkata Asia/Calcutta
|
||||
Link Asia/Shanghai Asia/Chongqing
|
||||
Link Asia/Shanghai Asia/Chungking
|
||||
Link Asia/Dhaka Asia/Dacca
|
||||
Link Asia/Shanghai Asia/Harbin
|
||||
Link Asia/Urumqi Asia/Kashgar
|
||||
Link Asia/Kathmandu Asia/Katmandu
|
||||
Link Asia/Macau Asia/Macao
|
||||
Link Asia/Yangon Asia/Rangoon
|
||||
Link Asia/Ho_Chi_Minh Asia/Saigon
|
||||
Link Asia/Jerusalem Asia/Tel_Aviv
|
||||
Link Asia/Thimphu Asia/Thimbu
|
||||
Link Asia/Makassar Asia/Ujung_Pandang
|
||||
Link Asia/Ulaanbaatar Asia/Ulan_Bator
|
||||
Link Atlantic/Faroe Atlantic/Faeroe
|
||||
Link Europe/Berlin Atlantic/Jan_Mayen
|
||||
Link Australia/Sydney Australia/ACT
|
||||
Link Australia/Sydney Australia/Canberra
|
||||
Link Australia/Hobart Australia/Currie
|
||||
# This file is divided into sections, one for each major reason for a
|
||||
# backward compatibility link. Each section is sorted by link name.
|
||||
|
||||
# A "#= TARGET1" comment labels each link inserted only because some
|
||||
# .zi parsers (including tzcode through 2022e) mishandle links to links.
|
||||
# The comment says what the target would be if these parsers were fixed
|
||||
# so that data could contain links to links. For example, the line
|
||||
# "Link Australia/Sydney Australia/ACT #= Australia/Canberra" would be
|
||||
# "Link Australia/Canberra Australia/ACT" were it not that data lines
|
||||
# refrain from linking to links like Australia/Canberra, which means
|
||||
# the Australia/ACT line links instead to Australia/Sydney,
|
||||
# Australia/Canberra's target.
|
||||
|
||||
|
||||
# Pre-1993 naming conventions
|
||||
|
||||
# Link TARGET LINK-NAME #= TARGET1
|
||||
Link Australia/Sydney Australia/ACT #= Australia/Canberra
|
||||
Link Australia/Lord_Howe Australia/LHI
|
||||
Link Australia/Sydney Australia/NSW
|
||||
Link Australia/Darwin Australia/North
|
||||
@ -66,7 +40,7 @@ Link Australia/Hobart Australia/Tasmania
|
||||
Link Australia/Melbourne Australia/Victoria
|
||||
Link Australia/Perth Australia/West
|
||||
Link Australia/Broken_Hill Australia/Yancowinna
|
||||
Link America/Rio_Branco Brazil/Acre
|
||||
Link America/Rio_Branco Brazil/Acre #= America/Porto_Acre
|
||||
Link America/Noronha Brazil/DeNoronha
|
||||
Link America/Sao_Paulo Brazil/East
|
||||
Link America/Manaus Brazil/West
|
||||
@ -86,18 +60,36 @@ Link Pacific/Easter Chile/EasterIsland
|
||||
Link America/Havana Cuba
|
||||
Link Africa/Cairo Egypt
|
||||
Link Europe/Dublin Eire
|
||||
# Vanguard section, for most .zi parsers.
|
||||
#Link GMT Etc/GMT
|
||||
#Link GMT Etc/GMT+0
|
||||
#Link GMT Etc/GMT-0
|
||||
#Link GMT Etc/GMT0
|
||||
#Link GMT Etc/Greenwich
|
||||
# Rearguard section, for TZUpdater 2.3.2 and earlier.
|
||||
Link Etc/GMT Etc/GMT+0
|
||||
Link Etc/GMT Etc/GMT-0
|
||||
Link Etc/GMT Etc/GMT0
|
||||
Link Etc/GMT Etc/Greenwich
|
||||
# End of rearguard section.
|
||||
Link Etc/UTC Etc/UCT
|
||||
Link Europe/London Europe/Belfast
|
||||
Link Europe/Kyiv Europe/Kiev
|
||||
Link Europe/Chisinau Europe/Tiraspol
|
||||
Link Etc/UTC Etc/Universal
|
||||
Link Etc/UTC Etc/Zulu
|
||||
Link Europe/London GB
|
||||
Link Europe/London GB-Eire
|
||||
# Vanguard section, for most .zi parsers.
|
||||
#Link GMT GMT+0
|
||||
#Link GMT GMT-0
|
||||
#Link GMT GMT0
|
||||
#Link GMT Greenwich
|
||||
# Rearguard section, for TZUpdater 2.3.2 and earlier.
|
||||
Link Etc/GMT GMT+0
|
||||
Link Etc/GMT GMT-0
|
||||
Link Etc/GMT GMT0
|
||||
Link Etc/GMT Greenwich
|
||||
# End of rearguard section.
|
||||
Link Asia/Hong_Kong Hongkong
|
||||
Link Africa/Abidjan Iceland
|
||||
Link Africa/Abidjan Iceland #= Atlantic/Reykjavik
|
||||
Link Asia/Tehran Iran
|
||||
Link Asia/Jerusalem Israel
|
||||
Link America/Jamaica Jamaica
|
||||
@ -109,14 +101,8 @@ Link America/Mazatlan Mexico/BajaSur
|
||||
Link America/Mexico_City Mexico/General
|
||||
Link Pacific/Auckland NZ
|
||||
Link Pacific/Chatham NZ-CHAT
|
||||
Link America/Denver Navajo
|
||||
Link America/Denver Navajo #= America/Shiprock
|
||||
Link Asia/Shanghai PRC
|
||||
Link Pacific/Kanton Pacific/Enderbury
|
||||
Link Pacific/Honolulu Pacific/Johnston
|
||||
Link Pacific/Guadalcanal Pacific/Ponape
|
||||
Link Pacific/Pago_Pago Pacific/Samoa
|
||||
Link Pacific/Port_Moresby Pacific/Truk
|
||||
Link Pacific/Port_Moresby Pacific/Yap
|
||||
Link Europe/Warsaw Poland
|
||||
Link Europe/Lisbon Portugal
|
||||
Link Asia/Taipei ROC
|
||||
@ -140,3 +126,192 @@ Link Etc/UTC UTC
|
||||
Link Etc/UTC Universal
|
||||
Link Europe/Moscow W-SU
|
||||
Link Etc/UTC Zulu
|
||||
|
||||
|
||||
# Two-part names that were renamed mostly to three-part names in 1995
|
||||
|
||||
# Link TARGET LINK-NAME #= TARGET1
|
||||
Link America/Argentina/Buenos_Aires America/Buenos_Aires
|
||||
Link America/Argentina/Catamarca America/Catamarca
|
||||
Link America/Argentina/Cordoba America/Cordoba
|
||||
Link America/Indiana/Indianapolis America/Indianapolis
|
||||
Link America/Argentina/Jujuy America/Jujuy
|
||||
Link America/Indiana/Knox America/Knox_IN
|
||||
Link America/Kentucky/Louisville America/Louisville
|
||||
Link America/Argentina/Mendoza America/Mendoza
|
||||
Link America/Puerto_Rico America/Virgin #= America/St_Thomas
|
||||
Link Pacific/Pago_Pago Pacific/Samoa
|
||||
|
||||
|
||||
# Pre-2013 practice, which typically had a Zone per zone.tab line
|
||||
|
||||
# Link TARGET LINK-NAME
|
||||
Link Africa/Abidjan Africa/Accra
|
||||
Link Africa/Nairobi Africa/Addis_Ababa
|
||||
Link Africa/Nairobi Africa/Asmara
|
||||
Link Africa/Abidjan Africa/Bamako
|
||||
Link Africa/Lagos Africa/Bangui
|
||||
Link Africa/Abidjan Africa/Banjul
|
||||
Link Africa/Maputo Africa/Blantyre
|
||||
Link Africa/Lagos Africa/Brazzaville
|
||||
Link Africa/Maputo Africa/Bujumbura
|
||||
Link Africa/Abidjan Africa/Conakry
|
||||
Link Africa/Abidjan Africa/Dakar
|
||||
Link Africa/Nairobi Africa/Dar_es_Salaam
|
||||
Link Africa/Nairobi Africa/Djibouti
|
||||
Link Africa/Lagos Africa/Douala
|
||||
Link Africa/Abidjan Africa/Freetown
|
||||
Link Africa/Maputo Africa/Gaborone
|
||||
Link Africa/Maputo Africa/Harare
|
||||
Link Africa/Nairobi Africa/Kampala
|
||||
Link Africa/Maputo Africa/Kigali
|
||||
Link Africa/Lagos Africa/Kinshasa
|
||||
Link Africa/Lagos Africa/Libreville
|
||||
Link Africa/Abidjan Africa/Lome
|
||||
Link Africa/Lagos Africa/Luanda
|
||||
Link Africa/Maputo Africa/Lubumbashi
|
||||
Link Africa/Maputo Africa/Lusaka
|
||||
Link Africa/Lagos Africa/Malabo
|
||||
Link Africa/Johannesburg Africa/Maseru
|
||||
Link Africa/Johannesburg Africa/Mbabane
|
||||
Link Africa/Nairobi Africa/Mogadishu
|
||||
Link Africa/Lagos Africa/Niamey
|
||||
Link Africa/Abidjan Africa/Nouakchott
|
||||
Link Africa/Abidjan Africa/Ouagadougou
|
||||
Link Africa/Lagos Africa/Porto-Novo
|
||||
Link America/Puerto_Rico America/Anguilla
|
||||
Link America/Puerto_Rico America/Antigua
|
||||
Link America/Puerto_Rico America/Aruba
|
||||
Link America/Panama America/Atikokan
|
||||
Link America/Puerto_Rico America/Blanc-Sablon
|
||||
Link America/Panama America/Cayman
|
||||
Link America/Phoenix America/Creston
|
||||
Link America/Puerto_Rico America/Curacao
|
||||
Link America/Puerto_Rico America/Dominica
|
||||
Link America/Puerto_Rico America/Grenada
|
||||
Link America/Puerto_Rico America/Guadeloupe
|
||||
Link America/Puerto_Rico America/Kralendijk
|
||||
Link America/Puerto_Rico America/Lower_Princes
|
||||
Link America/Puerto_Rico America/Marigot
|
||||
Link America/Puerto_Rico America/Montserrat
|
||||
Link America/Toronto America/Nassau
|
||||
Link America/Puerto_Rico America/Port_of_Spain
|
||||
Link America/Puerto_Rico America/St_Barthelemy
|
||||
Link America/Puerto_Rico America/St_Kitts
|
||||
Link America/Puerto_Rico America/St_Lucia
|
||||
Link America/Puerto_Rico America/St_Thomas
|
||||
Link America/Puerto_Rico America/St_Vincent
|
||||
Link America/Puerto_Rico America/Tortola
|
||||
Link Pacific/Port_Moresby Antarctica/DumontDUrville
|
||||
Link Pacific/Auckland Antarctica/McMurdo
|
||||
Link Asia/Riyadh Antarctica/Syowa
|
||||
Link Asia/Urumqi Antarctica/Vostok
|
||||
Link Europe/Berlin Arctic/Longyearbyen
|
||||
Link Asia/Riyadh Asia/Aden
|
||||
Link Asia/Qatar Asia/Bahrain
|
||||
Link Asia/Kuching Asia/Brunei
|
||||
Link Asia/Singapore Asia/Kuala_Lumpur
|
||||
Link Asia/Riyadh Asia/Kuwait
|
||||
Link Asia/Dubai Asia/Muscat
|
||||
Link Asia/Bangkok Asia/Phnom_Penh
|
||||
Link Asia/Bangkok Asia/Vientiane
|
||||
Link Africa/Abidjan Atlantic/Reykjavik
|
||||
Link Africa/Abidjan Atlantic/St_Helena
|
||||
Link Europe/Brussels Europe/Amsterdam
|
||||
Link Europe/Prague Europe/Bratislava
|
||||
Link Europe/Zurich Europe/Busingen
|
||||
Link Europe/Berlin Europe/Copenhagen
|
||||
Link Europe/London Europe/Guernsey
|
||||
Link Europe/London Europe/Isle_of_Man
|
||||
Link Europe/London Europe/Jersey
|
||||
Link Europe/Belgrade Europe/Ljubljana
|
||||
Link Europe/Brussels Europe/Luxembourg
|
||||
Link Europe/Helsinki Europe/Mariehamn
|
||||
Link Europe/Paris Europe/Monaco
|
||||
Link Europe/Berlin Europe/Oslo
|
||||
Link Europe/Belgrade Europe/Podgorica
|
||||
Link Europe/Rome Europe/San_Marino
|
||||
Link Europe/Belgrade Europe/Sarajevo
|
||||
Link Europe/Belgrade Europe/Skopje
|
||||
Link Europe/Berlin Europe/Stockholm
|
||||
Link Europe/Zurich Europe/Vaduz
|
||||
Link Europe/Rome Europe/Vatican
|
||||
Link Europe/Belgrade Europe/Zagreb
|
||||
Link Africa/Nairobi Indian/Antananarivo
|
||||
Link Asia/Bangkok Indian/Christmas
|
||||
Link Asia/Yangon Indian/Cocos
|
||||
Link Africa/Nairobi Indian/Comoro
|
||||
Link Indian/Maldives Indian/Kerguelen
|
||||
Link Asia/Dubai Indian/Mahe
|
||||
Link Africa/Nairobi Indian/Mayotte
|
||||
Link Asia/Dubai Indian/Reunion
|
||||
Link Pacific/Port_Moresby Pacific/Chuuk
|
||||
Link Pacific/Tarawa Pacific/Funafuti
|
||||
Link Pacific/Tarawa Pacific/Majuro
|
||||
Link Pacific/Pago_Pago Pacific/Midway
|
||||
Link Pacific/Guadalcanal Pacific/Pohnpei
|
||||
Link Pacific/Guam Pacific/Saipan
|
||||
Link Pacific/Tarawa Pacific/Wake
|
||||
Link Pacific/Tarawa Pacific/Wallis
|
||||
|
||||
|
||||
# Non-zone.tab locations with timestamps since 1970 that duplicate
|
||||
# those of an existing location
|
||||
|
||||
# Link TARGET LINK-NAME
|
||||
Link Africa/Abidjan Africa/Timbuktu
|
||||
Link America/Argentina/Catamarca America/Argentina/ComodRivadavia
|
||||
Link America/Adak America/Atka
|
||||
Link America/Panama America/Coral_Harbour
|
||||
Link America/Tijuana America/Ensenada
|
||||
Link America/Indiana/Indianapolis America/Fort_Wayne
|
||||
Link America/Toronto America/Montreal
|
||||
Link America/Toronto America/Nipigon
|
||||
Link America/Rio_Branco America/Porto_Acre
|
||||
Link America/Winnipeg America/Rainy_River
|
||||
Link America/Argentina/Cordoba America/Rosario
|
||||
Link America/Tijuana America/Santa_Isabel
|
||||
Link America/Denver America/Shiprock
|
||||
Link America/Toronto America/Thunder_Bay
|
||||
Link Pacific/Auckland Antarctica/South_Pole
|
||||
Link Asia/Shanghai Asia/Chongqing
|
||||
Link Asia/Shanghai Asia/Harbin
|
||||
Link Asia/Urumqi Asia/Kashgar
|
||||
Link Asia/Jerusalem Asia/Tel_Aviv
|
||||
Link Europe/Berlin Atlantic/Jan_Mayen
|
||||
Link Australia/Sydney Australia/Canberra
|
||||
Link Australia/Hobart Australia/Currie
|
||||
Link Europe/London Europe/Belfast
|
||||
Link Europe/Chisinau Europe/Tiraspol
|
||||
Link Europe/Kyiv Europe/Uzhgorod
|
||||
Link Europe/Kyiv Europe/Zaporozhye
|
||||
Link Pacific/Kanton Pacific/Enderbury
|
||||
Link Pacific/Honolulu Pacific/Johnston
|
||||
Link Pacific/Port_Moresby Pacific/Yap
|
||||
|
||||
|
||||
# Alternate names for the same location
|
||||
|
||||
# Link TARGET LINK-NAME #= TARGET1
|
||||
Link Africa/Nairobi Africa/Asmera #= Africa/Asmara
|
||||
Link America/Nuuk America/Godthab
|
||||
Link Asia/Ashgabat Asia/Ashkhabad
|
||||
Link Asia/Kolkata Asia/Calcutta
|
||||
Link Asia/Shanghai Asia/Chungking #= Asia/Chongqing
|
||||
Link Asia/Dhaka Asia/Dacca
|
||||
# Istanbul is in both continents.
|
||||
Link Europe/Istanbul Asia/Istanbul
|
||||
Link Asia/Kathmandu Asia/Katmandu
|
||||
Link Asia/Macau Asia/Macao
|
||||
Link Asia/Yangon Asia/Rangoon
|
||||
Link Asia/Ho_Chi_Minh Asia/Saigon
|
||||
Link Asia/Thimphu Asia/Thimbu
|
||||
Link Asia/Makassar Asia/Ujung_Pandang
|
||||
Link Asia/Ulaanbaatar Asia/Ulan_Bator
|
||||
Link Atlantic/Faroe Atlantic/Faeroe
|
||||
Link Europe/Kyiv Europe/Kiev
|
||||
# Classically, Cyprus is in Asia; e.g. see Herodotus, Histories, I.72.
|
||||
# However, for various reasons many users expect to find it under Europe.
|
||||
Link Asia/Nicosia Europe/Nicosia
|
||||
Link Pacific/Guadalcanal Pacific/Ponape #= Pacific/Pohnpei
|
||||
Link Pacific/Port_Moresby Pacific/Truk #= Pacific/Chuuk
|
||||
|
@ -301,7 +301,7 @@ Zone Africa/Freetown -0:53:00 - LMT 1882
|
||||
-0:53:00 - FMT 1913 Jul 1 # Freetown MT
|
||||
-1:00 SL %s 1939 Sep 5
|
||||
-1:00 - -01 1941 Dec 6 24:00
|
||||
0:00 SL GMT/+01
|
||||
0:00 - GMT
|
||||
|
||||
# Botswana
|
||||
# From Paul Eggert (2013-02-21):
|
||||
@ -739,6 +739,17 @@ Zone America/Nassau -5:09:30 - LMT 1912 Mar 2
|
||||
-5:00 Bahamas E%sT 1976
|
||||
-5:00 US E%sT
|
||||
|
||||
# Canada
|
||||
# From Chris Walton (2022-10-15):
|
||||
# I would also like to see America/Nipigon and America/Rainy_River converted
|
||||
# into link entries because I have zero faith in the current Shanks based data.
|
||||
# From Paul Eggert (2022-10-15):
|
||||
# These are now links in the primary data. Also see America/Thunder_Bay.
|
||||
Zone America/Nipigon -5:53:04 - LMT 1895
|
||||
-5:00 Canada E%sT 1940 Sep 29
|
||||
-5:00 1:00 EDT 1942 Feb 9 2:00s
|
||||
-5:00 Canada E%sT
|
||||
|
||||
# United States
|
||||
#
|
||||
# From Paul Eggert (2018-03-18):
|
||||
@ -769,6 +780,17 @@ Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
|
||||
Link America/Port_of_Spain America/Marigot
|
||||
Link America/Port_of_Spain America/St_Barthelemy
|
||||
|
||||
# Canada
|
||||
# From Chris Walton (2022-10-15):
|
||||
# I would also like to see America/Nipigon and America/Rainy_River converted
|
||||
# into link entries because I have zero faith in the current Shanks based data.
|
||||
# From Paul Eggert (2022-10-15):
|
||||
# These are now links in the primary data. Also see America/Thunder_Bay.
|
||||
Zone America/Rainy_River -6:18:16 - LMT 1895
|
||||
-6:00 Canada C%sT 1940 Sep 29
|
||||
-6:00 1:00 CDT 1942 Feb 9 2:00s
|
||||
-6:00 Canada C%sT
|
||||
|
||||
# Argentina
|
||||
# This entry was intended for the following areas, but has been superseded by
|
||||
# more detailed zones.
|
||||
@ -802,6 +824,53 @@ Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown
|
||||
-4:04:56 - KMT 1912 # Kingstown Mean Time
|
||||
-4:00 - AST
|
||||
|
||||
# Canada
|
||||
#
|
||||
# From Paul Eggert (2003-07-27):
|
||||
# Willett (1914-03) writes (p. 17) "In the Cities of Fort William, and
|
||||
# Port Arthur, Ontario, the principle of the Bill has been in
|
||||
# operation for the past three years, and in the City of Moose Jaw,
|
||||
# Saskatchewan, for one year."
|
||||
#
|
||||
# From David Bryan via Tory Tronrud, Director/Curator,
|
||||
# Thunder Bay Museum (2003-11-12):
|
||||
# There is some suggestion, however, that, by-law or not, daylight
|
||||
# savings time was being practiced in Fort William and Port Arthur
|
||||
# before 1909.... [I]n 1910, the line between the Eastern and Central
|
||||
# Time Zones was permanently moved about two hundred miles west to
|
||||
# include the Thunder Bay area.... When Canada adopted daylight
|
||||
# savings time in 1916, Fort William and Port Arthur, having done so
|
||||
# already, did not change their clocks.... During the Second World
|
||||
# War,... [t]he cities agreed to implement DST during the summer
|
||||
# months for the remainder of the war years.
|
||||
#
|
||||
# From Jeffery Nichols (2020-02-06):
|
||||
# According to the [Shanks] atlas, those western Ontario zones are huge,
|
||||
# covering most of Ontario northwest of Sault Ste Marie and Timmins.
|
||||
# The zones seem to include towns bigger than the ones they're named after,
|
||||
# like Dryden in America/Rainy_River and Wawa (and maybe Attawapiskat) in
|
||||
# America/Nipigon. I assume it's too much trouble to change the name of the
|
||||
# zone (like when you found out that America/Glace_Bay includes Sydney, Nova
|
||||
# Scotia)....
|
||||
#
|
||||
# From Chris Walton (2022-10-15):
|
||||
# The TZ database currently shows that Thunder Bay has observed daylight
|
||||
# saving every year from 1970 onwards with the exception of 1973.
|
||||
# Back in July I raised some doubts on this mailing list about the 1973 data.
|
||||
# I now have more proof that it is wrong.
|
||||
# [attached Chronicle-Journal front pages, 1973-04-28 and 1973-10-27]
|
||||
#
|
||||
# From Paul Eggert (2022-10-15):
|
||||
# This is now a link in the primary data. The following entry is
|
||||
# from Shanks & Pottenger, with corrections as noted above.
|
||||
#
|
||||
Zone America/Thunder_Bay -5:57:00 - LMT 1895
|
||||
-6:00 - CST 1910
|
||||
-5:00 - EST 1942
|
||||
-5:00 Canada E%sT 1970
|
||||
-5:00 Toronto E%sT 1974
|
||||
-5:00 Canada E%sT
|
||||
|
||||
# British Virgin Is
|
||||
Zone America/Tortola -4:18:28 - LMT 1911 Jul # Road Town
|
||||
-4:00 - AST
|
||||
@ -1480,6 +1549,27 @@ Zone Europe/Tiraspol 1:58:32 - LMT 1880
|
||||
2:00 Russia EE%sT 1992 Jan 19 2:00
|
||||
3:00 Russia MSK/MSD
|
||||
|
||||
# Ukraine
|
||||
#
|
||||
# Although Shanks & Pottenger say Transcarpathia used CET 1990/1991,
|
||||
# this unreliable source contradicts contemporaneous government resolutions
|
||||
# (see the commentary for Ukraine in the 'europe' file)
|
||||
# so for now this dubious zone is in 'backzone'.
|
||||
# "Uzhhorod" is the transliteration of the Ukrainian spelling, but
|
||||
# "Uzhgorod" was a common English spelling when this dubious zone was
|
||||
# added to TZDB in 1999.
|
||||
Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct
|
||||
1:00 - CET 1940
|
||||
1:00 C-Eur CE%sT 1944 Oct
|
||||
1:00 1:00 CEST 1944 Oct 26
|
||||
1:00 - CET 1945 Jun 29
|
||||
3:00 Russia MSK/MSD 1990
|
||||
3:00 - MSK 1990 Jul 1 2:00
|
||||
1:00 - CET 1991 Mar 31 3:00
|
||||
2:00 - EET 1992 Mar 20
|
||||
2:00 C-Eur EE%sT 1996 May 13
|
||||
2:00 EU EE%sT
|
||||
|
||||
# Liechtenstein
|
||||
|
||||
# From Paul Eggert (2022-07-21):
|
||||
@ -1502,6 +1592,25 @@ Zone Europe/Zagreb 1:03:52 - LMT 1884
|
||||
1:00 - CET 1982 Nov 27
|
||||
1:00 EU CE%sT
|
||||
|
||||
# Ukraine
|
||||
|
||||
# Although Shanks & Pottenger say Zaporizhzhia and eastern Lugansk
|
||||
# observed DST 1990/1991, this unreliable source contradicts contemporaneous
|
||||
# government resolutions (see the commentary for Ukraine in the 'europe' file)
|
||||
# so for now this dubious zone is in 'backzone'.
|
||||
# "Zaporizhzhia" is the transliteration of the Ukrainian name, but
|
||||
# "Zaporozhye" was a common English spelling when this dubious zone was
|
||||
# added to TZDB in 1999.
|
||||
Zone Europe/Zaporozhye 2:20:40 - LMT 1880
|
||||
2:20 - +0220 1924 May 2
|
||||
2:00 - EET 1930 Jun 21
|
||||
3:00 - MSK 1941 Aug 25
|
||||
1:00 C-Eur CE%sT 1943 Oct 25
|
||||
3:00 Russia MSK/MSD 1991 Mar 31 2:00
|
||||
2:00 E-Eur EE%sT 1992 Mar 20
|
||||
2:00 C-Eur EE%sT 1996 May 13
|
||||
2:00 EU EE%sT
|
||||
|
||||
# Madagascar
|
||||
Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul
|
||||
3:00 - EAT 1954 Feb 27 23:00s
|
||||
@ -1633,7 +1742,7 @@ Zone Pacific/Majuro 11:24:48 - LMT 1901
|
||||
Zone Pacific/Midway -11:49:28 - LMT 1901
|
||||
-11:00 - -11 1956 Jun 3
|
||||
-11:00 1:00 -10 1956 Sep 2
|
||||
-11:00 - -11
|
||||
-11:00 - SST # S=Samoa
|
||||
|
||||
# Micronesia
|
||||
# Also see Pacific/Chuuk and commentary for Micronesia in 'australasia'.
|
||||
@ -1648,10 +1757,20 @@ Zone Pacific/Pohnpei -13:27:08 - LMT 1844 Dec 31 # Kolonia
|
||||
Link Pacific/Pohnpei Pacific/Ponape
|
||||
|
||||
# N Mariana Is
|
||||
#
|
||||
# From Paul Eggert (2022-08-16):
|
||||
# Although Shanks & Pottenger say Saipan used +09 and then switched
|
||||
# to Guam time in October 1969, this is surely wrong.
|
||||
# Saipan used Guam time in the late 1950s; see page 4 of the minutes on the
|
||||
# conference of the 12th Saipan Legislature and the Select Committee on
|
||||
# Saipan Mission, 5th Guam Legislature (1959-09-11):
|
||||
# http://www.nmhcouncil.org/nmhc_archives/U.S.%20Navy%20Civil%20Affairs%20Files%201944-1962/1959/1959%2009%2017%20letter,%20minutes%20of%20conference,%20Borja.pdf
|
||||
# For now, assume Saipan switched to Guam time after the Battle of Saipan.
|
||||
#
|
||||
Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31
|
||||
9:43:00 - LMT 1901
|
||||
9:00 - +09 1969 Oct
|
||||
10:00 - +10 2000 Dec 23
|
||||
9:00 - +09 1944 Jul 9
|
||||
10:00 Guam G%sT 2000 Dec 23
|
||||
10:00 - ChST # Chamorro Standard Time
|
||||
|
||||
|
||||
|
@ -32,6 +32,13 @@ BEGIN {
|
||||
}
|
||||
status = 1
|
||||
}
|
||||
if (backcheck && FILENAME != backcheck && $3 != "GMT") {
|
||||
printf "%s: Link should be in '%s'\n", $3, backcheck
|
||||
status = 1
|
||||
}
|
||||
if ($4 == "#=") {
|
||||
shortcut[$5] = $3
|
||||
}
|
||||
used[$2] = 1
|
||||
defined[$3] = $2
|
||||
}
|
||||
@ -39,10 +46,25 @@ BEGIN {
|
||||
END {
|
||||
for (tz in used) {
|
||||
if (defined[tz] != Zone) {
|
||||
printf "%s: Link to non-zone\n", tz
|
||||
if (!defined[tz]) {
|
||||
printf "%s: Link to nowhere\n", tz
|
||||
status = 1
|
||||
} else if (DATAFORM != "vanguard") {
|
||||
printf "%s: Link to link\n", tz
|
||||
status = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
for (tz in shortcut) {
|
||||
if (defined[shortcut[tz]] != defined[tz]) {
|
||||
target = (!defined[tz] ? "absence" \
|
||||
: defined[tz] == "\n" ? "zone" \
|
||||
: defined[tz])
|
||||
printf "%s: target %s disagrees with %s's target %s\n", \
|
||||
tz, target, shortcut[tz], defined[shortcut[tz]]
|
||||
status = 1
|
||||
}
|
||||
}
|
||||
|
||||
exit status
|
||||
}
|
||||
|
@ -16,26 +16,23 @@
|
||||
# Do not use a POSIX TZ setting like TZ='GMT+4', which is four hours
|
||||
# behind GMT but uses the completely misleading abbreviation "GMT".
|
||||
|
||||
Zone Etc/GMT 0 - GMT
|
||||
|
||||
# The following zone is used by tzcode functions like gmtime,
|
||||
# which load the "UTC" file to handle seconds properly.
|
||||
Zone Etc/UTC 0 - UTC
|
||||
|
||||
# Functions like gmtime load the "GMT" file to handle leap seconds properly.
|
||||
# Vanguard section, which works with most .zi parsers.
|
||||
#Zone GMT 0 - GMT
|
||||
# Rearguard section, for TZUpdater 2.3.2 and earlier.
|
||||
Zone Etc/GMT 0 - GMT
|
||||
|
||||
# The following link uses older naming conventions,
|
||||
# but it belongs here, not in the file 'backward',
|
||||
# as it is needed for tzcode releases through 2022a,
|
||||
# where functions like gmtime load "GMT" instead of the "Etc/UTC".
|
||||
# We want this to work even on installations that omit 'backward'.
|
||||
Link Etc/GMT GMT
|
||||
|
||||
Link Etc/UTC Etc/Universal
|
||||
Link Etc/UTC Etc/Zulu
|
||||
|
||||
Link Etc/GMT Etc/Greenwich
|
||||
Link Etc/GMT Etc/GMT-0
|
||||
Link Etc/GMT Etc/GMT+0
|
||||
Link Etc/GMT Etc/GMT0
|
||||
# End of rearguard section.
|
||||
|
||||
# Be consistent with POSIX TZ settings in the Zone names,
|
||||
# even though this is the opposite of what many people expect.
|
||||
|
@ -504,9 +504,6 @@ Zone Europe/London -0:01:15 - LMT 1847 Dec 1
|
||||
1:00 - BST 1971 Oct 31 2:00u
|
||||
0:00 GB-Eire %s 1996
|
||||
0:00 EU GMT/BST
|
||||
Link Europe/London Europe/Jersey
|
||||
Link Europe/London Europe/Guernsey
|
||||
Link Europe/London Europe/Isle_of_Man
|
||||
|
||||
# From Paul Eggert (2018-02-15):
|
||||
# In January 2018 we discovered that the negative SAVE values in the
|
||||
@ -879,6 +876,8 @@ Zone Europe/Minsk 1:50:16 - LMT 1880
|
||||
3:00 - +03
|
||||
|
||||
# Belgium
|
||||
# Luxembourg
|
||||
# Netherlands
|
||||
#
|
||||
# From Michael Deckers (2019-08-25):
|
||||
# The exposition in the web page
|
||||
@ -961,11 +960,6 @@ Zone Europe/Brussels 0:17:30 - LMT 1880
|
||||
1:00 C-Eur CE%sT 1944 Sep 3
|
||||
1:00 Belgium CE%sT 1977
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Brussels Europe/Amsterdam
|
||||
Link Europe/Brussels Europe/Luxembourg
|
||||
|
||||
# Bosnia and Herzegovina
|
||||
# See Europe/Belgrade.
|
||||
|
||||
# Bulgaria
|
||||
#
|
||||
@ -992,13 +986,11 @@ Zone Europe/Sofia 1:33:16 - LMT 1880
|
||||
2:00 E-Eur EE%sT 1997
|
||||
2:00 EU EE%sT
|
||||
|
||||
# Croatia
|
||||
# See Europe/Belgrade.
|
||||
|
||||
# Cyprus
|
||||
# Please see the 'asia' file for Asia/Nicosia.
|
||||
|
||||
# Czech Republic / Czechia
|
||||
# Czech Republic (Czechia)
|
||||
# Slovakia
|
||||
#
|
||||
# From Paul Eggert (2018-04-15):
|
||||
# The source for Czech data is: Kdy začíná a končí letní čas. 2018-04-15.
|
||||
@ -1025,15 +1017,14 @@ Zone Europe/Prague 0:57:44 - LMT 1850
|
||||
# End of rearguard section.
|
||||
1:00 Czech CE%sT 1979
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Prague Europe/Bratislava
|
||||
|
||||
|
||||
# Denmark, Faroe Islands, and Greenland
|
||||
# For Denmark see Europe/Berlin.
|
||||
|
||||
# Faroe Is
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Tórshavn
|
||||
0:00 - WET 1981
|
||||
0:00 EU WE%sT
|
||||
|
||||
# Greenland
|
||||
#
|
||||
# From Paul Eggert (2004-10-31):
|
||||
# During World War II, Germany maintained secret manned weather stations in
|
||||
@ -1259,11 +1250,8 @@ Zone Europe/Helsinki 1:39:49 - LMT 1878 May 31
|
||||
2:00 Finland EE%sT 1983
|
||||
2:00 EU EE%sT
|
||||
|
||||
# Åland Is
|
||||
Link Europe/Helsinki Europe/Mariehamn
|
||||
|
||||
|
||||
# France
|
||||
# Monaco
|
||||
|
||||
# From Ciro Discepolo (2000-12-20):
|
||||
#
|
||||
@ -1400,9 +1388,11 @@ Zone Europe/Paris 0:09:21 - LMT 1891 Mar 16
|
||||
0:00 France WE%sT 1945 Sep 16 3:00
|
||||
1:00 France CE%sT 1977
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Paris Europe/Monaco
|
||||
|
||||
# Denmark
|
||||
# Germany
|
||||
# Norway
|
||||
# Sweden
|
||||
|
||||
# From Markus Kuhn (1998-09-29):
|
||||
# The German time zone web site by the Physikalisch-Technische
|
||||
@ -1420,6 +1410,53 @@ Link Europe/Paris Europe/Monaco
|
||||
# However, Moscow did not observe daylight saving in 1945, so
|
||||
# this was equivalent to UT +03, not +04.
|
||||
|
||||
# Svalbard & Jan Mayen
|
||||
|
||||
# From Steffen Thorsen (2001-05-01):
|
||||
# Although I could not find it explicitly, it seems that Jan Mayen and
|
||||
# Svalbard have been using the same time as Norway at least since the
|
||||
# time they were declared as parts of Norway. Svalbard was declared
|
||||
# as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan
|
||||
# Mayen by law of 1930-02-27 no 2, section 2. (From
|
||||
# <http://www.lovdata.no/all/nl-19250717-011.html> and
|
||||
# <http://www.lovdata.no/all/nl-19300227-002.html>). The law/regulation
|
||||
# for normal/standard time in Norway is from 1894-06-29 no 1 (came
|
||||
# into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a
|
||||
# part of this law since 1925/1930. (From
|
||||
# <http://www.lovdata.no/all/nl-18940629-001.html>) I have not been
|
||||
# able to find if Jan Mayen used a different time zone (e.g. -0100)
|
||||
# before 1930. Jan Mayen has only been "inhabited" since 1921 by
|
||||
# Norwegian meteorologists and maybe used the same time as Norway ever
|
||||
# since 1921. Svalbard (Arctic/Longyearbyen) has been inhabited since
|
||||
# before 1895, and therefore probably changed the local time somewhere
|
||||
# between 1895 and 1925 (inclusive).
|
||||
|
||||
# From Paul Eggert (2013-09-04):
|
||||
#
|
||||
# Actually, Jan Mayen was never occupied by Germany during World War II,
|
||||
# so it must have diverged from Oslo time during the war, as Oslo was
|
||||
# keeping Berlin time.
|
||||
#
|
||||
# <https://www.jan-mayen.no/history.htm> says that the meteorologists
|
||||
# burned down their station in 1940 and left the island, but returned in
|
||||
# 1941 with a small Norwegian garrison and continued operations despite
|
||||
# frequent air attacks from Germans. In 1943 the Americans established a
|
||||
# radiolocating station on the island, called "Atlantic City". Possibly
|
||||
# the UT offset changed during the war, but I think it unlikely that
|
||||
# Jan Mayen used German daylight-saving rules.
|
||||
#
|
||||
# Svalbard is more complicated, as it was raided in August 1941 by an
|
||||
# Allied party that evacuated the civilian population to England (says
|
||||
# <http://www.bartleby.com/65/sv/Svalbard.html>). The Svalbard FAQ
|
||||
# <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were
|
||||
# expelled on 1942-05-14. However, small parties of Germans did return,
|
||||
# and according to Wilhelm Dege's book "War North of 80" (1954)
|
||||
# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html
|
||||
# the German armed forces at the Svalbard weather station code-named
|
||||
# Haudegen did not surrender to the Allies until September 1945.
|
||||
#
|
||||
# All these events predate our cutoff date of 1970, so use Europe/Berlin
|
||||
# for these regions.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Germany 1946 only - Apr 14 2:00s 1:00 S
|
||||
@ -1444,11 +1481,6 @@ Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
|
||||
1:00 SovietZone CE%sT 1946
|
||||
1:00 Germany CE%sT 1980
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Berlin Arctic/Longyearbyen
|
||||
Link Europe/Berlin Europe/Copenhagen
|
||||
Link Europe/Berlin Europe/Oslo
|
||||
Link Europe/Berlin Europe/Stockholm
|
||||
|
||||
|
||||
# Georgia
|
||||
# Please see the "asia" file for Asia/Tbilisi.
|
||||
@ -1567,10 +1599,9 @@ Zone Europe/Budapest 1:16:20 - LMT 1890 Nov 1
|
||||
1:00 Hungary CE%sT 1984
|
||||
1:00 EU CE%sT
|
||||
|
||||
# Iceland
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Italy
|
||||
# San Marino
|
||||
# Vatican City
|
||||
#
|
||||
# From Paul Eggert (2001-03-06):
|
||||
# Sicily and Sardinia each had their own time zones from 1866 to 1893,
|
||||
@ -1689,13 +1720,6 @@ Zone Europe/Rome 0:49:56 - LMT 1866 Dec 12
|
||||
1:00 C-Eur CE%sT 1944 Jun 4
|
||||
1:00 Italy CE%sT 1980
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Rome Europe/Vatican
|
||||
Link Europe/Rome Europe/San_Marino
|
||||
|
||||
|
||||
# Kosovo
|
||||
# See Europe/Belgrade.
|
||||
|
||||
|
||||
# Latvia
|
||||
|
||||
@ -1779,10 +1803,6 @@ Zone Europe/Riga 1:36:34 - LMT 1880
|
||||
2:00 - EET 2001 Jan 2
|
||||
2:00 EU EE%sT
|
||||
|
||||
# Liechtenstein
|
||||
# See Europe/Zurich.
|
||||
|
||||
|
||||
# Lithuania
|
||||
|
||||
# From Paul Eggert (2016-03-18):
|
||||
@ -1835,12 +1855,6 @@ Zone Europe/Vilnius 1:41:16 - LMT 1880
|
||||
2:00 - EET 2003 Jan 1
|
||||
2:00 EU EE%sT
|
||||
|
||||
# Luxembourg
|
||||
# See Europe/Brussels.
|
||||
|
||||
# North Macedonia
|
||||
# See Europe/Belgrade.
|
||||
|
||||
# Malta
|
||||
#
|
||||
# From Paul Eggert (2016-10-21):
|
||||
@ -1936,67 +1950,6 @@ Zone Europe/Chisinau 1:55:20 - LMT 1880
|
||||
# See Romania commentary for the guessed 1997 transition to EU rules.
|
||||
2:00 Moldova EE%sT
|
||||
|
||||
# Monaco
|
||||
# See Europe/Paris.
|
||||
|
||||
# Montenegro
|
||||
# See Europe/Belgrade.
|
||||
|
||||
# Netherlands
|
||||
# See Europe/Brussels.
|
||||
|
||||
# Norway
|
||||
# See Europe/Berlin.
|
||||
|
||||
# Svalbard & Jan Mayen
|
||||
|
||||
# From Steffen Thorsen (2001-05-01):
|
||||
# Although I could not find it explicitly, it seems that Jan Mayen and
|
||||
# Svalbard have been using the same time as Norway at least since the
|
||||
# time they were declared as parts of Norway. Svalbard was declared
|
||||
# as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan
|
||||
# Mayen by law of 1930-02-27 no 2, section 2. (From
|
||||
# <http://www.lovdata.no/all/nl-19250717-011.html> and
|
||||
# <http://www.lovdata.no/all/nl-19300227-002.html>). The law/regulation
|
||||
# for normal/standard time in Norway is from 1894-06-29 no 1 (came
|
||||
# into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a
|
||||
# part of this law since 1925/1930. (From
|
||||
# <http://www.lovdata.no/all/nl-18940629-001.html>) I have not been
|
||||
# able to find if Jan Mayen used a different time zone (e.g. -0100)
|
||||
# before 1930. Jan Mayen has only been "inhabited" since 1921 by
|
||||
# Norwegian meteorologists and maybe used the same time as Norway ever
|
||||
# since 1921. Svalbard (Arctic/Longyearbyen) has been inhabited since
|
||||
# before 1895, and therefore probably changed the local time somewhere
|
||||
# between 1895 and 1925 (inclusive).
|
||||
|
||||
# From Paul Eggert (2013-09-04):
|
||||
#
|
||||
# Actually, Jan Mayen was never occupied by Germany during World War II,
|
||||
# so it must have diverged from Oslo time during the war, as Oslo was
|
||||
# keeping Berlin time.
|
||||
#
|
||||
# <https://www.jan-mayen.no/history.htm> says that the meteorologists
|
||||
# burned down their station in 1940 and left the island, but returned in
|
||||
# 1941 with a small Norwegian garrison and continued operations despite
|
||||
# frequent air attacks from Germans. In 1943 the Americans established a
|
||||
# radiolocating station on the island, called "Atlantic City". Possibly
|
||||
# the UT offset changed during the war, but I think it unlikely that
|
||||
# Jan Mayen used German daylight-saving rules.
|
||||
#
|
||||
# Svalbard is more complicated, as it was raided in August 1941 by an
|
||||
# Allied party that evacuated the civilian population to England (says
|
||||
# <http://www.bartleby.com/65/sv/Svalbard.html>). The Svalbard FAQ
|
||||
# <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were
|
||||
# expelled on 1942-05-14. However, small parties of Germans did return,
|
||||
# and according to Wilhelm Dege's book "War North of 80" (1954)
|
||||
# http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html
|
||||
# the German armed forces at the Svalbard weather station code-named
|
||||
# Haudegen did not surrender to the Allies until September 1945.
|
||||
#
|
||||
# All these events predate our cutoff date of 1970, so use Europe/Berlin
|
||||
# for these regions.
|
||||
|
||||
|
||||
# Poland
|
||||
|
||||
# The 1919 dates and times can be found in Tygodnik Urzędowy nr 1 (1919-03-20),
|
||||
@ -2615,10 +2568,14 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
|
||||
# From Alexander Krivenyshev (2014-03-17):
|
||||
# time change at 2:00 (2am) on March 30, 2014
|
||||
# https://vz.ru/news/2014/3/17/677464.html
|
||||
# From Paul Eggert (2014-03-30):
|
||||
# Simferopol and Sevastopol reportedly changed their central town clocks
|
||||
# late the previous day, but this appears to have been ceremonial
|
||||
# and the discrepancies are small enough to not worry about.
|
||||
# From Tim Parenti (2022-07-01), per Paul Eggert (2014-03-30):
|
||||
# The clocks at the railway station in Simferopol were put forward from 22:00
|
||||
# to 24:00 the previous day in a "symbolic ceremony"; however, per
|
||||
# contemporaneous news reports, "ordinary Crimeans [made] the daylight savings
|
||||
# time switch at 2am" on Sunday.
|
||||
# https://www.business-standard.com/article/pti-stories/crimea-to-set-clocks-to-russia-time-114033000014_1.html
|
||||
# https://www.reuters.com/article/us-ukraine-crisis-crimea-time/crimea-switches-to-moscow-time-amid-incorporation-frenzy-idUKBREA2S0LT20140329
|
||||
# https://www.bbc.com/news/av/world-europe-26806583
|
||||
2:00 EU EE%sT 2014 Mar 30 2:00
|
||||
4:00 - MSK 2014 Oct 26 2:00s
|
||||
3:00 - MSK
|
||||
@ -3274,11 +3231,13 @@ Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
|
||||
11:00 Russia +11/+12 2011 Mar 27 2:00s
|
||||
12:00 - +12
|
||||
|
||||
|
||||
# San Marino
|
||||
# See Europe/Rome.
|
||||
|
||||
# Bosnia & Herzegovina
|
||||
# Croatia
|
||||
# Kosovo
|
||||
# Montenegro
|
||||
# North Macedonia
|
||||
# Serbia
|
||||
# Slovenia
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Belgrade 1:22:00 - LMT 1884
|
||||
1:00 - CET 1941 Apr 18 23:00
|
||||
@ -3290,17 +3249,6 @@ Zone Europe/Belgrade 1:22:00 - LMT 1884
|
||||
# Shanks & Pottenger don't give as much detail, so go with Koželj.
|
||||
1:00 - CET 1982 Nov 27
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Belgrade Europe/Ljubljana # Slovenia
|
||||
Link Europe/Belgrade Europe/Podgorica # Montenegro
|
||||
Link Europe/Belgrade Europe/Sarajevo # Bosnia and Herzegovina
|
||||
Link Europe/Belgrade Europe/Skopje # North Macedonia
|
||||
Link Europe/Belgrade Europe/Zagreb # Croatia
|
||||
|
||||
# Slovakia
|
||||
# See Europe/Prague.
|
||||
|
||||
# Slovenia
|
||||
# See Europe/Belgrade.
|
||||
|
||||
# Spain
|
||||
#
|
||||
@ -3390,7 +3338,7 @@ Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00u
|
||||
0:00 Spain WE%sT 1940 Mar 16 23:00
|
||||
1:00 Spain CE%sT 1979
|
||||
1:00 EU CE%sT
|
||||
Zone Africa/Ceuta -0:21:16 - LMT 1900 Dec 31 23:38:44
|
||||
Zone Africa/Ceuta -0:21:16 - LMT 1901 Jan 1 0:00u
|
||||
0:00 - WET 1918 May 6 23:00
|
||||
0:00 1:00 WEST 1918 Oct 7 23:00
|
||||
0:00 - WET 1924
|
||||
@ -3407,10 +3355,11 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
|
||||
# IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u.
|
||||
# Ignore this for now, as the Canaries are part of the EU.
|
||||
|
||||
# Sweden
|
||||
# See Europe/Berlin.
|
||||
|
||||
# Germany (Busingen enclave)
|
||||
# Liechtenstein
|
||||
# Switzerland
|
||||
#
|
||||
# From Howse:
|
||||
# By the end of the 18th century clocks and watches became commonplace
|
||||
# and their performance improved enormously. Communities began to keep
|
||||
@ -3523,9 +3472,6 @@ Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
|
||||
0:29:46 - BMT 1894 Jun # Bern Mean Time
|
||||
1:00 Swiss CE%sT 1981
|
||||
1:00 EU CE%sT
|
||||
Link Europe/Zurich Europe/Busingen
|
||||
Link Europe/Zurich Europe/Vaduz
|
||||
|
||||
|
||||
# Turkey
|
||||
|
||||
@ -3730,7 +3676,6 @@ Zone Europe/Istanbul 1:55:52 - LMT 1880
|
||||
2:00 1:00 EEST 2015 Nov 8 1:00u
|
||||
2:00 EU EE%sT 2016 Sep 7
|
||||
3:00 - +03
|
||||
Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
||||
|
||||
# Ukraine
|
||||
#
|
||||
@ -3751,8 +3696,8 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
||||
# US colleague David Cochrane) are still trying to get more
|
||||
# information upon these local deviations from Kiev rules.
|
||||
#
|
||||
# From Paul Eggert (2022-02-08):
|
||||
# For now, assume that Ukraine's other three zones followed the same rules,
|
||||
# From Paul Eggert (2022-08-27):
|
||||
# For now, assume that Ukraine's zones all followed the same rules,
|
||||
# except that Crimea switched to Moscow time in 1994 as described elsewhere.
|
||||
|
||||
# From Igor Karpov, who works for the Ukrainian Ministry of Justice,
|
||||
@ -3822,21 +3767,7 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
||||
# * Ukrainian Government's Resolution of 20.03.1992, No. 139.
|
||||
# http://www.uazakon.com/documents/date_8u/pg_grcasa.htm
|
||||
|
||||
# From Paul Eggert (2022-04-12):
|
||||
# As is usual in tzdb, Ukrainian zones use the most common English spellings.
|
||||
# In particular, tzdb's name Europe/Kyiv uses the most common spelling in
|
||||
# English for Ukraine's capital. Although tzdb's former name was Europe/Kiev,
|
||||
# "Kyiv" is now more common due to widespread reporting of the current conflict.
|
||||
# Conversely, tzdb continues to use the names Europe/Uzhgorod and
|
||||
# Europe/Zaporozhye; this is similar to tzdb's use of Europe/Prague, which is
|
||||
# certainly wrong as a transliteration of the Czech "Praha".
|
||||
# English-language spelling of Ukrainian names is in flux, and
|
||||
# some day "Uzhhorod" or "Zaporizhzhia" may become substantially more
|
||||
# common in English; in the meantime, do not change these
|
||||
# English spellings as that means less disruption for our users.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# This represents most of Ukraine. See above for the spelling of "Kyiv".
|
||||
Zone Europe/Kyiv 2:02:04 - LMT 1880
|
||||
2:02:04 - KMT 1924 May 2 # Kyiv Mean Time
|
||||
2:00 - EET 1930 Jun 21
|
||||
@ -3846,37 +3777,6 @@ Zone Europe/Kyiv 2:02:04 - LMT 1880
|
||||
2:00 1:00 EEST 1991 Sep 29 3:00
|
||||
2:00 C-Eur EE%sT 1996 May 13
|
||||
2:00 EU EE%sT
|
||||
# Transcarpathia used CET 1990/1991.
|
||||
# "Uzhhorod" is the transliteration of the Rusyn/Ukrainian pronunciation, but
|
||||
# "Uzhgorod" is more common in English.
|
||||
Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct
|
||||
1:00 - CET 1940
|
||||
1:00 C-Eur CE%sT 1944 Oct
|
||||
1:00 1:00 CEST 1944 Oct 26
|
||||
1:00 - CET 1945 Jun 29
|
||||
3:00 Russia MSK/MSD 1990
|
||||
3:00 - MSK 1990 Jul 1 2:00
|
||||
1:00 - CET 1991 Mar 31 3:00
|
||||
2:00 - EET 1992 Mar 20
|
||||
2:00 C-Eur EE%sT 1996 May 13
|
||||
2:00 EU EE%sT
|
||||
# Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991.
|
||||
# "Zaporizhzhia" is the transliteration of the Ukrainian name, but
|
||||
# "Zaporozh'ye" is more common in English. Use the common English
|
||||
# spelling, except omit the apostrophe as it is not allowed in
|
||||
# portable Posix file names.
|
||||
Zone Europe/Zaporozhye 2:20:40 - LMT 1880
|
||||
2:20 - +0220 1924 May 2
|
||||
2:00 - EET 1930 Jun 21
|
||||
3:00 - MSK 1941 Aug 25
|
||||
1:00 C-Eur CE%sT 1943 Oct 25
|
||||
3:00 Russia MSK/MSD 1991 Mar 31 2:00
|
||||
2:00 E-Eur EE%sT 1992 Mar 20
|
||||
2:00 C-Eur EE%sT 1996 May 13
|
||||
2:00 EU EE%sT
|
||||
|
||||
# Vatican City
|
||||
# See Europe/Rome.
|
||||
|
||||
###############################################################################
|
||||
|
||||
|
@ -439,7 +439,7 @@ Rule Chicago 1922 1966 - Apr lastSun 2:00 1:00 D
|
||||
Rule Chicago 1922 1954 - Sep lastSun 2:00 0 S
|
||||
Rule Chicago 1955 1966 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
|
||||
Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 18:00u
|
||||
-6:00 US C%sT 1920
|
||||
-6:00 Chicago C%sT 1936 Mar 1 2:00
|
||||
-5:00 - EST 1936 Nov 15 2:00
|
||||
@ -448,7 +448,7 @@ Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
|
||||
-6:00 Chicago C%sT 1967
|
||||
-6:00 US C%sT
|
||||
# Oliver County, ND switched from mountain to central time on 1992-10-25.
|
||||
Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48
|
||||
Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 19:00u
|
||||
-7:00 US M%sT 1992 Oct 25 2:00
|
||||
-6:00 US C%sT
|
||||
# Morton County, ND, switched from mountain to central time on
|
||||
@ -458,7 +458,7 @@ Zone America/North_Dakota/Center -6:45:12 - LMT 1883 Nov 18 12:14:48
|
||||
# Jones, Mellette, and Todd Counties in South Dakota;
|
||||
# but in practice these other counties were already observing central time.
|
||||
# See <http://www.epa.gov/fedrgstr/EPA-IMPACT/2003/October/Day-28/i27056.htm>.
|
||||
Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
|
||||
Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 19:00u
|
||||
-7:00 US M%sT 2003 Oct 26 2:00
|
||||
-6:00 US C%sT
|
||||
|
||||
@ -475,7 +475,7 @@ Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
|
||||
# largest city in Mercer County). Google Maps places Beulah's city hall
|
||||
# at 47° 15' 51" N, 101° 46' 40" W, which yields an offset of 6h47'07".
|
||||
|
||||
Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53
|
||||
Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 19:00u
|
||||
-7:00 US M%sT 2010 Nov 7 2:00
|
||||
-6:00 US C%sT
|
||||
|
||||
@ -507,7 +507,7 @@ Rule Denver 1921 only - May 22 2:00 0 S
|
||||
Rule Denver 1965 1966 - Apr lastSun 2:00 1:00 D
|
||||
Rule Denver 1965 1966 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04
|
||||
Zone America/Denver -6:59:56 - LMT 1883 Nov 18 19:00u
|
||||
-7:00 US M%sT 1920
|
||||
-7:00 Denver M%sT 1942
|
||||
-7:00 US M%sT 1946
|
||||
@ -560,7 +560,7 @@ Rule CA 1950 1966 - Apr lastSun 1:00 1:00 D
|
||||
Rule CA 1950 1961 - Sep lastSun 2:00 0 S
|
||||
Rule CA 1962 1966 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
|
||||
Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 20:00u
|
||||
-8:00 US P%sT 1946
|
||||
-8:00 CA P%sT 1967
|
||||
-8:00 US P%sT
|
||||
@ -822,14 +822,13 @@ Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00
|
||||
# Go with the Arizona State Library instead.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42
|
||||
Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 19:00u
|
||||
-7:00 US M%sT 1944 Jan 1 0:01
|
||||
-7:00 - MST 1944 Apr 1 0:01
|
||||
-7:00 US M%sT 1944 Oct 1 0:01
|
||||
-7:00 - MST 1967
|
||||
-7:00 US M%sT 1968 Mar 21
|
||||
-7:00 - MST
|
||||
Link America/Phoenix America/Creston
|
||||
|
||||
# From Arthur David Olson (1988-02-13):
|
||||
# A writer from the Inter Tribal Council of Arizona, Inc.,
|
||||
@ -850,7 +849,7 @@ Link America/Phoenix America/Creston
|
||||
# switched four weeks late in 1974.
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
|
||||
Zone America/Boise -7:44:49 - LMT 1883 Nov 18 20:00u
|
||||
-8:00 US P%sT 1923 May 13 2:00
|
||||
-7:00 US M%sT 1974
|
||||
-7:00 - MST 1974 Feb 3 2:00
|
||||
@ -922,7 +921,7 @@ Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D
|
||||
Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S
|
||||
Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
|
||||
Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 18:00u
|
||||
-6:00 US C%sT 1920
|
||||
-6:00 Indianapolis C%sT 1942
|
||||
-6:00 US C%sT 1946
|
||||
@ -942,7 +941,7 @@ Rule Marengo 1951 only - Sep lastSun 2:00 0 S
|
||||
Rule Marengo 1954 1960 - Apr lastSun 2:00 1:00 D
|
||||
Rule Marengo 1954 1960 - Sep lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37
|
||||
Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 18:00u
|
||||
-6:00 US C%sT 1951
|
||||
-6:00 Marengo C%sT 1961 Apr 30 2:00
|
||||
-5:00 - EST 1969
|
||||
@ -966,7 +965,7 @@ Rule Vincennes 1960 only - Oct lastSun 2:00 0 S
|
||||
Rule Vincennes 1961 only - Sep lastSun 2:00 0 S
|
||||
Rule Vincennes 1962 1963 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53
|
||||
Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 18:00u
|
||||
-6:00 US C%sT 1946
|
||||
-6:00 Vincennes C%sT 1964 Apr 26 2:00
|
||||
-5:00 - EST 1969
|
||||
@ -986,7 +985,7 @@ Rule Perry 1955 1960 - Sep lastSun 2:00 0 S
|
||||
Rule Perry 1956 1963 - Apr lastSun 2:00 1:00 D
|
||||
Rule Perry 1961 1963 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 12:12:57
|
||||
Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 18:00u
|
||||
-6:00 US C%sT 1946
|
||||
-6:00 Perry C%sT 1964 Apr 26 2:00
|
||||
-5:00 - EST 1967 Oct 29 2:00
|
||||
@ -1003,7 +1002,7 @@ Rule Pike 1955 1960 - Sep lastSun 2:00 0 S
|
||||
Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D
|
||||
Rule Pike 1961 1964 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53
|
||||
Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 18:00u
|
||||
-6:00 US C%sT 1955
|
||||
-6:00 Pike C%sT 1965 Apr 25 2:00
|
||||
-5:00 - EST 1966 Oct 30 2:00
|
||||
@ -1025,7 +1024,7 @@ Rule Starke 1955 1956 - Oct lastSun 2:00 0 S
|
||||
Rule Starke 1957 1958 - Sep lastSun 2:00 0 S
|
||||
Rule Starke 1959 1961 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30
|
||||
Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 18:00u
|
||||
-6:00 US C%sT 1947
|
||||
-6:00 Starke C%sT 1962 Apr 29 2:00
|
||||
-5:00 - EST 1963 Oct 27 2:00
|
||||
@ -1041,7 +1040,7 @@ Rule Pulaski 1946 1954 - Sep lastSun 2:00 0 S
|
||||
Rule Pulaski 1955 1956 - Oct lastSun 2:00 0 S
|
||||
Rule Pulaski 1957 1960 - Sep lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35
|
||||
Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 18:00u
|
||||
-6:00 US C%sT 1946
|
||||
-6:00 Pulaski C%sT 1961 Apr 30 2:00
|
||||
-5:00 - EST 1969
|
||||
@ -1052,7 +1051,7 @@ Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35
|
||||
#
|
||||
# Switzerland County, Indiana, did not observe DST from 1973 through 2005.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44
|
||||
Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 18:00u
|
||||
-6:00 US C%sT 1954 Apr 25 2:00
|
||||
-5:00 - EST 1969
|
||||
-5:00 US E%sT 1973
|
||||
@ -1088,7 +1087,7 @@ Rule Louisville 1950 1961 - Apr lastSun 2:00 1:00 D
|
||||
Rule Louisville 1950 1955 - Sep lastSun 2:00 0 S
|
||||
Rule Louisville 1956 1961 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58
|
||||
Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 18:00u
|
||||
-6:00 US C%sT 1921
|
||||
-6:00 Louisville C%sT 1942
|
||||
-6:00 US C%sT 1946
|
||||
@ -1122,7 +1121,7 @@ Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58
|
||||
# Federal Register 65, 160 (2000-08-17), pp 50154-50158.
|
||||
# https://www.gpo.gov/fdsys/pkg/FR-2000-08-17/html/00-20854.htm
|
||||
#
|
||||
Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36
|
||||
Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 18:00u
|
||||
-6:00 US C%sT 1946
|
||||
-6:00 - CST 1968
|
||||
-6:00 US C%sT 2000 Oct 29 2:00
|
||||
@ -1603,23 +1602,6 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
|
||||
|
||||
# Ontario
|
||||
|
||||
# From Paul Eggert (2006-07-09):
|
||||
# Shanks & Pottenger write that since 1970 most of Ontario has been like
|
||||
# Toronto.
|
||||
# Thunder Bay skipped DST in 1973.
|
||||
# Many smaller locales did not observe peacetime DST until 1974;
|
||||
# Nipigon (EST) and Rainy River (CST) are the largest that we know of.
|
||||
# Far west Ontario is like Winnipeg; far east Quebec is like Halifax.
|
||||
|
||||
# From Jeffery Nichols (2020-02-06):
|
||||
# According to the [Shanks] atlas, those western Ontario zones are huge,
|
||||
# covering most of Ontario northwest of Sault Ste Marie and Timmins.
|
||||
# The zones seem to include towns bigger than the ones they're named after,
|
||||
# like Dryden in America/Rainy_River and Wawa (and maybe Attawapiskat) in
|
||||
# America/Nipigon. I assume it's too much trouble to change the name of the
|
||||
# zone (like when you found out that America/Glace_Bay includes Sydney, Nova
|
||||
# Scotia)....
|
||||
|
||||
# From Mark Brader (2003-07-26):
|
||||
# [According to the Toronto Star] Orillia, Ontario, adopted DST
|
||||
# effective Saturday, 1912-06-22, 22:00; the article mentions that
|
||||
@ -1640,17 +1622,6 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
|
||||
|
||||
# From Mark Brader (2010-03-06):
|
||||
#
|
||||
# Currently the database has:
|
||||
#
|
||||
# # Ontario
|
||||
#
|
||||
# # From Paul Eggert (2006-07-09):
|
||||
# # Shanks & Pottenger write that since 1970 most of Ontario has been like
|
||||
# # Toronto.
|
||||
# # Thunder Bay skipped DST in 1973.
|
||||
# # Many smaller locales did not observe peacetime DST until 1974;
|
||||
# # Nipigon (EST) and Rainy River (CST) are the largest that we know of.
|
||||
#
|
||||
# In the (Toronto) Globe and Mail for Saturday, 1955-09-24, in the bottom
|
||||
# right corner of page 1, it says that Toronto will return to standard
|
||||
# time at 2 am Sunday morning (which agrees with the database), and that:
|
||||
@ -1658,10 +1629,8 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
|
||||
# The one-hour setback will go into effect throughout most of Ontario,
|
||||
# except in areas like Windsor which remains on standard time all year.
|
||||
#
|
||||
# Windsor is, of course, a lot larger than Nipigon.
|
||||
#
|
||||
# I only came across this incidentally. I don't know if Windsor began
|
||||
# observing DST when Detroit did, or in 1974, or on some other date.
|
||||
# ... I don't know if Windsor began observing DST when Detroit did,
|
||||
# or in 1974, or on some other date.
|
||||
#
|
||||
# By the way, the article continues by noting that:
|
||||
#
|
||||
@ -1743,23 +1712,7 @@ Rule Toronto 1951 1956 - Sep lastSun 2:00 0 S
|
||||
# Toronto Star, which said that DST was ending 1971-10-31 as usual.
|
||||
Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S
|
||||
|
||||
# From Paul Eggert (2003-07-27):
|
||||
# Willett (1914-03) writes (p. 17) "In the Cities of Fort William, and
|
||||
# Port Arthur, Ontario, the principle of the Bill has been in
|
||||
# operation for the past three years, and in the City of Moose Jaw,
|
||||
# Saskatchewan, for one year."
|
||||
|
||||
# From David Bryan via Tory Tronrud, Director/Curator,
|
||||
# Thunder Bay Museum (2003-11-12):
|
||||
# There is some suggestion, however, that, by-law or not, daylight
|
||||
# savings time was being practiced in Fort William and Port Arthur
|
||||
# before 1909.... [I]n 1910, the line between the Eastern and Central
|
||||
# Time Zones was permanently moved about two hundred miles west to
|
||||
# include the Thunder Bay area.... When Canada adopted daylight
|
||||
# savings time in 1916, Fort William and Port Arthur, having done so
|
||||
# already, did not change their clocks.... During the Second World
|
||||
# War,... [t]he cities agreed to implement DST during the summer
|
||||
# months for the remainder of the war years.
|
||||
# The Bahamas match Toronto since 1970.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Toronto -5:17:32 - LMT 1895
|
||||
@ -1768,22 +1721,6 @@ Zone America/Toronto -5:17:32 - LMT 1895
|
||||
-5:00 Canada E%sT 1946
|
||||
-5:00 Toronto E%sT 1974
|
||||
-5:00 Canada E%sT
|
||||
Link America/Toronto America/Nassau
|
||||
Zone America/Thunder_Bay -5:57:00 - LMT 1895
|
||||
-6:00 - CST 1910
|
||||
-5:00 - EST 1942
|
||||
-5:00 Canada E%sT 1970
|
||||
-5:00 Toronto E%sT 1973
|
||||
-5:00 - EST 1974
|
||||
-5:00 Canada E%sT
|
||||
Zone America/Nipigon -5:53:04 - LMT 1895
|
||||
-5:00 Canada E%sT 1940 Sep 29
|
||||
-5:00 1:00 EDT 1942 Feb 9 2:00s
|
||||
-5:00 Canada E%sT
|
||||
Zone America/Rainy_River -6:18:16 - LMT 1895
|
||||
-6:00 Canada C%sT 1940 Sep 29
|
||||
-6:00 1:00 CDT 1942 Feb 9 2:00s
|
||||
-6:00 Canada C%sT
|
||||
# For Atikokan see America/Panama.
|
||||
|
||||
|
||||
@ -2616,7 +2553,15 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
|
||||
# 5- The islands, reefs and keys shall take their timezone from the
|
||||
# longitude they are located at.
|
||||
|
||||
# From Paul Eggert (2022-10-28):
|
||||
# The new Mexican law was published today:
|
||||
# https://www.dof.gob.mx/nota_detalle.php?codigo=5670045&fecha=28/10/2022
|
||||
# This abolishes DST except where US DST rules are observed,
|
||||
# and in addition changes all of Chihuahua to -06 with no DST.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Mexico 1931 only - May 1 23:00 1:00 D
|
||||
Rule Mexico 1931 only - Oct 1 0:00 0 S
|
||||
Rule Mexico 1939 only - Feb 5 0:00 1:00 D
|
||||
Rule Mexico 1939 only - Jun 25 0:00 0 S
|
||||
Rule Mexico 1940 only - Dec 9 0:00 1:00 D
|
||||
@ -2629,17 +2574,17 @@ Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D
|
||||
Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S
|
||||
Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
|
||||
Rule Mexico 2001 only - Sep lastSun 2:00 0 S
|
||||
Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
|
||||
Rule Mexico 2002 max - Oct lastSun 2:00 0 S
|
||||
Rule Mexico 2002 2022 - Apr Sun>=1 2:00 1:00 D
|
||||
Rule Mexico 2002 2022 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Quintana Roo; represented by Cancún
|
||||
Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 0:12:56
|
||||
Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 6:00u
|
||||
-6:00 - CST 1981 Dec 23
|
||||
-5:00 Mexico E%sT 1998 Aug 2 2:00
|
||||
-6:00 Mexico C%sT 2015 Feb 1 2:00
|
||||
-5:00 - EST
|
||||
# Campeche, Yucatán; represented by Mérida
|
||||
Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32
|
||||
Zone America/Merida -5:58:28 - LMT 1922 Jan 1 6:00u
|
||||
-6:00 - CST 1981 Dec 23
|
||||
-5:00 - EST 1982 Dec 2
|
||||
-6:00 Mexico C%sT
|
||||
@ -2653,23 +2598,21 @@ Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32
|
||||
# See: Inicia mañana Horario de Verano en zona fronteriza, El Universal,
|
||||
# 2016-03-12
|
||||
# http://www.eluniversal.com.mx/articulo/estados/2016/03/12/inicia-manana-horario-de-verano-en-zona-fronteriza
|
||||
Zone America/Matamoros -6:40:00 - LMT 1921 Dec 31 23:20:00
|
||||
Zone America/Matamoros -6:30:00 - LMT 1922 Jan 1 6:00u
|
||||
-6:00 - CST 1988
|
||||
-6:00 US C%sT 1989
|
||||
-6:00 Mexico C%sT 2010
|
||||
-6:00 US C%sT
|
||||
# Durango; Coahuila, Nuevo León, Tamaulipas (away from US border)
|
||||
Zone America/Monterrey -6:41:16 - LMT 1921 Dec 31 23:18:44
|
||||
Zone America/Monterrey -6:41:16 - LMT 1922 Jan 1 6:00u
|
||||
-6:00 - CST 1988
|
||||
-6:00 US C%sT 1989
|
||||
-6:00 Mexico C%sT
|
||||
# Central Mexico
|
||||
Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24
|
||||
Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 - MST 1931 May 1 23:00
|
||||
-6:00 - CST 1931 Oct
|
||||
-7:00 - MST 1932 Apr 1
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 Mexico C%sT 2001 Sep 30 2:00
|
||||
-6:00 - CST 2002 Feb 20
|
||||
-6:00 Mexico C%sT
|
||||
@ -2677,35 +2620,31 @@ Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24
|
||||
# This includes the municipalities of Janos, Ascensión, Juárez, Guadalupe,
|
||||
# Práxedis G Guerrero, Coyame del Sotol, Ojinaga, and Manuel Benavides.
|
||||
# (See the 2016-03-12 El Universal source mentioned above.)
|
||||
Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 0:02:20
|
||||
Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 - MST 1931 May 1 23:00
|
||||
-6:00 - CST 1931 Oct
|
||||
-7:00 - MST 1932 Apr 1
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1996
|
||||
-6:00 Mexico C%sT 1998
|
||||
-6:00 - CST 1998 Apr Sun>=1 3:00
|
||||
-7:00 Mexico M%sT 2010
|
||||
-7:00 US M%sT
|
||||
-7:00 US M%sT 2022 Oct 30 2:00
|
||||
-6:00 - CST
|
||||
# Chihuahua (away from US border)
|
||||
Zone America/Chihuahua -7:04:20 - LMT 1921 Dec 31 23:55:40
|
||||
Zone America/Chihuahua -7:04:20 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 - MST 1931 May 1 23:00
|
||||
-6:00 - CST 1931 Oct
|
||||
-7:00 - MST 1932 Apr 1
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1996
|
||||
-6:00 Mexico C%sT 1998
|
||||
-6:00 - CST 1998 Apr Sun>=1 3:00
|
||||
-7:00 Mexico M%sT
|
||||
-7:00 Mexico M%sT 2022 Oct 30 2:00
|
||||
-6:00 - CST
|
||||
# Sonora
|
||||
Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08
|
||||
Zone America/Hermosillo -7:23:52 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 - MST 1931 May 1 23:00
|
||||
-6:00 - CST 1931 Oct
|
||||
-7:00 - MST 1932 Apr 1
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1942 Apr 24
|
||||
-7:00 - MST 1949 Jan 14
|
||||
-8:00 - PST 1970
|
||||
@ -2740,24 +2679,20 @@ Zone America/Hermosillo -7:23:52 - LMT 1921 Dec 31 23:36:08
|
||||
# Use "Bahia_Banderas" to keep the name to fourteen characters.
|
||||
|
||||
# Mazatlán
|
||||
Zone America/Mazatlan -7:05:40 - LMT 1921 Dec 31 23:54:20
|
||||
Zone America/Mazatlan -7:05:40 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 - MST 1931 May 1 23:00
|
||||
-6:00 - CST 1931 Oct
|
||||
-7:00 - MST 1932 Apr 1
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1942 Apr 24
|
||||
-7:00 - MST 1949 Jan 14
|
||||
-8:00 - PST 1970
|
||||
-7:00 Mexico M%sT
|
||||
|
||||
# Bahía de Banderas
|
||||
Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00
|
||||
Zone America/Bahia_Banderas -7:01:00 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 - MST 1931 May 1 23:00
|
||||
-6:00 - CST 1931 Oct
|
||||
-7:00 - MST 1932 Apr 1
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1942 Apr 24
|
||||
-7:00 - MST 1949 Jan 14
|
||||
-8:00 - PST 1970
|
||||
@ -2765,7 +2700,7 @@ Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00
|
||||
-6:00 Mexico C%sT
|
||||
|
||||
# Baja California
|
||||
Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
|
||||
Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1924
|
||||
-8:00 - PST 1927 Jun 10 23:00
|
||||
-7:00 - MST 1930 Nov 15
|
||||
@ -2802,20 +2737,16 @@ Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
|
||||
# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010
|
||||
# It has been moved to the 'backward' file.
|
||||
#
|
||||
# From Paul Eggert (2022-10-28):
|
||||
# Today's new law states that the entire state of Baja California
|
||||
# follows US DST rules, which agrees with simplifications noted above.
|
||||
#
|
||||
#
|
||||
# Revillagigedo Is
|
||||
# no information
|
||||
|
||||
###############################################################################
|
||||
|
||||
# Anguilla
|
||||
# Antigua and Barbuda
|
||||
# See America/Puerto_Rico.
|
||||
|
||||
# The Bahamas
|
||||
# See America/Toronto.
|
||||
|
||||
|
||||
# Barbados
|
||||
|
||||
# For 1899 Milne gives -3:58:29.2.
|
||||
@ -3028,12 +2959,6 @@ Zone Atlantic/Bermuda -4:19:18 - LMT 1890 # Hamilton
|
||||
-4:00 Canada A%sT 1976
|
||||
-4:00 US A%sT
|
||||
|
||||
# Caribbean Netherlands
|
||||
# See America/Puerto_Rico.
|
||||
|
||||
# Cayman Is
|
||||
# See America/Panama.
|
||||
|
||||
# Costa Rica
|
||||
|
||||
# Milne gives -5:36:13.3 as San José mean time.
|
||||
@ -3259,9 +3184,6 @@ Zone America/Havana -5:29:28 - LMT 1890
|
||||
-5:29:36 - HMT 1925 Jul 19 12:00 # Havana MT
|
||||
-5:00 Cuba C%sT
|
||||
|
||||
# Dominica
|
||||
# See America/Puerto_Rico.
|
||||
|
||||
# Dominican Republic
|
||||
|
||||
# From Steffen Thorsen (2000-10-30):
|
||||
@ -3308,12 +3230,6 @@ Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
|
||||
Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
|
||||
-6:00 Salv C%sT
|
||||
|
||||
# Grenada
|
||||
# Guadeloupe
|
||||
# St Barthélemy
|
||||
# St Martin (French part)
|
||||
# See America/Puerto_Rico.
|
||||
|
||||
# Guatemala
|
||||
#
|
||||
# From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen:
|
||||
@ -3499,9 +3415,6 @@ Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
|
||||
-4:00 1:00 ADT 1980 Sep 28
|
||||
-4:00 - AST
|
||||
|
||||
# Montserrat
|
||||
# See America/Puerto_Rico.
|
||||
|
||||
# Nicaragua
|
||||
#
|
||||
# This uses Shanks & Pottenger for times before 2005.
|
||||
@ -3567,44 +3480,39 @@ Zone America/Managua -5:45:08 - LMT 1890
|
||||
-5:00 - EST 1997
|
||||
-6:00 Nic C%sT
|
||||
|
||||
# Cayman Is
|
||||
# Panama
|
||||
#
|
||||
# Atikokan and Coral Harbour, Canada, match Panama since 1970.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Panama -5:18:08 - LMT 1890
|
||||
-5:19:36 - CMT 1908 Apr 22 # Colón Mean Time
|
||||
-5:00 - EST
|
||||
Link America/Panama America/Atikokan
|
||||
Link America/Panama America/Cayman
|
||||
|
||||
# Anguilla
|
||||
# Antigua & Barbuda
|
||||
# Aruba
|
||||
# Caribbean Netherlands
|
||||
# Curaçao
|
||||
# Dominica
|
||||
# Grenada
|
||||
# Guadeloupe
|
||||
# Montserrat
|
||||
# Puerto Rico
|
||||
# St Barthélemy
|
||||
# St Kitts-Nevis
|
||||
# Sint Maarten / St Martin
|
||||
# St Lucia
|
||||
# St Vincent & the Grenadines
|
||||
# Trinidad & Tobago
|
||||
# Virgin Is (UK & US)
|
||||
#
|
||||
# There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
|
||||
-4:00 - AST 1942 May 3
|
||||
-4:00 US A%sT 1946
|
||||
-4:00 - AST
|
||||
Link America/Puerto_Rico America/Anguilla
|
||||
Link America/Puerto_Rico America/Antigua
|
||||
Link America/Puerto_Rico America/Aruba
|
||||
Link America/Puerto_Rico America/Curacao
|
||||
Link America/Puerto_Rico America/Blanc-Sablon # Quebec (Lower North Shore)
|
||||
Link America/Puerto_Rico America/Dominica
|
||||
Link America/Puerto_Rico America/Grenada
|
||||
Link America/Puerto_Rico America/Guadeloupe
|
||||
Link America/Puerto_Rico America/Kralendijk # Caribbean Netherlands
|
||||
Link America/Puerto_Rico America/Lower_Princes # Sint Maarten
|
||||
Link America/Puerto_Rico America/Marigot # St Martin (French part)
|
||||
Link America/Puerto_Rico America/Montserrat
|
||||
Link America/Puerto_Rico America/Port_of_Spain # Trinidad & Tobago
|
||||
Link America/Puerto_Rico America/St_Barthelemy # St Barthélemy
|
||||
Link America/Puerto_Rico America/St_Kitts # St Kitts & Nevis
|
||||
Link America/Puerto_Rico America/St_Lucia
|
||||
Link America/Puerto_Rico America/St_Thomas # Virgin Islands (US)
|
||||
Link America/Puerto_Rico America/St_Vincent
|
||||
Link America/Puerto_Rico America/Tortola # Virgin Islands (UK)
|
||||
|
||||
# St Kitts-Nevis
|
||||
# St Lucia
|
||||
# See America/Puerto_Rico.
|
||||
|
||||
# St Pierre and Miquelon
|
||||
# There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
|
||||
@ -3614,12 +3522,6 @@ Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
|
||||
-3:00 - -03 1987
|
||||
-3:00 Canada -03/-02
|
||||
|
||||
# St Vincent and the Grenadines
|
||||
# See America/Puerto_Rico.
|
||||
|
||||
# Sint Maarten
|
||||
# See America/Puerto_Rico.
|
||||
|
||||
# Turks and Caicos
|
||||
#
|
||||
# From Chris Dunn in
|
||||
@ -3689,11 +3591,6 @@ Zone America/Grand_Turk -4:44:32 - LMT 1890
|
||||
-4:00 - AST 2018 Mar 11 3:00
|
||||
-5:00 US E%sT
|
||||
|
||||
# British Virgin Is
|
||||
# US Virgin Is
|
||||
# See America/Puerto_Rico.
|
||||
|
||||
|
||||
# Local Variables:
|
||||
# coding: utf-8
|
||||
# End:
|
||||
|
@ -1,29 +0,0 @@
|
||||
# tzdb data for proposed US election time (this file is obsolete)
|
||||
|
||||
# This file is in the public domain, so clarified as of
|
||||
# 2009-05-17 by Arthur David Olson.
|
||||
|
||||
# From Arthur David Olson (1989-04-05):
|
||||
# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill
|
||||
# establishing "Pacific Presidential Election Time"; it was not acted on
|
||||
# by the Senate or signed into law by the President.
|
||||
# You might want to change the "PE" (Presidential Election) below to
|
||||
# "Q" (Quadrennial) to maintain three-character zone abbreviations.
|
||||
# If you're really conservative, you might want to change it to "D".
|
||||
# Avoid "L" (Leap Year), which won't be true in 2100.
|
||||
|
||||
# If Presidential Election Time is ever established, replace "XXXX" below
|
||||
# with the year the law takes effect and uncomment the "##" lines.
|
||||
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
## Rule Twilite XXXX max - Apr Sun>=1 2:00 1:00 D
|
||||
## Rule Twilite XXXX max uspres Oct lastSun 2:00 1:00 PE
|
||||
## Rule Twilite XXXX max uspres Nov Sun>=7 2:00 0 S
|
||||
## Rule Twilite XXXX max nonpres Oct lastSun 2:00 0 S
|
||||
|
||||
# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL]
|
||||
## Zone America/Los_Angeles-PET -8:00 US P%sT XXXX
|
||||
## -8:00 Twilite P%sT
|
||||
|
||||
# For now...
|
||||
Link America/Los_Angeles US/Pacific-New ##
|
@ -585,9 +585,6 @@ Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
|
||||
-3:00 Arg -03/-02 2008 Oct 18
|
||||
-3:00 - -03
|
||||
|
||||
# Aruba
|
||||
# See America/Puerto_Rico.
|
||||
|
||||
# Bolivia
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/La_Paz -4:32:36 - LMT 1890
|
||||
@ -1309,8 +1306,14 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
# for America/Santiago will start on midnight of September 11th;
|
||||
# and will end on April 1st, 2023. Magallanes region (America/Punta_Arenas)
|
||||
# will keep UTC -3 "indefinitely"... This is because on September 4th
|
||||
# we will have a voting whether to approve a new Constitution....
|
||||
# https://www.interior.gob.cl/noticias/2022/08/09/comunicado-el-proximo-sabado-10-de-septiembre-los-relojes-se-deben-adelantar-una-hora/
|
||||
# we will have a voting whether to approve a new Constitution.
|
||||
#
|
||||
# From Eduardo Romero Urra (2022-08-17):
|
||||
# https://www.diariooficial.interior.gob.cl/publicaciones/2022/08/13/43327/01/2172567.pdf
|
||||
#
|
||||
# From Paul Eggert (2022-08-17):
|
||||
# Although the presidential decree stops at fall 2026, assume that
|
||||
# similar DST rules will continue thereafter.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Chile 1927 1931 - Sep 1 0:00 1:00 -
|
||||
@ -1426,15 +1429,6 @@ Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
|
||||
# Malpelo, Providencia, San Andres
|
||||
# no information; probably like America/Bogota
|
||||
|
||||
# Curaçao
|
||||
# See America/Puerto_Rico.
|
||||
#
|
||||
# From Arthur David Olson (2011-06-15):
|
||||
# use links for places with new iso3166 codes.
|
||||
# The name "Lower Prince's Quarter" is both longer than fourteen characters
|
||||
# and contains an apostrophe; use "Lower_Princes"....
|
||||
# From Paul Eggert (2021-09-29):
|
||||
# These backward-compatibility links now are in the 'northamerica' file.
|
||||
|
||||
# Ecuador
|
||||
#
|
||||
@ -1750,9 +1744,6 @@ Zone America/Paramaribo -3:40:40 - LMT 1911
|
||||
-3:30 - -0330 1984 Oct
|
||||
-3:00 - -03
|
||||
|
||||
# Trinidad and Tobago
|
||||
# See America/Puerto_Rico.
|
||||
|
||||
# Uruguay
|
||||
# From Paul Eggert (1993-11-18):
|
||||
# Uruguay wins the prize for the strangest peacetime manipulation of the rules.
|
||||
|
@ -1,39 +0,0 @@
|
||||
# tzdb data for System V rules (this file is obsolete)
|
||||
|
||||
# This file is in the public domain, so clarified as of
|
||||
# 2009-05-17 by Arthur David Olson.
|
||||
|
||||
# Old rules, should the need arise.
|
||||
# No attempt is made to handle Newfoundland, since it cannot be expressed
|
||||
# using the System V "TZ" scheme (half-hour offset), or anything outside
|
||||
# North America (no support for non-standard DST start/end dates), nor
|
||||
# the changes in the DST rules in the US after 1976 (which occurred after
|
||||
# the old rules were written).
|
||||
#
|
||||
# If you need the old rules, uncomment ## lines.
|
||||
# Compile this *without* leap second correction for true conformance.
|
||||
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D
|
||||
Rule SystemV min 1973 - Oct lastSun 2:00 0 S
|
||||
Rule SystemV 1974 only - Jan 6 2:00 1:00 D
|
||||
Rule SystemV 1974 only - Nov lastSun 2:00 0 S
|
||||
Rule SystemV 1975 only - Feb 23 2:00 1:00 D
|
||||
Rule SystemV 1975 only - Oct lastSun 2:00 0 S
|
||||
Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D
|
||||
Rule SystemV 1976 max - Oct lastSun 2:00 0 S
|
||||
|
||||
# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL]
|
||||
## Zone SystemV/AST4ADT -4:00 SystemV A%sT
|
||||
## Zone SystemV/EST5EDT -5:00 SystemV E%sT
|
||||
## Zone SystemV/CST6CDT -6:00 SystemV C%sT
|
||||
## Zone SystemV/MST7MDT -7:00 SystemV M%sT
|
||||
## Zone SystemV/PST8PDT -8:00 SystemV P%sT
|
||||
## Zone SystemV/YST9YDT -9:00 SystemV Y%sT
|
||||
## Zone SystemV/AST4 -4:00 - AST
|
||||
## Zone SystemV/EST5 -5:00 - EST
|
||||
## Zone SystemV/CST6 -6:00 - CST
|
||||
## Zone SystemV/MST7 -7:00 - MST
|
||||
## Zone SystemV/PST8 -8:00 - PST
|
||||
## Zone SystemV/YST9 -9:00 - YST
|
||||
## Zone SystemV/HST10 -10:00 - HST
|
@ -329,6 +329,7 @@ still supported.
|
||||
These legacy names are mostly defined in the file
|
||||
'<code>etcetera</code>'.
|
||||
Also, the file '<code>backward</code>' defines the legacy names
|
||||
'<code>Etc/GMT0</code>', '<code>Etc/GMT-0</code>', '<code>Etc/GMT+0</code>',
|
||||
'<code>GMT0</code>', '<code>GMT-0</code>' and '<code>GMT+0</code>',
|
||||
and the file '<code>northamerica</code>' defines the legacy names
|
||||
'<code>EST5EDT</code>', '<code>CST6CDT</code>',
|
||||
|
@ -1 +1 @@
|
||||
2022c
|
||||
2022f
|
||||
|
@ -1,39 +0,0 @@
|
||||
#! /bin/sh
|
||||
: 'Determine whether year is of appropriate type (this file is obsolete).'
|
||||
|
||||
: 'This file is in the public domain, so clarified as of'
|
||||
: '2006-07-17 by Arthur David Olson.'
|
||||
|
||||
case $#-$1 in
|
||||
2-|2-0*|2-*[!0-9]*)
|
||||
echo "$0: wild year: $1" >&2
|
||||
exit 1 ;;
|
||||
esac
|
||||
|
||||
case $#-$2 in
|
||||
2-even)
|
||||
case $1 in
|
||||
*[24680]) exit 0 ;;
|
||||
*) exit 1 ;;
|
||||
esac ;;
|
||||
2-nonpres|2-nonuspres)
|
||||
case $1 in
|
||||
*[02468][048]|*[13579][26]) exit 1 ;;
|
||||
*) exit 0 ;;
|
||||
esac ;;
|
||||
2-odd)
|
||||
case $1 in
|
||||
*[13579]) exit 0 ;;
|
||||
*) exit 1 ;;
|
||||
esac ;;
|
||||
2-uspres)
|
||||
case $1 in
|
||||
*[02468][048]|*[13579][26]) exit 0 ;;
|
||||
*) exit 1 ;;
|
||||
esac ;;
|
||||
2-*)
|
||||
echo "$0: wild type: $2" >&2 ;;
|
||||
esac
|
||||
|
||||
echo "$0: usage is $0 year even|odd|uspres|nonpres|nonuspres" >&2
|
||||
exit 1
|
@ -15,6 +15,9 @@
|
||||
# after main became rearguard and vanguard became main).
|
||||
# There is no need to convert rearguard to other forms.
|
||||
#
|
||||
# When converting to vanguard form, the output can use the line
|
||||
# "Zone GMT 0 - GMT" which TZUpdater 2.3.2 mistakenly rejects.
|
||||
#
|
||||
# When converting to vanguard form, the output can use negative SAVE
|
||||
# values.
|
||||
#
|
||||
@ -151,6 +154,17 @@ DATAFORM != "main" {
|
||||
}
|
||||
}
|
||||
|
||||
# In vanguard form, use the line "Zone GMT 0 - GMT" instead of
|
||||
# "Zone Etc/GMT 0 - GMT" and adjust Link lines accordingly.
|
||||
# This works around a bug in TZUpdater 2.3.2.
|
||||
if (/^#?(Zone|Link)[\t ]+(Etc\/)?GMT[\t ]/) {
|
||||
if (($2 == "GMT") == (DATAFORM == "vanguard")) {
|
||||
uncomment = in_comment
|
||||
} else {
|
||||
comment_out = !in_comment
|
||||
}
|
||||
}
|
||||
|
||||
if (uncomment) {
|
||||
sub(/^#/, "")
|
||||
}
|
||||
@ -297,6 +311,39 @@ DATAFORM != "main" {
|
||||
}
|
||||
}
|
||||
|
||||
# Return a link line resulting by changing OLDLINE to link to TARGET
|
||||
# from LINKNAME, instead of linking to OLDTARGET from LINKNAME.
|
||||
# Align data columns the same as they were in OLDLINE.
|
||||
# Also, replace any existing white space followed by comment with COMMENT.
|
||||
function make_linkline(oldline, target, linkname, oldtarget, comment, \
|
||||
oldprefix, oldprefixlen, oldtargettabs, \
|
||||
replsuffix, targettabs)
|
||||
{
|
||||
oldprefix = "Link\t" oldtarget "\t"
|
||||
oldprefixlen = length(oldprefix)
|
||||
if (substr(oldline, 1, oldprefixlen) == oldprefix) {
|
||||
# Use tab stops to preserve LINKNAME's column.
|
||||
replsuffix = substr(oldline, oldprefixlen + 1)
|
||||
sub(/[\t ]*#.*/, "", replsuffix)
|
||||
oldtargettabs = int(length(oldtarget) / 8) + 1
|
||||
targettabs = int(length(target) / 8) + 1
|
||||
for (; targettabs < oldtargettabs; targettabs++) {
|
||||
replsuffix = "\t" replsuffix
|
||||
}
|
||||
for (; oldtargettabs < targettabs && replsuffix ~ /^\t/; targettabs--) {
|
||||
replsuffix = substr(replsuffix, 2)
|
||||
}
|
||||
} else {
|
||||
# Odd format line; don't bother lining up its replacement nicely.
|
||||
replsuffix = linkname
|
||||
}
|
||||
return "Link\t" target "\t" replsuffix comment
|
||||
}
|
||||
|
||||
/^Link/ && $4 == "#=" && DATAFORM == "vanguard" {
|
||||
$0 = make_linkline($0, $5, $3, $2)
|
||||
}
|
||||
|
||||
# If a Link line is followed by a Link or Zone line for the same data, comment
|
||||
# out the Link line. This can happen if backzone overrides a Link
|
||||
# with a Zone or a different Link.
|
||||
@ -306,11 +353,34 @@ DATAFORM != "main" {
|
||||
/^Link/ {
|
||||
sub(/^Link/, "#Link", line[linkline[$3]])
|
||||
linkline[$3] = NR
|
||||
linktarget[$3] = $2
|
||||
}
|
||||
|
||||
{ line[NR] = $0 }
|
||||
|
||||
function cut_link_chains_short( \
|
||||
l, linkname, t, target)
|
||||
{
|
||||
for (linkname in linktarget) {
|
||||
target = linktarget[linkname]
|
||||
t = linktarget[target]
|
||||
if (t) {
|
||||
# TARGET is itself a link name. Replace the line "Link TARGET LINKNAME"
|
||||
# with "Link T LINKNAME #= TARGET", where T is at the end of the chain
|
||||
# of links that LINKNAME points to.
|
||||
while ((u = linktarget[t])) {
|
||||
t = u
|
||||
}
|
||||
l = linkline[linkname]
|
||||
line[l] = make_linkline(line[l], t, linkname, target, "\t#= " target)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
END {
|
||||
if (DATAFORM != "vanguard") {
|
||||
cut_link_chains_short()
|
||||
}
|
||||
for (i = 1; i <= NR; i++)
|
||||
print line[i]
|
||||
}
|
||||
|
@ -114,13 +114,10 @@ CA +4606-06447 America/Moncton Atlantic - New Brunswick
|
||||
CA +5320-06025 America/Goose_Bay Atlantic - Labrador (most areas)
|
||||
CA +5125-05707 America/Blanc-Sablon AST - QC (Lower North Shore)
|
||||
CA +4339-07923 America/Toronto Eastern - ON, QC (most areas)
|
||||
CA +4901-08816 America/Nipigon Eastern - ON, QC (no DST 1967-73)
|
||||
CA +4823-08915 America/Thunder_Bay Eastern - ON (Thunder Bay)
|
||||
CA +6344-06828 America/Iqaluit Eastern - NU (most east areas)
|
||||
CA +6608-06544 America/Pangnirtung Eastern - NU (Pangnirtung)
|
||||
CA +484531-0913718 America/Atikokan EST - ON (Atikokan); NU (Coral H)
|
||||
CA +4953-09709 America/Winnipeg Central - ON (west); Manitoba
|
||||
CA +4843-09434 America/Rainy_River Central - ON (Rainy R, Ft Frances)
|
||||
CA +744144-0944945 America/Resolute Central - NU (Resolute)
|
||||
CA +624900-0920459 America/Rankin_Inlet Central - NU (central)
|
||||
CA +5024-10439 America/Regina CST - SK (most areas)
|
||||
@ -401,8 +398,6 @@ TV -0831+17913 Pacific/Funafuti
|
||||
TW +2503+12130 Asia/Taipei
|
||||
TZ -0648+03917 Africa/Dar_es_Salaam
|
||||
UA +5026+03031 Europe/Kyiv Ukraine (most areas)
|
||||
UA +4837+02218 Europe/Uzhgorod Transcarpathia
|
||||
UA +4750+03510 Europe/Zaporozhye Zaporozhye and east Lugansk
|
||||
UG +0019+03225 Africa/Kampala
|
||||
UM +2813-17722 Pacific/Midway Midway Islands
|
||||
UM +1917+16637 Pacific/Wake Wake Island
|
||||
|
@ -103,12 +103,9 @@ CA +4612-05957 America/Glace_Bay Atlantic - NS (Cape Breton)
|
||||
CA +4606-06447 America/Moncton Atlantic - New Brunswick
|
||||
CA +5320-06025 America/Goose_Bay Atlantic - Labrador (most areas)
|
||||
CA,BS +4339-07923 America/Toronto Eastern - ON, QC (most areas), Bahamas
|
||||
CA +4901-08816 America/Nipigon Eastern - ON, QC (no DST 1967-73)
|
||||
CA +4823-08915 America/Thunder_Bay Eastern - ON (Thunder Bay)
|
||||
CA +6344-06828 America/Iqaluit Eastern - NU (most east areas)
|
||||
CA +6608-06544 America/Pangnirtung Eastern - NU (Pangnirtung)
|
||||
CA +4953-09709 America/Winnipeg Central - ON (west); Manitoba
|
||||
CA +4843-09434 America/Rainy_River Central - ON (Rainy R, Ft Frances)
|
||||
CA +744144-0944945 America/Resolute Central - NU (Resolute)
|
||||
CA +624900-0920459 America/Rankin_Inlet Central - NU (central)
|
||||
CA +5024-10439 America/Regina CST - SK (most areas)
|
||||
@ -313,8 +310,6 @@ TO -210800-1751200 Pacific/Tongatapu
|
||||
TR +4101+02858 Europe/Istanbul
|
||||
TW +2503+12130 Asia/Taipei
|
||||
UA +5026+03031 Europe/Kyiv Ukraine (most areas)
|
||||
UA +4837+02218 Europe/Uzhgorod Transcarpathia
|
||||
UA +4750+03510 Europe/Zaporozhye Zaporozhye and east Lugansk
|
||||
US +404251-0740023 America/New_York Eastern (most areas)
|
||||
US +421953-0830245 America/Detroit Eastern - MI (most areas)
|
||||
US +381515-0854534 America/Kentucky/Louisville Eastern - KY (Louisville area)
|
||||
|
@ -1,53 +0,0 @@
|
||||
#! /usr/bin/perl -w
|
||||
# Summarize .zi input in a .zi-like format.
|
||||
|
||||
# Courtesy Ken Pizzini.
|
||||
|
||||
use strict;
|
||||
|
||||
#This file released to the public domain.
|
||||
|
||||
# Note: error checking is poor; trust the output only if the input
|
||||
# has been checked by zic.
|
||||
|
||||
my $contZone = '';
|
||||
while (<>) {
|
||||
my $origline = $_;
|
||||
my @fields = ();
|
||||
while (s/^\s*((?:"[^"]*"|[^\s#])+)//) {
|
||||
push @fields, $1;
|
||||
}
|
||||
next unless @fields;
|
||||
|
||||
my $type = lc($fields[0]);
|
||||
if ($contZone) {
|
||||
@fields >= 3 or warn "bad continuation line";
|
||||
unshift @fields, '+', $contZone;
|
||||
$type = 'zone';
|
||||
}
|
||||
|
||||
$contZone = '';
|
||||
if ($type eq 'zone') {
|
||||
# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL]
|
||||
my $nfields = @fields;
|
||||
$nfields >= 5 or warn "bad zone line";
|
||||
if ($nfields > 6) {
|
||||
#this splice is optional, depending on one's preference
|
||||
#(one big date-time field, or componentized date and time):
|
||||
splice(@fields, 5, $nfields-5, "@fields[5..$nfields-1]");
|
||||
}
|
||||
$contZone = $fields[1] if @fields > 5;
|
||||
} elsif ($type eq 'rule') {
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
@fields == 10 or warn "bad rule line";
|
||||
} elsif ($type eq 'link') {
|
||||
# Link TARGET LINK-NAME
|
||||
@fields == 3 or warn "bad link line";
|
||||
} elsif ($type eq 'leap') {
|
||||
# Leap YEAR MONTH DAY HH:MM:SS CORR R/S
|
||||
@fields == 7 or warn "bad leap line";
|
||||
} else {
|
||||
warn "Fubar at input line $.: $origline";
|
||||
}
|
||||
print join("\t", @fields), "\n";
|
||||
}
|
@ -217,7 +217,6 @@ kt_change (struct change_options *opt, int argc, char **argv)
|
||||
krb5_kt_end_seq_get(context, keytab, &cursor);
|
||||
|
||||
if (ret == KRB5_KT_END) {
|
||||
ret = 0;
|
||||
for (i = 0; i < j; i++) {
|
||||
if (verbose_flag) {
|
||||
char *client_name;
|
||||
|
@ -949,7 +949,9 @@ HandleOP(WrapExt)
|
||||
memcpy(p, iov[4].buffer.value, iov[4].buffer.length);
|
||||
p += iov[4].buffer.length;
|
||||
memcpy(p, iov[5].buffer.value, iov[5].buffer.length);
|
||||
#ifndef __clang_analyzer__
|
||||
p += iov[5].buffer.length;
|
||||
#endif
|
||||
|
||||
gss_release_iov_buffer(NULL, iov, iov_len);
|
||||
|
||||
|
@ -116,7 +116,11 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
argc -= optidx;
|
||||
#ifndef __clang_analyzer__
|
||||
argv += optidx;
|
||||
#endif
|
||||
if (argc != 0)
|
||||
usage(1);
|
||||
|
||||
if (config_file == NULL) {
|
||||
asprintf(&config_file, "%s/kdc.conf", hdb_db_dir(context));
|
||||
|
@ -106,7 +106,7 @@ static void
|
||||
add_aliases(krb5_context contextp, kadm5_principal_ent_rec *princ,
|
||||
struct getarg_strings *strings)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
krb5_error_code ret = 0;
|
||||
HDB_extension ext;
|
||||
krb5_data buf;
|
||||
krb5_principal p;
|
||||
@ -127,9 +127,16 @@ add_aliases(krb5_context contextp, kadm5_principal_ent_rec *princ,
|
||||
sizeof(ext.data.u.aliases.aliases.val[0]));
|
||||
ext.data.u.aliases.aliases.len = strings->num_strings;
|
||||
|
||||
for (i = 0; i < strings->num_strings; i++) {
|
||||
for (i = 0; ret == 0 && i < strings->num_strings; i++) {
|
||||
ret = krb5_parse_name(contextp, strings->strings[i], &p);
|
||||
ret = copy_Principal(p, &ext.data.u.aliases.aliases.val[i]);
|
||||
if (ret)
|
||||
krb5_err(contextp, 1, ret, "Could not parse alias %s",
|
||||
strings->strings[i]);
|
||||
if (ret == 0)
|
||||
ret = copy_Principal(p, &ext.data.u.aliases.aliases.val[i]);
|
||||
if (ret)
|
||||
krb5_err(contextp, 1, ret, "Could not copy parsed alias %s",
|
||||
strings->strings[i]);
|
||||
krb5_free_principal(contextp, p);
|
||||
}
|
||||
}
|
||||
|
@ -103,7 +103,10 @@ stash(struct stash_options *opt, int argc, char **argv)
|
||||
}
|
||||
}
|
||||
ret = krb5_string_to_key_salt(context, enctype, buf, salt, &key);
|
||||
ret = hdb_add_master_key(context, &key, &mkey);
|
||||
if (ret == 0)
|
||||
ret = hdb_add_master_key(context, &key, &mkey);
|
||||
if (ret)
|
||||
krb5_warn(context, errno, "setting master key");
|
||||
krb5_free_keyblock_contents(context, &key);
|
||||
}
|
||||
|
||||
|
@ -423,7 +423,7 @@ kcm_op_get_principal(krb5_context context,
|
||||
free(name);
|
||||
kcm_release_ccache(context, ccache);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1467,6 +1467,10 @@ _kdc_do_digest(krb5_context context,
|
||||
ret = krb5_encrypt_EncryptedData(context, crypto, KRB5_KU_DIGEST_ENCRYPT,
|
||||
buf.data, buf.length, 0,
|
||||
&rep.innerRep);
|
||||
if (ret) {
|
||||
krb5_prepend_error_message(context, ret, "Failed to encrypt digest: ");
|
||||
goto out;
|
||||
}
|
||||
|
||||
ASN1_MALLOC_ENCODE(DigestREP, reply->data, reply->length, &rep, &size, ret);
|
||||
if (ret) {
|
||||
|
@ -107,7 +107,9 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
argc -= optidx;
|
||||
#ifndef __clang_analyzer__
|
||||
argv += optidx;
|
||||
#endif
|
||||
|
||||
if (argc != 0)
|
||||
usage(1);
|
||||
@ -125,6 +127,7 @@ main(int argc, char **argv)
|
||||
krb5_ticket *ticket;
|
||||
char *server;
|
||||
|
||||
memset(&ss, 0, sizeof(ss));
|
||||
sock = STDIN_FILENO;
|
||||
#ifdef SUPPORT_INETD
|
||||
if (inetd_flag == -1) {
|
||||
|
@ -184,6 +184,8 @@ main(int argc, char **argv)
|
||||
unsigned int tag2;
|
||||
ret = der_get_tag (r.data, r.length,
|
||||
&cl, &ty, &tag2, NULL);
|
||||
if (ret)
|
||||
krb5_err(context, 1, ret, "Could not decode replay data");
|
||||
if (MAKE_TAG(cl, ty, 0) != clty)
|
||||
krb5_errx(context, 1, "class|type mismatch: %d != %d",
|
||||
(int)MAKE_TAG(cl, ty, 0), (int)clty);
|
||||
|
@ -1928,30 +1928,40 @@ tgs_build_reply(krb5_context context,
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = _kdc_db_fetch(context, config, tp, HDB_F_GET_CLIENT | flags,
|
||||
NULL, &s4u2self_impersonated_clientdb,
|
||||
&s4u2self_impersonated_client);
|
||||
if (ret) {
|
||||
const char *msg;
|
||||
|
||||
/*
|
||||
* If the client belongs to the same realm as our krbtgt, it
|
||||
* should exist in the local database.
|
||||
*
|
||||
*/
|
||||
|
||||
if (ret == HDB_ERR_NOENTRY)
|
||||
ret = KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN;
|
||||
msg = krb5_get_error_message(context, ret);
|
||||
kdc_log(context, config, 2,
|
||||
"S4U2Self principal to impersonate %s not found in database: %s",
|
||||
tpn, msg);
|
||||
krb5_free_error_message(context, msg);
|
||||
goto out;
|
||||
}
|
||||
|
||||
free(s4u2self_impersonated_client->entry.pw_end);
|
||||
s4u2self_impersonated_client->entry.pw_end = NULL;
|
||||
|
||||
ret = kdc_check_flags(context, config, s4u2self_impersonated_client, tpn,
|
||||
NULL, NULL, FALSE);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
/* If we were about to put a PAC into the ticket, we better fix it to be the right PAC */
|
||||
if(rspac.data) {
|
||||
krb5_pac p = NULL;
|
||||
krb5_data_free(&rspac);
|
||||
ret = _kdc_db_fetch(context, config, tp, HDB_F_GET_CLIENT | flags,
|
||||
NULL, &s4u2self_impersonated_clientdb, &s4u2self_impersonated_client);
|
||||
if (ret) {
|
||||
const char *msg;
|
||||
|
||||
/*
|
||||
* If the client belongs to the same realm as our krbtgt, it
|
||||
* should exist in the local database.
|
||||
*
|
||||
*/
|
||||
|
||||
if (ret == HDB_ERR_NOENTRY)
|
||||
ret = KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN;
|
||||
msg = krb5_get_error_message(context, ret);
|
||||
kdc_log(context, config, 1,
|
||||
"S2U4Self principal to impersonate %s not found in database: %s",
|
||||
tpn, msg);
|
||||
krb5_free_error_message(context, msg);
|
||||
goto out;
|
||||
}
|
||||
ret = _kdc_pac_generate(context, s4u2self_impersonated_client, &p);
|
||||
if (ret) {
|
||||
kdc_log(context, config, 0, "PAC generation failed for -- %s",
|
||||
@ -1987,10 +1997,12 @@ tgs_build_reply(krb5_context context,
|
||||
|
||||
/*
|
||||
* If the service isn't trusted for authentication to
|
||||
* delegation, remove the forward flag.
|
||||
* delegation or if the impersonate client is disallowed
|
||||
* forwardable, remove the forwardable flag.
|
||||
*/
|
||||
|
||||
if (client->entry.flags.trusted_for_delegation) {
|
||||
if (client->entry.flags.trusted_for_delegation &&
|
||||
s4u2self_impersonated_client->entry.flags.forwardable) {
|
||||
str = "[forwardable]";
|
||||
} else {
|
||||
b->kdc_options.forwardable = 0;
|
||||
|
@ -126,6 +126,8 @@ main(int argc, char **argv)
|
||||
krb5_string_to_key_salt(context, enctype, buf, salt, &key);
|
||||
}
|
||||
ret = hdb_add_master_key(context, &key, &mkey);
|
||||
if (ret)
|
||||
krb5_err(context, 1, ret, "hdb_add_master_key");
|
||||
|
||||
krb5_free_keyblock_contents(context, &key);
|
||||
|
||||
|
@ -249,7 +249,6 @@ generate_dh_keyblock(krb5_context context,
|
||||
memset(dh_gen_key, 0, size);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
#ifdef HAVE_OPENSSL
|
||||
} else if (client_params->keyex == USE_ECDH) {
|
||||
|
||||
|
@ -90,7 +90,9 @@ main (int argc, char **argv)
|
||||
}
|
||||
|
||||
argc -= optidx;
|
||||
#ifndef __clang_analyzer__
|
||||
argv += optidx;
|
||||
#endif
|
||||
|
||||
if (argc != 0)
|
||||
usage (1);
|
||||
|
@ -86,14 +86,15 @@ kswitch(struct kswitch_options *opt, int argc, char **argv)
|
||||
krb5_err(kcc_context, 1, ret, "krb5_cc_cache_get_first");
|
||||
|
||||
while (krb5_cc_cache_next(kcc_context, cursor, &id) == 0) {
|
||||
krb5_principal p;
|
||||
krb5_principal p = NULL;
|
||||
char num[10];
|
||||
|
||||
ret = krb5_cc_get_principal(kcc_context, id, &p);
|
||||
if (ret == 0)
|
||||
ret = krb5_unparse_name(kcc_context, p, &name);
|
||||
if (ret)
|
||||
continue;
|
||||
|
||||
ret = krb5_unparse_name(kcc_context, p, &name);
|
||||
krb5_free_principal(kcc_context, p);
|
||||
|
||||
snprintf(num, sizeof(num), "%d", (int)(len + 1));
|
||||
|
@ -135,8 +135,12 @@ int
|
||||
der_copy_octet_string (const heim_octet_string *from, heim_octet_string *to)
|
||||
{
|
||||
to->length = from->length;
|
||||
to->data = malloc(to->length);
|
||||
if(to->length != 0 && to->data == NULL)
|
||||
if (from->data == NULL) {
|
||||
to->data = NULL;
|
||||
return 0;
|
||||
}
|
||||
to->data = malloc(to->length);
|
||||
if (to->length != 0 && to->data == NULL)
|
||||
return ENOMEM;
|
||||
memcpy(to->data, from->data, to->length);
|
||||
return 0;
|
||||
|
@ -584,14 +584,14 @@ decode_type (const char *name, const Type *t, int optional,
|
||||
classname(cl),
|
||||
ty ? "CONS" : "PRIM",
|
||||
valuename(cl, tag));
|
||||
fprintf(codefile,
|
||||
"(%s)->element = %s;\n",
|
||||
name, m->label);
|
||||
if (asprintf (&s, "%s(%s)->u.%s", m->optional ? "" : "&",
|
||||
name, m->gen_name) < 0 || s == NULL)
|
||||
errx(1, "malloc");
|
||||
decode_type (s, m->type, m->optional, forwstr, m->gen_name, NULL,
|
||||
depth + 1);
|
||||
fprintf(codefile,
|
||||
"(%s)->element = %s;\n",
|
||||
name, m->label);
|
||||
free(s);
|
||||
fprintf(codefile,
|
||||
"}\n");
|
||||
@ -600,23 +600,23 @@ decode_type (const char *name, const Type *t, int optional,
|
||||
if (have_ellipsis) {
|
||||
fprintf(codefile,
|
||||
"else {\n"
|
||||
"(%s)->element = %s;\n"
|
||||
"(%s)->u.%s.data = calloc(1, len);\n"
|
||||
"if ((%s)->u.%s.data == NULL) {\n"
|
||||
"e = ENOMEM; %s;\n"
|
||||
"}\n"
|
||||
"(%s)->u.%s.length = len;\n"
|
||||
"memcpy((%s)->u.%s.data, p, len);\n"
|
||||
"(%s)->element = %s;\n"
|
||||
"p += len;\n"
|
||||
"ret += len;\n"
|
||||
"len = 0;\n"
|
||||
"}\n",
|
||||
name, have_ellipsis->label,
|
||||
name, have_ellipsis->gen_name,
|
||||
name, have_ellipsis->gen_name,
|
||||
forwstr,
|
||||
name, have_ellipsis->gen_name,
|
||||
name, have_ellipsis->gen_name,
|
||||
name, have_ellipsis->label);
|
||||
name, have_ellipsis->gen_name);
|
||||
} else {
|
||||
fprintf(codefile,
|
||||
"else {\n"
|
||||
|
@ -425,6 +425,7 @@ gsskrb5_acceptor_start(OM_uint32 * minor_status,
|
||||
* lets only send the error token on clock skew, that
|
||||
* limit when send error token for non-MUTUAL.
|
||||
*/
|
||||
free_Authenticator(ctx->auth_context->authenticator);
|
||||
return send_error_token(minor_status, context, kret,
|
||||
server, &indata, output_token);
|
||||
} else if (kret) {
|
||||
|
@ -307,7 +307,7 @@ _gssapi_verify_mic_arcfour(OM_uint32 * minor_status,
|
||||
return GSS_S_FAILURE;
|
||||
}
|
||||
|
||||
cmp = ct_memcmp(cksum_data, p + 8, 8);
|
||||
cmp = (ct_memcmp(cksum_data, p + 8, 8) == 0);
|
||||
if (cmp) {
|
||||
*minor_status = 0;
|
||||
return GSS_S_BAD_MIC;
|
||||
@ -331,9 +331,9 @@ _gssapi_verify_mic_arcfour(OM_uint32 * minor_status,
|
||||
_gsskrb5_decode_be_om_uint32(SND_SEQ, &seq_number);
|
||||
|
||||
if (context_handle->more_flags & LOCAL)
|
||||
cmp = memcmp(&SND_SEQ[4], "\xff\xff\xff\xff", 4);
|
||||
cmp = (ct_memcmp(&SND_SEQ[4], "\xff\xff\xff\xff", 4) != 0);
|
||||
else
|
||||
cmp = memcmp(&SND_SEQ[4], "\x00\x00\x00\x00", 4);
|
||||
cmp = (ct_memcmp(&SND_SEQ[4], "\x00\x00\x00\x00", 4) != 0);
|
||||
|
||||
memset(SND_SEQ, 0, sizeof(SND_SEQ));
|
||||
if (cmp != 0) {
|
||||
@ -616,9 +616,9 @@ OM_uint32 _gssapi_unwrap_arcfour(OM_uint32 *minor_status,
|
||||
_gsskrb5_decode_be_om_uint32(SND_SEQ, &seq_number);
|
||||
|
||||
if (context_handle->more_flags & LOCAL)
|
||||
cmp = memcmp(&SND_SEQ[4], "\xff\xff\xff\xff", 4);
|
||||
cmp = (ct_memcmp(&SND_SEQ[4], "\xff\xff\xff\xff", 4) != 0);
|
||||
else
|
||||
cmp = memcmp(&SND_SEQ[4], "\x00\x00\x00\x00", 4);
|
||||
cmp = (ct_memcmp(&SND_SEQ[4], "\x00\x00\x00\x00", 4) != 0);
|
||||
|
||||
if (cmp != 0) {
|
||||
*minor_status = 0;
|
||||
@ -695,7 +695,7 @@ OM_uint32 _gssapi_unwrap_arcfour(OM_uint32 *minor_status,
|
||||
return GSS_S_FAILURE;
|
||||
}
|
||||
|
||||
cmp = ct_memcmp(cksum_data, p0 + 16, 8); /* SGN_CKSUM */
|
||||
cmp = (ct_memcmp(cksum_data, p0 + 16, 8) == 0); /* SGN_CKSUM */
|
||||
if (cmp) {
|
||||
_gsskrb5_release_buffer(minor_status, output_message_buffer);
|
||||
*minor_status = 0;
|
||||
|
@ -54,6 +54,8 @@ _gsskrb5_get_mech (const u_char *ptr,
|
||||
e = der_get_length (p, total_len - 1, &len, &len_len);
|
||||
if (e || 1 + len_len + len != total_len)
|
||||
return -1;
|
||||
if (total_len < 1 + len_len + 1)
|
||||
return -1;
|
||||
p += len_len;
|
||||
if (*p++ != 0x06)
|
||||
return -1;
|
||||
@ -80,6 +82,10 @@ _gssapi_verify_mech_header(u_char **str,
|
||||
|
||||
if (mech_len != mech->length)
|
||||
return GSS_S_BAD_MECH;
|
||||
if (mech_len > total_len)
|
||||
return GSS_S_BAD_MECH;
|
||||
if (p - *str > total_len - mech_len)
|
||||
return GSS_S_BAD_MECH;
|
||||
if (ct_memcmp(p,
|
||||
mech->elements,
|
||||
mech->length) != 0)
|
||||
@ -190,13 +196,13 @@ _gssapi_verify_pad(gss_buffer_t wrapped_token,
|
||||
size_t padlength;
|
||||
int i;
|
||||
|
||||
pad = (u_char *)wrapped_token->value + wrapped_token->length - 1;
|
||||
padlength = *pad;
|
||||
pad = (u_char *)wrapped_token->value + wrapped_token->length;
|
||||
padlength = pad[-1];
|
||||
|
||||
if (padlength > datalen)
|
||||
return GSS_S_BAD_MECH;
|
||||
|
||||
for (i = padlength; i > 0 && *pad == padlength; i--, pad--)
|
||||
for (i = padlength; i > 0 && *--pad == padlength; i--)
|
||||
;
|
||||
if (i != 0)
|
||||
return GSS_S_BAD_MIC;
|
||||
|
@ -64,6 +64,8 @@ unwrap_des
|
||||
|
||||
if (IS_DCE_STYLE(context_handle)) {
|
||||
token_len = 22 + 8 + 15; /* 45 */
|
||||
if (input_message_buffer->length < token_len)
|
||||
return GSS_S_BAD_MECH;
|
||||
} else {
|
||||
token_len = input_message_buffer->length;
|
||||
}
|
||||
@ -76,6 +78,11 @@ unwrap_des
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
len = (p - (u_char *)input_message_buffer->value)
|
||||
+ 22 + 8;
|
||||
if (input_message_buffer->length < len)
|
||||
return GSS_S_BAD_MECH;
|
||||
|
||||
if (memcmp (p, "\x00\x00", 2) != 0)
|
||||
return GSS_S_BAD_SIG;
|
||||
p += 2;
|
||||
@ -122,7 +129,7 @@ unwrap_des
|
||||
} else {
|
||||
/* check pad */
|
||||
ret = _gssapi_verify_pad(input_message_buffer,
|
||||
input_message_buffer->length - len,
|
||||
input_message_buffer->length - len - 8,
|
||||
&padlength);
|
||||
if (ret)
|
||||
return ret;
|
||||
@ -195,9 +202,10 @@ unwrap_des
|
||||
output_message_buffer->value = malloc(output_message_buffer->length);
|
||||
if(output_message_buffer->length != 0 && output_message_buffer->value == NULL)
|
||||
return GSS_S_FAILURE;
|
||||
memcpy (output_message_buffer->value,
|
||||
p + 24,
|
||||
output_message_buffer->length);
|
||||
if (output_message_buffer->value != NULL)
|
||||
memcpy (output_message_buffer->value,
|
||||
p + 24,
|
||||
output_message_buffer->length);
|
||||
return GSS_S_COMPLETE;
|
||||
}
|
||||
#endif
|
||||
@ -230,6 +238,8 @@ unwrap_des3
|
||||
|
||||
if (IS_DCE_STYLE(context_handle)) {
|
||||
token_len = 34 + 8 + 15; /* 57 */
|
||||
if (input_message_buffer->length < token_len)
|
||||
return GSS_S_BAD_MECH;
|
||||
} else {
|
||||
token_len = input_message_buffer->length;
|
||||
}
|
||||
@ -242,7 +252,12 @@ unwrap_des3
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (memcmp (p, "\x04\x00", 2) != 0) /* HMAC SHA1 DES3_KD */
|
||||
len = (p - (u_char *)input_message_buffer->value)
|
||||
+ 34 + 8;
|
||||
if (input_message_buffer->length < len)
|
||||
return GSS_S_BAD_MECH;
|
||||
|
||||
if (ct_memcmp (p, "\x04\x00", 2) != 0) /* HMAC SHA1 DES3_KD */
|
||||
return GSS_S_BAD_SIG;
|
||||
p += 2;
|
||||
if (ct_memcmp (p, "\x02\x00", 2) == 0) {
|
||||
@ -289,7 +304,7 @@ unwrap_des3
|
||||
} else {
|
||||
/* check pad */
|
||||
ret = _gssapi_verify_pad(input_message_buffer,
|
||||
input_message_buffer->length - len,
|
||||
input_message_buffer->length - len - 8,
|
||||
&padlength);
|
||||
if (ret)
|
||||
return ret;
|
||||
@ -389,9 +404,10 @@ unwrap_des3
|
||||
output_message_buffer->value = malloc(output_message_buffer->length);
|
||||
if(output_message_buffer->length != 0 && output_message_buffer->value == NULL)
|
||||
return GSS_S_FAILURE;
|
||||
memcpy (output_message_buffer->value,
|
||||
p + 36,
|
||||
output_message_buffer->length);
|
||||
if (output_message_buffer->value != NULL)
|
||||
memcpy (output_message_buffer->value,
|
||||
p + 36,
|
||||
output_message_buffer->length);
|
||||
return GSS_S_COMPLETE;
|
||||
}
|
||||
|
||||
|
@ -91,8 +91,7 @@ routine_error(OM_uint32 v)
|
||||
"Incorrect channel bindings were supplied",
|
||||
"An invalid status code was supplied",
|
||||
"A token had an invalid MIC",
|
||||
"No credentials were supplied, "
|
||||
"or the credentials were unavailable or inaccessible.",
|
||||
"No credentials were supplied, or the credentials were unavailable or inaccessible.",
|
||||
"No context has been established",
|
||||
"A token was invalid",
|
||||
"A credential was invalid",
|
||||
|
@ -113,7 +113,7 @@ _gss_import_export_name(OM_uint32 *minor_status,
|
||||
len -= t;
|
||||
|
||||
t = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
|
||||
p += 4;
|
||||
/* p += 4; */
|
||||
len -= 4;
|
||||
|
||||
if (!composite && len != t)
|
||||
|
@ -137,6 +137,8 @@ _gss_string_to_oid(const char* s, gss_OID oid)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (byte_count == 0)
|
||||
return EINVAL;
|
||||
if (!res) {
|
||||
res = malloc(byte_count);
|
||||
if (!res)
|
||||
|
@ -51,6 +51,7 @@
|
||||
|
||||
#include <roken.h>
|
||||
|
||||
#include <krb5.h>
|
||||
#include <gssapi.h>
|
||||
#include <gssapi_mech.h>
|
||||
#include <gssapi_krb5.h>
|
||||
|
@ -52,6 +52,8 @@ from_file(const char *fn, const char *target_domain,
|
||||
continue;
|
||||
str = NULL;
|
||||
d = strtok_r(buf, ":", &str);
|
||||
if (!d)
|
||||
continue;
|
||||
if (d && strcasecmp(target_domain, d) != 0)
|
||||
continue;
|
||||
u = strtok_r(NULL, ":", &str);
|
||||
|
@ -619,13 +619,15 @@ acceptor_start
|
||||
if (ret == 0)
|
||||
break;
|
||||
}
|
||||
if (preferred_mech_type == GSS_C_NO_OID) {
|
||||
HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
|
||||
free_NegotiationToken(&nt);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
ctx->preferred_mech_type = preferred_mech_type;
|
||||
ctx->preferred_mech_type = preferred_mech_type;
|
||||
|
||||
if (preferred_mech_type == GSS_C_NO_OID) {
|
||||
send_reject(minor_status, output_token);
|
||||
HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
|
||||
free_NegotiationToken(&nt);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -720,7 +720,6 @@ mdb_remove(krb5_context context, HDB *db, krb5_const_principal principal)
|
||||
krb5_error_code code;
|
||||
krb5_data key;
|
||||
|
||||
mdb_principal2key(context, principal, &key);
|
||||
code = db->hdb__del(context, db, key);
|
||||
krb5_data_free(&key);
|
||||
return code;
|
||||
|
@ -1288,6 +1288,7 @@ request_create(struct request_create_options *opt, int argc, char **argv)
|
||||
const char *outfile = argv[0];
|
||||
|
||||
memset(&key, 0, sizeof(key));
|
||||
memset(&signer, 0, sizeof(signer));
|
||||
|
||||
get_key(opt->key_string,
|
||||
opt->generate_key_string,
|
||||
|
@ -533,7 +533,7 @@ store_func(hx509_context context, void *ctx, hx509_cert c)
|
||||
{
|
||||
struct store_ctx *sc = ctx;
|
||||
heim_octet_string data;
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
ret = hx509_cert_binary(context, c, &data);
|
||||
if (ret)
|
||||
@ -554,14 +554,14 @@ store_func(hx509_context context, void *ctx, hx509_cert c)
|
||||
HX509_KEY_FORMAT_DER, &data);
|
||||
if (ret)
|
||||
break;
|
||||
hx509_pem_write(context, _hx509_private_pem_name(key), NULL, sc->f,
|
||||
data.data, data.length);
|
||||
ret = hx509_pem_write(context, _hx509_private_pem_name(key), NULL,
|
||||
sc->f, data.data, data.length);
|
||||
free(data.data);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -938,6 +938,7 @@ int
|
||||
hx509_general_name_unparse(GeneralName *name, char **str)
|
||||
{
|
||||
struct rk_strpool *strpool = NULL;
|
||||
int ret = 0;
|
||||
|
||||
*str = NULL;
|
||||
|
||||
@ -964,7 +965,6 @@ hx509_general_name_unparse(GeneralName *name, char **str)
|
||||
case choice_GeneralName_directoryName: {
|
||||
Name dir;
|
||||
char *s;
|
||||
int ret;
|
||||
memset(&dir, 0, sizeof(dir));
|
||||
dir.element = name->u.directoryName.element;
|
||||
dir.u.rdnSequence = name->u.directoryName.u.rdnSequence;
|
||||
@ -1017,10 +1017,9 @@ hx509_general_name_unparse(GeneralName *name, char **str)
|
||||
default:
|
||||
return EINVAL;
|
||||
}
|
||||
if (strpool == NULL)
|
||||
if (ret)
|
||||
rk_strpoolfree(strpool);
|
||||
else if (strpool == NULL || (*str = rk_strpoolcollect(strpool)) == NULL)
|
||||
return ENOMEM;
|
||||
|
||||
*str = rk_strpoolcollect(strpool);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
@ -342,6 +342,9 @@ add_object_attribute(struct st_object *o,
|
||||
struct st_attr *a;
|
||||
int i;
|
||||
|
||||
if (pValue == NULL && ulValueLen)
|
||||
return CKR_ARGUMENTS_BAD;
|
||||
|
||||
i = o->num_attributes;
|
||||
a = realloc(o->attrs, (i + 1) * sizeof(o->attrs[0]));
|
||||
if (a == NULL)
|
||||
@ -352,7 +355,8 @@ add_object_attribute(struct st_object *o,
|
||||
o->attrs[i].attribute.pValue = malloc(ulValueLen);
|
||||
if (o->attrs[i].attribute.pValue == NULL && ulValueLen != 0)
|
||||
return CKR_DEVICE_MEMORY;
|
||||
memcpy(o->attrs[i].attribute.pValue, pValue, ulValueLen);
|
||||
if (ulValueLen)
|
||||
memcpy(o->attrs[i].attribute.pValue, pValue, ulValueLen);
|
||||
o->attrs[i].attribute.ulValueLen = ulValueLen;
|
||||
o->num_attributes++;
|
||||
|
||||
|
@ -332,10 +332,8 @@ connect_unix(struct path_ctx *s)
|
||||
return errno;
|
||||
rk_cloexec(s->fd);
|
||||
|
||||
if (connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)) != 0) {
|
||||
close(s->fd);
|
||||
if (connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)) != 0)
|
||||
return errno;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -246,7 +246,7 @@ kadm5_s_get_principal(void *server_handle,
|
||||
ret = hdb_entry_get_password(context->context,
|
||||
context->db, &ent.entry, &pw);
|
||||
if (ret == 0) {
|
||||
ret = add_tl_data(out, KRB5_TL_PASSWORD, pw, strlen(pw) + 1);
|
||||
(void) add_tl_data(out, KRB5_TL_PASSWORD, pw, strlen(pw) + 1);
|
||||
free(pw);
|
||||
}
|
||||
krb5_clear_error_message(context->context);
|
||||
|
@ -567,7 +567,7 @@ kadm5_c_init_with_context(krb5_context context,
|
||||
void **server_handle)
|
||||
{
|
||||
kadm5_ret_t ret;
|
||||
kadm5_client_context *ctx;
|
||||
kadm5_client_context *ctx = NULL;
|
||||
krb5_ccache cc;
|
||||
|
||||
ret = _kadm5_c_init_context(&ctx, realm_params, context);
|
||||
|
@ -755,7 +755,10 @@ write_stats(krb5_context context, slave *slaves, uint32_t current_version)
|
||||
rtbl_add_column_entry(tbl, SLAVE_STATUS, "Up");
|
||||
|
||||
ret = krb5_format_time(context, slaves->seen, str, sizeof(str), TRUE);
|
||||
rtbl_add_column_entry(tbl, SLAVE_SEEN, str);
|
||||
if (ret)
|
||||
rtbl_add_column_entry(tbl, SLAVE_SEEN, "<error-formatting-time>");
|
||||
else
|
||||
rtbl_add_column_entry(tbl, SLAVE_SEEN, str);
|
||||
|
||||
slaves = slaves->next;
|
||||
}
|
||||
|
@ -89,8 +89,6 @@ v5_to_kt(krb5_creds *cred, uid_t uid, struct kafs_token *kt, int local524)
|
||||
return ENOMEM;
|
||||
kt->ticket_len = cred->ticket.length;
|
||||
memcpy(kt->ticket, cred->ticket.data, kt->ticket_len);
|
||||
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -248,7 +248,7 @@ krb5_acl_match_file(krb5_context context,
|
||||
...)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
struct acl_field *acl;
|
||||
struct acl_field *acl = NULL;
|
||||
char buf[256];
|
||||
va_list ap;
|
||||
FILE *f;
|
||||
|
@ -525,7 +525,7 @@ arange_parse_addr (krb5_context context,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if(high.len != 1 && high.val[0].addr_type != low.val[0].addr_type) {
|
||||
if(high.len != 1 || high.val[0].addr_type != low.val[0].addr_type) {
|
||||
krb5_free_addresses(context, &low);
|
||||
krb5_free_addresses(context, &high);
|
||||
return -1;
|
||||
|
@ -97,7 +97,7 @@ init_context_from_config_file(krb5_context context)
|
||||
krb5_error_code ret;
|
||||
const char * tmp;
|
||||
char **s;
|
||||
krb5_enctype *tmptypes;
|
||||
krb5_enctype *tmptypes = NULL;
|
||||
|
||||
INIT_FIELD(context, time, max_skew, 5 * 60, "clockskew");
|
||||
INIT_FIELD(context, time, kdc_timeout, 3, "kdc_timeout");
|
||||
|
@ -325,15 +325,13 @@ krb5_keytab_key_proc (krb5_context context,
|
||||
|
||||
ret = krb5_kt_get_entry (context, real_keytab, principal,
|
||||
0, enctype, &entry);
|
||||
if (ret == 0) {
|
||||
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
}
|
||||
|
||||
if (keytab == NULL)
|
||||
krb5_kt_close (context, real_keytab);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1491,15 +1491,13 @@ keytab_key_proc(krb5_context context, krb5_enctype enctype,
|
||||
|
||||
ret = krb5_kt_get_entry (context, real_keytab, principal,
|
||||
0, enctype, &entry);
|
||||
if (ret == 0) {
|
||||
ret = krb5_copy_keyblock(context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
}
|
||||
|
||||
if (keytab == NULL)
|
||||
krb5_kt_close (context, real_keytab);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -348,10 +348,11 @@ krb5_kt_read_service_key(krb5_context context,
|
||||
krb5_enctype enctype,
|
||||
krb5_keyblock **key)
|
||||
{
|
||||
krb5_keytab keytab;
|
||||
krb5_keytab keytab = NULL; /* Quiet lint */
|
||||
krb5_keytab_entry entry;
|
||||
krb5_error_code ret;
|
||||
|
||||
memset(&entry, 0, sizeof(entry));
|
||||
if (keyprocarg)
|
||||
ret = krb5_kt_resolve (context, keyprocarg, &keytab);
|
||||
else
|
||||
@ -361,11 +362,11 @@ krb5_kt_read_service_key(krb5_context context,
|
||||
return ret;
|
||||
|
||||
ret = krb5_kt_get_entry (context, keytab, principal, vno, enctype, &entry);
|
||||
if (ret == 0) {
|
||||
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
}
|
||||
krb5_kt_close (context, keytab);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -473,11 +474,13 @@ KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
|
||||
krb5_kt_close(krb5_context context,
|
||||
krb5_keytab id)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
krb5_error_code ret = 0;
|
||||
|
||||
ret = (*id->close)(context, id);
|
||||
memset(id, 0, sizeof(*id));
|
||||
free(id);
|
||||
if (id) {
|
||||
ret = (id->close)(context, id);
|
||||
memset(id, 0, sizeof(*id));
|
||||
free(id);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -620,6 +623,7 @@ krb5_kt_get_entry(krb5_context context,
|
||||
if(id->get)
|
||||
return (*id->get)(context, id, principal, kvno, enctype, entry);
|
||||
|
||||
memset(&tmp, 0, sizeof(tmp));
|
||||
ret = krb5_kt_start_seq_get (context, id, &cursor);
|
||||
if (ret) {
|
||||
/* This is needed for krb5_verify_init_creds, but keep error
|
||||
@ -674,21 +678,21 @@ krb5_kt_copy_entry_contents(krb5_context context,
|
||||
krb5_error_code ret;
|
||||
|
||||
memset(out, 0, sizeof(*out));
|
||||
out->vno = in->vno;
|
||||
|
||||
ret = krb5_copy_principal (context, in->principal, &out->principal);
|
||||
if (ret)
|
||||
goto fail;
|
||||
return ret;
|
||||
ret = krb5_copy_keyblock_contents (context,
|
||||
&in->keyblock,
|
||||
&out->keyblock);
|
||||
if (ret)
|
||||
goto fail;
|
||||
if (ret) {
|
||||
krb5_free_principal(context, out->principal);
|
||||
memset(out, 0, sizeof(*out));
|
||||
return ret;
|
||||
}
|
||||
out->vno = in->vno;
|
||||
out->timestamp = in->timestamp;
|
||||
return 0;
|
||||
fail:
|
||||
krb5_kt_free_entry (context, out);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -869,6 +873,7 @@ krb5_kt_have_content(krb5_context context,
|
||||
krb5_error_code ret;
|
||||
char *name;
|
||||
|
||||
memset(&entry, 0, sizeof(entry));
|
||||
ret = krb5_kt_start_seq_get(context, id, &cursor);
|
||||
if (ret)
|
||||
goto notfound;
|
||||
|
@ -914,3 +914,22 @@ extern KRB5_LIB_VARIABLE const char *krb5_cc_type_scc;
|
||||
|
||||
#endif /* __KRB5_H__ */
|
||||
|
||||
/* clang analyzer workarounds */
|
||||
|
||||
#ifdef __clang_analyzer__
|
||||
/*
|
||||
* The clang analyzer (lint) can't know that krb5_enomem() always returns
|
||||
* non-zero, so code like:
|
||||
*
|
||||
* if ((x = malloc(...)) == NULL)
|
||||
* ret = krb5_enomem(context)
|
||||
* if (ret == 0)
|
||||
* *x = ...;
|
||||
*
|
||||
* causes false positives.
|
||||
*
|
||||
* The fix is to make krb5_enomem() a macro that always evaluates to ENOMEM.
|
||||
*/
|
||||
#define krb5_enomem(c) (krb5_enomem(c), ENOMEM)
|
||||
#endif
|
||||
|
||||
|
@ -38,7 +38,7 @@
|
||||
|
||||
#include <krb5-types.h>
|
||||
|
||||
#ifdef __APPLE__
|
||||
#ifdef __APPLE__
|
||||
#pragma pack(push,2)
|
||||
#endif
|
||||
|
||||
|
@ -96,6 +96,12 @@ srv_find_realm(krb5_context context, krb5_krbhst_info ***res, int *count,
|
||||
if(rr->type == rk_ns_t_srv)
|
||||
num_srv++;
|
||||
|
||||
if (num_srv == 0) {
|
||||
_krb5_debug(context, 0,
|
||||
"DNS SRV RR lookup domain nodata: %s", domain);
|
||||
return KRB5_KDC_UNREACH;
|
||||
}
|
||||
|
||||
*res = malloc(num_srv * sizeof(**res));
|
||||
if(*res == NULL) {
|
||||
rk_dns_free_data(r);
|
||||
|
@ -112,6 +112,56 @@ HMAC_MD5_any_checksum(krb5_context context,
|
||||
}
|
||||
|
||||
|
||||
static krb5_error_code pac_header_size(krb5_context context,
|
||||
uint32_t num_buffers,
|
||||
uint32_t *result)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
uint32_t header_size;
|
||||
|
||||
/* Guard against integer overflow on 32-bit systems. */
|
||||
if (num_buffers > 1000) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "PAC has too many buffers");
|
||||
return ret;
|
||||
}
|
||||
header_size = PAC_INFO_BUFFER_SIZE * num_buffers;
|
||||
|
||||
/* Guard against integer overflow on 32-bit systems. */
|
||||
if (header_size > UINT32_MAX - PACTYPE_SIZE) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "PAC has too many buffers");
|
||||
return ret;
|
||||
}
|
||||
header_size += PACTYPE_SIZE;
|
||||
|
||||
*result = header_size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static krb5_error_code pac_aligned_size(krb5_context context,
|
||||
uint32_t size,
|
||||
uint32_t *aligned_size)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
|
||||
/* Guard against integer overflow on 32-bit systems. */
|
||||
if (size > UINT32_MAX - (PAC_ALIGNMENT - 1)) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
return ret;
|
||||
}
|
||||
size += PAC_ALIGNMENT - 1;
|
||||
|
||||
/* align to PAC_ALIGNMENT */
|
||||
size = (size / PAC_ALIGNMENT) * PAC_ALIGNMENT;
|
||||
|
||||
*aligned_size = size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
@ -153,8 +203,12 @@ krb5_pac_parse(krb5_context context, const void *ptr, size_t len,
|
||||
goto out;
|
||||
}
|
||||
|
||||
p->pac = calloc(1,
|
||||
sizeof(*p->pac) + (sizeof(p->pac->buffers[0]) * (tmp - 1)));
|
||||
ret = pac_header_size(context, tmp, &header_end);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
p->pac = calloc(1, header_end);
|
||||
if (p->pac == NULL) {
|
||||
ret = krb5_enomem(context);
|
||||
goto out;
|
||||
@ -163,7 +217,6 @@ krb5_pac_parse(krb5_context context, const void *ptr, size_t len,
|
||||
p->pac->numbuffers = tmp;
|
||||
p->pac->version = tmp2;
|
||||
|
||||
header_end = PACTYPE_SIZE + (PAC_INFO_BUFFER_SIZE * p->pac->numbuffers);
|
||||
if (header_end > len) {
|
||||
ret = EINVAL;
|
||||
goto out;
|
||||
@ -292,37 +345,65 @@ krb5_pac_add_buffer(krb5_context context, krb5_pac p,
|
||||
{
|
||||
krb5_error_code ret;
|
||||
void *ptr;
|
||||
size_t len, offset, header_end, old_end;
|
||||
uint32_t unaligned_len, num_buffers, len, offset, header_end, old_end;
|
||||
uint32_t i;
|
||||
|
||||
len = p->pac->numbuffers;
|
||||
if (data->length > UINT32_MAX) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ptr = realloc(p->pac,
|
||||
sizeof(*p->pac) + (sizeof(p->pac->buffers[0]) * len));
|
||||
num_buffers = p->pac->numbuffers;
|
||||
|
||||
if (num_buffers >= UINT32_MAX) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
return ret;
|
||||
}
|
||||
ret = pac_header_size(context, num_buffers + 1, &header_end);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
ptr = realloc(p->pac, header_end);
|
||||
if (ptr == NULL)
|
||||
return krb5_enomem(context);
|
||||
|
||||
p->pac = ptr;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
p->pac->buffers[i].offset_lo += PAC_INFO_BUFFER_SIZE;
|
||||
for (i = 0; i < num_buffers; i++) {
|
||||
if (p->pac->buffers[i].offset_lo > UINT32_MAX - PAC_INFO_BUFFER_SIZE) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
return ret;
|
||||
}
|
||||
|
||||
p->pac->buffers[i].offset_lo += PAC_INFO_BUFFER_SIZE;
|
||||
}
|
||||
|
||||
if (p->data.length > UINT32_MAX - PAC_INFO_BUFFER_SIZE) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
return ret;
|
||||
}
|
||||
offset = p->data.length + PAC_INFO_BUFFER_SIZE;
|
||||
|
||||
p->pac->buffers[len].type = type;
|
||||
p->pac->buffers[len].buffersize = data->length;
|
||||
p->pac->buffers[len].offset_lo = offset;
|
||||
p->pac->buffers[len].offset_hi = 0;
|
||||
p->pac->buffers[num_buffers].type = type;
|
||||
p->pac->buffers[num_buffers].buffersize = data->length;
|
||||
p->pac->buffers[num_buffers].offset_lo = offset;
|
||||
p->pac->buffers[num_buffers].offset_hi = 0;
|
||||
|
||||
old_end = p->data.length;
|
||||
len = p->data.length + data->length + PAC_INFO_BUFFER_SIZE;
|
||||
if (len < p->data.length) {
|
||||
if (offset > UINT32_MAX - data->length) {
|
||||
krb5_set_error_message(context, EINVAL, "integer overrun");
|
||||
return EINVAL;
|
||||
}
|
||||
unaligned_len = offset + data->length;
|
||||
|
||||
/* align to PAC_ALIGNMENT */
|
||||
len = ((len + PAC_ALIGNMENT - 1) / PAC_ALIGNMENT) * PAC_ALIGNMENT;
|
||||
ret = pac_aligned_size(context, unaligned_len, &len);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = krb5_data_realloc(&p->data, len);
|
||||
if (ret) {
|
||||
@ -333,7 +414,7 @@ krb5_pac_add_buffer(krb5_context context, krb5_pac p,
|
||||
/*
|
||||
* make place for new PAC INFO BUFFER header
|
||||
*/
|
||||
header_end = PACTYPE_SIZE + (PAC_INFO_BUFFER_SIZE * p->pac->numbuffers);
|
||||
header_end -= PAC_INFO_BUFFER_SIZE;
|
||||
memmove((unsigned char *)p->data.data + header_end + PAC_INFO_BUFFER_SIZE,
|
||||
(unsigned char *)p->data.data + header_end ,
|
||||
old_end - header_end);
|
||||
@ -346,7 +427,7 @@ krb5_pac_add_buffer(krb5_context context, krb5_pac p,
|
||||
memcpy((unsigned char *)p->data.data + offset,
|
||||
data->data, data->length);
|
||||
memset((unsigned char *)p->data.data + offset + data->length,
|
||||
0, p->data.length - offset - data->length);
|
||||
0, p->data.length - unaligned_len);
|
||||
|
||||
p->pac->numbuffers += 1;
|
||||
|
||||
@ -375,8 +456,8 @@ krb5_pac_get_buffer(krb5_context context, krb5_pac p,
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < p->pac->numbuffers; i++) {
|
||||
const size_t len = p->pac->buffers[i].buffersize;
|
||||
const size_t offset = p->pac->buffers[i].offset_lo;
|
||||
const uint32_t len = p->pac->buffers[i].buffersize;
|
||||
const uint32_t offset = p->pac->buffers[i].offset_lo;
|
||||
|
||||
if (p->pac->buffers[i].type != type)
|
||||
continue;
|
||||
@ -963,8 +1044,8 @@ _krb5_pac_sign(krb5_context context,
|
||||
size_t server_size, priv_size;
|
||||
uint32_t server_offset = 0, priv_offset = 0;
|
||||
uint32_t server_cksumtype = 0, priv_cksumtype = 0;
|
||||
int num = 0;
|
||||
size_t i;
|
||||
uint32_t num = 0;
|
||||
uint32_t i;
|
||||
krb5_data logon, d;
|
||||
|
||||
krb5_data_zero(&logon);
|
||||
@ -978,8 +1059,18 @@ _krb5_pac_sign(krb5_context context,
|
||||
|
||||
if (num) {
|
||||
void *ptr;
|
||||
uint32_t len;
|
||||
|
||||
ptr = realloc(p->pac, sizeof(*p->pac) + (sizeof(p->pac->buffers[0]) * (p->pac->numbuffers + num - 1)));
|
||||
if (p->pac->numbuffers > UINT32_MAX - num) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
ret = pac_header_size(context, p->pac->numbuffers + num, &len);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ptr = realloc(p->pac, len);
|
||||
if (ptr == NULL)
|
||||
return krb5_enomem(context);
|
||||
|
||||
@ -1032,7 +1123,9 @@ _krb5_pac_sign(krb5_context context,
|
||||
CHECK(ret, krb5_store_uint32(sp, p->pac->numbuffers), out);
|
||||
CHECK(ret, krb5_store_uint32(sp, p->pac->version), out);
|
||||
|
||||
end = PACTYPE_SIZE + (PAC_INFO_BUFFER_SIZE * p->pac->numbuffers);
|
||||
ret = pac_header_size(context, p->pac->numbuffers, &end);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
for (i = 0; i < p->pac->numbuffers; i++) {
|
||||
uint32_t len;
|
||||
@ -1042,11 +1135,31 @@ _krb5_pac_sign(krb5_context context,
|
||||
/* store data */
|
||||
|
||||
if (p->pac->buffers[i].type == PAC_SERVER_CHECKSUM) {
|
||||
if (server_size > UINT32_MAX - 4) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
if (end > UINT32_MAX - 4) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
len = server_size + 4;
|
||||
server_offset = end + 4;
|
||||
CHECK(ret, krb5_store_uint32(spdata, server_cksumtype), out);
|
||||
CHECK(ret, fill_zeros(context, spdata, server_size), out);
|
||||
} else if (p->pac->buffers[i].type == PAC_PRIVSVR_CHECKSUM) {
|
||||
if (priv_size > UINT32_MAX - 4) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
if (end > UINT32_MAX - 4) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
len = priv_size + 4;
|
||||
priv_offset = end + 4;
|
||||
CHECK(ret, krb5_store_uint32(spdata, priv_cksumtype), out);
|
||||
@ -1077,11 +1190,20 @@ _krb5_pac_sign(krb5_context context,
|
||||
|
||||
/* advance data endpointer and align */
|
||||
{
|
||||
int32_t e;
|
||||
uint32_t e;
|
||||
|
||||
if (end > UINT32_MAX - len) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
end += len;
|
||||
e = ((end + PAC_ALIGNMENT - 1) / PAC_ALIGNMENT) * PAC_ALIGNMENT;
|
||||
if ((int32_t)end != e) {
|
||||
|
||||
ret = pac_aligned_size(context, end, &e);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
if (end != e) {
|
||||
CHECK(ret, fill_zeros(context, spdata, e - end), out);
|
||||
}
|
||||
end = e;
|
||||
|
@ -802,11 +802,10 @@ get_key_from_keytab(krb5_context context,
|
||||
kvno,
|
||||
ap_req->ticket.enc_part.etype,
|
||||
&entry);
|
||||
if(ret)
|
||||
goto out;
|
||||
ret = krb5_copy_keyblock(context, &entry.keyblock, out_key);
|
||||
krb5_kt_free_entry (context, &entry);
|
||||
out:
|
||||
if(ret == 0) {
|
||||
ret = krb5_copy_keyblock(context, &entry.keyblock, out_key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
}
|
||||
if(keytab == NULL)
|
||||
krb5_kt_close(context, real_keytab);
|
||||
|
||||
|
@ -64,7 +64,7 @@ test_int16(krb5_context context, krb5_storage *sp)
|
||||
krb5_error_code ret;
|
||||
int i;
|
||||
int16_t val[] = {
|
||||
0, 1, -1, 32768, -32767
|
||||
0, 1, -1, 32767, -32768
|
||||
}, v;
|
||||
|
||||
krb5_storage_truncate(sp, 0);
|
||||
|
@ -281,6 +281,7 @@ decode_realms(krb5_context context,
|
||||
r = make_realm(tmp);
|
||||
if(r == NULL){
|
||||
free_realms(*realms);
|
||||
*realms = NULL;
|
||||
return krb5_enomem(context);
|
||||
}
|
||||
*realms = append_realm(*realms, r);
|
||||
@ -289,7 +290,8 @@ decode_realms(krb5_context context,
|
||||
}
|
||||
tmp = malloc(tr + i - start + 1);
|
||||
if(tmp == NULL){
|
||||
free(*realms);
|
||||
free_realms(*realms);
|
||||
*realms = NULL;
|
||||
return krb5_enomem(context);
|
||||
}
|
||||
memcpy(tmp, start, tr + i - start);
|
||||
@ -297,6 +299,7 @@ decode_realms(krb5_context context,
|
||||
r = make_realm(tmp);
|
||||
if(r == NULL){
|
||||
free_realms(*realms);
|
||||
*realms = NULL;
|
||||
return krb5_enomem(context);
|
||||
}
|
||||
*realms = append_realm(*realms, r);
|
||||
|
@ -188,7 +188,7 @@ get_null (const struct addrinfo *hints,
|
||||
struct addrinfo *first = NULL;
|
||||
struct addrinfo **current = &first;
|
||||
int family = PF_UNSPEC;
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
if (hints != NULL)
|
||||
family = hints->ai_family;
|
||||
@ -209,6 +209,8 @@ get_null (const struct addrinfo *hints,
|
||||
if (family == PF_INET6 || family == PF_UNSPEC) {
|
||||
ret = add_one (port, protocol, socktype,
|
||||
¤t, const_v6, &v6_addr, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
if (family == PF_INET || family == PF_UNSPEC) {
|
||||
@ -216,7 +218,7 @@ get_null (const struct addrinfo *hints,
|
||||
¤t, const_v4, &v4_addr, NULL);
|
||||
}
|
||||
*res = first;
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -156,7 +156,9 @@ main(int argc, char **argv)
|
||||
if (argc == 0)
|
||||
usage(1);
|
||||
|
||||
for (i = 0; i < argc; ++i)
|
||||
lookup(argv[i]);
|
||||
for (i = 0; i < argc; ++i) {
|
||||
if (argv[i][0]) /* Quiet lint */
|
||||
lookup(argv[i]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -227,9 +227,9 @@ find_composition(const uint32_t *in, unsigned in_len)
|
||||
unsigned i;
|
||||
|
||||
if (n % 5 == 0) {
|
||||
cur = *in++;
|
||||
if (in_len-- == 0)
|
||||
return c->val;
|
||||
cur = *in++;
|
||||
}
|
||||
|
||||
i = cur >> 16;
|
||||
|
@ -1275,8 +1275,6 @@
|
||||
..
|
||||
Pacific
|
||||
..
|
||||
SystemV
|
||||
..
|
||||
US
|
||||
..
|
||||
..
|
||||
|
@ -952,6 +952,9 @@ ping(int argc, char *const *argv)
|
||||
warn("recvmsg");
|
||||
continue;
|
||||
}
|
||||
/* If we have a 0 byte read from recvfrom continue */
|
||||
if (cc == 0)
|
||||
continue;
|
||||
#ifdef SO_TIMESTAMP
|
||||
if (cmsg != NULL &&
|
||||
cmsg->cmsg_level == SOL_SOCKET &&
|
||||
@ -1133,8 +1136,10 @@ pr_pack(char *buf, ssize_t cc, struct sockaddr_in *from, struct timespec *tv)
|
||||
struct icmp icp;
|
||||
struct ip ip;
|
||||
const u_char *icmp_data_raw;
|
||||
ssize_t icmp_data_raw_len;
|
||||
double triptime;
|
||||
int dupflag, hlen, i, j, recv_len;
|
||||
int dupflag, i, j, recv_len;
|
||||
uint8_t hlen;
|
||||
uint16_t seq;
|
||||
static int old_rrlen;
|
||||
static char old_rr[MAX_IPOPTLEN];
|
||||
@ -1144,15 +1149,27 @@ pr_pack(char *buf, ssize_t cc, struct sockaddr_in *from, struct timespec *tv)
|
||||
const u_char *oicmp_raw;
|
||||
|
||||
/*
|
||||
* Get size of IP header of the received packet. The
|
||||
* information is contained in the lower four bits of the
|
||||
* first byte.
|
||||
* Get size of IP header of the received packet.
|
||||
* The header length is contained in the lower four bits of the first
|
||||
* byte and represents the number of 4 byte octets the header takes up.
|
||||
*
|
||||
* The IHL minimum value is 5 (20 bytes) and its maximum value is 15
|
||||
* (60 bytes).
|
||||
*/
|
||||
memcpy(&l, buf, sizeof(l));
|
||||
hlen = (l & 0x0f) << 2;
|
||||
memcpy(&ip, buf, hlen);
|
||||
|
||||
/* Check the IP header */
|
||||
/* Reject IP packets with a short header */
|
||||
if (hlen < sizeof(struct ip)) {
|
||||
if (options & F_VERBOSE)
|
||||
warn("IHL too short (%d bytes) from %s", hlen,
|
||||
inet_ntoa(from->sin_addr));
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(&ip, buf, sizeof(struct ip));
|
||||
|
||||
/* Check packet has enough data to carry a valid ICMP header */
|
||||
recv_len = cc;
|
||||
if (cc < hlen + ICMP_MINLEN) {
|
||||
if (options & F_VERBOSE)
|
||||
@ -1164,6 +1181,7 @@ pr_pack(char *buf, ssize_t cc, struct sockaddr_in *from, struct timespec *tv)
|
||||
#ifndef icmp_data
|
||||
icmp_data_raw = buf + hlen + offsetof(struct icmp, icmp_ip);
|
||||
#else
|
||||
icmp_data_raw_len = cc - (hlen + offsetof(struct icmp, icmp_data));
|
||||
icmp_data_raw = buf + hlen + offsetof(struct icmp, icmp_data);
|
||||
#endif
|
||||
|
||||
@ -1293,12 +1311,45 @@ pr_pack(char *buf, ssize_t cc, struct sockaddr_in *from, struct timespec *tv)
|
||||
* as root to avoid leaking information not normally
|
||||
* available to those not running as root.
|
||||
*/
|
||||
|
||||
/*
|
||||
* If we don't have enough bytes for a quoted IP header and an
|
||||
* ICMP header then stop.
|
||||
*/
|
||||
if (icmp_data_raw_len <
|
||||
(ssize_t)(sizeof(struct ip) + sizeof(struct icmp))) {
|
||||
if (options & F_VERBOSE)
|
||||
warnx("quoted data too short (%zd bytes) from %s",
|
||||
icmp_data_raw_len, inet_ntoa(from->sin_addr));
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(&oip_header_len, icmp_data_raw, sizeof(oip_header_len));
|
||||
oip_header_len = (oip_header_len & 0x0f) << 2;
|
||||
memcpy(&oip, icmp_data_raw, oip_header_len);
|
||||
|
||||
/* Reject IP packets with a short header */
|
||||
if (oip_header_len < sizeof(struct ip)) {
|
||||
if (options & F_VERBOSE)
|
||||
warnx("inner IHL too short (%d bytes) from %s",
|
||||
oip_header_len, inet_ntoa(from->sin_addr));
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check against the actual IHL length, to protect against
|
||||
* quoated packets carrying IP options.
|
||||
*/
|
||||
if (icmp_data_raw_len <
|
||||
(ssize_t)(oip_header_len + sizeof(struct icmp))) {
|
||||
if (options & F_VERBOSE)
|
||||
warnx("inner packet too short (%zd bytes) from %s",
|
||||
icmp_data_raw_len, inet_ntoa(from->sin_addr));
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(&oip, icmp_data_raw, sizeof(struct ip));
|
||||
oicmp_raw = icmp_data_raw + oip_header_len;
|
||||
memcpy(&oicmp, oicmp_raw, offsetof(struct icmp, icmp_id) +
|
||||
sizeof(oicmp.icmp_id));
|
||||
memcpy(&oicmp, oicmp_raw, sizeof(struct icmp));
|
||||
|
||||
if (((options & F_VERBOSE) && uid == 0) ||
|
||||
(!(options & F_QUIET2) &&
|
||||
|
@ -33,7 +33,6 @@
|
||||
.include <src.opts.mk>
|
||||
|
||||
PACKAGE= zoneinfo
|
||||
CLEANFILES+= yearistype
|
||||
CLEANDIRS+= builddir
|
||||
CONTRIBDIR= ${SRCTOP}/contrib/tzdata/
|
||||
.PATH: ${CONTRIBDIR}
|
||||
@ -51,7 +50,7 @@ LEAPFILE=
|
||||
|
||||
TZFILES= africa antarctica asia australasia etcetera europe \
|
||||
factory northamerica southamerica
|
||||
TZFILES+= backward systemv
|
||||
TZFILES+= backward
|
||||
POSIXRULES= America/New_York
|
||||
|
||||
TZFILES:= ${TZFILES:S/^/${CONTRIBDIR}/}
|
||||
@ -71,8 +70,7 @@ TZBUILDSUBDIRS= \
|
||||
Etc \
|
||||
Europe \
|
||||
Indian \
|
||||
Pacific \
|
||||
SystemV
|
||||
Pacific
|
||||
TZBUILDSUBDIRS+= US Mexico Chile Canada Brazil
|
||||
|
||||
.if !defined(_SKIP_BUILD)
|
||||
@ -80,12 +78,12 @@ all: zoneinfo
|
||||
.endif
|
||||
META_TARGETS+= zoneinfo install-zoneinfo
|
||||
|
||||
zoneinfo: yearistype ${TDATA}
|
||||
zoneinfo: ${TDATA}
|
||||
mkdir -p ${TZBUILDDIR}
|
||||
cd ${TZBUILDDIR}; mkdir -p ${TZBUILDSUBDIRS}
|
||||
umask 022; cd ${.CURDIR}; \
|
||||
zic -D -d ${TZBUILDDIR} -p ${POSIXRULES} -m ${NOBINMODE} \
|
||||
${LEAPFILE} -y ${.OBJDIR}/yearistype ${TZFILES}
|
||||
${LEAPFILE} ${TZFILES}
|
||||
|
||||
#
|
||||
# Sort TZS to ensure they are the same every build. find -s might
|
||||
|
@ -1259,9 +1259,8 @@ __elfN(lookup_symbol)(elf_file_t ef, const char* name, Elf_Sym *symp,
|
||||
strp = strdupout((vm_offset_t)(ef->strtab + sym.st_name));
|
||||
if (strcmp(name, strp) == 0) {
|
||||
free(strp);
|
||||
if (sym.st_shndx != SHN_UNDEF ||
|
||||
(sym.st_value != 0 &&
|
||||
ELF_ST_TYPE(sym.st_info) == type)) {
|
||||
if (sym.st_shndx != SHN_UNDEF && sym.st_value != 0 &&
|
||||
ELF_ST_TYPE(sym.st_info) == type) {
|
||||
*symp = sym;
|
||||
return 0;
|
||||
}
|
||||
|
@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include <cam/cam.h>
|
||||
#include <cam/cam_ccb.h>
|
||||
#include <cam/cam_compat.h>
|
||||
#include <cam/cam_queue.h>
|
||||
#include <cam/cam_xpt_periph.h>
|
||||
#include <cam/cam_xpt_internal.h>
|
||||
@ -1106,6 +1107,7 @@ cam_periph_ioctl(struct cam_periph *periph, u_long cmd, caddr_t addr,
|
||||
error = found = 0;
|
||||
|
||||
switch(cmd){
|
||||
case CAMGETPASSTHRU_0x19:
|
||||
case CAMGETPASSTHRU:
|
||||
ccb = cam_periph_getccb(periph, CAM_PRIORITY_NORMAL);
|
||||
xpt_setup_ccb(&ccb->ccb_h,
|
||||
|
@ -54,7 +54,7 @@
|
||||
|
||||
TYPE="FreeBSD"
|
||||
REVISION="13.1"
|
||||
BRANCH="RELEASE-p2"
|
||||
BRANCH="RELEASE-p5"
|
||||
if [ -n "${BRANCH_OVERRIDE}" ]; then
|
||||
BRANCH=${BRANCH_OVERRIDE}
|
||||
fi
|
||||
|
@ -1845,7 +1845,8 @@ zfs_fhtovp(vfs_t *vfsp, fid_t *fidp, int flags, vnode_t **vpp)
|
||||
return (SET_ERROR(EINVAL));
|
||||
}
|
||||
|
||||
if (fidp->fid_len == LONG_FID_LEN && (fid_gen > 1 || setgen != 0)) {
|
||||
if (fidp->fid_len == LONG_FID_LEN && setgen != 0) {
|
||||
ZFS_EXIT(zfsvfs);
|
||||
dprintf("snapdir fid: fid_gen (%llu) and setgen (%llu)\n",
|
||||
(u_longlong_t)fid_gen, (u_longlong_t)setgen);
|
||||
return (SET_ERROR(EINVAL));
|
||||
|
@ -1536,8 +1536,8 @@ zfs_btree_remove_from_node(zfs_btree_t *tree, zfs_btree_core_t *node,
|
||||
zfs_btree_poison_node_at(tree, keep_hdr, keep_hdr->bth_count);
|
||||
|
||||
new_rm_hdr->bth_count = 0;
|
||||
zfs_btree_node_destroy(tree, new_rm_hdr);
|
||||
zfs_btree_remove_from_node(tree, parent, new_rm_hdr);
|
||||
zfs_btree_node_destroy(tree, new_rm_hdr);
|
||||
}
|
||||
|
||||
/* Remove the element at the specific location. */
|
||||
@ -1766,9 +1766,9 @@ zfs_btree_remove_idx(zfs_btree_t *tree, zfs_btree_index_t *where)
|
||||
zfs_btree_poison_node_at(tree, keep_hdr, keep_hdr->bth_count);
|
||||
|
||||
rm_hdr->bth_count = 0;
|
||||
zfs_btree_node_destroy(tree, rm_hdr);
|
||||
/* Remove the emptied node from the parent. */
|
||||
zfs_btree_remove_from_node(tree, parent, rm_hdr);
|
||||
zfs_btree_node_destroy(tree, rm_hdr);
|
||||
zfs_btree_verify(tree);
|
||||
}
|
||||
|
||||
|
@ -74,6 +74,19 @@ __FBSDID("$FreeBSD$");
|
||||
SYSCTL_NODE(_vfs, OID_AUTO, tmpfs, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
|
||||
"tmpfs file system");
|
||||
|
||||
#define VM_DOMAIN_POLICY_NONE (0)
|
||||
#define VM_DOMAIN_POLICY_RR (1)
|
||||
#define VM_DOMAIN_POLICY_IL (2)
|
||||
#define VM_DOMAIN_POLICY_FIXED (3)
|
||||
#define VM_DOMAIN_POLICY_PREF (4)
|
||||
|
||||
static int vm_domain_policy = 0;
|
||||
SYSCTL_INT(_vfs_tmpfs, OID_AUTO, domain_policy, CTLFLAG_RWTUN,
|
||||
&vm_domain_policy, 0, "domain policy for the underlying vmobject. 0: None; 1: RR; 2: IL; 3: FIXED; 4: PREF");
|
||||
static int vm_domain_target = 0;
|
||||
SYSCTL_INT(_vfs_tmpfs, OID_AUTO, domain_target, CTLFLAG_RWTUN,
|
||||
&vm_domain_target, 0, "target domain for the policy. only appicable to FIXED and PREF.");
|
||||
|
||||
static long tmpfs_pages_reserved = TMPFS_PAGES_MINRESERVED;
|
||||
|
||||
MALLOC_DEFINE(M_TMPFSDIR, "tmpfs dir", "tmpfs dirent structure");
|
||||
@ -82,6 +95,37 @@ VFS_SMR_DECLARE;
|
||||
|
||||
int tmpfs_pager_type = -1;
|
||||
|
||||
static struct domainset *
|
||||
tmpfs_get_domainset(void)
|
||||
{
|
||||
struct domainset * vm_domainset = NULL;
|
||||
switch (vm_domain_policy) {
|
||||
case VM_DOMAIN_POLICY_RR:
|
||||
vm_domainset = DOMAINSET_RR();
|
||||
//printf("tmpfs domain policy: RR\n");
|
||||
break;
|
||||
case VM_DOMAIN_POLICY_IL:
|
||||
vm_domainset = DOMAINSET_IL();
|
||||
//printf("tmpfs domain policy: IL\n");
|
||||
break;
|
||||
case VM_DOMAIN_POLICY_PREF:
|
||||
vm_domainset = DOMAINSET_PREF(vm_domain_target);
|
||||
//printf("tmpfs domain policy: PREF, target: %d\n", vm_domain_target);
|
||||
break;
|
||||
case VM_DOMAIN_POLICY_FIXED:
|
||||
vm_domainset = DOMAINSET_FIXED(vm_domain_target);
|
||||
//printf("tmpfs domain policy: FIXED, target: %d\n", vm_domain_target);
|
||||
break;
|
||||
case VM_DOMAIN_POLICY_NONE:
|
||||
//printf("tmpfs domain policy: NONE\n");
|
||||
break;
|
||||
default:
|
||||
//printf("unknown tmpfs domain policy: %d, defaulting to NONE\n", vm_domain_policy);
|
||||
break;
|
||||
}
|
||||
return vm_domainset;
|
||||
}
|
||||
|
||||
static vm_object_t
|
||||
tmpfs_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot,
|
||||
vm_ooffset_t offset, struct ucred *cred)
|
||||
@ -96,6 +140,7 @@ tmpfs_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot,
|
||||
vm_object_deallocate(object);
|
||||
object = NULL;
|
||||
}
|
||||
object->domain.dr_policy = tmpfs_get_domainset();
|
||||
return (object);
|
||||
}
|
||||
|
||||
|
@ -193,6 +193,9 @@ struct iflib_ctx {
|
||||
uint16_t ifc_sysctl_rx_budget;
|
||||
uint16_t ifc_sysctl_tx_abdicate;
|
||||
uint16_t ifc_sysctl_core_offset;
|
||||
uint16_t ifc_sysctl_override_affinity_stride;
|
||||
uint16_t ifc_sysctl_override_affinity_base;
|
||||
uint16_t ifc_sysctl_override_affinity;
|
||||
#define CORE_OFFSET_UNSPECIFIED 0xffff
|
||||
uint8_t ifc_sysctl_separate_txrx;
|
||||
uint8_t ifc_sysctl_use_logical_cores;
|
||||
@ -592,7 +595,6 @@ static int iflib_timer_default = 1000;
|
||||
SYSCTL_INT(_net_iflib, OID_AUTO, timer_default, CTLFLAG_RW,
|
||||
&iflib_timer_default, 0, "number of ticks between iflib_timer calls");
|
||||
|
||||
|
||||
#if IFLIB_DEBUG_COUNTERS
|
||||
|
||||
static int iflib_tx_seen;
|
||||
@ -2843,6 +2845,9 @@ iflib_rxd_pkt_get(iflib_rxq_t rxq, if_rxd_info_t ri)
|
||||
}
|
||||
m->m_pkthdr.len = ri->iri_len;
|
||||
m->m_pkthdr.rcvif = ri->iri_ifp;
|
||||
#ifdef NUMA
|
||||
m->m_pkthdr.numa_domain = ri->iri_ifp->if_numa_domain;
|
||||
#endif
|
||||
m->m_flags |= ri->iri_flags;
|
||||
m->m_pkthdr.ether_vtag = ri->iri_vtag;
|
||||
m->m_pkthdr.flowid = ri->iri_flowid;
|
||||
@ -5012,6 +5017,7 @@ iflib_device_register(device_t dev, void *sc, if_shared_ctx_t sctx, if_ctx_t *ct
|
||||
kobj_method_t *kobj_method;
|
||||
int err, msix, rid;
|
||||
int num_txd, num_rxd;
|
||||
int cpu_count;
|
||||
|
||||
ctx = malloc(sizeof(* ctx), M_IFLIB, M_WAITOK|M_ZERO);
|
||||
|
||||
@ -5105,8 +5111,23 @@ iflib_device_register(device_t dev, void *sc, if_shared_ctx_t sctx, if_ctx_t *ct
|
||||
taskqgroup_attach(qgroup_if_config_tqg, &ctx->ifc_admin_task, ctx,
|
||||
NULL, NULL, "admin");
|
||||
|
||||
if (ctx->ifc_sysctl_override_affinity) {
|
||||
CPU_ZERO(&ctx->ifc_cpus);
|
||||
cpu_count = CPU_COUNT(&all_cpus);
|
||||
if (ctx->ifc_sysctl_override_affinity_stride == 0) {
|
||||
device_printf(dev, "invalid cpu stride %d detected, resetting to 2\n", ctx->ifc_sysctl_override_affinity_stride);
|
||||
ctx->ifc_sysctl_override_affinity_stride = 2;
|
||||
}
|
||||
device_printf(dev, "overriding core affinty to base %d, stride %d, total cores %d\n",
|
||||
ctx->ifc_sysctl_override_affinity_base , ctx->ifc_sysctl_override_affinity_stride, cpu_count);
|
||||
for (int i = ctx->ifc_sysctl_override_affinity_base; i < cpu_count; i+= ctx->ifc_sysctl_override_affinity_stride) {
|
||||
device_printf(dev, "setting affinty to core %d\n", i);
|
||||
CPU_SET(i, &ctx->ifc_cpus);
|
||||
}
|
||||
ctx->ifc_cpus_are_physical_cores = false;
|
||||
}
|
||||
/* Set up cpu set. If it fails, use the set of all CPUs. */
|
||||
if (bus_get_cpus(dev, INTR_CPUS, sizeof(ctx->ifc_cpus), &ctx->ifc_cpus) != 0) {
|
||||
else if (bus_get_cpus(dev, INTR_CPUS, sizeof(ctx->ifc_cpus), &ctx->ifc_cpus) != 0) {
|
||||
device_printf(dev, "Unable to fetch CPU list\n");
|
||||
CPU_COPY(&all_cpus, &ctx->ifc_cpus);
|
||||
ctx->ifc_cpus_are_physical_cores = false;
|
||||
@ -5798,7 +5819,7 @@ iflib_register(if_ctx_t ctx)
|
||||
type = IFT_PPP;
|
||||
} else
|
||||
type = IFT_ETHER;
|
||||
ifp = ctx->ifc_ifp = if_alloc(type);
|
||||
ifp = ctx->ifc_ifp = if_alloc_dev(type, dev);
|
||||
if (ifp == NULL) {
|
||||
device_printf(dev, "can not allocate ifnet structure\n");
|
||||
return (ENOMEM);
|
||||
@ -6848,6 +6869,15 @@ iflib_add_device_sysctl_pre(if_ctx_t ctx)
|
||||
SYSCTL_ADD_U16(ctx_list, oid_list, OID_AUTO, "override_nrxqs",
|
||||
CTLFLAG_RWTUN, &ctx->ifc_sysctl_nrxqs, 0,
|
||||
"# of rxqs to use, 0 => use default #");
|
||||
ctx->ifc_sysctl_override_affinity = 0;
|
||||
ctx->ifc_sysctl_override_affinity_base = 0;
|
||||
ctx->ifc_sysctl_override_affinity_stride = 1;
|
||||
SYSCTL_ADD_U16(ctx_list, oid_list, OID_AUTO, "override_affinity",
|
||||
CTLFLAG_RWTUN, &ctx->ifc_sysctl_override_affinity, 0, "override the core affinity");
|
||||
SYSCTL_ADD_U16(ctx_list, oid_list, OID_AUTO, "override_affinity_base",
|
||||
CTLFLAG_RWTUN, &ctx->ifc_sysctl_override_affinity_base, 0, "base core of the affinity");
|
||||
SYSCTL_ADD_U16(ctx_list, oid_list, OID_AUTO, "override_affinity_stride",
|
||||
CTLFLAG_RWTUN, &ctx->ifc_sysctl_override_affinity_stride, 0, "core stride of the affinity");
|
||||
SYSCTL_ADD_U16(ctx_list, oid_list, OID_AUTO, "override_qs_enable",
|
||||
CTLFLAG_RWTUN, &ctx->ifc_sysctl_qs_eq_override, 0,
|
||||
"permit #txq != #rxq");
|
||||
|
@ -287,6 +287,20 @@ kmod_tcpstat_add(int statnum, int val)
|
||||
counter_u64_add(VNET(tcpstat)[statnum], val);
|
||||
}
|
||||
|
||||
/*
|
||||
* Make sure that we only start a SACK loss recovery when
|
||||
* receiving a duplicate ACK with a SACK block, and also
|
||||
* complete SACK loss recovery in case the other end
|
||||
* reneges.
|
||||
*/
|
||||
static bool inline
|
||||
tcp_is_sack_recovery(struct tcpcb *tp, struct tcpopt *to)
|
||||
{
|
||||
return ((tp->t_flags & TF_SACK_PERMIT) &&
|
||||
((to->to_flags & TOF_SACK) ||
|
||||
(!TAILQ_EMPTY(&tp->snd_holes))));
|
||||
}
|
||||
|
||||
#ifdef TCP_HHOOK
|
||||
/*
|
||||
* Wrapper for the TCP established input helper hook.
|
||||
@ -2525,9 +2539,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
|
||||
TCPSTAT_INC(tcps_rcvacktoomuch);
|
||||
goto dropafterack;
|
||||
}
|
||||
if ((tp->t_flags & TF_SACK_PERMIT) &&
|
||||
((to.to_flags & TOF_SACK) ||
|
||||
!TAILQ_EMPTY(&tp->snd_holes)))
|
||||
if (tcp_is_sack_recovery(tp, &to))
|
||||
sack_changed = tcp_sack_doack(tp, &to, th->th_ack);
|
||||
else
|
||||
/*
|
||||
@ -2597,8 +2609,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
|
||||
* duplicating packets or a possible DoS attack.
|
||||
*/
|
||||
if (th->th_ack != tp->snd_una ||
|
||||
((tp->t_flags & TF_SACK_PERMIT) &&
|
||||
(to.to_flags & TOF_SACK) &&
|
||||
(tcp_is_sack_recovery(tp, &to) &&
|
||||
!sack_changed))
|
||||
break;
|
||||
else if (!tcp_timer_active(tp, TT_REXMT))
|
||||
@ -2610,8 +2621,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
|
||||
if (V_tcp_do_prr &&
|
||||
IN_FASTRECOVERY(tp->t_flags)) {
|
||||
tcp_do_prr_ack(tp, th, &to);
|
||||
} else if ((tp->t_flags & TF_SACK_PERMIT) &&
|
||||
(to.to_flags & TOF_SACK) &&
|
||||
} else if (tcp_is_sack_recovery(tp, &to) &&
|
||||
IN_FASTRECOVERY(tp->t_flags)) {
|
||||
int awnd;
|
||||
|
||||
@ -2684,8 +2694,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
|
||||
* snd_ssthresh is already updated by
|
||||
* cc_cong_signal.
|
||||
*/
|
||||
if ((tp->t_flags & TF_SACK_PERMIT) &&
|
||||
(to.to_flags & TOF_SACK)) {
|
||||
if (tcp_is_sack_recovery(tp, &to)) {
|
||||
tp->sackhint.prr_delivered =
|
||||
tp->sackhint.sacked_bytes;
|
||||
} else {
|
||||
@ -2697,8 +2706,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
|
||||
tp->sackhint.recover_fs = max(1,
|
||||
tp->snd_nxt - tp->snd_una);
|
||||
}
|
||||
if ((tp->t_flags & TF_SACK_PERMIT) &&
|
||||
(to.to_flags & TOF_SACK)) {
|
||||
if (tcp_is_sack_recovery(tp, &to)) {
|
||||
TCPSTAT_INC(
|
||||
tcps_sack_recovery_episode);
|
||||
tp->snd_recover = tp->snd_nxt;
|
||||
@ -2790,8 +2798,7 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
|
||||
* from the left side. Such partial ACKs should not be
|
||||
* counted as dupacks here.
|
||||
*/
|
||||
if ((tp->t_flags & TF_SACK_PERMIT) &&
|
||||
(to.to_flags & TOF_SACK) &&
|
||||
if (tcp_is_sack_recovery(tp, &to) &&
|
||||
sack_changed) {
|
||||
tp->t_dupacks++;
|
||||
/* limit overhead by setting maxseg last */
|
||||
@ -3973,8 +3980,7 @@ tcp_do_prr_ack(struct tcpcb *tp, struct tcphdr *th, struct tcpopt *to)
|
||||
* (del_data) and an estimate of how many bytes are in the
|
||||
* network.
|
||||
*/
|
||||
if (((tp->t_flags & TF_SACK_PERMIT) &&
|
||||
(to->to_flags & TOF_SACK)) ||
|
||||
if (tcp_is_sack_recovery(tp, to) ||
|
||||
(IN_CONGRECOVERY(tp->t_flags) &&
|
||||
!IN_FASTRECOVERY(tp->t_flags))) {
|
||||
del_data = tp->sackhint.delivered_data;
|
||||
@ -4018,8 +4024,7 @@ tcp_do_prr_ack(struct tcpcb *tp, struct tcphdr *th, struct tcpopt *to)
|
||||
* accordingly.
|
||||
*/
|
||||
if (IN_FASTRECOVERY(tp->t_flags)) {
|
||||
if ((tp->t_flags & TF_SACK_PERMIT) &&
|
||||
(to->to_flags & TOF_SACK)) {
|
||||
if (tcp_is_sack_recovery(tp, to)) {
|
||||
tp->snd_cwnd = tp->snd_nxt - tp->snd_recover +
|
||||
tp->sackhint.sack_bytes_rexmit +
|
||||
(snd_cnt * maxseg);
|
||||
|
@ -4112,7 +4112,12 @@ vm_page_mvqueue(vm_page_t m, const uint8_t nqueue, const uint16_t nflag)
|
||||
if (nqueue == PQ_ACTIVE)
|
||||
new.act_count = max(old.act_count, ACT_INIT);
|
||||
if (old.queue == nqueue) {
|
||||
if (nqueue != PQ_ACTIVE)
|
||||
/*
|
||||
* There is no need to requeue pages already in the
|
||||
* active queue.
|
||||
*/
|
||||
if (nqueue != PQ_ACTIVE ||
|
||||
(old.flags & PGA_ENQUEUED) == 0)
|
||||
new.flags |= nflag;
|
||||
} else {
|
||||
new.flags |= nflag;
|
||||
@ -4209,7 +4214,8 @@ vm_page_release_toq(vm_page_t m, uint8_t nqueue, const bool noreuse)
|
||||
* referenced and avoid any queue operations.
|
||||
*/
|
||||
new.flags &= ~PGA_QUEUE_OP_MASK;
|
||||
if (nflag != PGA_REQUEUE_HEAD && old.queue == PQ_ACTIVE)
|
||||
if (nflag != PGA_REQUEUE_HEAD && old.queue == PQ_ACTIVE &&
|
||||
(old.flags & PGA_ENQUEUED) != 0)
|
||||
new.flags |= PGA_REFERENCED;
|
||||
else {
|
||||
new.flags |= nflag;
|
||||
|
Loading…
Reference in New Issue
Block a user