Compare commits

...

26 Commits

Author SHA1 Message Date
quackerd
404337736d per NIC affinity control 2022-12-09 08:51:33 +01:00
quackerd
13b8fe5dcd iflib packet->numa_domain set 2022-12-09 08:51:33 +01:00
quackerd
4f19a40541 finer grained affinity control 2022-12-09 08:51:33 +01:00
quackerd
ad43a49a86 finer grained affinity control 2022-12-09 08:51:33 +01:00
quackerd
08d499dd70 finer grained affinity control 2022-12-09 08:51:33 +01:00
quackerd
22954f3f10 tmpfs_subr typo 2022-12-09 08:51:32 +01:00
quackerd
421819df94 tmpfs_subr typo 2022-12-09 08:51:32 +01:00
quackerd
89aa88a2ff tmpfs page allocation sysctl 2022-12-09 08:51:32 +01:00
quackerd
3a3649ec3f tmpfs round robin page allocation & finer grained iflib affinity ctrl 2022-12-09 08:51:32 +01:00
Oscar Zhao
c8c2762402 iflib fix 2022-12-09 08:51:32 +01:00
Gordon Tetlow
753d65a19a Add UPDATING entries and bump version.
Approved by:	so
2022-11-29 15:10:47 -08:00
Cy Schubert
10571c04c9 heimdal: Fix: Too large time skew, client time 1970-01-01T01:00:00
Part of ed549cb0c5 zeroed out a data structure in the resulting code-file
when a TUTCTime type was freed. This part of the patch applies to Heimdal
7.1+ and not our Heimdal 1.5.2.

PR:		267827
Reported by:	Peter Much <pmc@citylink.dinoex.sub.org>
Tested by:	Peter Much <pmc@citylink.dinoex.sub.org>
Approved by:	so
Security:	FreeBSD-EN-22:28.heimdal
Fixes:		ed549cb0c5

(cherry picked from commit f556a05c49)
(cherry picked from commit b23fe6bade)
2022-11-29 15:04:48 -08:00
Tom Jones
66c7b53d95 ping: Fix handling of IP packet sizes
Ping reads raw IP packets to parse ICMP responses. When reading the
IP Header Len (IHL) ping was was taking the value from the provided
packet without any validation. This could lead to remotely triggerable
stack corruption.

Validate the IHL against expected and recieved data sizes when reading
from the received packet and when reading any quoted packets from within
the ICMP response.

Approved by:	so
Reviewed by:	markj, asomers
Security:	FreeBSD-SA-22:15.ping
Security:	CVE-2022-23093
Sponsored by:   NetApp, Inc.
Sponsored by:   Klara, Inc.
X-NetApp-PR:    #77
Differential Revision: https://reviews.freebsd.org/D37195

(cherry picked from commit 46d7b45a26)
(cherry picked from commit 186f495d4b)
2022-11-29 15:00:43 -08:00
Ed Maste
95499c4561 Add UPDATING entries and bump version
Approved by:	so
2022-11-15 19:22:22 -05:00
Cy Schubert
a1e014e892 heimdal: Fix multiple security vulnerabilities
The following issues are patched:

 - CVE-2022-42898 PAC parse integer overflows
 - CVE-2022-3437 Overflows and non-constant time leaks in DES{,3} and arcfour
 - CVE-2021-44758 NULL dereference DoS in SPNEGO acceptors
 - CVE-2022-44640 Heimdal KDC: invalid free in ASN.1 codec

    Note that CVE-2022-44640 is a severe vulnerability, possibly a 10.0
    on the Common Vulnerability Scoring System (CVSS) v3, as we believe
    it should be possible to get an RCE on a KDC, which means that
    credentials can be compromised that can be used to impersonate
    anyone in a realm or forest of realms.

    Heimdal's ASN.1 compiler generates code that allows specially
    crafted DER encodings of CHOICEs to invoke the wrong free function
    on the decoded structure upon decode error.  This is known to impact
    the Heimdal KDC, leading to an invalid free() of an address partly
    or wholly under the control of the attacker, in turn leading to a
    potential remote code execution (RCE) vulnerability.

    This error affects the DER codec for all extensible CHOICE types
    used in Heimdal, though not all cases will be exploitable.  We have
    not completed a thorough analysis of all the Heimdal components
    affected, thus the Kerberos client, the X.509 library, and other
    parts, may be affected as well.

    This bug has been in Heimdal's ASN.1 compiler since 2005, but it may
    only affect Heimdal 1.6 and up.  It was first reported by Douglas
    Bagnall, though it had been found independently by the Heimdal
    maintainers via fuzzing a few weeks earlier.

    While no zero-day exploit is known, such an exploit will likely be
    available soon after public disclosure.

 - CVE-2019-14870: Validate client attributes in protocol-transition
 - CVE-2019-14870: Apply forwardable policy in protocol-transition
 - CVE-2019-14870: Always lookup impersonate client in DB

Sponsored by:	so (philip)
Obtained from:	so (philip)
Tested by:	philip, cy

(cherry picked from commit ed549cb0c5)
(cherry picked from commit d0b6550173)

Approved by:	so
Security:	FreeBSD-SA-22:14.heimdal
2022-11-15 19:19:22 -05:00
Mark Johnston
c3c13035ef zfs: Fix an improperly resolved merge conflict
Approved by:	so
Fixes:	8838c650cb ("Fix use-after-free in btree code")
2022-11-01 16:55:10 -04:00
Mark Johnston
e81b1bd17f Add UPDATING entries and bump version
Approved by:	so
2022-11-01 14:03:25 -04:00
Richard Yao
8838c650cb Fix use-after-free in btree code
Coverty static analysis found these.

Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Neal Gompa <ngompa@datto.com>
Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes #10989
Closes #13861

Approved by:	so
Security:	FreeBSD-EN-22:21.zfs

(cherry picked from commit 8131a96544)
2022-11-01 14:03:25 -04:00
Kyle Evans
1ee7e4ba70 loader: fix elf lookup_symbol type filtering
The existing logic doesn't seem to make much sense, as we won't filter
on the type if st_shndx != SHN_UNDEF.  In practice, this breaks booting
12.3 kernels on newer loaders, as they do have a `kernphys` symbol of
the wrong type (NOTYPE, rather than OBJECT) -- we end up deriving the
wrong value for copy_staging.

It's unclear if this version makes any more sense, but it seems to match
what rtld's matched_symbol() does.  Loader doesn't need to care about
STT_FUNC w/ UND shndx, because we won't encounter those; in kmods,
undefined (kernel) functions are NOTYPE.

Approved by:	so
Security:	FreeBSD-EN-22:27.loader
Reported by:	Christian McDonald <cmcdonald netgate com>
Reviewed by:	imp, kib, tsoome

(cherry picked from commit 0701dbda94)
(cherry picked from commit 2b31059ea7)
2022-11-01 14:03:25 -04:00
Philip Paeps
0bcdf24a7c contrib/tzdata: import tzdata 2022f
Changes: https://github.com/eggert/tz/blob/2022f/NEWS

Approved by:	so
Security:	FreeBSD-EN-22:22.tzdata

(cherry picked from commit 9142a2a37b)
(cherry picked from commit 46d324ec65)
2022-11-01 14:03:24 -04:00
Philip Paeps
c4b78085d8 contrib/tzdata: import tzdata 2022e
Changes: https://github.com/eggert/tz/blob/2022e/NEWS

Approved by:	so
Security:	FreeBSD-EN-22:22.tzdata

(cherry picked from commit 5d56371c70)
(cherry picked from commit af335a4366)
2022-11-01 14:03:24 -04:00
Philip Paeps
b6aebce51f contrib/tzdata: import tzdata 2022d
Changes: https://github.com/eggert/tz/blob/2022d/NEWS

The /usr/share/zoneinfo/SystemV directory has been empty on FreeBSD
since 2006.  The upstream source file was removed in 2020.  Also stop
passing yearisdate to zic(8).  This has not been necessary for years.
The script has been removed upstream since 2020.

Approved by:	so
Security:	FreeBSD-EN-22:22.tzdata

(cherry picked from commit 1576451a39)
(cherry picked from commit da038df8c9)
(cherry picked from commit 57338837ae)
(cherry picked from commit 77596427bd)
2022-11-01 14:03:24 -04:00
Richard Scheffenegger
dd35207e20 tcp: finish SACK loss recovery on sudden lack of SACK blocks
While a receiver should continue sending SACK blocks for the
duration of a SACK loss recovery, if for some reason the
TCP options no longer contain these SACK blocks, but we
already started maintaining the Scoreboard, keep on handling
incoming ACKs (without SACK) as belonging to the SACK recovery.

Approved by:		so
Security:		FreeBSD-EN-22:25.tcp
Reported by:		thj
Reviewed by:		tuexen, #transport
MFC after:		2 weeks
Sponsored by:		NetApp, Inc.
Differential Revision:	https://reviews.freebsd.org/D36046

(cherry picked from commit c21b7b55be)
(cherry picked from commit 2b8ee332b9)
2022-11-01 09:28:11 -04:00
Mark Johnston
fff5c5fe91 cam: Provide compatibility for CAMGETPASSTHRU for periph drivers
The CAM version bump 0x19 -> 0x1a changed the CAMGETPASSTHRU definition,
so applications using the old ioctl are broken.  However, that version
change did not affect anything relating to the ioctl implementation for
periphs.

Approved by:	so
Security:	FreeBSD-EN-22:26.cam
Fixes:		8f9be1eed1 ("cam(4): Improve XPT_DEV_MATCH")
PR:		264709
Tested by:	andreas.mahling@googlemail.com
Reviewed by:	imp

(cherry picked from commit 0cd631ee06)
(cherry picked from commit 16d4c1de7b)
2022-11-01 09:28:11 -04:00
Mark Johnston
4867d7d34d vm_page: Fix a logic error in the handling of PQ_ACTIVE operations
As an optimization, vm_page_activate() avoids requeuing a page that's
already in the active queue.  A page's location in the active queue is
mostly unimportant.

When a page is unwired and placed back in the page queues,
vm_page_unwire() avoids moving pages out of PQ_ACTIVE to honour the
request, the idea being that they're likely mapped and so will simply
get bounced back in to PQ_ACTIVE during a queue scan.

In both cases, if the page was logically in PQ_ACTIVE but had not yet
been physically enqueued (i.e., the page is in a per-CPU batch), we
would end up clearing PGA_REQUEUE from the page.  Then, batch processing
would ignore the page, so it would end up unwired and not in any queues.
This can arise, for example, when a page is allocated and then
vm_page_activate() is called multiple times in quick succession.  The
result is that the page is hidden from the page daemon, so while it will
be freed when its VM object is destroyed, it cannot be reclaimed under
memory pressure.

Fix the bug: when checking if a page is in PQ_ACTIVE, only perform the
optimization if the page is physically enqueued.

Approved by:	so
Security:	FreeBSD-EN-22:23.vm
PR:		256507
Fixes:		f3f38e2580 ("Start implementing queue state updates using fcmpset loops.")
Reviewed by:	alc, kib
Sponsored by:	E-CARD Ltd.
Sponsored by:	Klara, Inc.

(cherry picked from commit 2c9dc2384f)
(cherry picked from commit 6094749a1a)
2022-11-01 09:28:11 -04:00
Mark Johnston
7ab877cb3f zfs: Fix a pair of bugs in zfs_fhtovp()
This cherry-picks upstream ed566bf1cd

    - Add a zfs_exit() call in an error path, otherwise a lock is
      leaked.
    - Remove the fid_gen > 1 check.  That appears to be Linux-specific:
      zfsctl_snapdir_fid() sets fid_gen to 0 or 1 depending on whether
      the snapshot directory is mounted.  On FreeBSD it fails, making
      snapshot dirs inaccessible via NFS.

Approved by:	so
PR:		266236
Security:	FreeBSD-EN-22:24.zfs

(cherry picked from commit 6fe0a6c80a)
(cherry picked from commit 562c9ac58c)
2022-11-01 09:28:11 -04:00
88 changed files with 1542 additions and 1101 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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:

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,7 +46,22 @@ 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
}
}

View File

@ -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.

View File

@ -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.
###############################################################################

View File

@ -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:

View File

@ -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 ##

View File

@ -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.

View File

@ -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

View File

@ -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>',

View File

@ -1 +1 @@
2022c
2022f

View File

@ -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

View File

@ -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]
}

View File

@ -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

View File

@ -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)

View File

@ -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";
}

View File

@ -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;

View File

@ -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);

View File

@ -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));

View File

@ -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);
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);
}
}

View File

@ -103,7 +103,10 @@ stash(struct stash_options *opt, int argc, char **argv)
}
}
ret = krb5_string_to_key_salt(context, enctype, buf, salt, &key);
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);
}

View File

@ -423,7 +423,7 @@ kcm_op_get_principal(krb5_context context,
free(name);
kcm_release_ccache(context, ccache);
return 0;
return ret;
}
/*

View File

@ -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) {

View File

@ -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) {

View File

@ -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);

View File

@ -1928,12 +1928,9 @@ tgs_build_reply(krb5_context context,
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);
NULL, &s4u2self_impersonated_clientdb,
&s4u2self_impersonated_client);
if (ret) {
const char *msg;
@ -1946,12 +1943,25 @@ tgs_build_reply(krb5_context context,
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",
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_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;

View File

@ -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);

View File

@ -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) {

View File

@ -90,7 +90,9 @@ main (int argc, char **argv)
}
argc -= optidx;
#ifndef __clang_analyzer__
argv += optidx;
#endif
if (argc != 0)
usage (1);

View File

@ -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));

View File

@ -135,8 +135,12 @@ int
der_copy_octet_string (const heim_octet_string *from, heim_octet_string *to)
{
to->length = from->length;
if (from->data == NULL) {
to->data = NULL;
return 0;
}
to->data = malloc(to->length);
if(to->length != 0 && to->data == NULL)
if (to->length != 0 && to->data == NULL)
return ENOMEM;
memcpy(to->data, from->data, to->length);
return 0;

View File

@ -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"

View File

@ -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) {

View File

@ -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;

View File

@ -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;

View File

@ -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,6 +202,7 @@ 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;
if (output_message_buffer->value != NULL)
memcpy (output_message_buffer->value,
p + 24,
output_message_buffer->length);
@ -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,6 +404,7 @@ 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;
if (output_message_buffer->value != NULL)
memcpy (output_message_buffer->value,
p + 36,
output_message_buffer->length);

View File

@ -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",

View File

@ -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)

View File

@ -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)

View File

@ -51,6 +51,7 @@
#include <roken.h>
#include <krb5.h>
#include <gssapi.h>
#include <gssapi_mech.h>
#include <gssapi_krb5.h>

View File

@ -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);

View File

@ -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;
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;
}
/*

View File

@ -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;

View File

@ -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,

View File

@ -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

View File

@ -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;
}

View File

@ -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,6 +355,7 @@ 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;
if (ulValueLen)
memcpy(o->attrs[i].attribute.pValue, pValue, ulValueLen);
o->attrs[i].attribute.ulValueLen = ulValueLen;
o->num_attributes++;

View File

@ -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;
}

View File

@ -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);

View File

@ -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);

View File

@ -755,6 +755,9 @@ 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);
if (ret)
rtbl_add_column_entry(tbl, SLAVE_SEEN, "<error-formatting-time>");
else
rtbl_add_column_entry(tbl, SLAVE_SEEN, str);
slaves = slaves->next;

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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");

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
krb5_kt_close (context, keytab);
if (ret)
return ret;
if (ret == 0) {
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
krb5_kt_free_entry(context, &entry);
}
krb5_kt_close (context, keytab);
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);
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;

View File

@ -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

View File

@ -38,7 +38,7 @@
#include <krb5-types.h>
#ifdef __APPLE__
#ifdef __APPLE__
#pragma pack(push,2)
#endif

View File

@ -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);

View File

@ -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;

View File

@ -802,11 +802,10 @@ get_key_from_keytab(krb5_context context,
kvno,
ap_req->ticket.enc_part.etype,
&entry);
if(ret)
goto out;
if(ret == 0) {
ret = krb5_copy_keyblock(context, &entry.keyblock, out_key);
krb5_kt_free_entry (context, &entry);
out:
krb5_kt_free_entry(context, &entry);
}
if(keytab == NULL)
krb5_kt_close(context, real_keytab);

View File

@ -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);

View File

@ -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);

View File

@ -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,
&current, 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,
&current, const_v4, &v4_addr, NULL);
}
*res = first;
return 0;
return ret;
}
static int

View File

@ -156,7 +156,9 @@ main(int argc, char **argv)
if (argc == 0)
usage(1);
for (i = 0; i < argc; ++i)
for (i = 0; i < argc; ++i) {
if (argv[i][0]) /* Quiet lint */
lookup(argv[i]);
}
return 0;
}

View File

@ -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;

View File

@ -1275,8 +1275,6 @@
..
Pacific
..
SystemV
..
US
..
..

View File

@ -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) &&

View File

@ -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

View File

@ -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;
}

View File

@ -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,

View File

@ -54,7 +54,7 @@
TYPE="FreeBSD"
REVISION="13.1"
BRANCH="RELEASE-p2"
BRANCH="RELEASE-p5"
if [ -n "${BRANCH_OVERRIDE}" ]; then
BRANCH=${BRANCH_OVERRIDE}
fi

View File

@ -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));

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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");

View File

@ -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);

View File

@ -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;