mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-30 12:25:10 +01:00
Compare commits
71
Commits
stable/12
...
releng/12.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da6997b053 | ||
|
|
1f8724dd18 | ||
|
|
7f1c8b021b | ||
|
|
afb60ed7d8 | ||
|
|
138c4a1553 | ||
|
|
5e1ad8bebd | ||
|
|
f31403bfdd | ||
|
|
d4745a8681 | ||
|
|
04043434d2 | ||
|
|
62b8c69d29 | ||
|
|
e0cb8021a8 | ||
|
|
4e0edfea80 | ||
|
|
df7ca95146 | ||
|
|
458f3d1c51 | ||
|
|
729902d517 | ||
|
|
d186d19100 | ||
|
|
ce78da4ea6 | ||
|
|
97e1662bba | ||
|
|
6852ad586e | ||
|
|
938108cf04 | ||
|
|
3d3693dae2 | ||
|
|
1120c36b07 | ||
|
|
0aa6d8576d | ||
|
|
7f83d23ecf | ||
|
|
cd7c996c4e | ||
|
|
38a360a502 | ||
|
|
9bd5d46c02 | ||
|
|
49dcaa3485 | ||
|
|
87099980a0 | ||
|
|
c4c1d79338 | ||
|
|
9c55c1cf56 | ||
|
|
5e67ca45e9 | ||
|
|
0d1f1dc951 | ||
|
|
862f4476ae | ||
|
|
5ef98a3395 | ||
|
|
c0b86c6e11 | ||
|
|
1c136ac8a9 | ||
|
|
060c556da7 | ||
|
|
46f1fb8237 | ||
|
|
8794413823 | ||
|
|
5616c3920f | ||
|
|
f0df8a1311 | ||
|
|
7895cf4ce4 | ||
|
|
bb9467d6ce | ||
|
|
feac4f1bdf | ||
|
|
93d4887a8b | ||
|
|
7910632fbd | ||
|
|
b8beb716be | ||
|
|
d5f4d9d524 | ||
|
|
752dd0a90e | ||
|
|
70cb68e7a0 | ||
|
|
8ffcfb399b | ||
|
|
68396709e7 | ||
|
|
22082f15f9 | ||
|
|
f266886dd0 | ||
|
|
43040454e9 | ||
|
|
53f057b3f4 | ||
|
|
d9d6250477 | ||
|
|
3d093d5b00 | ||
|
|
35a5a941bf | ||
|
|
76cbfe08b4 | ||
|
|
f552d2c115 | ||
|
|
aab2bfc127 | ||
|
|
791f88fff3 | ||
|
|
5f6e6bef15 | ||
|
|
3a504205e4 | ||
|
|
30ae8267b9 | ||
|
|
bee91a0e8b | ||
|
|
b9c0a61651 | ||
|
|
51a3024ee7 | ||
|
|
27c4d9242b |
No files matched your search
+1
-2
@@ -6737,8 +6737,6 @@ OLD_FILES+=etc/rc.firewall6
|
||||
OLD_FILES+=usr/share/examples/etc/rc.firewall6
|
||||
# 20091117: removal of rc.early(8) link
|
||||
OLD_FILES+=usr/share/man/man8/rc.early.8.gz
|
||||
# 20091117: usr/share/zoneinfo/GMT link removed
|
||||
OLD_FILES+=usr/share/zoneinfo/GMT
|
||||
# 20091027: pselect.3 implemented as syscall
|
||||
OLD_FILES+=usr/share/man/man3/pselect.3.gz
|
||||
# 20091005: fusword.9 and susword.9 removed
|
||||
@@ -11541,6 +11539,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
|
||||
|
||||
@@ -17,6 +17,125 @@ from older versions of FreeBSD, try WITHOUT_CLANG and WITH_GCC to bootstrap to
|
||||
the tip of head, and then rebuild without this option. The bootstrap process
|
||||
from older version of current across the gcc/clang cutover is a bit fragile.
|
||||
|
||||
20231205:
|
||||
12.3-RELEASE-p13 FreeBSD-SA-23:17.pf
|
||||
|
||||
TCP spoofing vulnerability in pf(4) [SA-23:17.pf]
|
||||
|
||||
20230216:
|
||||
12.3-RELEASE-p12 FreeBSD-SA-23:03.openssl
|
||||
|
||||
Fix multiple OpenSSL vulnerabilities [SA-23:03.openssl]
|
||||
|
||||
20230208:
|
||||
12.3-RELEASE-p11 FreeBSD-SA-23:01.geli
|
||||
FreeBSD-EN-23:01.tzdata
|
||||
FreeBSD-EN-23:04.ixgbe
|
||||
|
||||
Fix GELI silently omits the keyfile if read from stdin [SA-23:01.geli]
|
||||
|
||||
Timezone database information update [EN-23:01.tzdata]
|
||||
|
||||
Fix ixgbe incorrectly reporting input errors for 82599ES [EN-23:04.ixgbe]
|
||||
|
||||
20221129:
|
||||
12.3-RELEASE-p10 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:
|
||||
12.3-RELEASE-p9 FreeBSD-SA-22:14.heimdal
|
||||
|
||||
Multiple vulnerabilities in Heimdal [SA-22:14.heimdal]
|
||||
|
||||
20221101:
|
||||
12.3-RELEASE-p8 FreeBSD-EN-22:22.tzdata
|
||||
|
||||
Timezone database information update [EN-22:20.tzdata]
|
||||
|
||||
20220830:
|
||||
12.3-RELEASE-p7 FreeBSD-SA-22:13.zlib
|
||||
FreeBSD-EN-22:20.tzdata
|
||||
|
||||
zlib heap buffer overflow [SA-22:13.zlib]
|
||||
|
||||
Timezone database information update [EN-22:20.tzdata]
|
||||
|
||||
20220726:
|
||||
12.3-RELEASE-p6 FreeBSD-SA-22:09.elf
|
||||
FreeBSD-SA-22:10.aio
|
||||
FreeBSD-SA-22:11.vm
|
||||
FReeBSD-EN-22:17.cam
|
||||
|
||||
Out of bounds read in elf_note_prpsinfo() [SA-22:09.elf]
|
||||
|
||||
AIO credential reference count leak [SA-22:10.aio]
|
||||
|
||||
Memory disclosure by stale virtual memory mapping [SA-22:11.vm]
|
||||
|
||||
Kernel memory corruption during SCSI error recovery [EN-22:17.cam]
|
||||
|
||||
20220405:
|
||||
12.3-RELEASE-p5 FreeBSD-SA-22:04.netmap
|
||||
FreeBSD-SA-22:05.bhyve
|
||||
FreeBSD-SA-22:06.ioctl
|
||||
FreeBSD-SA-22:07.wifi_meshid
|
||||
FreeBSD-SA-22:08.zlib
|
||||
|
||||
Potential jail escape vulnerabilities in netmap [SA-22:04.netmap]
|
||||
|
||||
Bhyve e82545 device emulation out-of-bounds write [SA-22:05.bhyve]
|
||||
|
||||
mpr/mps/mpt driver ioctl heap out-of-bounds write [SA-22:06.ioctl]
|
||||
|
||||
802.11 heap buffer overflow [SA-22:07.wifi_meshid]
|
||||
|
||||
zlib compression out-of-bounds write [SA-22:08.zlib]
|
||||
|
||||
20220322:
|
||||
12.3-RELEASE-p4 FreeBSD-EN-22:14.tzdata
|
||||
|
||||
Timezone database information update. [EN-22:14.tzdata]
|
||||
|
||||
20220315:
|
||||
12.3-RELEASE-p3 FreeBSD-EN-22:09.freebsd-update
|
||||
FreeBSD-SA-22:02.wifi
|
||||
FreeBSD-SA-22:03.openssl
|
||||
|
||||
freebsd-update creating erroneous boot environments [FreeBSD-EN-22:09.freebsd-update]
|
||||
|
||||
Multiple WiFi issues [FreeBSD-SA-22:02.wifi]
|
||||
|
||||
OpenSSL certificate parsing infinite loop [FreeBSD-SA-22:03.openssl]
|
||||
|
||||
20220201:
|
||||
12.3-RELEASE-p2 FreeBSD-EN-22:08.i386
|
||||
|
||||
Fix regression in i386 TLB invalidation logic. [FreeBSD-EN-22:08.i386]
|
||||
|
||||
20220111:
|
||||
12.3-RELEASE-p1 FreeBSD-EN-22:02.xsave
|
||||
FreeBSD-EN-22:03.hyperv
|
||||
FreeBSD-EN-22:04.pcid
|
||||
FreeBSD-EN-22:06.libalias
|
||||
FreeBSD-SA-22:01.vt
|
||||
|
||||
Correct size of the amd64 SSE area in the xsave layout [FreeBSD-EN-22:02.xsave]
|
||||
|
||||
Prepopulate Hyper-V PCI device bars [FreeBSD-EN-22:03.hyperv]
|
||||
|
||||
Fix amd64 pmap PCID mode invalidations [FreeBSD-EN-22:04.pcid]
|
||||
|
||||
Fix fragmented UDP packets handling [FreeBSD-EN-22:06.libalias]
|
||||
|
||||
Fix vt console buffer overflow [FreeBSD-SA-22:01.vt]
|
||||
|
||||
20211206:
|
||||
12.3-RELEASE.
|
||||
|
||||
20210730:
|
||||
Commit b69019c14cd8 removes pf's DIOCGETSTATESNV ioctl.
|
||||
As of be70c7a50d32 it is no longer used by userspace, but it does mean
|
||||
|
||||
@@ -1196,17 +1196,6 @@ enumadd(const char *name, int value, void *arg)
|
||||
name, value) == CTF_ERR);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
static int
|
||||
membcmp(const char *name, ctf_id_t type, ulong_t offset, void *arg)
|
||||
{
|
||||
ctf_bundle_t *ctb = arg;
|
||||
ctf_membinfo_t ctm;
|
||||
|
||||
return (ctf_member_info(ctb->ctb_file, ctb->ctb_type,
|
||||
name, &ctm) == CTF_ERR || ctm.ctm_offset != offset);
|
||||
}
|
||||
|
||||
static int
|
||||
membadd(const char *name, ctf_id_t type, ulong_t offset, void *arg)
|
||||
{
|
||||
@@ -1240,6 +1229,71 @@ membadd(const char *name, ctf_id_t type, ulong_t offset, void *arg)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static long
|
||||
soucmp(ctf_file_t *src_fp, ctf_id_t src_type, ctf_file_t *dst_fp,
|
||||
ctf_id_t dst_type)
|
||||
{
|
||||
const struct ctf_type *src_tp, *dst_tp;
|
||||
const char *src_name, *dst_name;
|
||||
ssize_t src_sz, dst_sz, src_inc, dst_inc;
|
||||
uint_t kind, n;
|
||||
|
||||
if ((src_type = ctf_type_resolve(src_fp, src_type)) == CTF_ERR)
|
||||
return (CTF_ERR);
|
||||
if ((dst_type = ctf_type_resolve(dst_fp, dst_type)) == CTF_ERR)
|
||||
return (CTF_ERR);
|
||||
|
||||
if ((src_tp = ctf_lookup_by_id(&src_fp, src_type)) == NULL)
|
||||
return (CTF_ERR);
|
||||
if ((dst_tp = ctf_lookup_by_id(&dst_fp, dst_type)) == NULL)
|
||||
return (CTF_ERR);
|
||||
|
||||
if ((kind = LCTF_INFO_KIND(src_fp, src_tp->ctt_info)) !=
|
||||
LCTF_INFO_KIND(dst_fp, dst_tp->ctt_info))
|
||||
return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
|
||||
if (kind != CTF_K_STRUCT && kind != CTF_K_UNION)
|
||||
return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
|
||||
if ((n = LCTF_INFO_VLEN(src_fp, src_tp->ctt_info)) !=
|
||||
LCTF_INFO_VLEN(dst_fp, dst_tp->ctt_info))
|
||||
return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
|
||||
|
||||
(void) ctf_get_ctt_size(src_fp, src_tp, &src_sz, &src_inc);
|
||||
(void) ctf_get_ctt_size(dst_fp, dst_tp, &dst_sz, &dst_inc);
|
||||
if (src_sz != dst_sz || src_inc != dst_inc)
|
||||
return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
|
||||
|
||||
if (src_sz < CTF_LSTRUCT_THRESH) {
|
||||
const ctf_member_t *src_mp, *dst_mp;
|
||||
|
||||
src_mp = (const ctf_member_t *)((uintptr_t)src_tp + src_inc);
|
||||
dst_mp = (const ctf_member_t *)((uintptr_t)dst_tp + dst_inc);
|
||||
for (; n != 0; n--, src_mp++, dst_mp++) {
|
||||
if (src_mp->ctm_offset != dst_mp->ctm_offset)
|
||||
return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
|
||||
src_name = ctf_strptr(src_fp, src_mp->ctm_name);
|
||||
dst_name = ctf_strptr(dst_fp, dst_mp->ctm_name);
|
||||
if (strcmp(src_name, dst_name) != 0)
|
||||
return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
|
||||
}
|
||||
} else {
|
||||
const ctf_lmember_t *src_mp, *dst_mp;
|
||||
|
||||
src_mp = (const ctf_lmember_t *)((uintptr_t)src_tp + src_inc);
|
||||
dst_mp = (const ctf_lmember_t *)((uintptr_t)dst_tp + dst_inc);
|
||||
for (; n != 0; n--, src_mp++, dst_mp++) {
|
||||
if (src_mp->ctlm_offsethi != dst_mp->ctlm_offsethi ||
|
||||
src_mp->ctlm_offsetlo != dst_mp->ctlm_offsetlo)
|
||||
return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
|
||||
src_name = ctf_strptr(src_fp, src_mp->ctlm_name);
|
||||
dst_name = ctf_strptr(dst_fp, dst_mp->ctlm_name);
|
||||
if (strcmp(src_name, dst_name) != 0)
|
||||
return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
|
||||
}
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* The ctf_add_type routine is used to copy a type from a source CTF container
|
||||
* to a dynamic destination container. This routine operates recursively by
|
||||
@@ -1258,7 +1312,7 @@ ctf_add_type(ctf_file_t *dst_fp, ctf_file_t *src_fp, ctf_id_t src_type)
|
||||
uint_t kind, flag, vlen;
|
||||
|
||||
ctf_bundle_t src, dst;
|
||||
ctf_encoding_t src_en, dst_en;
|
||||
ctf_encoding_t src_en, main_en, dst_en;
|
||||
ctf_arinfo_t src_ar, dst_ar;
|
||||
|
||||
ctf_dtdef_t *dtd;
|
||||
@@ -1373,6 +1427,27 @@ ctf_add_type(ctf_file_t *dst_fp, ctf_file_t *src_fp, ctf_id_t src_type)
|
||||
if (ctf_type_encoding(src_fp, src_type, &src_en) != 0)
|
||||
return (ctf_set_errno(dst_fp, ctf_errno(src_fp)));
|
||||
|
||||
/*
|
||||
* This could be a bitfield, and the CTF library assumes
|
||||
* intrinsics will appear before bitfields. Therefore,
|
||||
* try to copy over the intrinsic prior to copying the
|
||||
* bitfield.
|
||||
*/
|
||||
if (dst_type == CTF_ERR && name[0] != '\0' &&
|
||||
(hep = ctf_hash_lookup(&src_fp->ctf_names, src_fp, name,
|
||||
strlen(name))) != NULL &&
|
||||
src_type != (ctf_id_t)hep->h_type) {
|
||||
if (ctf_type_encoding(src_fp, (ctf_id_t)hep->h_type,
|
||||
&main_en) != 0) {
|
||||
return (ctf_set_errno(dst_fp,
|
||||
ctf_errno(src_fp)));
|
||||
}
|
||||
if (bcmp(&src_en, &main_en, sizeof (ctf_encoding_t)) &&
|
||||
ctf_add_type(dst_fp, src_fp,
|
||||
(ctf_id_t)hep->h_type) == CTF_ERR)
|
||||
return (CTF_ERR); /* errno is set for us */
|
||||
}
|
||||
|
||||
if (dst_type != CTF_ERR) {
|
||||
if (ctf_type_encoding(dst_fp, dst_type, &dst_en) != 0)
|
||||
return (CTF_ERR); /* errno is set for us */
|
||||
@@ -1439,23 +1514,15 @@ ctf_add_type(ctf_file_t *dst_fp, ctf_file_t *src_fp, ctf_id_t src_type)
|
||||
ctf_dmdef_t *dmd;
|
||||
int errs = 0;
|
||||
|
||||
/*
|
||||
* Technically to match a struct or union we need to check both
|
||||
* ways (src members vs. dst, dst members vs. src) but we make
|
||||
* this more optimal by only checking src vs. dst and comparing
|
||||
* the total size of the structure (which we must do anyway)
|
||||
* which covers the possibility of dst members not in src.
|
||||
* This optimization can be defeated for unions, but is so
|
||||
* pathological as to render it irrelevant for our purposes.
|
||||
*/
|
||||
if (dst_type != CTF_ERR && dst_kind != CTF_K_FORWARD) {
|
||||
if (ctf_type_size(src_fp, src_type) !=
|
||||
ctf_type_size(dst_fp, dst_type))
|
||||
return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
|
||||
|
||||
if (ctf_member_iter(src_fp, src_type, membcmp, &dst))
|
||||
return (ctf_set_errno(dst_fp, ECTF_CONFLICT));
|
||||
|
||||
/*
|
||||
* Compare the sizes and fields of the two types.
|
||||
* The field comparisons only check the names and
|
||||
* offsets, so this is not perfect but is good enough
|
||||
* for scenarios that we care about.
|
||||
*/
|
||||
if (soucmp(src_fp, src_type, dst_fp, dst_type) != 0)
|
||||
return (CTF_ERR); /* errno is set for us */
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -173,6 +173,7 @@ struct fixup_entry {
|
||||
struct fixup_entry *next;
|
||||
struct archive_acl acl;
|
||||
mode_t mode;
|
||||
__LA_MODE_T filetype;
|
||||
int64_t atime;
|
||||
int64_t birthtime;
|
||||
int64_t mtime;
|
||||
@@ -357,6 +358,7 @@ struct archive_write_disk {
|
||||
|
||||
static int la_opendirat(int, const char *);
|
||||
static int la_mktemp(struct archive_write_disk *);
|
||||
static int la_verify_filetype(mode_t, __LA_MODE_T);
|
||||
static void fsobj_error(int *, struct archive_string *, int, const char *,
|
||||
const char *);
|
||||
static int check_symlinks_fsobj(char *, int *, struct archive_string *,
|
||||
@@ -464,6 +466,39 @@ la_opendirat(int fd, const char *path) {
|
||||
#endif
|
||||
}
|
||||
|
||||
static int
|
||||
la_verify_filetype(mode_t mode, __LA_MODE_T filetype) {
|
||||
int ret = 0;
|
||||
|
||||
switch (filetype) {
|
||||
case AE_IFREG:
|
||||
ret = (S_ISREG(mode));
|
||||
break;
|
||||
case AE_IFDIR:
|
||||
ret = (S_ISDIR(mode));
|
||||
break;
|
||||
case AE_IFLNK:
|
||||
ret = (S_ISLNK(mode));
|
||||
break;
|
||||
case AE_IFSOCK:
|
||||
ret = (S_ISSOCK(mode));
|
||||
break;
|
||||
case AE_IFCHR:
|
||||
ret = (S_ISCHR(mode));
|
||||
break;
|
||||
case AE_IFBLK:
|
||||
ret = (S_ISBLK(mode));
|
||||
break;
|
||||
case AE_IFIFO:
|
||||
ret = (S_ISFIFO(mode));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
static int
|
||||
lazy_stat(struct archive_write_disk *a)
|
||||
{
|
||||
@@ -822,6 +857,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
|
||||
fe = current_fixup(a, archive_entry_pathname(entry));
|
||||
if (fe == NULL)
|
||||
return (ARCHIVE_FATAL);
|
||||
fe->filetype = archive_entry_filetype(entry);
|
||||
fe->fixup |= TODO_MODE_BASE;
|
||||
fe->mode = a->mode;
|
||||
}
|
||||
@@ -832,6 +868,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
|
||||
fe = current_fixup(a, archive_entry_pathname(entry));
|
||||
if (fe == NULL)
|
||||
return (ARCHIVE_FATAL);
|
||||
fe->filetype = archive_entry_filetype(entry);
|
||||
fe->mode = a->mode;
|
||||
fe->fixup |= TODO_TIMES;
|
||||
if (archive_entry_atime_is_set(entry)) {
|
||||
@@ -865,6 +902,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
|
||||
fe = current_fixup(a, archive_entry_pathname(entry));
|
||||
if (fe == NULL)
|
||||
return (ARCHIVE_FATAL);
|
||||
fe->filetype = archive_entry_filetype(entry);
|
||||
fe->fixup |= TODO_ACLS;
|
||||
archive_acl_copy(&fe->acl, archive_entry_acl(entry));
|
||||
}
|
||||
@@ -877,6 +915,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
|
||||
fe = current_fixup(a, archive_entry_pathname(entry));
|
||||
if (fe == NULL)
|
||||
return (ARCHIVE_FATAL);
|
||||
fe->filetype = archive_entry_filetype(entry);
|
||||
fe->mac_metadata = malloc(metadata_size);
|
||||
if (fe->mac_metadata != NULL) {
|
||||
memcpy(fe->mac_metadata, metadata,
|
||||
@@ -891,6 +930,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
|
||||
fe = current_fixup(a, archive_entry_pathname(entry));
|
||||
if (fe == NULL)
|
||||
return (ARCHIVE_FATAL);
|
||||
fe->filetype = archive_entry_filetype(entry);
|
||||
fe->fixup |= TODO_FFLAGS;
|
||||
/* TODO: Complete this.. defer fflags from below. */
|
||||
}
|
||||
@@ -2463,7 +2503,7 @@ _archive_write_disk_close(struct archive *_a)
|
||||
struct fixup_entry *next, *p;
|
||||
struct stat st;
|
||||
char *c;
|
||||
int fd, ret;
|
||||
int fd, ret, openflags;
|
||||
|
||||
archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC,
|
||||
ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
|
||||
@@ -2490,32 +2530,53 @@ _archive_write_disk_close(struct archive *_a)
|
||||
if (p->fixup == 0)
|
||||
goto skip_fixup_entry;
|
||||
else {
|
||||
fd = open(p->name, O_BINARY | O_NOFOLLOW | O_RDONLY
|
||||
#if defined(O_DIRECTORY)
|
||||
| O_DIRECTORY
|
||||
#endif
|
||||
| O_CLOEXEC);
|
||||
/*
|
||||
` * If we don't support O_DIRECTORY,
|
||||
* or open() has failed, we must stat()
|
||||
* to verify that we are opening a directory
|
||||
* We need to verify if the type of the file
|
||||
* we are going to open matches the file type
|
||||
* of the fixup entry.
|
||||
*/
|
||||
openflags = O_BINARY | O_NOFOLLOW | O_RDONLY
|
||||
| O_CLOEXEC;
|
||||
#if defined(O_DIRECTORY)
|
||||
if (fd == -1) {
|
||||
if (p->filetype == AE_IFDIR)
|
||||
openflags |= O_DIRECTORY;
|
||||
#endif
|
||||
fd = open(p->name, openflags);
|
||||
|
||||
#if defined(O_DIRECTORY)
|
||||
/*
|
||||
* If we support O_DIRECTORY and open was
|
||||
* successful we can skip the file type check
|
||||
* for directories. For other file types
|
||||
* we need to verify via fstat() or lstat()
|
||||
*/
|
||||
if (fd == -1 || p->filetype != AE_IFDIR) {
|
||||
#if HAVE_FSTAT
|
||||
if (fd > 0 && (
|
||||
fstat(fd, &st) != 0 ||
|
||||
la_verify_filetype(st.st_mode,
|
||||
p->filetype) == 0)) {
|
||||
goto skip_fixup_entry;
|
||||
} else
|
||||
#endif
|
||||
if (lstat(p->name, &st) != 0 ||
|
||||
!S_ISDIR(st.st_mode)) {
|
||||
la_verify_filetype(st.st_mode,
|
||||
p->filetype) == 0) {
|
||||
goto skip_fixup_entry;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#if HAVE_FSTAT
|
||||
if (fd > 0 && (
|
||||
fstat(fd, &st) != 0 || !S_ISDIR(st.st_mode))) {
|
||||
fstat(fd, &st) != 0 ||
|
||||
la_verify_filetype(st.st_mode,
|
||||
p->filetype) == 0)) {
|
||||
goto skip_fixup_entry;
|
||||
} else
|
||||
#endif
|
||||
if (lstat(p->name, &st) != 0 ||
|
||||
!S_ISDIR(st.st_mode)) {
|
||||
la_verify_filetype(st.st_mode,
|
||||
p->filetype) == 0) {
|
||||
goto skip_fixup_entry;
|
||||
}
|
||||
#endif
|
||||
@@ -2689,6 +2750,7 @@ new_fixup(struct archive_write_disk *a, const char *pathname)
|
||||
fe->next = a->fixup_list;
|
||||
a->fixup_list = fe;
|
||||
fe->fixup = 0;
|
||||
fe->filetype = 0;
|
||||
fe->name = strdup(pathname);
|
||||
return (fe);
|
||||
}
|
||||
@@ -3811,6 +3873,7 @@ set_fflags(struct archive_write_disk *a)
|
||||
le = current_fixup(a, a->name);
|
||||
if (le == NULL)
|
||||
return (ARCHIVE_FATAL);
|
||||
le->filetype = archive_entry_filetype(a->entry);
|
||||
le->fixup |= TODO_FFLAGS;
|
||||
le->fflags_set = set;
|
||||
/* Store the mode if it's not already there. */
|
||||
|
||||
+39
-34
@@ -1,50 +1,58 @@
|
||||
Contributing to the tz code and data
|
||||
# Contributing to the tz code and data
|
||||
|
||||
Please do not create issues or pull requests on GitHub, as the
|
||||
proper procedure for proposing and distributing patches is via
|
||||
email as described below.
|
||||
|
||||
The time zone database is by no means authoritative: governments
|
||||
change timekeeping rules erratically and sometimes with little
|
||||
warning, the data entries do not cover all of civil time before
|
||||
1970, and undoubtedly errors remain in the code and data. Feel
|
||||
free to fill gaps or fix mistakes, and please email improvements
|
||||
to [email protected] for use in the future. In your email, please give
|
||||
to <[email protected]> for use in the future. In your email, please give
|
||||
reliable sources that reviewers can check.
|
||||
|
||||
-----
|
||||
|
||||
Developers can contribute technical changes to the source code and
|
||||
data as follows.
|
||||
## Contributing technical changes
|
||||
|
||||
To email small changes, please run a POSIX shell command like
|
||||
'diff -u old/europe new/europe >myfix.patch', and attach
|
||||
myfix.patch to the email.
|
||||
'myfix.patch' to the email.
|
||||
|
||||
For more-elaborate or possibly-controversial changes,
|
||||
such as renaming, adding or removing zones, please read
|
||||
<https://www.iana.org/time-zones/repository/theory.html> or the file
|
||||
theory.html. It is also good to browse the mailing list archives
|
||||
"Theory and pragmatics of the tz code and data"
|
||||
<https://www.iana.org/time-zones/repository/theory.html>.
|
||||
It is also good to browse the mailing list archives
|
||||
<https://mm.icann.org/pipermail/tz/> for examples of patches that tend
|
||||
to work well. Additions to data should contain commentary citing
|
||||
reliable sources as justification. Citations should use https: URLs
|
||||
reliable sources as justification. Citations should use "https:" URLs
|
||||
if available.
|
||||
|
||||
Please submit changes against either the latest release in
|
||||
<https://www.iana.org/time-zones> or the master branch of the development
|
||||
repository. The latter is preferred. If you use Git the following
|
||||
workflow may be helpful:
|
||||
For changes that fix sensitive security-related bugs, please see the
|
||||
distribution's 'SECURITY' file.
|
||||
|
||||
Please submit changes against either the latest release
|
||||
<https://www.iana.org/time-zones> or the main branch of the development
|
||||
repository. The latter is preferred.
|
||||
|
||||
## Sample Git workflow for developing contributions
|
||||
|
||||
If you use Git the following workflow may be helpful:
|
||||
|
||||
* Copy the development repository.
|
||||
|
||||
git clone https://github.com/eggert/tz.git
|
||||
cd tz
|
||||
git clone https://github.com/eggert/tz.git
|
||||
cd tz
|
||||
|
||||
* Get current with the master branch.
|
||||
* Get current with the main branch.
|
||||
|
||||
git checkout master
|
||||
git pull
|
||||
git checkout main
|
||||
git pull
|
||||
|
||||
* Switch to a new branch for the changes. Choose a different
|
||||
branch name for each change set.
|
||||
|
||||
git checkout -b mybranch
|
||||
git checkout -b mybranch
|
||||
|
||||
* Sleuth by using 'git blame'. For example, when fixing data for
|
||||
Africa/Sao_Tome, if the command 'git blame africa' outputs a line
|
||||
@@ -57,36 +65,33 @@ workflow may be helpful:
|
||||
|
||||
* Debug the changes, e.g.:
|
||||
|
||||
make check
|
||||
make install
|
||||
./zdump -v America/Los_Angeles
|
||||
make check
|
||||
make install
|
||||
./zdump -v America/Los_Angeles
|
||||
|
||||
* For each separable change, commit it in the new branch, e.g.:
|
||||
|
||||
git add northamerica
|
||||
git commit
|
||||
git add northamerica
|
||||
git commit
|
||||
|
||||
See recent 'git log' output for the commit-message style.
|
||||
|
||||
* Create patch files 0001-*, 0002-*, ...
|
||||
* Create patch files 0001-..., 0002-..., ...
|
||||
|
||||
git format-patch master
|
||||
git format-patch main
|
||||
|
||||
* After reviewing the patch files, send the patches to [email protected]
|
||||
* After reviewing the patch files, send the patches to <[email protected]>
|
||||
for others to review.
|
||||
|
||||
git send-email master
|
||||
git send-email main
|
||||
|
||||
For an archived example of such an email, see
|
||||
"[PROPOSED] Fix off-by-1 error for Jamaica and T&C before 1913"
|
||||
<https://mm.icann.org/pipermail/tz/2018-February/026122.html>.
|
||||
|
||||
* Start anew by getting current with the master branch again
|
||||
* Start anew by getting current with the main branch again
|
||||
(the second step above).
|
||||
|
||||
Please do not create issues or pull requests on GitHub, as the
|
||||
proper procedure for proposing and distributing patches is via
|
||||
email as illustrated above.
|
||||
|
||||
-----
|
||||
|
||||
This file is in the public domain.
|
||||
+214
-94
@@ -33,7 +33,7 @@ DATAFORM= main
|
||||
# make zonenames
|
||||
# to get a list of the values you can use for LOCALTIME.
|
||||
|
||||
LOCALTIME= GMT
|
||||
LOCALTIME= Factory
|
||||
|
||||
# The POSIXRULES macro controls interpretation of nonstandard and obsolete
|
||||
# POSIX-like TZ settings like TZ='EET-2EEST' that lack DST transition rules.
|
||||
@@ -45,9 +45,9 @@ LOCALTIME= GMT
|
||||
#
|
||||
# Any other value for POSIXRULES is obsolete and should not be relied on, as:
|
||||
# * It does not work correctly in popular implementations such as GNU/Linux.
|
||||
# * It does not work in the tzdb implementation for timestamps after 2037.
|
||||
# * It is incompatible with 'zic -b slim' if POSIXRULES specifies transitions
|
||||
# at standard time or UT rather than at local time.
|
||||
# * It does not work even in tzcode, except for historical timestamps
|
||||
# that precede the last explicit transition in the POSIXRULES file.
|
||||
# Hence it typically does not work for current and future timestamps.
|
||||
# In short, software should avoid ruleless settings like TZ='EET-2EEST'
|
||||
# and so should not depend on the value of POSIXRULES.
|
||||
#
|
||||
@@ -122,8 +122,8 @@ LIBDIR = $(TOPDIR)/$(USRDIR)/lib
|
||||
|
||||
# Types to try, as an alternative to time_t.
|
||||
TIME_T_ALTERNATIVES = $(TIME_T_ALTERNATIVES_HEAD) $(TIME_T_ALTERNATIVES_TAIL)
|
||||
TIME_T_ALTERNATIVES_HEAD = int64_t
|
||||
TIME_T_ALTERNATIVES_TAIL = int32_t uint32_t uint64_t
|
||||
TIME_T_ALTERNATIVES_HEAD = int_least64_t
|
||||
TIME_T_ALTERNATIVES_TAIL = int_least32_t uint_least32_t uint_least64_t
|
||||
|
||||
# What kind of TZif data files to generate. (TZif is the binary time
|
||||
# zone data format that zic generates; see Internet RFC 8536.)
|
||||
@@ -152,8 +152,10 @@ REDO= posix_right
|
||||
# The EXPIRES_LINE value matters only if REDO's value contains "right".
|
||||
# If you change EXPIRES_LINE, remove the leapseconds file before running "make".
|
||||
# zic's support for the Expires line was introduced in tzdb 2020a,
|
||||
# and EXPIRES_LINE defaults to 0 for now so that the leapseconds file
|
||||
# can be given to older zic implementations.
|
||||
# and was modified in tzdb 2021b to generate version 4 TZif files.
|
||||
# EXPIRES_LINE defaults to 0 for now so that the leapseconds file
|
||||
# can be given to pre-2020a zic implementations and so that TZif files
|
||||
# built by newer zic implementations can be read by pre-2021b libraries.
|
||||
EXPIRES_LINE= 0
|
||||
|
||||
# To install data in text form that has all the information of the TZif data,
|
||||
@@ -174,12 +176,19 @@ TZDATA_TEXT= leapseconds tzdata.zi
|
||||
|
||||
BACKWARD= backward
|
||||
|
||||
# If you want out-of-scope and often-wrong data from the file 'backzone', use
|
||||
# If you want out-of-scope and often-wrong data from the file 'backzone',
|
||||
# but only for entries listed in the backward-compatibility file zone.tab, use
|
||||
# PACKRATDATA= backzone
|
||||
# PACKRATLIST= zone.tab
|
||||
# If you want all the 'backzone' data, use
|
||||
# PACKRATDATA= backzone
|
||||
# PACKRATLIST=
|
||||
# To omit this data, use
|
||||
# PACKRATDATA=
|
||||
# PACKRATLIST=
|
||||
|
||||
PACKRATDATA=
|
||||
PACKRATLIST=
|
||||
|
||||
# The name of a locale using the UTF-8 encoding, used during self-tests.
|
||||
# The tests are skipped if the name does not appear to work on this system.
|
||||
@@ -187,6 +196,7 @@ PACKRATDATA=
|
||||
UTF8_LOCALE= en_US.utf8
|
||||
|
||||
# Non-default libraries needed to link.
|
||||
# On some hosts, this should have -lintl unless CFLAGS has -DHAVE_GETTEXT=0.
|
||||
LDLIBS=
|
||||
|
||||
# Add the following to the end of the "CFLAGS=" line as needed to override
|
||||
@@ -199,30 +209,38 @@ LDLIBS=
|
||||
# For example, N is 252460800 on AmigaOS.
|
||||
# -DHAVE_DECL_ASCTIME_R=0 if <time.h> does not declare asctime_r
|
||||
# -DHAVE_DECL_ENVIRON if <unistd.h> declares 'environ'
|
||||
# -DHAVE_DECL_TIMEGM=0 if <time.h> does not declare timegm
|
||||
# -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_GENERIC=0 if _Generic does not work*
|
||||
# -DHAVE_GETRANDOM if getrandom works (e.g., GNU/Linux),
|
||||
# -DHAVE_GETRANDOM=0 to avoid using getrandom
|
||||
# -DHAVE_GETTEXT if gettext works (e.g., GNU/Linux, FreeBSD, Solaris),
|
||||
# where LDLIBS also needs to contain -lintl on some hosts;
|
||||
# -DHAVE_GETTEXT=0 to avoid using gettext
|
||||
# -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).
|
||||
# -DHAVE_INTTYPES_H if you have a non-C99 compiler with <inttypes.h>
|
||||
# -DHAVE_INTTYPES_H=0 if <inttypes.h> does not work*
|
||||
# -DHAVE_LINK=0 if your system lacks a link function
|
||||
# -DHAVE_LOCALTIME_R=0 if your system lacks a localtime_r function
|
||||
# -DHAVE_LOCALTIME_RZ=0 if you do not want zdump to use localtime_rz
|
||||
# localtime_rz can make zdump significantly faster, but is nonstandard.
|
||||
# -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_STDCKDINT_H=0 if neither <stdckdint.h> nor substitutes like
|
||||
# __builtin_add_overflow work*
|
||||
# -DHAVE_STDINT_H=0 if <stdint.h> does not work*
|
||||
# -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_WAIT_H=0 if your compiler lacks a <sys/wait.h>
|
||||
# -DHAVE_SYS_STAT_H=0 if <sys/stat.h> does not work*
|
||||
# -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 <unistd.h> does not work*
|
||||
# -DHAVE_UTMPX_H=0 if <utmpx.h> does not work*
|
||||
# -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'.
|
||||
@@ -245,37 +263,44 @@ 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 \
|
||||
-fsanitize-undefined-trap-on-error -fstack-protector
|
||||
# Omit -fanalyzer from GCC_DEBUG_FLAGS, as it makes GCC too slow.
|
||||
GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
|
||||
$(GCC_INSTRUMENT) \
|
||||
-Wall -Wextra \
|
||||
-Walloc-size-larger-than=100000 -Warray-bounds=2 \
|
||||
-Wbad-function-cast -Wcast-align=strict -Wdate-time \
|
||||
-Wbad-function-cast -Wbidi-chars=any,ucn -Wcast-align=strict -Wdate-time \
|
||||
-Wdeclaration-after-statement -Wdouble-promotion \
|
||||
-Wduplicated-branches -Wduplicated-cond \
|
||||
-Wformat=2 -Wformat-overflow=2 -Wformat-signedness -Wformat-truncation \
|
||||
-Winit-self -Wjump-misses-init -Wlogical-op \
|
||||
-Wimplicit-fallthrough=5 -Winit-self -Wlogical-op \
|
||||
-Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
|
||||
-Wnull-dereference \
|
||||
-Wold-style-definition -Woverlength-strings -Wpointer-arith \
|
||||
-Wshadow -Wshift-overflow=2 -Wstrict-prototypes -Wstringop-overflow=4 \
|
||||
-Wshadow -Wshift-overflow=2 -Wstrict-overflow \
|
||||
-Wstrict-prototypes -Wstringop-overflow=4 \
|
||||
-Wstringop-truncation -Wsuggest-attribute=cold \
|
||||
-Wsuggest-attribute=const -Wsuggest-attribute=format \
|
||||
-Wsuggest-attribute=malloc \
|
||||
-Wsuggest-attribute=noreturn -Wsuggest-attribute=pure \
|
||||
-Wtrampolines -Wundef -Wuninitialized -Wunused \
|
||||
-Wtrampolines -Wundef -Wuninitialized -Wunused-macros -Wuse-after-free=3 \
|
||||
-Wvariadic-macros -Wvla -Wwrite-strings \
|
||||
-Wno-address -Wno-format-nonliteral -Wno-sign-compare \
|
||||
-Wno-type-limits -Wno-unused-parameter
|
||||
-Wno-type-limits
|
||||
#
|
||||
# If your system has a "GMT offset" field in its "struct tm"s
|
||||
# (or if you decide to add such a field in your system's "time.h" file),
|
||||
@@ -285,8 +310,9 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
|
||||
# guess TM_GMTOFF from other macros; define NO_TM_GMTOFF to suppress this.
|
||||
# Similarly, if your system has a "zone abbreviation" field, define
|
||||
# -DTM_ZONE=tm_zone
|
||||
# and define NO_TM_ZONE to suppress any guessing. These two fields are not
|
||||
# required by POSIX, but are widely available on GNU/Linux and BSD systems.
|
||||
# and define NO_TM_ZONE to suppress any guessing. Although these two fields
|
||||
# not required by POSIX, a future version of POSIX is planned to require them
|
||||
# and they are widely available on GNU/Linux and BSD systems.
|
||||
#
|
||||
# The next batch of options control support for external variables
|
||||
# exported by tzcode. In practice these variables are less useful
|
||||
@@ -321,14 +347,11 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
|
||||
# If you want functions that were inspired by early versions of X3J11's work,
|
||||
# add
|
||||
# -DSTD_INSPIRED
|
||||
# to the end of the "CFLAGS=" line. This arranges for the functions
|
||||
# "offtime", "timelocal", "timegm", "timeoff",
|
||||
# "posix2time", and "time2posix" to be added to the time conversion library.
|
||||
# to the end of the "CFLAGS=" line. This arranges for the following
|
||||
# functions to be added to the time conversion library.
|
||||
# "offtime" is like "gmtime" except that it accepts a second (long) argument
|
||||
# that gives an offset to add to the time_t when converting it.
|
||||
# "timelocal" is equivalent to "mktime".
|
||||
# "timegm" is like "timelocal" except that it turns a struct tm into
|
||||
# a time_t using UT (rather than local time as "timelocal" does).
|
||||
# "timeoff" is like "timegm" except that it accepts a second (long) argument
|
||||
# that gives an offset to use when converting to a time_t.
|
||||
# "posix2time" and "time2posix" are described in an included manual page.
|
||||
@@ -383,8 +406,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=
|
||||
|
||||
@@ -393,9 +417,10 @@ ZFLAGS=
|
||||
ZIC_INSTALL= $(ZIC) -d '$(DESTDIR)$(TZDIR)' $(LEAPSECONDS)
|
||||
|
||||
# The name of a Posix-compliant 'awk' on your system.
|
||||
# Older 'mawk' versions, such as the 'mawk' in Ubuntu 16.04, might dump core;
|
||||
# on Ubuntu you can work around this with
|
||||
# AWK= gawk
|
||||
# mawk 1.3.3 and Solaris 10 /usr/bin/awk do not work.
|
||||
# Also, it is better (though not essential) if 'awk' supports UTF-8,
|
||||
# and unfortunately mawk and busybox awk do not support UTF-8.
|
||||
# Try AWK=gawk or AWK=nawk if your awk has the abovementioned problems.
|
||||
AWK= awk
|
||||
|
||||
# The full path name of a Posix-compliant shell, preferably one that supports
|
||||
@@ -441,6 +466,9 @@ UNUSUAL_OK_IPA = u̯
|
||||
# useful in commentary.
|
||||
UNUSUAL_OK_CHARSET= $(UNUSUAL_OK_LATIN_1)$(UNUSUAL_OK_IPA)
|
||||
|
||||
# Put this in a bracket expression to match spaces.
|
||||
s = [:space:]
|
||||
|
||||
# OK_CHAR matches any character allowed in the distributed files.
|
||||
# This is the same as SAFE_CHAR, except that UNUSUAL_OK_CHARSET and
|
||||
# multibyte letters are also allowed so that commentary can contain a
|
||||
@@ -460,7 +488,9 @@ OK_LINE= '^'$(OK_CHAR)'*$$'
|
||||
|
||||
# Flags to give 'tar' when making a distribution.
|
||||
# Try to use flags appropriate for GNU tar.
|
||||
GNUTARFLAGS= --numeric-owner --owner=0 --group=0 --mode=go+u,go-w --sort=name
|
||||
GNUTARFLAGS= --format=pax --pax-option='delete=atime,delete=ctime' \
|
||||
--numeric-owner --owner=0 --group=0 \
|
||||
--mode=go+u,go-w --sort=name
|
||||
TARFLAGS= `if tar $(GNUTARFLAGS) --version >/dev/null 2>&1; \
|
||||
then echo $(GNUTARFLAGS); \
|
||||
else :; \
|
||||
@@ -469,6 +499,11 @@ TARFLAGS= `if tar $(GNUTARFLAGS) --version >/dev/null 2>&1; \
|
||||
# Flags to give 'gzip' when making a distribution.
|
||||
GZIPFLAGS= -9n
|
||||
|
||||
# When comparing .tzs files, use GNU diff's -F'^TZ=' option if supported.
|
||||
# This makes it easier to see which Zone has been affected.
|
||||
DIFF_TZS= diff -u$$(! diff -u -F'^TZ=' - - <>/dev/null >&0 2>&1 \
|
||||
|| echo ' -F^TZ=')
|
||||
|
||||
###############################################################################
|
||||
|
||||
#MAKE= make
|
||||
@@ -498,7 +533,7 @@ MANTXTS= newctime.3.txt newstrftime.3.txt newtzset.3.txt \
|
||||
tzfile.5.txt tzselect.8.txt zic.8.txt zdump.8.txt \
|
||||
date.1.txt
|
||||
COMMON= calendars CONTRIBUTING LICENSE Makefile \
|
||||
NEWS README theory.html version
|
||||
NEWS README SECURITY theory.html version
|
||||
WEB_PAGES= tz-art.html tz-how-to.html tz-link.html
|
||||
CHECK_WEB_PAGES=check_theory.html check_tz-art.html \
|
||||
check_tz-how-to.html check_tz-link.html
|
||||
@@ -512,28 +547,30 @@ TDATA= $(YDATA) $(NDATA) $(BACKWARD)
|
||||
ZONETABLES= zone1970.tab zone.tab
|
||||
TABDATA= iso3166.tab $(TZDATA_TEXT) $(ZONETABLES)
|
||||
LEAP_DEPS= leapseconds.awk leap-seconds.list
|
||||
TZDATA_ZI_DEPS= ziguard.awk zishrink.awk version $(TDATA) $(PACKRATDATA)
|
||||
DSTDATA_ZI_DEPS= ziguard.awk $(TDATA) $(PACKRATDATA)
|
||||
TZDATA_ZI_DEPS= ziguard.awk zishrink.awk version $(TDATA) \
|
||||
$(PACKRATDATA) $(PACKRATLIST)
|
||||
DSTDATA_ZI_DEPS= ziguard.awk $(TDATA) $(PACKRATDATA) $(PACKRATLIST)
|
||||
DATA= $(TDATA_TO_CHECK) backzone iso3166.tab leap-seconds.list \
|
||||
leapseconds $(ZONETABLES)
|
||||
AWK_SCRIPTS= checklinks.awk checktab.awk leapseconds.awk \
|
||||
ziguard.awk zishrink.awk
|
||||
MISC= $(AWK_SCRIPTS) zoneinfo2tdf.pl
|
||||
MISC= $(AWK_SCRIPTS)
|
||||
TZS_YEAR= 2050
|
||||
TZS_CUTOFF_FLAG= -c $(TZS_YEAR)
|
||||
TZS= to$(TZS_YEAR).tzs
|
||||
TZS_NEW= to$(TZS_YEAR)new.tzs
|
||||
TZS_DEPS= $(PRIMARY_YDATA) asctime.c localtime.c \
|
||||
TZS_DEPS= $(YDATA) asctime.c localtime.c \
|
||||
private.h tzfile.h zdump.c zic.c
|
||||
TZDATA_DIST = $(COMMON) $(DATA) $(MISC)
|
||||
# EIGHT_YARDS is just a yard short of the whole ENCHILADA.
|
||||
EIGHT_YARDS = $(COMMON) $(DOCS) $(SOURCES) $(DATA) $(MISC) tzdata.zi
|
||||
EIGHT_YARDS = $(TZDATA_DIST) $(DOCS) $(SOURCES) tzdata.zi
|
||||
ENCHILADA = $(EIGHT_YARDS) $(TZS)
|
||||
|
||||
# Consult these files when deciding whether to rebuild the 'version' file.
|
||||
# This list is not the same as the output of 'git ls-files', since
|
||||
# .gitignore is not distributed.
|
||||
VERSION_DEPS= \
|
||||
calendars CONTRIBUTING LICENSE Makefile NEWS README \
|
||||
calendars CONTRIBUTING LICENSE Makefile NEWS README SECURITY \
|
||||
africa antarctica asctime.c asia australasia \
|
||||
backward backzone \
|
||||
checklinks.awk checktab.awk \
|
||||
@@ -546,7 +583,7 @@ VERSION_DEPS= \
|
||||
tzfile.5 tzfile.h tzselect.8 tzselect.ksh \
|
||||
workman.sh zdump.8 zdump.c zic.8 zic.c \
|
||||
ziguard.awk zishrink.awk \
|
||||
zone.tab zone1970.tab zoneinfo2tdf.pl
|
||||
zone.tab zone1970.tab
|
||||
|
||||
# And for the benefit of csh users on systems that assume the user
|
||||
# shell should be used to handle commands in Makefiles. . .
|
||||
@@ -599,13 +636,17 @@ version: $(VERSION_DEPS)
|
||||
printf '%s\n' "$$V" >$@.out
|
||||
mv $@.out $@
|
||||
|
||||
# These files can be tailored by setting BACKWARD and PACKRATDATA.
|
||||
# These files can be tailored by setting BACKWARD, PACKRATDATA, PACKRATLIST.
|
||||
vanguard.zi main.zi rearguard.zi: $(DSTDATA_ZI_DEPS)
|
||||
$(AWK) -v DATAFORM=`expr $@ : '\(.*\).zi'` -f ziguard.awk \
|
||||
$(AWK) \
|
||||
-v DATAFORM=`expr $@ : '\(.*\).zi'` \
|
||||
-v PACKRATDATA='$(PACKRATDATA)' \
|
||||
-v PACKRATLIST='$(PACKRATLIST)' \
|
||||
-f ziguard.awk \
|
||||
$(TDATA) $(PACKRATDATA) >$@.out
|
||||
mv $@.out $@
|
||||
# This file has a version comment that attempts to capture any tailoring
|
||||
# via BACKWARD, DATAFORM, PACKRATDATA, and REDO.
|
||||
# via BACKWARD, DATAFORM, PACKRATDATA, PACKRATLIST, and REDO.
|
||||
tzdata.zi: $(DATAFORM).zi version zishrink.awk
|
||||
version=`sed 1q version` && \
|
||||
LC_ALL=C $(AWK) \
|
||||
@@ -643,6 +684,7 @@ INSTALLARGS = \
|
||||
DESTDIR='$(DESTDIR)' \
|
||||
LEAPSECONDS='$(LEAPSECONDS)' \
|
||||
PACKRATDATA='$(PACKRATDATA)' \
|
||||
PACKRATLIST='$(PACKRATLIST)' \
|
||||
TZDEFAULT='$(TZDEFAULT)' \
|
||||
TZDIR='$(TZDIR)' \
|
||||
ZIC='$(ZIC)'
|
||||
@@ -681,11 +723,6 @@ posix_right: posix_only
|
||||
$(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-posix' posix_only
|
||||
$(MAKE) $(INSTALLARGS) TZDIR='$(TZDIR)-leaps' right_only
|
||||
|
||||
# This obsolescent rule is present for backwards compatibility with
|
||||
# tz releases 2014g through 2015g. It should go away eventually.
|
||||
posix_packrat: $(INSTALL_DATA_DEPS)
|
||||
$(MAKE) $(INSTALLARGS) PACKRATDATA=backzone posix_only
|
||||
|
||||
zones: $(REDO)
|
||||
|
||||
# dummy.zd is not a real file; it is mentioned here only so that the
|
||||
@@ -736,7 +773,7 @@ date: $(DATEOBJS)
|
||||
tzselect: tzselect.ksh version
|
||||
VERSION=`cat version` && sed \
|
||||
-e 's|#!/bin/bash|#!$(KSHELL)|g' \
|
||||
-e 's|AWK=[^}]*|AWK=$(AWK)|g' \
|
||||
-e 's|AWK=[^}]*|AWK='\''$(AWK)'\''|g' \
|
||||
-e 's|\(PKGVERSION\)=.*|\1='\''($(PACKAGE)) '\''|' \
|
||||
-e 's|\(REPORT_BUGS_TO\)=.*|\1=$(BUGEMAIL)|' \
|
||||
-e 's|TZDIR=[^}]*|TZDIR=$(TZDIR)|' \
|
||||
@@ -745,9 +782,10 @@ tzselect: tzselect.ksh version
|
||||
chmod +x $@.out
|
||||
mv $@.out $@
|
||||
|
||||
check: check_character_set check_white_space check_links \
|
||||
check_name_lengths check_sorted \
|
||||
check_tables check_web check_zishrink check_tzs
|
||||
check: check_back check_mild
|
||||
check_mild: check_character_set check_white_space check_links \
|
||||
check_name_lengths check_slashed_abbrs check_sorted \
|
||||
check_tables check_web check_ziguard check_zishrink check_tzs
|
||||
|
||||
check_character_set: $(ENCHILADA)
|
||||
test ! '$(UTF8_LOCALE)' || \
|
||||
@@ -757,7 +795,7 @@ check_character_set: $(ENCHILADA)
|
||||
sharp='#' && \
|
||||
! grep -Env $(SAFE_LINE) $(MANS) date.1 $(MANTXTS) \
|
||||
$(MISC) $(SOURCES) $(WEB_PAGES) \
|
||||
CONTRIBUTING LICENSE README \
|
||||
CONTRIBUTING LICENSE README SECURITY \
|
||||
version tzdata.zi && \
|
||||
! grep -Env $(SAFE_LINE)'|^UNUSUAL_OK_'$(OK_CHAR)'*$$' \
|
||||
Makefile && \
|
||||
@@ -771,41 +809,60 @@ check_white_space: $(ENCHILADA)
|
||||
patfmt=' \t|[\f\r\v]' && pat=`printf "$$patfmt\\n"` && \
|
||||
! grep -En "$$pat" \
|
||||
$$(ls $(ENCHILADA) | grep -Fvx leap-seconds.list)
|
||||
! grep -n '[[:space:]]$$' \
|
||||
! grep -n '[$s]$$' \
|
||||
$$(ls $(ENCHILADA) | grep -Fvx leap-seconds.list)
|
||||
touch $@
|
||||
|
||||
PRECEDES_FILE_NAME = ^(Zone|Link[[:space:]]+[^[:space:]]+)[[:space:]]+
|
||||
FILE_NAME_COMPONENT_TOO_LONG = \
|
||||
$(PRECEDES_FILE_NAME)[^[:space:]]*[^/[:space:]]{15}
|
||||
PRECEDES_FILE_NAME = ^(Zone|Link[$s]+[^$s]+)[$s]+
|
||||
FILE_NAME_COMPONENT_TOO_LONG = $(PRECEDES_FILE_NAME)[^$s]*[^/$s]{15}
|
||||
|
||||
check_name_lengths: $(TDATA_TO_CHECK) backzone
|
||||
! grep -En '$(FILE_NAME_COMPONENT_TOO_LONG)' \
|
||||
$(TDATA_TO_CHECK) backzone
|
||||
touch $@
|
||||
|
||||
PRECEDES_STDOFF = ^(Zone[$s]+[^$s]+)?[$s]+
|
||||
STDOFF = [-+]?[0-9:.]+
|
||||
RULELESS_SAVE = (-|$(STDOFF)[sd]?)
|
||||
RULELESS_SLASHED_ABBRS = \
|
||||
$(PRECEDES_STDOFF)$(STDOFF)[$s]+$(RULELESS_SAVE)[$s]+[^$s]*/
|
||||
|
||||
check_slashed_abbrs: $(TDATA_TO_CHECK)
|
||||
! grep -En '$(RULELESS_SLASHED_ABBRS)' $(TDATA_TO_CHECK)
|
||||
touch $@
|
||||
|
||||
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
|
||||
check_back: checklinks.awk $(TDATA_TO_CHECK)
|
||||
$(AWK) \
|
||||
-v DATAFORM=$(DATAFORM) \
|
||||
-v backcheck=backward \
|
||||
-f checklinks.awk $(TDATA_TO_CHECK)
|
||||
touch $@
|
||||
|
||||
check_tables: checktab.awk $(PRIMARY_YDATA) $(ZONETABLES)
|
||||
check_links: checklinks.awk tzdata.zi
|
||||
$(AWK) \
|
||||
-v DATAFORM=$(DATAFORM) \
|
||||
-f checklinks.awk tzdata.zi
|
||||
touch $@
|
||||
|
||||
check_tables: checktab.awk $(YDATA) backward $(ZONETABLES)
|
||||
for tab in $(ZONETABLES); do \
|
||||
$(AWK) -f checktab.awk -v zone_table=$$tab $(PRIMARY_YDATA) \
|
||||
test "$$tab" = zone.tab && links='$(BACKWARD)' || links=''; \
|
||||
$(AWK) -f checktab.awk -v zone_table=$$tab $(YDATA) $$links \
|
||||
|| exit; \
|
||||
done
|
||||
touch $@
|
||||
|
||||
check_tzs: $(TZS) $(TZS_NEW)
|
||||
if test -s $(TZS); then \
|
||||
diff -u $(TZS) $(TZS_NEW); \
|
||||
$(DIFF_TZS) $(TZS) $(TZS_NEW); \
|
||||
else \
|
||||
cp $(TZS_NEW) $(TZS); \
|
||||
fi
|
||||
@@ -822,11 +879,19 @@ check_theory.html check_tz-art.html check_tz-how-to.html check_tz-link.html:
|
||||
test ! -s $@.out || { cat $@.out; exit 1; }
|
||||
mv $@.out $@
|
||||
|
||||
check_ziguard: rearguard.zi vanguard.zi ziguard.awk
|
||||
$(AWK) -v DATAFORM=rearguard -f ziguard.awk vanguard.zi | \
|
||||
diff -u rearguard.zi -
|
||||
$(AWK) -v DATAFORM=vanguard -f ziguard.awk rearguard.zi | \
|
||||
diff -u vanguard.zi -
|
||||
touch $@
|
||||
|
||||
# Check that zishrink.awk does not alter the data, and that ziguard.awk
|
||||
# preserves main-format data.
|
||||
check_zishrink: check_zishrink_posix check_zishrink_right
|
||||
check_zishrink_posix check_zishrink_right: \
|
||||
zic leapseconds $(PACKRATDATA) $(TDATA) $(DATAFORM).zi tzdata.zi
|
||||
zic leapseconds $(PACKRATDATA) $(PACKRATLIST) \
|
||||
$(TDATA) $(DATAFORM).zi tzdata.zi
|
||||
rm -fr $@.dir $@-t.dir $@-shrunk.dir
|
||||
mkdir $@.dir $@-t.dir $@-shrunk.dir
|
||||
case $@ in \
|
||||
@@ -835,8 +900,8 @@ check_zishrink_posix check_zishrink_right: \
|
||||
esac && \
|
||||
$(ZIC) $$leap -d $@.dir $(DATAFORM).zi && \
|
||||
$(ZIC) $$leap -d $@-shrunk.dir tzdata.zi && \
|
||||
case $(DATAFORM) in \
|
||||
main) \
|
||||
case $(DATAFORM),$(PACKRATLIST) in \
|
||||
main,) \
|
||||
$(ZIC) $$leap -d $@-t.dir $(TDATA) && \
|
||||
$(AWK) '/^Rule/' $(TDATA) | \
|
||||
$(ZIC) $$leap -d $@-t.dir - $(PACKRATDATA) && \
|
||||
@@ -952,6 +1017,16 @@ check_public: $(VERSION_DEPS)
|
||||
public.dir/zic -v -d public.dir/zoneinfo $$i 2>&1 || exit; \
|
||||
done
|
||||
public.dir/zic -v -d public.dir/zoneinfo-all $(TDATA_TO_CHECK)
|
||||
:
|
||||
: Also check 'backzone' syntax.
|
||||
rm public.dir/main.zi
|
||||
cd public.dir && $(MAKE) PACKRATDATA=backzone main.zi
|
||||
public.dir/zic -d public.dir/zoneinfo main.zi
|
||||
rm public.dir/main.zi
|
||||
cd public.dir && \
|
||||
$(MAKE) PACKRATDATA=backzone PACKRATLIST=zone.tab main.zi
|
||||
public.dir/zic -d public.dir/zoneinfo main.zi
|
||||
:
|
||||
rm -fr public.dir
|
||||
touch $@
|
||||
|
||||
@@ -964,7 +1039,7 @@ $(TIME_T_ALTERNATIVES): $(VERSION_DEPS)
|
||||
mkdir $@.dir
|
||||
ln $(VERSION_DEPS) $@.dir
|
||||
case $@ in \
|
||||
int32_t) range=-2147483648,2147483648;; \
|
||||
int*32_t) range=-2147483648,2147483648;; \
|
||||
u*) range=0,4294967296;; \
|
||||
*) range=-4294967296,4294967296;; \
|
||||
esac && \
|
||||
@@ -988,7 +1063,7 @@ $(TIME_T_ALTERNATIVES): $(VERSION_DEPS)
|
||||
TZS_YEAR="$$range" TZS_CUTOFF_FLAG="-t $$range" \
|
||||
D=$$wd/$@.dir \
|
||||
to$$range.tzs) && \
|
||||
diff -u $(TIME_T_ALTERNATIVES_HEAD).dir/to$$range.tzs \
|
||||
$(DIFF_TZS) $(TIME_T_ALTERNATIVES_HEAD).dir/to$$range.tzs \
|
||||
$@.dir/to$$range.tzs && \
|
||||
if diff -q Makefile Makefile 2>/dev/null; then \
|
||||
quiet_option='-q'; \
|
||||
@@ -1011,9 +1086,9 @@ REARGUARD_ASC = \
|
||||
ALL_ASC = $(TRADITIONAL_ASC) $(REARGUARD_ASC) \
|
||||
tzdb-$(VERSION).tar.lz.asc
|
||||
|
||||
tarballs rearguard_tarballs traditional_tarballs \
|
||||
tarballs rearguard_tarballs tailored_tarballs traditional_tarballs \
|
||||
signatures rearguard_signatures traditional_signatures: \
|
||||
version set-timestamps.out rearguard.zi
|
||||
version set-timestamps.out rearguard.zi vanguard.zi
|
||||
VERSION=`cat version` && \
|
||||
$(MAKE) AWK='$(AWK)' VERSION="$$VERSION" $@_version
|
||||
|
||||
@@ -1026,6 +1101,8 @@ rearguard_tarballs_version: \
|
||||
tzdata$(VERSION)-rearguard.tar.gz
|
||||
traditional_tarballs_version: \
|
||||
tzcode$(VERSION).tar.gz tzdata$(VERSION).tar.gz
|
||||
tailored_tarballs_version: \
|
||||
tzdata$(VERSION)-tailored.tar.gz
|
||||
signatures_version: $(ALL_ASC)
|
||||
rearguard_signatures_version: $(REARGUARD_ASC)
|
||||
traditional_signatures_version: $(TRADITIONAL_ASC)
|
||||
@@ -1039,34 +1116,76 @@ tzcode$(VERSION).tar.gz: set-timestamps.out
|
||||
|
||||
tzdata$(VERSION).tar.gz: set-timestamps.out
|
||||
LC_ALL=C && export LC_ALL && \
|
||||
tar $(TARFLAGS) -cf - $(COMMON) $(DATA) $(MISC) | \
|
||||
tar $(TARFLAGS) -cf - $(TZDATA_DIST) | \
|
||||
gzip $(GZIPFLAGS) >$@.out
|
||||
mv $@.out $@
|
||||
|
||||
# Create empty files with a reproducible timestamp.
|
||||
CREATE_EMPTY = TZ=UTC0 touch -mt 202010122253.00
|
||||
|
||||
# The obsolescent *rearguard* targets and related macros are present
|
||||
# for backwards compatibility with tz releases 2018e through 2022a.
|
||||
# They should go away eventually. To build rearguard tarballs you
|
||||
# can instead use 'make DATAFORM=rearguard tailored_tarballs'.
|
||||
tzdata$(VERSION)-rearguard.tar.gz: rearguard.zi set-timestamps.out
|
||||
rm -fr tzdata$(VERSION)-rearguard.dir
|
||||
mkdir tzdata$(VERSION)-rearguard.dir
|
||||
ln $(COMMON) $(DATA) $(MISC) tzdata$(VERSION)-rearguard.dir
|
||||
cd tzdata$(VERSION)-rearguard.dir && \
|
||||
rm -f $(TDATA) $(PACKRATDATA) version
|
||||
rm -fr $@.dir
|
||||
mkdir $@.dir
|
||||
ln $(TZDATA_DIST) $@.dir
|
||||
cd $@.dir && rm -f $(TDATA) $(PACKRATDATA) version
|
||||
for f in $(TDATA) $(PACKRATDATA); do \
|
||||
rearf=tzdata$(VERSION)-rearguard.dir/$$f; \
|
||||
rearf=$@.dir/$$f; \
|
||||
$(AWK) -v DATAFORM=rearguard -f ziguard.awk $$f >$$rearf && \
|
||||
$(SET_TIMESTAMP_DEP) $$rearf ziguard.awk $$f || exit; \
|
||||
done
|
||||
sed '1s/$$/-rearguard/' \
|
||||
<version >tzdata$(VERSION)-rearguard.dir/version
|
||||
sed '1s/$$/-rearguard/' <version >$@.dir/version
|
||||
: The dummy pacificnew pacifies TZUpdater 2.3.1 and earlier.
|
||||
TZ=UTC0 touch -mt 202010122253.00 \
|
||||
tzdata$(VERSION)-rearguard.dir/pacificnew
|
||||
touch -cmr version tzdata$(VERSION)-rearguard.dir/version
|
||||
$(CREATE_EMPTY) $@.dir/pacificnew
|
||||
touch -cmr version $@.dir/version
|
||||
LC_ALL=C && export LC_ALL && \
|
||||
(cd tzdata$(VERSION)-rearguard.dir && \
|
||||
(cd $@.dir && \
|
||||
tar $(TARFLAGS) -cf - \
|
||||
$(COMMON) $(DATA) $(MISC) pacificnew | \
|
||||
$(TZDATA_DIST) pacificnew | \
|
||||
gzip $(GZIPFLAGS)) >$@.out
|
||||
mv $@.out $@
|
||||
|
||||
# Create a tailored tarball suitable for TZUpdater and compatible tools.
|
||||
# For example, 'make DATAFORM=vanguard tailored_tarballs' makes a tarball
|
||||
# useful for testing whether TZUpdater supports vanguard form.
|
||||
# The generated tarball is not byte-for-byte equivalent to a hand-tailored
|
||||
# traditional tarball, as data entries are put into 'etcetera' even if they
|
||||
# came from some other source file. However, the effect should be the same
|
||||
# for ordinary use, which reads all the source files.
|
||||
tzdata$(VERSION)-tailored.tar.gz: set-timestamps.out
|
||||
rm -fr $@.dir
|
||||
mkdir $@.dir
|
||||
: The dummy pacificnew pacifies TZUpdater 2.3.1 and earlier.
|
||||
cd $@.dir && \
|
||||
$(CREATE_EMPTY) $(PRIMARY_YDATA) $(NDATA) backward \
|
||||
`test $(DATAFORM) = vanguard || echo pacificnew`
|
||||
(grep '^#' tzdata.zi && echo && cat $(DATAFORM).zi) \
|
||||
>$@.dir/etcetera
|
||||
touch -cmr tzdata.zi $@.dir/etcetera
|
||||
sed -n \
|
||||
-e '/^# *version *\(.*\)/h' \
|
||||
-e '/^# *ddeps */H' \
|
||||
-e '$$!d' \
|
||||
-e 'g' \
|
||||
-e 's/^# *version *//' \
|
||||
-e 's/\n# *ddeps */-/' \
|
||||
-e 's/ /-/g' \
|
||||
-e 'p' \
|
||||
<tzdata.zi >$@.dir/version
|
||||
touch -cmr version $@.dir/version
|
||||
links= && \
|
||||
for file in $(TZDATA_DIST); do \
|
||||
test -f $@.dir/$$file || links="$$links $$file"; \
|
||||
done && \
|
||||
ln $$links $@.dir
|
||||
LC_ALL=C && export LC_ALL && \
|
||||
(cd $@.dir && \
|
||||
tar $(TARFLAGS) -cf - * | gzip $(GZIPFLAGS)) >$@.out
|
||||
mv $@.out $@
|
||||
|
||||
tzdb-$(VERSION).tar.lz: set-timestamps.out set-tzs-timestamp.out
|
||||
rm -fr tzdb-$(VERSION)
|
||||
mkdir tzdb-$(VERSION)
|
||||
@@ -1114,17 +1233,18 @@ zdump.o: version.h
|
||||
zic.o: private.h tzfile.h version.h
|
||||
|
||||
.PHONY: ALL INSTALL all
|
||||
.PHONY: check check_time_t_alternatives
|
||||
.PHONY: check check_mild check_time_t_alternatives
|
||||
.PHONY: check_web check_zishrink
|
||||
.PHONY: clean clean_misc dummy.zd force_tzs
|
||||
.PHONY: install install_data maintainer-clean names
|
||||
.PHONY: posix_only posix_packrat posix_right public
|
||||
.PHONY: posix_only posix_right public
|
||||
.PHONY: rearguard_signatures rearguard_signatures_version
|
||||
.PHONY: rearguard_tarballs rearguard_tarballs_version
|
||||
.PHONY: right_only right_posix signatures signatures_version
|
||||
.PHONY: tarballs tarballs_version
|
||||
.PHONY: traditional_signatures traditional_signatures_version
|
||||
.PHONY: traditional_tarballs traditional_tarballs_version
|
||||
.PHONY: tailored_tarballs tailored_tarballs_version
|
||||
.PHONY: typecheck
|
||||
.PHONY: zonenames zones
|
||||
.PHONY: $(ZDS)
|
||||
+719
-7
@@ -1,5 +1,717 @@
|
||||
News for the tz database
|
||||
|
||||
Release 2022g - 2022-11-29 08:58:31 -0800
|
||||
|
||||
Briefly:
|
||||
The northern edge of Chihuahua changes to US timekeeping.
|
||||
Much of Greenland stops changing clocks after March 2023.
|
||||
Fix some pre-1996 timestamps in northern Canada.
|
||||
C89 is now deprecated; please use C99 or later.
|
||||
Portability fixes for AIX, libintl, MS-Windows, musl, z/OS
|
||||
In C code, use more C23 features if available.
|
||||
C23 timegm now supported by default
|
||||
Fixes for unlikely integer overflows
|
||||
|
||||
Changes to future timestamps
|
||||
|
||||
In the Mexican state of Chihuahua, the border strip near the US
|
||||
will change to agree with nearby US locations on 2022-11-30.
|
||||
The strip's western part, represented by Ciudad Juárez, switches
|
||||
from -06 all year to -07/-06 with US DST rules, like El Paso, TX.
|
||||
The eastern part, represented by Ojinaga, will observe US DST next
|
||||
year, like Presidio, TX. (Thanks to Heitor David Pinto.)
|
||||
A new Zone America/Ciudad_Juarez splits from America/Ojinaga.
|
||||
|
||||
Much of Greenland, represented by America/Nuuk, stops observing
|
||||
winter time after March 2023, so its daylight saving time becomes
|
||||
standard time. (Thanks to Jonas Nyrup and Jürgen Appel.)
|
||||
|
||||
Changes to past timestamps
|
||||
|
||||
Changes for pre-1996 northern Canada (thanks to Chris Walton):
|
||||
|
||||
Merge America/Iqaluit and America/Pangnirtung into the former,
|
||||
with a backward compatibility link for the latter name.
|
||||
There is no good evidence the two locations differ since 1970.
|
||||
This change affects pre-1996 America/Pangnirtung timestamps.
|
||||
|
||||
Cambridge Bay, Inuvik, Iqaluit, Rankin Inlet, Resolute and
|
||||
Yellowknife did not observe DST in 1965, and did observe DST
|
||||
from 1972 through 1979.
|
||||
|
||||
Whitehorse moved from -09 to -08 on 1966-02-27, not 1967-05-28.
|
||||
|
||||
Colombia's 1993 fallback was 02-06 24:00, not 04-04 00:00.
|
||||
(Thanks to Alois Treindl.)
|
||||
|
||||
Singapore's 1981-12-31 change was at 16:00 UTC (23:30 local time),
|
||||
not 24:00 local time. (Thanks to Geoff Clare via Robert Elz.)
|
||||
|
||||
Changes to code
|
||||
|
||||
Although tzcode still works with C89, bugs found in recent routine
|
||||
maintenance indicate that bitrot has set in and that in practice
|
||||
C89 is no longer used to build tzcode. As it is a maintenance
|
||||
burden, support for C89 is planned to be removed soon. Instead,
|
||||
please use compilers compatible with C99, C11, C17, or C23.
|
||||
|
||||
timegm, which tzcode implemented in 1989, will finally be
|
||||
standardized 34 years later as part of C23, so timegm is now
|
||||
supported even if STD_INSPIRED is not defined.
|
||||
|
||||
Fix bug in zdump's tzalloc emulation on hosts that lack tm_zone.
|
||||
(Problem reported by Đoàn Trần Công Danh.)
|
||||
|
||||
Fix bug in zic on hosts where malloc(0) yields NULL on success.
|
||||
(Problem reported by Tim McBrayer for AIX 6.1.)
|
||||
|
||||
Fix zic configuration to avoid linkage failures on some platforms.
|
||||
(Problems reported by Gilmore Davidson and Igor Ivanov.)
|
||||
|
||||
Work around MS-Windows nmake incompatibility with POSIX.
|
||||
(Problem reported by Manuela Friedrich.)
|
||||
|
||||
Port mktime and strftime to debugging platforms where accessing
|
||||
uninitialized data has undefined behavior (strftime problem
|
||||
reported by Robert Elz).
|
||||
|
||||
Check more carefully for unlikely integer overflows, preferring
|
||||
C23 <stdckdint.h> to overflow checking by hand, as the latter has
|
||||
had obscure bugs.
|
||||
|
||||
Changes to build procedure
|
||||
|
||||
New Makefile rule check_mild that skips checking whether Link
|
||||
lines are in the file 'backward'. (Inspired by a suggestion from
|
||||
Stephen Colebourne.)
|
||||
|
||||
|
||||
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.
|
||||
(Thanks to gera for the heads-up about Chihuahua.)
|
||||
|
||||
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:
|
||||
Work around awk bug in FreeBSD, macOS, etc.
|
||||
Improve tzselect on intercontinental Zones.
|
||||
|
||||
Changes to code
|
||||
|
||||
Work around a bug in onetrueawk that broke commands like
|
||||
'make traditional_tarballs' on FreeBSD, macOS, etc.
|
||||
(Problem reported by Deborah Goldsmith.)
|
||||
|
||||
Add code to tzselect that uses experimental structured comments in
|
||||
zone1970.tab to clarify whether Zones like Africa/Abidjan and
|
||||
Europe/Istanbul cross continent or ocean boundaries.
|
||||
(Inspired by a problem reported by Peter Krefting.)
|
||||
|
||||
Fix bug with 'zic -d /a/b/c' when /a is unwritable but the
|
||||
directory /a/b already exists.
|
||||
|
||||
Remove zoneinfo2tdf.pl, as it was unused and triggered false
|
||||
malware alarms on some email servers.
|
||||
|
||||
|
||||
Release 2022b - 2022-08-10 15:38:32 -0700
|
||||
|
||||
Briefly:
|
||||
Chile's DST is delayed by a week in September 2022.
|
||||
Iran no longer observes DST after 2022.
|
||||
Rename Europe/Kiev to Europe/Kyiv.
|
||||
New zic -R option
|
||||
Vanguard form now uses %z.
|
||||
Finish moving duplicate-since-1970 zones to 'backzone'.
|
||||
New build option PACKRATLIST
|
||||
New tailored_tarballs target, replacing rearguard_tarballs
|
||||
|
||||
Changes to future timestamps
|
||||
|
||||
Chile's 2022 DST start is delayed from September 4 to September 11.
|
||||
(Thanks to Juan Correa.)
|
||||
|
||||
Iran plans to stop observing DST permanently, after it falls back
|
||||
on 2022-09-21. (Thanks to Ali Mirjamali.)
|
||||
|
||||
Changes to past timestamps
|
||||
|
||||
Finish moving to 'backzone' the location-based zones whose
|
||||
timestamps since 1970 are duplicates; adjust links accordingly.
|
||||
This change ordinarily affects only pre-1970 timestamps, and with
|
||||
the new PACKRATLIST option it does not affect any timestamps.
|
||||
In this round the affected zones are Antarctica/Vostok,
|
||||
Asia/Brunei, Asia/Kuala_Lumpur, Atlantic/Reykjavik,
|
||||
Europe/Amsterdam, Europe/Copenhagen, Europe/Luxembourg,
|
||||
Europe/Monaco, Europe/Oslo, Europe/Stockholm, Indian/Christmas,
|
||||
Indian/Cocos, Indian/Kerguelen, Indian/Mahe, Indian/Reunion,
|
||||
Pacific/Chuuk, Pacific/Funafuti, Pacific/Majuro, Pacific/Pohnpei,
|
||||
Pacific/Wake and Pacific/Wallis, and the affected links are
|
||||
Arctic/Longyearbyen, Atlantic/Jan_Mayen, Iceland, Pacific/Ponape,
|
||||
Pacific/Truk, and Pacific/Yap.
|
||||
|
||||
From fall 1994 through fall 1995, Shanks wrote that Crimea's
|
||||
DST transitions were at 02:00 standard time, not at 00:00.
|
||||
(Thanks to Michael Deckers.)
|
||||
|
||||
Iran adopted standard time in 1935, not 1946. In 1977 it observed
|
||||
DST from 03-21 23:00 to 10-20 24:00; its 1978 transitions were on
|
||||
03-24 and 08-05, not 03-20 and 10-20; and its spring 1979
|
||||
transition was on 05-27, not 03-21.
|
||||
(Thanks to Roozbeh Pournader and Francis Santoni.)
|
||||
|
||||
Chile's observance of -04 from 1946-08-29 through 1947-03-31 was
|
||||
considered DST, not standard time. Santiago and environs had moved
|
||||
their clocks back to rejoin the rest of mainland Chile; put this
|
||||
change at the end of 1946-08-28. (Thanks to Michael Deckers.)
|
||||
|
||||
Some old, small clock transitions have been removed, as people at
|
||||
the time did not change their clocks. This affects Asia/Hong_Kong
|
||||
in 1904, Asia/Ho_Chi_Minh in 1906, and Europe/Dublin in 1880.
|
||||
|
||||
Changes to zone name
|
||||
|
||||
Rename Europe/Kiev to Europe/Kyiv, as "Kyiv" is more common in
|
||||
English now. Spelling of other names in Ukraine has not yet
|
||||
demonstrably changed in common English practice so for now these
|
||||
names retain old spellings, as in other countries (e.g.,
|
||||
Europe/Prague not "Praha", and Europe/Sofia not "Sofiya").
|
||||
|
||||
Changes to code
|
||||
|
||||
zic has a new option '-R @N' to output explicit transitions < N.
|
||||
(Need suggested by Almaz Mingaleev.)
|
||||
|
||||
'zic -r @N' no longer outputs bad data when N < first transition.
|
||||
(Problem introduced in 2021d and reported by Peter Krefting.)
|
||||
|
||||
zic now checks its input for NUL bytes and unterminated lines, and
|
||||
now supports input line lengths up to 2048 (not 512) bytes.
|
||||
|
||||
gmtime and related code now use the abbreviation "UTC" not "GMT".
|
||||
POSIX is being revised to require this.
|
||||
|
||||
When tzset and related functions set vestigial static variables
|
||||
like tzname, they now prefer specified timestamps to unspecified ones.
|
||||
(Problem reported by Almaz Mingaleev.)
|
||||
|
||||
zic no longer complains "can't determine time zone abbreviation to
|
||||
use just after until time" when a transition to a new standard
|
||||
time occurs simultaneously with the first DST fallback transition.
|
||||
|
||||
Changes to build procedure
|
||||
|
||||
Source data in vanguard form now uses the %z notation, introduced
|
||||
in release 2015f. For example, for America/Sao_Paulo vanguard
|
||||
form contains the zone continuation line "-3:00 Brazil %z", which
|
||||
is simpler and more reliable than the line "-3:00 Brazil -03/-02"
|
||||
used in main and rearguard forms. The plan is for the main form
|
||||
to use %z eventually; in the meantime maintainers of zi parsers
|
||||
are encouraged to test the parsers on vanguard.zi.
|
||||
|
||||
The Makefile has a new PACKRATLIST option to select a subset of
|
||||
'backzone'. For example, 'make PACKRATDATA=backzone
|
||||
PACKRATLIST=zone.tab' now generates TZif files identical to those
|
||||
of the global-tz project.
|
||||
|
||||
The Makefile has a new tailored_tarballs target for generating
|
||||
special-purpose tarballs. It generalizes and replaces the
|
||||
rearguard_tarballs target and related targets and macros, which
|
||||
are now obsolescent.
|
||||
|
||||
'make install' now defaults LOCALTIME to Factory not GMT,
|
||||
which means the default abbreviation is now "-00" not "GMT".
|
||||
|
||||
Remove the posix_packrat target, marked obsolescent in 2016a.
|
||||
|
||||
|
||||
Release 2022a - 2022-03-15 23:02:01 -0700
|
||||
|
||||
Briefly:
|
||||
Palestine will spring forward on 2022-03-27, not -03-26.
|
||||
zdump -v now outputs better failure indications.
|
||||
Bug fixes for code that reads corrupted TZif data.
|
||||
|
||||
Changes to future timestamps
|
||||
|
||||
Palestine will spring forward on 2022-03-27, not 2022-03-26.
|
||||
(Thanks to Heba Hamad.) Predict future transitions for first
|
||||
Sunday >= March 25. Additionally, predict fallbacks to be the first
|
||||
Friday on or after October 23, not October's last Friday, to be more
|
||||
consistent with recent practice. The first differing fallback
|
||||
prediction is on 2025-10-24, not 2025-10-31.
|
||||
|
||||
Changes to past timestamps
|
||||
|
||||
From 1992 through spring 1996, Ukraine's DST transitions were at
|
||||
02:00 standard time, not at 01:00 UTC. (Thanks to Alois Treindl.)
|
||||
|
||||
Chile's Santiago Mean Time and its LMT precursor have been adjusted
|
||||
eastward by 1 second to align with past and present law.
|
||||
|
||||
Changes to commentary
|
||||
|
||||
Add several references for Chile's 1946/1947 transitions, some of
|
||||
which only affected portions of the country.
|
||||
|
||||
Changes to code
|
||||
|
||||
Fix bug when mktime gets confused by truncated TZif files with
|
||||
unspecified local time. (Problem reported by Almaz Mingaleev.)
|
||||
|
||||
Fix bug when 32-bit time_t code reads malformed 64-bit TZif data.
|
||||
(Problem reported by Christos Zoulas.)
|
||||
|
||||
When reading a version 2 or later TZif file, the TZif reader now
|
||||
validates the version 1 header and data block only enough to skip
|
||||
over them, as recommended by RFC 8536 section 4. Also, the TZif
|
||||
reader no longer mistakenly attempts to parse a version 1 TZIf
|
||||
file header as a TZ string.
|
||||
|
||||
zdump -v now outputs "(localtime failed)" and "(gmtime failed)"
|
||||
when local time and UT cannot be determined for a timestamp.
|
||||
|
||||
Changes to build procedure
|
||||
|
||||
Distribution tarballs now use standard POSIX.1-1988 ustar format
|
||||
instead of GNU format. Although the formats are almost identical
|
||||
for these tarballs, ustar headers' magic fields contain "ustar"
|
||||
instead of "ustar ", and their version fields contain "00" instead
|
||||
of " ". The two formats are planned to diverge more significantly
|
||||
for tzdb releases after 2242-03-16 12:56:31 UTC, when the ustar
|
||||
format becomes obsolete and the tarballs switch to pax format, an
|
||||
extension of ustar. For details about these formats, please see
|
||||
"pax - portable archive interchange", IEEE Std 1003.1-2017,
|
||||
<https://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13>.
|
||||
|
||||
|
||||
Release 2021e - 2021-10-21 18:41:00 -0700
|
||||
|
||||
Changes to future timestamps
|
||||
|
||||
Palestine will fall back 10-29 (not 10-30) at 01:00.
|
||||
(Thanks to P Chan and Heba Hemad.)
|
||||
|
||||
|
||||
Release 2021d - 2021-10-15 13:48:18 -0700
|
||||
|
||||
Briefly:
|
||||
Fiji suspends DST for the 2021/2022 season.
|
||||
'zic -r' marks unspecified timestamps with "-00".
|
||||
|
||||
Changes to future timestamps
|
||||
|
||||
Fiji will suspend observance of DST for the 2021/2022 season.
|
||||
Assume for now that it will return next year. (Thanks to Jashneel
|
||||
Kumar and P Chan.)
|
||||
|
||||
Changes to code
|
||||
|
||||
'zic -r' now uses "-00" time zone abbreviations for intervals
|
||||
with UT offsets that are unspecified due to -r truncation.
|
||||
This implements a change in draft Internet RFC 8536bis.
|
||||
|
||||
|
||||
Release 2021c - 2021-10-01 14:21:49 -0700
|
||||
|
||||
Briefly:
|
||||
Revert most 2021b changes to 'backward'.
|
||||
Fix 'zic -b fat' bug in pre-1970 32-bit data.
|
||||
Fix two Link line typos.
|
||||
Distribute SECURITY file.
|
||||
|
||||
This release is intended as a bugfix release, to fix compatibility
|
||||
problems and typos reported since 2021b was released.
|
||||
|
||||
Changes to Link directives
|
||||
|
||||
Revert almost all of 2021b's changes to the 'backward' file,
|
||||
by moving Link directives back to where they were in 2021a.
|
||||
Although 'zic' doesn't care which source file contains a Link
|
||||
directive, some downstream uses ran into trouble with the move.
|
||||
(Problem reported by Stephen Colebourne for Joda-Time.)
|
||||
|
||||
Fix typo that linked Atlantic/Jan_Mayen to the wrong location
|
||||
(problem reported by Chris Walton).
|
||||
|
||||
Fix 'backzone' typo that linked America/Virgin to the wrong
|
||||
location (problem reported by Michael Deckers).
|
||||
|
||||
Changes to code
|
||||
|
||||
Fix a bug in 'zic -b fat' that caused old timestamps to be
|
||||
mishandled in 32-bit-only readers (problem reported by Daniel
|
||||
Fischer).
|
||||
|
||||
Changes to documentation
|
||||
|
||||
Distribute the SECURITY file (problem reported by Andreas Radke).
|
||||
|
||||
|
||||
Release 2021b - 2021-09-24 16:23:00 -0700
|
||||
|
||||
Briefly:
|
||||
Jordan now starts DST on February's last Thursday.
|
||||
Samoa no longer observes DST.
|
||||
Merge more location-based Zones whose timestamps agree since 1970.
|
||||
Move some backward-compatibility links to 'backward'.
|
||||
Rename Pacific/Enderbury to Pacific/Kanton.
|
||||
Correct many pre-1993 transitions in Malawi, Portugal, etc.
|
||||
zic now creates each output file or link atomically.
|
||||
zic -L no longer omits the POSIX TZ string in its output.
|
||||
zic fixes for truncation and leap second table expiration.
|
||||
zic now follows POSIX for TZ strings using all-year DST.
|
||||
Fix some localtime crashes and bugs in obscure cases.
|
||||
zdump -v now outputs more-useful boundary cases.
|
||||
tzfile.5 better matches a draft successor to RFC 8536.
|
||||
A new file SECURITY.
|
||||
|
||||
This release is prompted by recent announcements by Jordan and Samoa.
|
||||
It incorporates many other changes that had accumulated since 2021a.
|
||||
However, it omits most proposed changes that merged all Zones
|
||||
agreeing since 1970, as concerns were raised about doing too many of
|
||||
these changes at once. It does keeps some of these changes in the
|
||||
interest of making tzdb more equitable one step at a time; see
|
||||
"Merge more location-based Zones" below.
|
||||
|
||||
Changes to future timestamps
|
||||
|
||||
Jordan now starts DST on February's last Thursday.
|
||||
(Thanks to Steffen Thorsen.)
|
||||
|
||||
Samoa no longer observes DST. (Thanks to Geoffrey D. Bennett.)
|
||||
|
||||
Changes to zone name
|
||||
|
||||
Rename Pacific/Enderbury to Pacific/Kanton. When we added
|
||||
Enderbury in 1993, we did not know that it is uninhabited and that
|
||||
Kanton (population two dozen) is the only inhabited location in
|
||||
that timezone. The old name is now a backward-compatibility link.
|
||||
|
||||
Changes to past timestamps
|
||||
|
||||
Correct many pre-1993 transitions, fixing entries originally
|
||||
derived from Shanks, Whitman, and Mundell. The fixes include:
|
||||
- Barbados: standard time was introduced in 1911, not 1932; and
|
||||
DST was observed in 1942-1944
|
||||
- Cook Islands: In 1899 they switched from east to west of GMT,
|
||||
celebrating Christmas for two days. They (and Niue) switched
|
||||
to standard time in 1952, not 1901.
|
||||
- Guyana: corrected LMT for Georgetown; the introduction of
|
||||
standard time in 1911, not 1915; and corrections to 1975 and
|
||||
1992 transitions
|
||||
- Kanton: uninhabited before 1937-08-31
|
||||
- Niue: only observed -11:20 from 1952 through 1964, then went to
|
||||
-11 instead of -11:30
|
||||
- Portugal: DST was observed in 1950
|
||||
- Tonga: corrected LMT; the introduction of standard time in 1945,
|
||||
not 1901; and corrections to the transition from +12:20 to +13
|
||||
in 1961, not 1941
|
||||
Additional fixes to entries in the 'backzone' file include:
|
||||
- Enderbury: inhabited only 1860/1885 and 1938-03-06/1942-02-09
|
||||
- The Gambia: 1933 and 1942 transitions
|
||||
- Malawi: several 1911 through 1925 transitions
|
||||
- Sierra Leone: several 1913 through 1941 transitions, and DST
|
||||
was NOT observed in 1957 through 1962
|
||||
(Thanks to P Chan, Michael Deckers, Alexander Krivenyshev and
|
||||
Alois Treindl.)
|
||||
|
||||
Merge more location-based Zones whose timestamps agree since 1970,
|
||||
as pre-1970 timestamps are out of scope. This is part of a
|
||||
process that has been ongoing since 2013. This does not affect
|
||||
post-1970 timestamps, and timezone historians who build with 'make
|
||||
PACKRATDATA=backzone' should see no changes to pre-1970 timestamps.
|
||||
When merging, keep the most-populous location's data, and move
|
||||
data for other locations to 'backzone' with a backward
|
||||
link in 'backward'. For example, move America/Creston data to
|
||||
'backzone' with a link in 'backward' from America/Phoenix because
|
||||
the two timezones' timestamps agree since 1970; this change
|
||||
affects some pre-1968 timestamps in America/Creston because
|
||||
Creston and Phoenix disagreed before 1968. The affected Zones
|
||||
are Africa/Accra, America/Atikokan, America/Blanc-Sablon,
|
||||
America/Creston, America/Curacao, America/Nassau,
|
||||
America/Port_of_Spain, Antarctica/DumontDUrville, and
|
||||
Antarctica/Syowa.
|
||||
|
||||
Changes to maintenance procedure
|
||||
|
||||
The new file SECURITY covers how to report security-related bugs.
|
||||
|
||||
Several backward-compatibility links have been moved to the
|
||||
'backward' file. These links, which range from Africa/Addis_Ababa
|
||||
to Pacific/Saipan, are only for compatibility with now-obsolete
|
||||
guidelines suggesting an entry for every ISO 3166 code.
|
||||
The intercontinental convenience links Asia/Istanbul and
|
||||
Europe/Nicosia have also been moved to 'backward'.
|
||||
|
||||
Changes to code
|
||||
|
||||
zic now creates each output file or link atomically,
|
||||
possibly by creating a temporary file and then renaming it.
|
||||
This avoids races where a TZ setting would temporarily stop
|
||||
working while zic was installing a replacement file or link.
|
||||
|
||||
zic -L no longer omits the POSIX TZ string in its output.
|
||||
Starting with 2020a, zic -L truncated its output according to the
|
||||
"Expires" directive or "#expires" comment in the leapseconds file.
|
||||
The resulting TZif files omitted daylight saving transitions after
|
||||
the leap second table expired, which led to far less-accurate
|
||||
predictions of times after the expiry. Although future timestamps
|
||||
cannot be converted accurately in the presence of leap seconds, it
|
||||
is more accurate to convert near-future timestamps with a few
|
||||
seconds error than with an hour error, so zic -L no longer
|
||||
truncates output in this way.
|
||||
|
||||
Instead, when zic -L is given the "Expires" directive, it now
|
||||
outputs the expiration by appending a no-change entry to the leap
|
||||
second table. Although this should work well with most TZif
|
||||
readers, it does not conform to Internet RFC 8536 and some pickier
|
||||
clients (including tzdb 2017c through 2021a) reject it, so
|
||||
"Expires" directives are currently disabled by default. To enable
|
||||
them, set the EXPIRES_LINE Makefile variable. If a TZif file uses
|
||||
this new feature it is marked with a new TZif version number 4,
|
||||
a format intended to be documented in a successor to RFC 8536.
|
||||
|
||||
zic -L LEAPFILE -r @LO no longer generates an invalid TZif file
|
||||
that omits leap second information for the range LO..B when LO
|
||||
falls between two leap seconds A and B. Instead, it generates a
|
||||
TZif version 4 file that represents the previously-missing
|
||||
information.
|
||||
|
||||
The TZif reader now allows the leap second table to begin with a
|
||||
correction other than -1 or +1, and to contain adjacent
|
||||
transitions with equal corrections. This supports TZif version 4.
|
||||
|
||||
The TZif reader now lets leap seconds occur less than 28 days
|
||||
apart. This supports possible future TZif extensions.
|
||||
|
||||
Fix bug that caused 'localtime' etc. to crash when TZ was
|
||||
set to a all-year DST string like "EST5EDT4,0/0,J365/25" that does
|
||||
not conform to POSIX but does conform to Internet RFC 8536.
|
||||
|
||||
Fix another bug that caused 'localtime' etc. to crash when TZ was
|
||||
set to a POSIX-conforming but unusual TZ string like
|
||||
"EST5EDT4,0/0,J365/0", where almost all the year is DST.
|
||||
|
||||
Fix yet another bug that caused 'localtime' etc. to mishandle slim
|
||||
TZif files containing leap seconds after the last explicit
|
||||
transition in the table, or when handling far-future timestamps
|
||||
in slim TZif files lacking leap seconds.
|
||||
|
||||
Fix localtime misbehavior involving positive leap seconds.
|
||||
This change affects only behavior for "right" system time,
|
||||
which contains leap seconds, and only if the UT offset is
|
||||
not a multiple of 60 seconds when a positive leap second occurs.
|
||||
(No such timezone exists in tzdb, luckily.) Without the fix,
|
||||
the timestamp was ambiguous during a positive leap second.
|
||||
With the fix, any seconds occurring after a positive leap second
|
||||
and within the same localtime minute are counted through 60, not
|
||||
through 59; their UT offset (tm_gmtoff) is the same as before.
|
||||
Here is how the fix affects timestamps in a timezone with UT
|
||||
offset +01:23:45 (5025 seconds) and with a positive leap second at
|
||||
1972-06-30 23:59:60 UTC (78796800):
|
||||
|
||||
time_t without the fix with the fix
|
||||
78796800 1972-07-01 01:23:45 1972-07-01 01:23:45 (leap second)
|
||||
78796801 1972-07-01 01:23:45 1972-07-01 01:23:46
|
||||
...
|
||||
78796815 1972-07-01 01:23:59 1972-07-01 01:23:60
|
||||
78796816 1972-07-01 01:24:00 1972-07-01 01:24:00
|
||||
|
||||
Fix an unlikely bug that caused 'localtime' etc. to misbehave if
|
||||
civil time changes a few seconds before time_t wraps around, when
|
||||
leap seconds are enabled.
|
||||
|
||||
Fix bug in zic -r; in some cases, the dummy time type after the
|
||||
last time transition disagreed with the TZ string, contrary to
|
||||
Internet RFC 8563 section 3.3.
|
||||
|
||||
Fix a bug with 'zic -r @X' when X is a negative leap second that
|
||||
has a nonnegative correction. Without the fix, the output file
|
||||
was truncated so that X appeared to be a positive leap second.
|
||||
Fix a similar, even-less-likely bug when truncating at a positive
|
||||
leap second that has a nonpositive correction.
|
||||
|
||||
zic -r now reports an error if given rolling leap seconds, as this
|
||||
usage has never generally worked and is evidently unused.
|
||||
|
||||
zic now generates a POSIX-conforming TZ string for TZif files
|
||||
where all-year DST is predicted for the indefinite future.
|
||||
For example, for all-year Eastern Daylight Time, zic now generates
|
||||
"XXX3EDT4,0/0,J365/23" where it previously generated
|
||||
"EST5EDT,0/0,J365/25" or "". (Thanks to Michael Deckers for
|
||||
noting the possibility of POSIX conformance.)
|
||||
|
||||
zic.c no longer requires sys/wait.h (thanks to spazmodius for
|
||||
noting it wasn't needed).
|
||||
|
||||
When reading slim TZif files, zdump no longer mishandles leap
|
||||
seconds on the rare platforms where time_t counts leap seconds,
|
||||
fixing a bug introduced in 2014g.
|
||||
|
||||
zdump -v now outputs timestamps at boundaries of what localtime
|
||||
and gmtime can represent, instead of the less-useful timestamps
|
||||
one day after the minimum and one day before the maximum.
|
||||
(Thanks to Arthur David Olson for prototype code, and to Manuela
|
||||
Friedrich for debugging help.)
|
||||
|
||||
zdump's -c and -t options are now consistently inclusive for the
|
||||
lower time bound and exclusive for the upper. Formerly they were
|
||||
inconsistent. (Confusion noted by Martin Burnicki.)
|
||||
|
||||
Changes to build procedure
|
||||
|
||||
You can now compile with -DHAVE_MALLOC_ERRNO=0 to port to
|
||||
non-POSIX hosts where malloc doesn't set errno.
|
||||
(Problem reported by Jan Engelhardt.)
|
||||
|
||||
Changes to documentation
|
||||
|
||||
tzfile.5 better matches a draft successor to RFC 8536
|
||||
<https://datatracker.ietf.org/doc/draft-murchison-rfc8536bis/01/>.
|
||||
|
||||
|
||||
Release 2021a - 2021-01-24 10:54:57 -0800
|
||||
|
||||
Changes to future timestamps
|
||||
@@ -31,7 +743,7 @@ Release 2020e - 2020-12-22 15:14:34 -0800
|
||||
Correct many pre-1986 transitions, fixing entries originally
|
||||
derived from Shanks. The fixes include:
|
||||
- Australia: several 1917 through 1971 transitions
|
||||
- Bahamas: several 1941 through 1945 transitions
|
||||
- The Bahamas: several 1941 through 1945 transitions
|
||||
- Bermuda: several 1917 through 1956 transitions
|
||||
- Belize: several 1942 through 1968 transitions
|
||||
- Ghana: several 1915 through 1956 transitions
|
||||
@@ -287,13 +999,13 @@ Release 2019c - 2019-09-11 08:59:48 -0700
|
||||
probably wrong.)
|
||||
|
||||
Fix several errors in pre-1970 transitions in Perry County, IN.
|
||||
(Thanks to Alois Triendl for pointing out the 1967/9 errors.)
|
||||
(Thanks to Alois Treindl for pointing out the 1967/9 errors.)
|
||||
|
||||
Edmonton did not observe DST in 1967 or 1969. In 1946 Vancouver
|
||||
ended DST on 09-29 not 10-13, and Vienna ended DST on 10-07 not
|
||||
10-06. In 1945 Königsberg (now Kaliningrad) switched from +01/+02
|
||||
to +02/+03 on 04-10 not 01-01, and its +02/+03 is abbreviated
|
||||
EET/EEST, not CET/CEST. (Thanks to Alois Triendl.) In 1946
|
||||
EET/EEST, not CET/CEST. (Thanks to Alois Treindl.) In 1946
|
||||
Königsberg switched to +03 on 04-07 not 01-01.
|
||||
|
||||
In 1946 Louisville switched from CST to CDT on 04-28 at 00:01, not
|
||||
@@ -825,8 +1537,8 @@ Release 2018d - 2018-03-22 07:05:46 -0700
|
||||
Institute in Montevideo.
|
||||
(Thanks to Jeremie Bonjour, Tim Parenti, and Michael Deckers.)
|
||||
|
||||
Enderbury and Kiritimati skipped New Year's Eve 1994, not
|
||||
New Year's Day 1995. (Thanks to Kerry Shetline.)
|
||||
East Kiribati skipped New Year's Eve 1994, not New Year's Day 1995.
|
||||
(Thanks to Kerry Shetline.)
|
||||
|
||||
Fix the 1912-01-01 transition for Portugal and its colonies.
|
||||
This transition was at 00:00 according to the new UT offset, not
|
||||
@@ -969,7 +1681,7 @@ Release 2018b - 2018-01-17 23:24:48 -0800
|
||||
Changes to build procedure
|
||||
|
||||
The distribution now contains the file 'pacificnew' again.
|
||||
This file was inadvertantly omitted in the 2018a distribution.
|
||||
This file was inadvertently omitted in the 2018a distribution.
|
||||
(Problem reported by Matias Fonzo.)
|
||||
|
||||
|
||||
@@ -4041,7 +4753,7 @@ Release 2007a - 2007-01-08 12:28:29 -0500
|
||||
|
||||
changes by Paul Eggert
|
||||
|
||||
Derick Rethan's Asmara change
|
||||
Derick Rethans's Asmara change
|
||||
|
||||
Oscar van Vlijmen's Easter Island local mean time change
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
Please report any sensitive security-related bugs via email to the
|
||||
tzdb designated coordinators, currently Paul Eggert
|
||||
<[email protected]> and Tim Parenti <[email protected]>.
|
||||
Put "tzdb security" at the start of your email's subject line.
|
||||
We prefer communications to be in English.
|
||||
|
||||
You should receive a response within a week. If not, please follow up
|
||||
via email to make sure we received your original message.
|
||||
|
||||
If we confirm the bug, we plan to notify affected third-party services
|
||||
or software that we know about, prepare an advisory, commit fixes to
|
||||
the main development branch as quickly as is practical, and finally
|
||||
publish the advisory on [email protected]. As with all tzdb contributions,
|
||||
we give credit to security contributors unless they wish to remain
|
||||
anonymous.
|
||||
+67
-282
@@ -30,9 +30,6 @@
|
||||
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
|
||||
# https://www.jstor.org/stable/1774359
|
||||
#
|
||||
# A reliable and entertaining source about time zones is
|
||||
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
|
||||
#
|
||||
# European-style abbreviations are commonly used along the Mediterranean.
|
||||
# For sub-Saharan Africa abbreviations were less standardized.
|
||||
# Previous editions of this database used WAT, CAT, SAT, and EAT
|
||||
@@ -100,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):
|
||||
@@ -130,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
|
||||
@@ -140,38 +118,36 @@ 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/Bamako # Mali
|
||||
Link Africa/Abidjan Africa/Banjul # 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/St_Helena # St Helena
|
||||
|
||||
# Djibouti
|
||||
# See Africa/Nairobi.
|
||||
|
||||
###############################################################################
|
||||
|
||||
# Egypt
|
||||
|
||||
# Milne says Cairo used 2:05:08.9, the local mean time of the Abbasizeh
|
||||
# observatory; round to nearest. Milne also says that the official time for
|
||||
# observatory. Milne also says that the official time for
|
||||
# Egypt was mean noon at the Great Pyramid, 2:04:30.5, but apparently this
|
||||
# did not apply to Cairo, Alexandria, or Port Said.
|
||||
|
||||
@@ -356,121 +332,10 @@ Rule Egypt 2014 only - Jul 31 24:00 1:00 S
|
||||
Rule Egypt 2014 only - Sep lastThu 24:00 0 -
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#STDOFF 2:05:08.9
|
||||
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.
|
||||
|
||||
# Gambia
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Ghana
|
||||
|
||||
# From P Chan (2020-11-20):
|
||||
# Interpretation Amendment Ordinance, 1915 (No.24 of 1915) [1915-11-02]
|
||||
# Ordinances of the Gold Coast, Ashanti, Northern Territories 1915, p 69-71
|
||||
# https://books.google.com/books?id=ErA-AQAAIAAJ&pg=PA70
|
||||
# This Ordinance added "'Time' shall mean Greenwich Mean Time" to the
|
||||
# Interpretation Ordinance, 1876.
|
||||
#
|
||||
# Determination of the Time Ordinance, 1919 (No. 18 of 1919) [1919-11-24]
|
||||
# Ordinances of the Gold Coast, Ashanti, Northern Territories 1919, p 75-76
|
||||
# https://books.google.com/books?id=MbA-AQAAIAAJ&pg=PA75
|
||||
# This Ordinance removed the previous definition of time and introduced DST.
|
||||
#
|
||||
# Time Determination Ordinance (Cap. 214)
|
||||
# The Laws of the Gold Coast (including Togoland Under British Mandate)
|
||||
# Vol. II (1937), p 2328
|
||||
# https://books.google.com/books?id=Z7M-AQAAIAAJ&pg=PA2328
|
||||
# Revised edition of the 1919 Ordinance.
|
||||
#
|
||||
# Time Determination (Amendment) Ordinance, 1940 (No. 9 of 1940) [1940-04-06]
|
||||
# Annual Volume of the Laws of the Gold Coast:
|
||||
# Containing All Legislation Enacted During Year 1940, p 22
|
||||
# https://books.google.com/books?id=1ao-AQAAIAAJ&pg=PA22
|
||||
# This Ordinance changed the forward transition from September to May.
|
||||
#
|
||||
# Defence (Time Determination Ordinance Amendment) Regulations, 1942
|
||||
# (Regulations No. 6 of 1942) [1942-01-31, commenced on 1942-02-08]
|
||||
# Annual Volume of the Laws of the Gold Coast:
|
||||
# Containing All Legislation Enacted During Year 1942, p 48
|
||||
# https://books.google.com/books?id=Das-AQAAIAAJ&pg=PA48
|
||||
# These regulations advanced the [standard] time by thirty minutes.
|
||||
#
|
||||
# Defence (Time Determination Ordinance Amendment (No.2)) Regulations,
|
||||
# 1942 (Regulations No. 28 of 1942) [1942-04-25]
|
||||
# Annual Volume of the Laws of the Gold Coast:
|
||||
# Containing All Legislation Enacted During Year 1942, p 87
|
||||
# https://books.google.com/books?id=Das-AQAAIAAJ&pg=PA87
|
||||
# These regulations abolished DST and changed the time to GMT+0:30.
|
||||
#
|
||||
# Defence (Revocation) (No.4) Regulations, 1945 (Regulations No. 45 of
|
||||
# 1945) [1945-10-24, commenced on 1946-01-06]
|
||||
# Annual Volume of the Laws of the Gold Coast:
|
||||
# Containing All Legislation Enacted During Year 1945, p 256
|
||||
# https://books.google.com/books?id=9as-AQAAIAAJ&pg=PA256
|
||||
# These regulations revoked the previous two sets of Regulations.
|
||||
#
|
||||
# Time Determination (Amendment) Ordinance, 1945 (No. 18 of 1945) [1946-01-06]
|
||||
# Annual Volume of the Laws of the Gold Coast:
|
||||
# Containing All Legislation Enacted During Year 1945, p 69
|
||||
# https://books.google.com/books?id=9as-AQAAIAAJ&pg=PA69
|
||||
# This Ordinance abolished DST.
|
||||
#
|
||||
# Time Determination (Amendment) Ordinance, 1950 (No. 26 of 1950) [1950-07-22]
|
||||
# Annual Volume of the Laws of the Gold Coast:
|
||||
# Containing All Legislation Enacted During Year 1950, p 35
|
||||
# https://books.google.com/books?id=e60-AQAAIAAJ&pg=PA35
|
||||
# This Ordinance restored DST but with thirty minutes offset.
|
||||
#
|
||||
# Time Determination Ordinance (Cap. 264)
|
||||
# The Laws of the Gold Coast, Vol. V (1954), p 380
|
||||
# https://books.google.com/books?id=Mqc-AQAAIAAJ&pg=PA380
|
||||
# Revised edition of the Time Determination Ordinance.
|
||||
#
|
||||
# Time Determination (Amendment) Ordinance, 1956 (No. 21 of 1956) [1956-08-29]
|
||||
# Annual Volume of the Ordinances of the Gold Coast Enacted During the
|
||||
# Year 1956, p 83
|
||||
# https://books.google.com/books?id=VLE-AQAAIAAJ&pg=PA83
|
||||
# This Ordinance abolished DST.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Ghana 1919 only - Nov 24 0:00 0:20 +0020
|
||||
Rule Ghana 1920 1942 - Jan 1 2:00 0 GMT
|
||||
Rule Ghana 1920 1939 - Sep 1 2:00 0:20 +0020
|
||||
Rule Ghana 1940 1941 - May 1 2:00 0:20 +0020
|
||||
Rule Ghana 1950 1955 - Sep 1 2:00 0:30 +0030
|
||||
Rule Ghana 1951 1956 - Jan 1 2:00 0 GMT
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Accra -0:00:52 - LMT 1915 Nov 2
|
||||
0:00 Ghana %s 1942 Feb 8
|
||||
0:30 - +0030 1946 Jan 6
|
||||
0:00 Ghana %s
|
||||
|
||||
# Guinea
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Guinea-Bissau
|
||||
#
|
||||
# From Paul Eggert (2018-02-16):
|
||||
@@ -483,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):
|
||||
#
|
||||
@@ -494,7 +368,7 @@ Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
|
||||
# At midnight on 30 June 1928 the clocks throughout Kenya was put forward
|
||||
# half an hour by the Alteration of Time Ordinance, 1928.
|
||||
# https://gazettes.africa/archive/ke/1928/ke-government-gazette-dated-1928-05-11-no-28.pdf
|
||||
# [Ordinance No. 11 of 1928, The Offical Gazette, 1928-06-26, p 813]
|
||||
# [Ordinance No. 11 of 1928, The Official Gazette, 1928-06-26, p 813]
|
||||
# https://books.google.com/books?id=2S0S6os32ZUC&pg=PA813
|
||||
#
|
||||
# The 1928 ordinance was repealed by the Alteration of Time (repeal) Ordinance,
|
||||
@@ -526,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
|
||||
@@ -533,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
|
||||
#
|
||||
@@ -625,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):
|
||||
@@ -728,11 +588,9 @@ 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 the 'europe' file for Spanish Morocco (Africa/Ceuta).
|
||||
# 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
|
||||
@@ -1005,6 +863,10 @@ Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
|
||||
# (car (cdr (cdr a))) (calendar-month-name (car a) t) (car (cdr a))
|
||||
# (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b)))))
|
||||
# (setq islamic-year (+ 1 islamic-year))))
|
||||
#
|
||||
# From Milamber (2021-03-31, 2022-03-10), confirming these predictions:
|
||||
# https://www.mmsp.gov.ma/fr/actualites.aspx?id=2076
|
||||
# https://www.ecoactu.ma/horaires-administration-ramadan-gmtheure-gmt-a-partir-de-dimanche-27-mars/
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Morocco 1939 only - Sep 12 0:00 1:00 -
|
||||
@@ -1218,7 +1080,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
|
||||
@@ -1228,14 +1097,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
|
||||
|
||||
@@ -1314,9 +1175,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):
|
||||
@@ -1382,46 +1250,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
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
|
||||
4:00 - +04
|
||||
#
|
||||
# Crozet Islands also observes Réunion time; see the 'antarctica' file.
|
||||
#
|
||||
# Scattered Islands (Îles Éparses) administered from Réunion are as follows.
|
||||
# The following information about them is taken from
|
||||
# Îles Éparses (<http://www.outre-mer.gouv.fr/domtom/ile.htm>, 1997-07-22,
|
||||
# in French; no longer available as of 1999-08-17).
|
||||
# We have no info about their time zone histories.
|
||||
#
|
||||
# Bassas da India - uninhabited
|
||||
# Europa Island - inhabited from 1905 to 1910 by two families
|
||||
# Glorioso Is - inhabited until at least 1958
|
||||
# Juan de Nova - uninhabited
|
||||
# Tromelin - inhabited until at least 1958
|
||||
|
||||
# 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
|
||||
|
||||
@@ -1441,48 +1269,19 @@ Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
|
||||
# From Michael Deckers (2018-12-30):
|
||||
# https://www.legis-palop.org/download.jsp?idFile=102818
|
||||
# ... [The legal time of the country, which coincides with universal
|
||||
# coordinated time, will be restituted at 2 o'clock on day 1 of January, 2019.]
|
||||
# coordinated time, will be reinstituted at 2 o'clock on day 1 of January, 2019.]
|
||||
|
||||
Zone Africa/Sao_Tome 0:26:56 - LMT 1884
|
||||
#STDOFF -0:36:44.68
|
||||
-0:36:45 - LMT 1912 Jan 1 00:00u # Lisbon MT
|
||||
0:00 - GMT 2018 Jan 1 01:00
|
||||
1:00 - WAT 2019 Jan 1 02:00
|
||||
0:00 - GMT
|
||||
|
||||
# Senegal
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Seychelles
|
||||
|
||||
# From P Chan (2020-11-27):
|
||||
# Standard Time was adopted on 1907-01-01.
|
||||
#
|
||||
# Standard Time Ordinance (Chapter 237)
|
||||
# The Laws of Seychelles in Force on the 31st December, 1971, Vol. 6, p 571
|
||||
# https://books.google.com/books?id=efE-AQAAIAAJ&pg=PA571
|
||||
#
|
||||
# From Tim Parenti (2020-12-05):
|
||||
# A footnote on https://books.google.com/books?id=DYdDAQAAMAAJ&pg=PA1689
|
||||
# confirms that Ordinance No. 9 of 1906 "was brought into force on the 1st
|
||||
# January, 1907."
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Mahe 3:41:48 - LMT 1907 Jan 1 # Victoria
|
||||
4:00 - +04
|
||||
# From Paul Eggert (2001-05-30):
|
||||
# Aldabra, Farquhar, and Desroches, originally dependencies of the
|
||||
# Seychelles, were transferred to the British Indian Ocean Territory
|
||||
# in 1965 and returned to Seychelles control in 1976. We don't know
|
||||
# whether this affected their time zone, so omit this for now.
|
||||
# Possibly the islands were uninhabited.
|
||||
|
||||
# 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 -
|
||||
@@ -1490,8 +1289,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
|
||||
@@ -1527,24 +1324,19 @@ Zone Africa/Khartoum 2:10:08 - LMT 1931
|
||||
3:00 - EAT 2017 Nov 1
|
||||
2:00 - CAT
|
||||
|
||||
# South Sudan
|
||||
|
||||
# From Steffen Thorsen (2021-01-18):
|
||||
# "South Sudan will change its time zone by setting the clock back 1
|
||||
# hour on February 1, 2021...."
|
||||
# from https://eyeradio.org/south-sudan-adopts-new-time-zone-makuei/
|
||||
|
||||
# South Sudan
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Juba 2:06:28 - LMT 1931
|
||||
2:00 Sudan CA%sT 2000 Jan 15 12:00
|
||||
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):
|
||||
@@ -1637,15 +1429,8 @@ Rule Tunisia 2005 only - Sep 30 1:00s 0 -
|
||||
Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S
|
||||
Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
|
||||
|
||||
# See Europe/Paris for PMT-related transitions.
|
||||
# See Europe/Paris commentary for PMT-related transitions.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
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.
|
||||
@@ -148,7 +148,7 @@ Zone Antarctica/Mawson 0 - -00 1954 Feb 13
|
||||
#
|
||||
# Alfred Faure, Possession Island, Crozet Islands, -462551+0515152, since 1964;
|
||||
# sealing & whaling stations operated variously 1802/1911+;
|
||||
# see Indian/Reunion.
|
||||
# see Asia/Dubai.
|
||||
#
|
||||
# Martin-de-Viviès, Amsterdam Island, -374105+0773155, since 1950
|
||||
# Port-aux-Français, Kerguelen Islands, -492110+0701303, since 1951;
|
||||
@@ -157,22 +157,10 @@ Zone Antarctica/Mawson 0 - -00 1954 Feb 13
|
||||
# St Paul Island - near Amsterdam, uninhabited
|
||||
# fishing stations operated variously 1819/1931
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Kerguelen 0 - -00 1950 # Port-aux-Français
|
||||
5:00 - +05
|
||||
# Kerguelen - see Indian/Maldives.
|
||||
#
|
||||
# year-round base in the main continent
|
||||
# Dumont d'Urville, Île des Pétrels, -6640+14001, since 1956-11
|
||||
# <https://en.wikipedia.org/wiki/Dumont_d'Urville_Station> (2005-12-05)
|
||||
#
|
||||
# Another base at Port-Martin, 50km east, began operation in 1947.
|
||||
# It was destroyed by fire on 1952-01-14.
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/DumontDUrville 0 - -00 1947
|
||||
10:00 - +10 1952 Jan 14
|
||||
0 - -00 1956 Nov
|
||||
10:00 - +10
|
||||
# Dumont d'Urville - see Pacific/Port_Moresby.
|
||||
|
||||
# France & Italy - year-round base
|
||||
# Concordia, -750600+1232000, since 2005
|
||||
@@ -188,20 +176,7 @@ Zone Antarctica/DumontDUrville 0 - -00 1947
|
||||
# Zuchelli, Terra Nova Bay, -744140+1640647, since 1986
|
||||
|
||||
# Japan - year-round bases
|
||||
# Syowa (also known as Showa), -690022+0393524, since 1957
|
||||
#
|
||||
# From Hideyuki Suzuki (1999-02-06):
|
||||
# In all Japanese stations, +0300 is used as the standard time.
|
||||
#
|
||||
# Syowa station, which is the first antarctic station of Japan,
|
||||
# was established on 1957-01-29. Since Syowa station is still the main
|
||||
# station of Japan, it's appropriate for the principal location.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Syowa 0 - -00 1957 Jan 29
|
||||
3:00 - +03
|
||||
# See:
|
||||
# NIPR Antarctic Research Activities (1999-08-17)
|
||||
# http://www.nipr.ac.jp/english/ara01.html
|
||||
# See Asia/Riyadh.
|
||||
|
||||
# S Korea - year-round base
|
||||
# Jang Bogo, Terra Nova Bay, -743700+1641205 since 2014
|
||||
@@ -265,31 +240,7 @@ Zone Antarctica/Troll 0 - -00 2005 Feb 12
|
||||
# year-round from 1960/61 to 1992
|
||||
|
||||
# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11
|
||||
# From Craig Mundell (1994-12-15):
|
||||
# http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP
|
||||
# Vostok, which is one of the Russian stations, is set on the same
|
||||
# time as Moscow, Russia.
|
||||
#
|
||||
# From Lee Hotz (2001-03-08):
|
||||
# I queried the folks at Columbia who spent the summer at Vostok and this is
|
||||
# what they had to say about time there:
|
||||
# "in the US Camp (East Camp) we have been on New Zealand (McMurdo)
|
||||
# time, which is 12 hours ahead of GMT. The Russian Station Vostok was
|
||||
# 6 hours behind that (although only 2 miles away, i.e. 6 hours ahead
|
||||
# of GMT). This is a time zone I think two hours east of Moscow. The
|
||||
# natural time zone is in between the two: 8 hours ahead of GMT."
|
||||
#
|
||||
# From Paul Eggert (2001-05-04):
|
||||
# This seems to be hopelessly confusing, so I asked Lee Hotz about it
|
||||
# in person. He said that some Antarctic locations set their local
|
||||
# time so that noon is the warmest part of the day, and that this
|
||||
# changes during the year and does not necessarily correspond to mean
|
||||
# solar noon. So the Vostok time might have been whatever the clocks
|
||||
# happened to be during their visit. So we still don't really know what time
|
||||
# it is at Vostok. But we'll guess +06.
|
||||
#
|
||||
Zone Antarctica/Vostok 0 - -00 1957 Dec 16
|
||||
6:00 - +06
|
||||
# See Asia/Urumqi.
|
||||
|
||||
# S Africa - year-round bases
|
||||
# Marion Island, -4653+03752
|
||||
@@ -355,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.
|
||||
+246
-238
@@ -34,9 +34,6 @@
|
||||
# Byalokoz EL. New Counting of Time in Russia since July 1, 1919.
|
||||
# (See the 'europe' file for a fuller citation.)
|
||||
#
|
||||
# A reliable and entertaining source about time zones is
|
||||
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
|
||||
#
|
||||
# The following alphabetic abbreviations appear in these tables
|
||||
# (corrections are welcome):
|
||||
# std dst
|
||||
@@ -152,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
|
||||
@@ -257,13 +251,8 @@ Zone Indian/Chagos 4:49:40 - LMT 1907
|
||||
5:00 - +05 1996
|
||||
6:00 - +06
|
||||
|
||||
# Brunei
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
|
||||
7:30 - +0730 1933
|
||||
8:00 - +08
|
||||
|
||||
# Burma / Myanmar
|
||||
# Cocos (Keeling) Islands
|
||||
# Myanmar (Burma)
|
||||
|
||||
# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
|
||||
|
||||
@@ -280,10 +269,6 @@ Zone Asia/Yangon 6:24:47 - LMT 1880 # or Rangoon
|
||||
9:00 - +09 1945 May 3
|
||||
6:30 - +0630
|
||||
|
||||
# Cambodia
|
||||
# See Asia/Bangkok.
|
||||
|
||||
|
||||
# China
|
||||
|
||||
# From Phake Nick (2020-04-15):
|
||||
@@ -347,12 +332,9 @@ Rule Shang 1919 only - Sep 30 24:00 0 S
|
||||
# in the city at the time for people who use different time standard to adjust
|
||||
# their clock to their preferred time.
|
||||
#
|
||||
# a. For the 1940 May 31 spring forward, the essay claim that it was
|
||||
# coordinared between the international settlement authority and the French
|
||||
# concession authority and have gathered support from Hong Kong and Xiamen,
|
||||
# that it would spring forward an hour from May 31 "midnight", and the essay
|
||||
# claim "Hong Kong government implemented the spring forward in the same time
|
||||
# on the same date as Shanghai".
|
||||
# a. For the 1940 May 31 spring forward, the essay [says] ... "Hong
|
||||
# Kong government implemented the spring forward in the same time on
|
||||
# the same date as Shanghai".
|
||||
#
|
||||
# b. For the 1940 fall back, it was said that they initially intended to do
|
||||
# so on September 30 00:59 at night, however they postponed it to October 12
|
||||
@@ -548,7 +530,7 @@ Rule PRC 1987 1991 - Apr Sun>=11 2:00 1:00 D
|
||||
# Zhongyuan Time ("Central plain Time") UT +08
|
||||
# Now part of Asia/Shanghai.
|
||||
# most of China
|
||||
# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
|
||||
# Milne gives 8:05:43.2 for Xujiahui Observatory time....
|
||||
# Guo says Shanghai switched to UT +08 "from the end of the 19th century".
|
||||
#
|
||||
# Long-shu Time (probably as Long and Shu were two names of the area) UT +07
|
||||
@@ -667,18 +649,19 @@ Rule PRC 1987 1991 - Apr Sun>=11 2:00 1:00 D
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Beijing time, used throughout China; represented by Shanghai.
|
||||
#STDOFF 8:05:43.2
|
||||
Zone Asia/Shanghai 8:05:43 - LMT 1901
|
||||
8:00 Shang C%sT 1949 May 28
|
||||
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
|
||||
|
||||
|
||||
# Hong Kong
|
||||
|
||||
# Milne gives 7:36:41.7; round this.
|
||||
# Milne gives 7:36:41.7.
|
||||
|
||||
# From Lee Yiu Chung (2009-10-24):
|
||||
# I found there are some mistakes for the...DST rule for Hong
|
||||
@@ -862,7 +845,8 @@ Rule HK 1973 only - Dec 30 3:30 1:00 S
|
||||
Rule HK 1979 only - May 13 3:30 1:00 S
|
||||
Rule HK 1979 only - Oct 21 3:30 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30 0:36:42
|
||||
#STDOFF 7:36:41.7
|
||||
Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 29 17:00u
|
||||
8:00 - HKT 1941 Jun 15 3:00
|
||||
8:00 1:00 HKST 1941 Oct 1 4:00
|
||||
8:00 0:30 HKWT 1941 Dec 25
|
||||
@@ -1177,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
|
||||
@@ -1337,7 +1317,7 @@ Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
|
||||
#
|
||||
# From Paul Eggert (2014-09-06):
|
||||
# The 1876 Report of the Secretary of the [US] Navy, p 306 says that Batavia
|
||||
# civil time was 7:07:12.5; round to even for Jakarta.
|
||||
# civil time was 7:07:12.5.
|
||||
#
|
||||
# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
|
||||
# http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime
|
||||
@@ -1373,10 +1353,11 @@ Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Java, Sumatra
|
||||
#STDOFF 7:07:12.5
|
||||
Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10
|
||||
# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
|
||||
# but this must be a typo.
|
||||
7:07:12 - BMT 1923 Dec 31 23:47:12 # Batavia
|
||||
7:07:12 - BMT 1923 Dec 31 16:40u # Batavia
|
||||
7:20 - +0720 1932 Nov
|
||||
7:30 - +0730 1942 Mar 23
|
||||
9:00 - +09 1945 Sep 23
|
||||
@@ -1408,6 +1389,111 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
|
||||
|
||||
# Iran
|
||||
|
||||
# From Roozbeh Pournader (2022-05-30):
|
||||
# Here's an order from the Cabinet to the rest of the government to switch to
|
||||
# Tehran time, which is mentioned to be already at +03:30:
|
||||
# https://qavanin.ir/Law/TreeText/180138
|
||||
# Just in case that goes away, I also saved a copy at archive.org:
|
||||
# https://web.archive.org/web/20220530111940/https://qavanin.ir/Law/TreeText/180138
|
||||
# Here's my translation:
|
||||
#
|
||||
# "Circular on Matching the Hours of Governmental and Official Circles
|
||||
# in Provinces
|
||||
# Approved 1314/03/22 [=1935-06-13]
|
||||
# According to the ruling of the Honorable Cabinet, it is ordered that from
|
||||
# now on in all internal provinces of the country, governmental and official
|
||||
# circles set their time to match Tehran time (three hours and half before
|
||||
# Greenwich)....
|
||||
#
|
||||
# I still haven't found out when Tehran itself switched to +03:30....
|
||||
#
|
||||
# From Paul Eggert (2022-06-05):
|
||||
# Although the above says Tehran was at +03:30 before 1935-06-13, we don't
|
||||
# know when it switched to +03:30. For now, use 1935-06-13 as the switch date.
|
||||
# Although most likely wrong, we have no better info.
|
||||
|
||||
# From Roozbeh Pournader (2022-06-01):
|
||||
# This is from Kayhan newspaper, one of the major Iranian newspapers, from
|
||||
# March 20, 1978, page 2:
|
||||
#
|
||||
# "Pull the clocks 60 minutes forward
|
||||
# As we informed before, from the fourth day of the month Farvardin of the
|
||||
# new year [=1978-03-24], clocks will be pulled forward, and people's daily
|
||||
# work and life program will start one hour earlier than the current program.
|
||||
# On the 1st day of the month Farvardin of this year [=1977-03-21], they had
|
||||
# pulled the clocks forward by one hour, but in the month of Mehr
|
||||
# [=1977-09-23], the clocks were pulled back by 30 minutes.
|
||||
# In this way, from the 4th day of the month Farvardin, clocks will be ahead
|
||||
# of the previous years by one hour and a half.
|
||||
# According to the new program, during the night of 4th of Farvardin, when
|
||||
# the midnight, meaning 24 o'clock is announced, the hands of the clock must
|
||||
# be pulled forward by one hour and thus consider midnight 1 o'clock in the
|
||||
# forenoon."
|
||||
#
|
||||
# This implies that in September 1977, when the daylight savings time was
|
||||
# done with, Iran didn't go back to +03:30, but immediately to +04:00.
|
||||
#
|
||||
#
|
||||
# This is from the major Iranian newspaper Ettela'at, dated [1978-08-03]...,
|
||||
# page 32. It looks like they decided to get the clocks back to +4:00
|
||||
# just in time for Ramadan that year:
|
||||
#
|
||||
# "Tomorrow Night, Pull the Clocks Back by One Hour
|
||||
# At 1 o'clock in the forenoon of Saturday 14 Mordad [=1978-08-05], the
|
||||
# clocks will be pulled one hour back and instead of 1 o'clock in the
|
||||
# forenoon, Radio Iran will announce 24 o'clock.
|
||||
# This decision was made in the Cabinet of Ministers meeting of 25 Tir
|
||||
# [=1978-07-16], [...]
|
||||
# At the beginning of the year 2537 [=March 1978: Iran was using a different
|
||||
# year number for a few years then, based on the Coronation of Cyrus the
|
||||
# Great], the country's official time was pulled forward by one hour and now
|
||||
# the official time is one hour and a half ahead compared to last year,
|
||||
# because in Farvardin of last year [=March 1977], the official time was
|
||||
# pulled forward one hour and this continued until the second half of last
|
||||
# year [=September 1977] until in the second half of last year the official
|
||||
# time was pulled back half an hour and that half hour still remains."
|
||||
#
|
||||
# This matches the time of the true noon published in the newspapers, as they
|
||||
# clearly go from +05:00 to +04:00 after that date (which happened during a
|
||||
# long weekend in Iran).
|
||||
|
||||
# From Roozbeh Pournader (2022-05-31):
|
||||
# [Movahedi S. Cultural preconceptions of time: Can we use operational time
|
||||
# to meddle in God's Time? Comp Stud Soc Hist. 1985;27(3):385-400]
|
||||
# https://www.jstor.org/stable/178704
|
||||
# Here's the quotes from the paper:
|
||||
# 1. '"Iran's official time keeper moved the clock one hour forward as from
|
||||
# March 22, 1977 (Farvardin 2, 2536) to make maximum use of daylight and save
|
||||
# in energy consumption. Thus Iran joined such other countries as Britain in
|
||||
# observing what is known as 'daylight saving.' The proposal was originally
|
||||
# put forward by the Ministry of Energy, in no way having any influence on
|
||||
# observing religious ceremonies. Moving time one hour forward in summer
|
||||
# means that at 11:00 o'clock on March 21, the official time was set as
|
||||
# midnight March 22. Then September 24 will actually begin one hour later
|
||||
# than the end of September 23 [...]." Iran's time base thus continued to be
|
||||
# Greenwich Mean Time plus three and one-half hours (plus four and one-half
|
||||
# hours in summer).'
|
||||
#
|
||||
# The article sources this from Iran Almanac and Book of Facts, 1977, Tehran:
|
||||
# Echo of Iran, which is on Google Books at
|
||||
# https://www.google.com/books/edition/Iran_Almanac_and_Book_of_Facts/9ybVAAAAMAAJ.
|
||||
# (I confirmed it by searching for snippets.)
|
||||
#
|
||||
# 2. "After the fall of the shah, the revolutionary government returned to
|
||||
# daylight-saving time (DST) on 26 May 1979."
|
||||
#
|
||||
# This seems to have been announced just one day in advance, on 25 May 1979.
|
||||
#
|
||||
# The change in 1977 clearly seems to be the first daylight savings effort in
|
||||
# Iran. But the article doesn't mention what happened in 1978 (which was
|
||||
# still during the shah's government), or how things continued in 1979
|
||||
# onwards (which was during the Islamic Republic).
|
||||
|
||||
# From Francis Santoni (2022-06-01):
|
||||
# for Iran and 1977 the effective change is only 20 October
|
||||
# (UIT No. 143 17.XI.1977) and not 23 September (UIT No. 141 13.IX.1977).
|
||||
# UIT is the Operational Bulletin of International Telecommunication Union.
|
||||
|
||||
# From Roozbeh Pournader (2003-03-15):
|
||||
# This is an English translation of what I just found (originally in Persian).
|
||||
# The Gregorian dates in brackets are mine:
|
||||
@@ -1442,65 +1528,12 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
|
||||
# leap year calculation involved. There has never been any serious
|
||||
# plan to change that law....
|
||||
#
|
||||
# From Paul Eggert (2018-11-30):
|
||||
# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter.
|
||||
# I used the following code in GNU Emacs 26.1 to generate the "Rule Iran"
|
||||
# lines from 2008 through 2087. Emacs 26.1 uses Ed Reingold's
|
||||
# cal-persia implementation of Birashk's approximation, which in the
|
||||
# 2008-2087 range disagrees with the astronomical Persian calendar
|
||||
# for Persian years 1404 (Gregorian 2025) and 1437 (Gregorian 2058), so
|
||||
# the following code special-cases those years. See Table 15.1, page 264, of:
|
||||
# Edward M. Reingold and Nachum Dershowitz, Calendrical Calculations:
|
||||
# The Ultimate Edition, Cambridge University Press (2018).
|
||||
# https://www.cambridge.org/fr/academic/subjects/computer-science/computing-general-interest/calendrical-calculations-ultimate-edition-4th-edition
|
||||
# Page 258, footnote 2, of this book says there is some dispute over what will
|
||||
# happen in 2091 (and some other years after that), so this code
|
||||
# stops in 2087, as 2088 and 2089 agree with the "max" rule below.
|
||||
# (cl-loop
|
||||
# initially (require 'cal-persia)
|
||||
# with first-persian-year = 1387
|
||||
# with last-persian-year = 1466
|
||||
# ;; Exceptional years in the above range,
|
||||
# ;; from Reingold & Dershowitz Table 15.1, page 264:
|
||||
# with exceptional-persian-years = '(1404 1437)
|
||||
# with range-start = nil
|
||||
# for persian-year from first-persian-year to last-persian-year
|
||||
# do
|
||||
# (let*
|
||||
# ((exceptional-year-offset
|
||||
# (if (member persian-year exceptional-persian-years) 1 0))
|
||||
# (beg-dst-absolute
|
||||
# (+ (calendar-persian-to-absolute (list 1 1 persian-year))
|
||||
# exceptional-year-offset))
|
||||
# (end-dst-absolute
|
||||
# (+ (calendar-persian-to-absolute (list 6 30 persian-year))
|
||||
# exceptional-year-offset))
|
||||
# (next-year-beg-dst-absolute
|
||||
# (+ (calendar-persian-to-absolute (list 1 1 (1+ persian-year)))
|
||||
# (if (member (1+ persian-year) exceptional-persian-years) 1 0)))
|
||||
# (beg-dst (calendar-gregorian-from-absolute beg-dst-absolute))
|
||||
# (end-dst (calendar-gregorian-from-absolute end-dst-absolute))
|
||||
# (next-year-beg-dst (calendar-gregorian-from-absolute
|
||||
# next-year-beg-dst-absolute))
|
||||
# (year (calendar-extract-year beg-dst))
|
||||
# (range-end (if range-start year "only")))
|
||||
# (setq range-start (or range-start year))
|
||||
# (when (or (/= (calendar-extract-day beg-dst)
|
||||
# (calendar-extract-day next-year-beg-dst))
|
||||
# (= persian-year last-persian-year))
|
||||
# (insert
|
||||
# (format
|
||||
# "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t1:00\t-\n"
|
||||
# range-start range-end
|
||||
# (calendar-month-name (calendar-extract-month beg-dst) t)
|
||||
# (calendar-extract-day beg-dst)))
|
||||
# (insert
|
||||
# (format
|
||||
# "Rule\tIran\t%d\t%s\t-\t%s\t%2d\t24:00\t0\t-\n"
|
||||
# range-start range-end
|
||||
# (calendar-month-name (calendar-extract-month end-dst) t)
|
||||
# (calendar-extract-day end-dst)))
|
||||
# (setq range-start nil))))
|
||||
# From Paul Eggert (2022-06-30):
|
||||
# Go with Pournader for 1935 through spring 1979, and for timestamps
|
||||
# after August 1991; go with with Shanks & Pottenger for other timestamps.
|
||||
# Go with Santoni's citation of the UIT for fall 1977, as 20 October 1977
|
||||
# is 28 Mehr 1356, consistent with the "Mehr" in Pournader's source.
|
||||
# Assume that the UIT's "1930" is UTC, i.e., 24:00 local time.
|
||||
#
|
||||
# From Oscar van Vlijmen (2005-03-30), writing about future
|
||||
# discrepancies between cal-persia and the Iranian calendar:
|
||||
@@ -1534,10 +1567,23 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
|
||||
# be changed back to its previous state on the 24 hours of the
|
||||
# thirtieth day of Shahrivar.
|
||||
#
|
||||
# From Ali Mirjamali (2022-05-10):
|
||||
# Official IR News Agency announcement: irna.ir/xjJ3TT
|
||||
# ...
|
||||
# Highlights: DST will be cancelled for the next Iranian year 1402
|
||||
# (i.e 2023-March-21) and forthcoming years.
|
||||
#
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Iran 1978 1980 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 1978 only - Oct 20 24:00 0 -
|
||||
# Work around a bug in zic 2022a and earlier.
|
||||
Rule Iran 1910 only - Jan 1 00:00 0 -
|
||||
#
|
||||
Rule Iran 1977 only - Mar 21 23:00 1:00 -
|
||||
Rule Iran 1977 only - Oct 20 24:00 0 -
|
||||
Rule Iran 1978 only - Mar 24 24:00 1:00 -
|
||||
Rule Iran 1978 only - Aug 5 01:00 0 -
|
||||
Rule Iran 1979 only - May 26 24:00 1:00 -
|
||||
Rule Iran 1979 only - Sep 18 24:00 0 -
|
||||
Rule Iran 1980 only - Mar 20 24:00 1:00 -
|
||||
Rule Iran 1980 only - Sep 22 24:00 0 -
|
||||
Rule Iran 1991 only - May 2 24:00 1:00 -
|
||||
Rule Iran 1992 1995 - Mar 21 24:00 1:00 -
|
||||
@@ -1568,85 +1614,13 @@ Rule Iran 2017 2019 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2017 2019 - Sep 21 24:00 0 -
|
||||
Rule Iran 2020 only - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2020 only - Sep 20 24:00 0 -
|
||||
Rule Iran 2021 2023 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2021 2023 - Sep 21 24:00 0 -
|
||||
Rule Iran 2024 only - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2024 only - Sep 20 24:00 0 -
|
||||
Rule Iran 2025 2027 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2025 2027 - Sep 21 24:00 0 -
|
||||
Rule Iran 2028 2029 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2028 2029 - Sep 20 24:00 0 -
|
||||
Rule Iran 2030 2031 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2030 2031 - Sep 21 24:00 0 -
|
||||
Rule Iran 2032 2033 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2032 2033 - Sep 20 24:00 0 -
|
||||
Rule Iran 2034 2035 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2034 2035 - Sep 21 24:00 0 -
|
||||
Rule Iran 2036 2037 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2036 2037 - Sep 20 24:00 0 -
|
||||
Rule Iran 2038 2039 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2038 2039 - Sep 21 24:00 0 -
|
||||
Rule Iran 2040 2041 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2040 2041 - Sep 20 24:00 0 -
|
||||
Rule Iran 2042 2043 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2042 2043 - Sep 21 24:00 0 -
|
||||
Rule Iran 2044 2045 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2044 2045 - Sep 20 24:00 0 -
|
||||
Rule Iran 2046 2047 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2046 2047 - Sep 21 24:00 0 -
|
||||
Rule Iran 2048 2049 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2048 2049 - Sep 20 24:00 0 -
|
||||
Rule Iran 2050 2051 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2050 2051 - Sep 21 24:00 0 -
|
||||
Rule Iran 2052 2053 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2052 2053 - Sep 20 24:00 0 -
|
||||
Rule Iran 2054 2055 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2054 2055 - Sep 21 24:00 0 -
|
||||
Rule Iran 2056 2057 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2056 2057 - Sep 20 24:00 0 -
|
||||
Rule Iran 2058 2059 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2058 2059 - Sep 21 24:00 0 -
|
||||
Rule Iran 2060 2062 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2060 2062 - Sep 20 24:00 0 -
|
||||
Rule Iran 2063 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2063 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2064 2066 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2064 2066 - Sep 20 24:00 0 -
|
||||
Rule Iran 2067 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2067 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2068 2070 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2068 2070 - Sep 20 24:00 0 -
|
||||
Rule Iran 2071 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2071 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2072 2074 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2072 2074 - Sep 20 24:00 0 -
|
||||
Rule Iran 2075 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2075 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2076 2078 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2076 2078 - Sep 20 24:00 0 -
|
||||
Rule Iran 2079 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2079 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2080 2082 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2080 2082 - Sep 20 24:00 0 -
|
||||
Rule Iran 2083 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2083 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2084 2086 - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2084 2086 - Sep 20 24:00 0 -
|
||||
Rule Iran 2087 only - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2087 only - Sep 21 24:00 0 -
|
||||
#
|
||||
# The following rules are approximations starting in the year 2088.
|
||||
# These are the best post-2088 approximations available, given the
|
||||
# restrictions of a single rule using ordinary Gregorian dates.
|
||||
# At some point this table will need to be extended, though quite
|
||||
# possibly Iran will change the rules first.
|
||||
Rule Iran 2088 max - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2088 max - Sep 20 24:00 0 -
|
||||
Rule Iran 2021 2022 - Mar 21 24:00 1:00 -
|
||||
Rule Iran 2021 2022 - Sep 21 24:00 0 -
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Tehran 3:25:44 - LMT 1916
|
||||
3:25:44 - TMT 1946 # Tehran Mean Time
|
||||
3:30 - +0330 1977 Nov
|
||||
3:25:44 - TMT 1935 Jun 13 # Tehran Mean Time
|
||||
3:30 Iran +0330/+0430 1977 Oct 20 24:00
|
||||
4:00 Iran +04/+05 1979
|
||||
3:30 Iran +0330/+0430
|
||||
|
||||
@@ -2242,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 -
|
||||
@@ -2273,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
|
||||
@@ -2468,9 +2454,9 @@ Zone Asia/Amman 2:23:44 - LMT 1931
|
||||
# the third time belt (before 1930 this means +03).
|
||||
|
||||
# From Alexander Konzurovski (2018-12-20):
|
||||
# Qyzyolrda Region (Asia/Qyzylorda) is changing its time zone from
|
||||
# UTC+6 to UTC+5 effective December 21st, 2018. The legal document is
|
||||
# located here: http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
|
||||
# (Asia/Qyzylorda) is changing its time zone from UTC+6 to UTC+5
|
||||
# effective December 21st, 2018....
|
||||
# http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#
|
||||
@@ -2703,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
|
||||
@@ -2742,24 +2720,15 @@ 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 -
|
||||
#
|
||||
# peninsular Malaysia
|
||||
# taken from Mok Ly Yng (2003-10-30)
|
||||
# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
|
||||
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
|
||||
7:00 - +07 1933 Jan 1
|
||||
7:00 0:20 +0720 1936 Jan 1
|
||||
7:20 - +0720 1941 Sep 1
|
||||
7:30 - +0730 1942 Feb 16
|
||||
9:00 - +09 1945 Sep 12
|
||||
7:30 - +0730 1982 Jan 1
|
||||
8:00 - +08
|
||||
# For peninsular Malaysia see Asia/Singapore.
|
||||
#
|
||||
# Sabah & Sarawak
|
||||
# From Paul Eggert (2014-08-12):
|
||||
# The data entries here are mostly from Shanks & Pottenger, but the 1942, 1945
|
||||
@@ -2938,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):
|
||||
@@ -3388,11 +3354,6 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
|
||||
# shall [end] on Oct 24th 2020 at 01:00AM by delaying the clock by 60 minutes.
|
||||
# http://www.palestinecabinet.gov.ps/portal/Meeting/Details/51584
|
||||
|
||||
# From Tim Parenti (2020-10-20):
|
||||
# Predict future fall transitions at 01:00 on the Saturday preceding October's
|
||||
# last Sunday (i.e., Sat>=24). This is consistent with our predictions since
|
||||
# 2016, although the time of the change differed slightly in 2019.
|
||||
|
||||
# From Pierre Cashon (2020-10-20):
|
||||
# The summer time this year started on March 28 at 00:00.
|
||||
# https://wafa.ps/ar_page.aspx?id=GveQNZa872839351758aGveQNZ
|
||||
@@ -3400,10 +3361,33 @@ 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 P Chan (2021-10-18):
|
||||
# http://wafa.ps/Pages/Details/34701
|
||||
# Palestine winter time will start from midnight 2021-10-29 (Thursday-Friday).
|
||||
#
|
||||
# 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 Heba Hemad, Palestine Ministry of Telecom & IT (2021-10-20):
|
||||
# ... winter time will begin in Palestine from Friday 10-29, 01:00 AM
|
||||
# by 60 minutes backwards.
|
||||
#
|
||||
# From Tim Parenti (2021-10-25), per Paul Eggert (2021-10-24):
|
||||
# Guess future fall transitions at 01:00 on the Friday preceding October's
|
||||
# last Sunday (i.e., Fri>=23), as this is more consistent with recent practice.
|
||||
|
||||
# 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
|
||||
@@ -3435,12 +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 max - Mar Sat>=24 0:00 1:00 S
|
||||
Rule Palestine 2020 max - Oct Sat>=24 1:00 0 -
|
||||
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 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
|
||||
@@ -3509,6 +3497,12 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct
|
||||
# influence of the sources. There is no current abbreviation for DST,
|
||||
# so use "PDT", the usual American style.
|
||||
|
||||
# From P Chan (2021-05-10):
|
||||
# Here's a fairly comprehensive article in Japanese:
|
||||
# https://wiki.suikawiki.org/n/Philippine%20Time
|
||||
# From Paul Eggert (2021-05-10):
|
||||
# The info in the Japanese table has not been absorbed (yet) below.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Phil 1936 only - Nov 1 0:00 1:00 D
|
||||
Rule Phil 1937 only - Feb 1 0:00 0 S
|
||||
@@ -3523,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
|
||||
@@ -3575,12 +3573,10 @@ 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 Asia/Aden # Yemen
|
||||
Link Asia/Riyadh Asia/Kuwait
|
||||
|
||||
# Singapore
|
||||
# taken from Mok Ly Yng (2003-10-30)
|
||||
# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
|
||||
# https://web.archive.org/web/20190822231045/http://www.math.nus.edu.sg/~mathelmr/teaching/timezone.html
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
|
||||
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
|
||||
@@ -3589,7 +3585,7 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
|
||||
7:20 - +0720 1941 Sep 1
|
||||
7:30 - +0730 1942 Feb 16
|
||||
9:00 - +09 1945 Sep 12
|
||||
7:30 - +0730 1982 Jan 1
|
||||
7:30 - +0730 1981 Dec 31 16:00u
|
||||
8:00 - +08
|
||||
|
||||
# Spratly Is
|
||||
@@ -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.
|
||||
@@ -3825,16 +3829,18 @@ Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
|
||||
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
|
||||
5:00 - +05 1930 Jun 21
|
||||
6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
|
||||
5:00 1:00 +05/+06 1991 Sep 9 2:00s
|
||||
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
|
||||
|
||||
# Turkmenistan
|
||||
# From Shanks & Pottenger.
|
||||
@@ -3845,11 +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
|
||||
|
||||
# Uzbekistan
|
||||
# Byalokoz 1919 says Uzbekistan was 4:27:53.
|
||||
@@ -3861,14 +3871,15 @@ Zone Asia/Samarkand 4:27:53 - LMT 1924 May 2
|
||||
6:00 - +06 1982 Apr 1
|
||||
5:00 RussiaAsia +05/+06 1992
|
||||
5:00 - +05
|
||||
# Milne says Tashkent was 4:37:10.8; round to nearest.
|
||||
# Milne says Tashkent was 4:37:10.8.
|
||||
#STDOFF 4:37:10.8
|
||||
Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
||||
5:00 - +05 1930 Jun 21
|
||||
6:00 RussiaAsia +06/+07 1991 Mar 31 2:00
|
||||
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
|
||||
@@ -3880,7 +3891,7 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
||||
# The English-language name of Vietnam's most populous city is "Ho Chi Minh
|
||||
# City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters.
|
||||
|
||||
# From Paul Eggert (2014-10-21) after a heads-up from Trần Ngọc Quân:
|
||||
# From Paul Eggert (2022-07-27) after a 2014 heads-up from Trần Ngọc Quân:
|
||||
# Trần Tiến Bình's authoritative book "Lịch Việt Nam: thế kỷ XX-XXI (1901-2100)"
|
||||
# (Nhà xuất bản Văn Hoá - Thông Tin, Hanoi, 2005), pp 49-50,
|
||||
# is quoted verbatim in:
|
||||
@@ -3892,8 +3903,8 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
||||
# The 1906 transition was effective July 1 and standardized Indochina to
|
||||
# Phù Liễn Observatory, legally 104° 17' 17" east of Paris.
|
||||
# It's unclear whether this meant legal Paris Mean Time (00:09:21) or
|
||||
# the Paris Meridian (2° 20' 14.03" E); the former yields 07:06:30.1333...
|
||||
# and the latter 07:06:29.333... so either way it rounds to 07:06:30,
|
||||
# the Paris Meridian; for now guess the former and round the exact
|
||||
# 07:06:30.1333... to 07:06:30.13 as the legal spec used 66 2/3 ms precision.
|
||||
# which is used below even though the modern-day Phù Liễn Observatory
|
||||
# is closer to 07:06:31. Abbreviate Phù Liễn Mean Time as PLMT.
|
||||
#
|
||||
@@ -3920,7 +3931,8 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
||||
# NXB Thuận Hoá, Huế, 1995.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jul 1
|
||||
#STDOFF 7:06:30.13
|
||||
Zone Asia/Ho_Chi_Minh 7:06:30 - LMT 1906 Jul 1
|
||||
7:06:30 - PLMT 1911 May 1 # Phù Liễn MT
|
||||
7:00 - +07 1942 Dec 31 23:00
|
||||
8:00 - +08 1945 Mar 14 23:00
|
||||
@@ -3941,7 +3953,3 @@ Zone Asia/Ho_Chi_Minh 7:06:40 - 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.
|
||||
+146
-116
@@ -251,19 +251,6 @@ Zone Antarctica/Macquarie 0 - -00 1899 Nov
|
||||
10:00 1:00 AEDT 2011
|
||||
10:00 AT AE%sT
|
||||
|
||||
# Christmas
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
|
||||
7:00 - +07
|
||||
|
||||
# Cocos (Keeling) Is
|
||||
# These islands were ruled by the Ross family from about 1830 to 1978.
|
||||
# We don't know when standard time was introduced; for now, we guess 1900.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Cocos 6:27:40 - LMT 1900
|
||||
6:30 - +0630
|
||||
|
||||
|
||||
# Fiji
|
||||
|
||||
# Milne gives 11:55:44 for Suva.
|
||||
@@ -385,9 +372,28 @@ Zone Indian/Cocos 6:27:40 - LMT 1900
|
||||
# "Minister for Employment, Parveen Bala says they had never thought of
|
||||
# stopping daylight saving. He says it was just to decide on when it should
|
||||
# start and end. Bala says it is a short period..."
|
||||
# Since the end date is still in line with our ongoing predictions, assume for
|
||||
# now that the later-than-usual start date is a one-time departure from the
|
||||
# recent second Sunday in November pattern.
|
||||
#
|
||||
# From Tim Parenti (2021-10-11), per Jashneel Kumar (2021-10-11) and P Chan
|
||||
# (2021-10-12):
|
||||
# https://www.fiji.gov.fj/Media-Centre/Speeches/English/PM-BAINIMARAMA-S-COVID-19-ANNOUNCEMENT-10-10-21
|
||||
# https://www.fbcnews.com.fj/news/covid-19/curfew-moved-back-to-11pm/
|
||||
# In a 2021-10-10 speech concerning updated Covid-19 mitigation measures in
|
||||
# Fiji, prime minister Josaia Voreqe "Frank" Bainimarama announced the
|
||||
# suspension of DST for the 2021/2022 season: "Given that we are in the process
|
||||
# of readjusting in the midst of so many changes, we will also put Daylight
|
||||
# Savings Time on hold for this year. It will also make the reopening of
|
||||
# scheduled commercial air service much smoother if we don't have to be
|
||||
# concerned shifting arrival and departure times, which may look like a simple
|
||||
# thing but requires some significant logistical adjustments domestically and
|
||||
# internationally."
|
||||
|
||||
# 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 -
|
||||
@@ -399,10 +405,9 @@ Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
|
||||
Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
|
||||
Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
|
||||
Rule Fiji 2014 2018 - Nov Sun>=1 2:00 1:00 -
|
||||
Rule Fiji 2015 max - Jan Sun>=12 3:00 0 -
|
||||
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 2021 max - Nov Sun>=8 2:00 1:00 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
|
||||
12:00 Fiji +12/+13
|
||||
@@ -418,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
|
||||
@@ -458,13 +465,21 @@ 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
|
||||
Zone Pacific/Enderbury -11:24:20 - LMT 1901
|
||||
|
||||
# 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
|
||||
13:00 - +13
|
||||
@@ -473,19 +488,9 @@ 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]
|
||||
Zone Pacific/Majuro 11:24:48 - LMT 1901
|
||||
11:00 - +11 1914 Oct
|
||||
9:00 - +09 1919 Feb 1
|
||||
11:00 - +11 1937
|
||||
10:00 - +10 1941 Apr 1
|
||||
9:00 - +09 1944 Jan 30
|
||||
11:00 - +11 1969 Oct
|
||||
12:00 - +12
|
||||
Zone Pacific/Kwajalein 11:09:20 - LMT 1901
|
||||
11:00 - +11 1937
|
||||
10:00 - +10 1941 Apr 1
|
||||
@@ -495,22 +500,9 @@ Zone Pacific/Kwajalein 11:09:20 - LMT 1901
|
||||
12:00 - +12
|
||||
|
||||
# Micronesia
|
||||
# For Chuuk and Yap see Pacific/Port_Moresby.
|
||||
# For Pohnpei see Pacific/Guadalcanal.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Chuuk -13:52:52 - LMT 1844 Dec 31
|
||||
10:07:08 - LMT 1901
|
||||
10:00 - +10 1914 Oct
|
||||
9:00 - +09 1919 Feb 1
|
||||
10:00 - +10 1941 Apr 1
|
||||
9:00 - +09 1945 Aug
|
||||
10:00 - +10
|
||||
Zone Pacific/Pohnpei -13:27:08 - LMT 1844 Dec 31 # Kolonia
|
||||
10:32:52 - LMT 1901
|
||||
11:00 - +11 1914 Oct
|
||||
9:00 - +09 1919 Feb 1
|
||||
11:00 - +11 1937
|
||||
10:00 - +10 1941 Apr 1
|
||||
9:00 - +09 1945 Aug
|
||||
11:00 - +11
|
||||
Zone Pacific/Kosrae -13:08:04 - LMT 1844 Dec 31
|
||||
10:51:56 - LMT 1901
|
||||
11:00 - +11 1914 Oct
|
||||
@@ -545,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
|
||||
@@ -580,12 +573,11 @@ 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
|
||||
|
||||
Zone Pacific/Chatham 12:13:48 - LMT 1868 Nov 2
|
||||
12:15 - +1215 1946 Jan 1
|
||||
12:45 Chatham +1245/+1345
|
||||
|
||||
Link Pacific/Auckland Antarctica/McMurdo
|
||||
|
||||
# Auckland Is
|
||||
# uninhabited; Māori and Moriori, colonial settlers, pastoralists, sealers,
|
||||
# and scientific personnel have wintered
|
||||
@@ -597,13 +589,46 @@ Link Pacific/Auckland Antarctica/McMurdo
|
||||
# was probably like Pacific/Auckland
|
||||
|
||||
# Cook Is
|
||||
# From Shanks & Pottenger:
|
||||
#
|
||||
# From Alexander Krivenyshev (2021-03-24):
|
||||
# In 1899 the Cook Islands celebrated Christmas twice to correct the calendar.
|
||||
# According to the old books, missionaries were unaware of
|
||||
# the International Date line, when they came from Sydney.
|
||||
# Thus the Cook Islands were one day ahead....
|
||||
# http://nzetc.victoria.ac.nz/tm/scholarly/tei-KloDisc-t1-body-d18.html
|
||||
# ... Appendix to the Journals of the House of Representatives, 1900
|
||||
# https://atojs.natlib.govt.nz/cgi-bin/atojs?a=d&d=AJHR1900-I.2.1.2.3
|
||||
# (page 20)
|
||||
#
|
||||
# From Michael Deckers (2021-03-24):
|
||||
# ... in the Cook Island Act of 1915-10-11, online at
|
||||
# http://www.paclii.org/ck/legis/ck-nz_act/cia1915132/
|
||||
# "651. The hour of the day shall in each of the islands included in the
|
||||
# Cook Islands be determined in accordance with the meridian of that island."
|
||||
# so that local (mean?) time was still used in Rarotonga (and Niue) in 1915.
|
||||
# This was changed in the Cook Island Amendment Act of 1952-10-16 ...
|
||||
# http://www.paclii.org/ck/legis/ck-nz_act/ciaa1952212/
|
||||
# "651 (1) The hour of the day in each of the islands included in the Cook
|
||||
# Islands, other than Niue, shall be determined as if each island were
|
||||
# situated on the meridian one hundred and fifty-seven degrees thirty minutes
|
||||
# West of Greenwich. (2) The hour of the day in the Island of Niue shall be
|
||||
# determined as if that island were situated on the meridian one hundred and
|
||||
# seventy degrees West of Greenwich."
|
||||
# This act does not state when it takes effect, so one has to assume it
|
||||
# applies since 1952-10-16. But there is the possibility that the act just
|
||||
# legalized prior existing practice, as we had seen with the Guernsey law of
|
||||
# 1913-06-18 for the switch in 1909-04-19.
|
||||
#
|
||||
# From Paul Eggert (2021-03-24):
|
||||
# Transitions after 1952 are from Shanks & Pottenger.
|
||||
#
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Cook 1978 only - Nov 12 0:00 0:30 -
|
||||
Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
|
||||
Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
|
||||
Zone Pacific/Rarotonga 13:20:56 - LMT 1899 Dec 26 # Avarua
|
||||
-10:39:04 - LMT 1952 Oct 16
|
||||
-10:30 - -1030 1978 Nov 12
|
||||
-10:00 Cook -10/-0930
|
||||
|
||||
@@ -611,10 +636,18 @@ Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
|
||||
|
||||
|
||||
# Niue
|
||||
# See Pacific/Rarotonga comments for 1952 transition.
|
||||
#
|
||||
# From Tim Parenti (2021-09-13):
|
||||
# Consecutive contemporaneous editions of The Air Almanac listed -11:20 for
|
||||
# Niue as of Apr 1964 but -11 as of Aug 1964:
|
||||
# Apr 1964: https://books.google.com/books?id=_1So677Y5vUC&pg=SL1-PA23
|
||||
# Aug 1964: https://books.google.com/books?id=MbJloqd-zyUC&pg=SL1-PA23
|
||||
# Without greater specificity, guess 1964-07-01 for this transition.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
|
||||
-11:20 - -1120 1951
|
||||
-11:30 - -1130 1978 Oct 1
|
||||
Zone Pacific/Niue -11:19:40 - LMT 1952 Oct 16 # Alofi
|
||||
-11:20 - -1120 1964 Jul
|
||||
-11:00 - -11
|
||||
|
||||
# Norfolk
|
||||
@@ -670,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)
|
||||
|
||||
@@ -799,16 +832,11 @@ Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
|
||||
Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
|
||||
Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Tongatapu 12:19:20 - LMT 1901
|
||||
12:20 - +1220 1941
|
||||
Zone Pacific/Tongatapu 12:19:12 - LMT 1945 Sep 10
|
||||
12:20 - +1220 1961
|
||||
13:00 - +13 1999
|
||||
13:00 Tonga +13/+14
|
||||
|
||||
# Tuvalu
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Funafuti 11:56:52 - LMT 1901
|
||||
12:00 - +12
|
||||
|
||||
|
||||
# US minor outlying islands
|
||||
|
||||
@@ -859,17 +887,9 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
|
||||
# Kingman
|
||||
# uninhabited
|
||||
|
||||
# Midway
|
||||
# See Pacific/Pago_Pago.
|
||||
|
||||
# Palmyra
|
||||
# uninhabited since World War II; was probably like Pacific/Kiritimati
|
||||
|
||||
# Wake
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Wake 11:06:28 - LMT 1901
|
||||
12:00 - +12
|
||||
|
||||
|
||||
# Vanuatu
|
||||
|
||||
@@ -906,11 +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
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
12:00 - +12
|
||||
|
||||
###############################################################################
|
||||
|
||||
# NOTES
|
||||
@@ -1227,6 +1242,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
# to have the extra hour of sunshine removed from their area." See:
|
||||
# Daylight saving coming to WA in 2019. Guardian Express. 2018-04-01.
|
||||
# https://www.communitynews.com.au/guardian-express/news/exclusive-daylight-savings-coming-wa-summer-2018/
|
||||
# [The article ends with "Today's date is April 1."]
|
||||
|
||||
# Queensland
|
||||
|
||||
@@ -1742,6 +1758,23 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
# One source for this is page 202 of: Bartky IR. One Time Fits All:
|
||||
# The Campaigns for Global Uniformity (2007).
|
||||
|
||||
# Kanton
|
||||
|
||||
# From Paul Eggert (2021-05-27):
|
||||
# Kiribati's +13 timezone is represented by Kanton, its only populated
|
||||
# island. (It was formerly spelled "Canton", but Gilbertese lacks "C".)
|
||||
# Kanton was settled on 1937-08-31 by two British radio operators
|
||||
# <https://history.state.gov/historicaldocuments/frus1937v02/d94>;
|
||||
# Americans came the next year and built an airfield, partly to
|
||||
# establish airline service and perhaps partly anticipating the
|
||||
# next war. Aside from the war, the airfield was used by commercial
|
||||
# airlines until long-range jets became standard; although currently
|
||||
# for emergency use only, China says it is considering rebuilding the
|
||||
# airfield for high-end niche tourism. Kanton has about two dozen
|
||||
# people, caretakers who rotate in from the rest of Kiribati in 2-5
|
||||
# year shifts, and who use some of the leftover structures
|
||||
# <http://pipa.neaq.org/2012/06/images-of-kanton-island.html>.
|
||||
|
||||
# Kwajalein
|
||||
|
||||
# From an AP article (1993-08-22):
|
||||
@@ -1753,16 +1786,12 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
# "In Marshall Islands, Friday is followed by Sunday", NY Times. 1993-08-22.
|
||||
# https://www.nytimes.com/1993/08/22/world/in-marshall-islands-friday-is-followed-by-sunday.html
|
||||
|
||||
# From Phake Nick (2018-10-27):
|
||||
# <https://wiki.suikawiki.org/n/南洋群島の標準時> ... pointed out that
|
||||
# currently tzdata say Pacific/Kwajalein switched from GMT+11 to GMT-12 in
|
||||
# 1969 October without explanation, however an 1993 article from NYT say it
|
||||
# synchorized its day with US mainland about 40 years ago and thus the switch
|
||||
# should occur at around 1950s instead.
|
||||
#
|
||||
# From Paul Eggert (2018-11-18):
|
||||
# The NYT (actually, AP) article is vague and possibly wrong about this.
|
||||
# The article says the earlier switch was "40 years ago when the United States
|
||||
# From Paul Eggert (2022-03-31):
|
||||
# Phake Nick (2018-10-27) noted <https://wiki.suikawiki.org/n/南洋群島の標準時>'s
|
||||
# citation of a 1993 AP article published in the New York Times saying
|
||||
# Kwajalein synchronized its day with the US mainland about 40 years earlier.
|
||||
# However the AP article is vague and possibly wrong about this. The article
|
||||
# says the earlier switch was "about 40 years ago when the United States
|
||||
# Army established a missile test range here". However, the Kwajalein Test
|
||||
# Center was established on 1960-10-01 and was run by the US Navy. It was
|
||||
# transferred to the US Army on 1964-07-01. See "Seize the High Ground"
|
||||
@@ -1809,13 +1838,6 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
# Like the Ladrones (see Guam commentary), assume the Spanish East Indies
|
||||
# kept American time until the Philippines switched at the end of 1844.
|
||||
|
||||
# Alan Eugene Davis writes (1996-03-16),
|
||||
# "I am certain, having lived there for the past decade, that 'Truk'
|
||||
# (now properly known as Chuuk) ... is in the time zone GMT+10."
|
||||
#
|
||||
# Shanks & Pottenger write that Truk switched from UT +10 to +11
|
||||
# on 1978-10-01; ignore this for now.
|
||||
|
||||
# From Paul Eggert (1999-10-29):
|
||||
# The Federated States of Micronesia Visitors Board writes in
|
||||
# The Federated States of Micronesia - Visitor Information (1999-01-26)
|
||||
@@ -2025,6 +2047,17 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
|
||||
# Tonga
|
||||
|
||||
# From Paul Eggert (2021-03-04):
|
||||
# In 1943 "The standard time kept is 12 hrs. 19 min. 12 sec. fast
|
||||
# on Greenwich mean time." according to the Admiralty's Hydrographic
|
||||
# Dept., Pacific Islands Pilot, Vol. II, 7th ed., 1943, p 360.
|
||||
|
||||
# From Michael Deckers (2021-03-03):
|
||||
# [Ian R Bartky: "One Time Fits All: The Campaigns for Global Uniformity".
|
||||
# Stanford University Press. 2007. p. 255]:
|
||||
# On 10 September 1945 Tonga adopted a standard time 12 hours,
|
||||
# 20 minutes in advance of Greenwich.
|
||||
|
||||
# From Paul Eggert (1996-01-22):
|
||||
# Today's _Wall Street Journal_ (p 1) reports that "Tonga has been plotting
|
||||
# to sneak ahead of [New Zealanders] by introducing daylight-saving time."
|
||||
@@ -2053,9 +2086,26 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
# The Crown Prince, presented an unanswerable argument: "Remember that
|
||||
# on the World Day of Prayer, you would be the first people on Earth
|
||||
# to say your prayers in the morning."
|
||||
|
||||
# From Paul Eggert (2006-03-22):
|
||||
# Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell.
|
||||
#
|
||||
# From Tim Parenti (2021-09-13), per Paul Eggert (2006-03-22) and Michael
|
||||
# Deckers (2021-03-03):
|
||||
# Mundell places the transition from +12:20 to +13 in 1941, while Shanks &
|
||||
# Pottenger say the transition was on 1968-10-01.
|
||||
#
|
||||
# The Air Almanac published contemporaneous tables of standard times,
|
||||
# which listed +12:20 as of Nov 1960 and +13 as of Mar 1961:
|
||||
# Nov 1960: https://books.google.com/books?id=bVgtWM6kPZUC&pg=SL1-PA19
|
||||
# Mar 1961: https://books.google.com/books?id=W2nItAul4g0C&pg=SL1-PA19
|
||||
# (Thanks to P Chan for pointing us toward these sources.)
|
||||
# This agrees with Bartky, who writes that "since 1961 [Tonga's] official time
|
||||
# has been thirteen hours in advance of Greenwich time" (p. 202) and further
|
||||
# writes in an endnote that this was because "the legislation was amended" on
|
||||
# 1960-10-19. (p. 255)
|
||||
#
|
||||
# Without greater specificity, presume that Bartky and the Air Almanac point to
|
||||
# a 1961-01-01 transition, as Tāufaʻāhau Tupou IV was still Crown Prince in
|
||||
# 1961 and this still jives with the gist of Mundell's telling, and go with
|
||||
# this over Shanks & Pottenger.
|
||||
|
||||
# From Eric Ulevik (1999-05-03):
|
||||
# Tonga's director of tourism, who is also secretary of the National Millennium
|
||||
@@ -2118,7 +2168,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
# through the third Sunday in January at 03:00, like Fiji, for now.
|
||||
|
||||
# From David Wade (2017-10-18):
|
||||
# In August government was disolved by the King. The current prime minister
|
||||
# In August government was dissolved by the King. The current prime minister
|
||||
# continued in office in care taker mode. It is easy to see that few
|
||||
# decisions will be made until elections 16th November.
|
||||
#
|
||||
@@ -2126,26 +2176,6 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
# For now, guess that DST is discontinued. That's what the IATA is guessing.
|
||||
|
||||
|
||||
# Wake
|
||||
|
||||
# From Vernice Anderson, Personal Secretary to Philip Jessup,
|
||||
# US Ambassador At Large (oral history interview, 1971-02-02):
|
||||
#
|
||||
# Saturday, the 14th [of October, 1950] - ... The time was all the
|
||||
# more confusing at that point, because we had crossed the
|
||||
# International Date Line, thus getting two Sundays. Furthermore, we
|
||||
# discovered that Wake Island had two hours of daylight saving time
|
||||
# making calculation of time in Washington difficult if not almost
|
||||
# impossible.
|
||||
#
|
||||
# https://www.trumanlibrary.org/oralhist/andrsonv.htm
|
||||
|
||||
# From Paul Eggert (2003-03-23):
|
||||
# We have no other report of DST in Wake Island, so omit this info for now.
|
||||
|
||||
# See also the commentary for Micronesia.
|
||||
|
||||
|
||||
###############################################################################
|
||||
|
||||
# The International Date Line
|
||||
|
||||
+241
-56
@@ -3,53 +3,34 @@
|
||||
# This file is in the public domain, so clarified as of
|
||||
# 2009-05-17 by Arthur David Olson.
|
||||
|
||||
# This file provides links between current names for timezones
|
||||
# and their old names. Many names changed in late 1993.
|
||||
# This file provides links from old or merged timezone names to current ones.
|
||||
# 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.
|
||||
|
||||
# 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/Atikokan 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/Port_of_Spain 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/Oslo Atlantic/Jan_Mayen
|
||||
Link Australia/Sydney Australia/ACT
|
||||
Link Australia/Sydney Australia/Canberra
|
||||
Link Australia/Hobart Australia/Currie
|
||||
# Although this file is optional and tzdb will work if you omit it by
|
||||
# building with 'make BACKWARD=', in practice downstream users
|
||||
# typically use this file for backward compatibility.
|
||||
|
||||
# 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
|
||||
@@ -59,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
|
||||
@@ -79,17 +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/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 Atlantic/Reykjavik Iceland
|
||||
Link Africa/Abidjan Iceland #= Atlantic/Reykjavik
|
||||
Link Asia/Tehran Iran
|
||||
Link Asia/Jerusalem Israel
|
||||
Link America/Jamaica Jamaica
|
||||
@@ -101,13 +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/Honolulu Pacific/Johnston
|
||||
Link Pacific/Pohnpei Pacific/Ponape
|
||||
Link Pacific/Pago_Pago Pacific/Samoa
|
||||
Link Pacific/Chuuk Pacific/Truk
|
||||
Link Pacific/Chuuk Pacific/Yap
|
||||
Link Europe/Warsaw Poland
|
||||
Link Europe/Lisbon Portugal
|
||||
Link Asia/Taipei ROC
|
||||
@@ -131,3 +126,193 @@ 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/Iqaluit America/Pangnirtung
|
||||
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
|
||||
+1106
-25
File diff suppressed because it is too large.
Load diff
@@ -71,7 +71,7 @@ kalenderväsen" by Lars-Olof Lodén (1968).
|
||||
|
||||
Grotefend's data
|
||||
|
||||
From: "Michael Palmer" [with one obvious typo fixed]
|
||||
From: "Michael Palmer" [with two obvious typos fixed]
|
||||
Subject: Re: Gregorian Calendar (was Re: Another FHC related question
|
||||
Newsgroups: soc.genealogy.german
|
||||
Date: Tue, 9 Feb 1999 02:32:48 -800
|
||||
@@ -142,7 +142,7 @@ Gregorian calendar:
|
||||
|
||||
31 Dec 1700/
|
||||
12 Jan 1701 - Friesland, Groningen, Zürich, Bern, Basel, Geneva,
|
||||
Turgau, and Schaffhausen
|
||||
Thurgau, and Schaffhausen
|
||||
|
||||
1724 - Glarus, Appenzell, and the city of St. Gallen
|
||||
|
||||
|
||||
@@ -32,6 +32,13 @@ BEGIN {
|
||||
}
|
||||
status = 1
|
||||
}
|
||||
if (backcheck && FILENAME != backcheck && $3 != "GMT") {
|
||||
printf "%s: Link should be in '%s'\n", $3, backcheck
|
||||
status = 1
|
||||
}
|
||||
if ($4 == "#=") {
|
||||
shortcut[$5] = $3
|
||||
}
|
||||
used[$2] = 1
|
||||
defined[$3] = $2
|
||||
}
|
||||
@@ -39,10 +46,25 @@ BEGIN {
|
||||
END {
|
||||
for (tz in used) {
|
||||
if (defined[tz] != Zone) {
|
||||
printf "%s: Link to non-zone\n", tz
|
||||
if (!defined[tz]) {
|
||||
printf "%s: Link to nowhere\n", tz
|
||||
status = 1
|
||||
} else if (DATAFORM != "vanguard") {
|
||||
printf "%s: Link to link\n", tz
|
||||
status = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
for (tz in shortcut) {
|
||||
if (defined[shortcut[tz]] != defined[tz]) {
|
||||
target = (!defined[tz] ? "absence" \
|
||||
: defined[tz] == "\n" ? "zone" \
|
||||
: defined[tz])
|
||||
printf "%s: target %s disagrees with %s's target %s\n", \
|
||||
tz, target, shortcut[tz], defined[shortcut[tz]]
|
||||
status = 1
|
||||
}
|
||||
}
|
||||
|
||||
exit status
|
||||
}
|
||||
+24
-26
@@ -58,11 +58,12 @@ BEGIN {
|
||||
zone_table, zone_NR >>"/dev/stderr"
|
||||
status = 1
|
||||
}
|
||||
split($1, cca, /,/)
|
||||
cc = cca[1]
|
||||
ccs = input_ccs[zone_NR] = $1
|
||||
coordinates = $2
|
||||
tz = $3
|
||||
comments = $4
|
||||
comments = input_comments[zone_NR] = $4
|
||||
split(ccs, cca, /,/)
|
||||
cc = cca[1]
|
||||
|
||||
# Don't complain about a special case for Crimea in zone.tab.
|
||||
# FIXME: zone.tab should be removed, since it is obsolete.
|
||||
@@ -77,12 +78,9 @@ BEGIN {
|
||||
cc0 = cc
|
||||
tz0 = tz
|
||||
tztab[tz] = 1
|
||||
tz2comments[tz] = comments
|
||||
tz2NR[tz] = zone_NR
|
||||
for (i in cca) {
|
||||
cc = cca[i]
|
||||
cctz = cc tz
|
||||
cctztab[cctz] = 1
|
||||
if (cc2name[cc]) {
|
||||
cc_used[cc]++
|
||||
} else {
|
||||
@@ -99,27 +97,27 @@ BEGIN {
|
||||
}
|
||||
}
|
||||
|
||||
for (cctz in cctztab) {
|
||||
cc = substr (cctz, 1, 2)
|
||||
tz = substr (cctz, 3)
|
||||
if (1 < cc_used[cc]) {
|
||||
comments_needed[tz] = cc
|
||||
}
|
||||
}
|
||||
for (cctz in cctztab) {
|
||||
cc = substr (cctz, 1, 2)
|
||||
tz = substr (cctz, 3)
|
||||
if (!comments_needed[tz] && tz2comments[tz]) {
|
||||
for (i = 1; i <= zone_NR; i++) {
|
||||
ccs = input_ccs[i]
|
||||
if (!ccs) continue
|
||||
comments = input_comments[i]
|
||||
split(ccs, cca, /,/)
|
||||
used_max = 0
|
||||
for (j in cca) {
|
||||
cc = cca[j]
|
||||
if (used_max < cc_used[cc]) {
|
||||
used_max = cc_used[cc]
|
||||
}
|
||||
}
|
||||
if (used_max <= 1 && comments) {
|
||||
printf "%s:%d: unnecessary comment '%s'\n", \
|
||||
zone_table, tz2NR[tz], tz2comments[tz] \
|
||||
>>"/dev/stderr"
|
||||
tz2comments[tz] = 0
|
||||
zone_table, i, comments \
|
||||
>>"/dev/stderr"
|
||||
status = 1
|
||||
} else if (comments_needed[tz] && !tz2comments[tz]) {
|
||||
} else if (1 < cc_used[cc] && !comments) {
|
||||
printf "%s:%d: missing comment for %s\n", \
|
||||
zone_table, tz2NR[tz], comments_needed[tz] \
|
||||
zone_table, i, cc \
|
||||
>>"/dev/stderr"
|
||||
tz2comments[tz] = 1
|
||||
status = 1
|
||||
}
|
||||
}
|
||||
@@ -149,8 +147,8 @@ $1 ~ /^#/ { next }
|
||||
ruleUsed[$2] = 1
|
||||
if ($3 ~ /%/) rulePercentUsed[$2] = 1
|
||||
}
|
||||
if (tz && tz ~ /\//) {
|
||||
if (!tztab[tz]) {
|
||||
if (tz && tz ~ /\// && tz !~ /^Etc\//) {
|
||||
if (!tztab[tz] && FILENAME != "backward") {
|
||||
printf "%s: no data for '%s'\n", zone_table, tz \
|
||||
>>"/dev/stderr"
|
||||
status = 1
|
||||
@@ -173,7 +171,7 @@ END {
|
||||
}
|
||||
}
|
||||
for (tz in tztab) {
|
||||
if (!zoneSeen[tz]) {
|
||||
if (!zoneSeen[tz] && tz !~ /^Etc\//) {
|
||||
printf "%s:%d: no Zone table for '%s'\n", \
|
||||
zone_table, tz2NR[tz], tz >>"/dev/stderr"
|
||||
status = 1
|
||||
|
||||
+13
-12
@@ -16,22 +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 functions like gmtime load the "UTC" file to handle leap seconds properly.
|
||||
# We want this to work even on installations that omit the other older names.
|
||||
Link Etc/UTC UTC
|
||||
|
||||
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
|
||||
# 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
|
||||
# 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.
|
||||
|
||||
+207
-526
File diff suppressed because it is too large.
Load diff
@@ -204,10 +204,10 @@
|
||||
# current -- the update time stamp, the data and the name of the file
|
||||
# will not change.
|
||||
#
|
||||
# Updated through IERS Bulletin C61
|
||||
# File expires on: 28 December 2021
|
||||
# Updated through IERS Bulletin C64
|
||||
# File expires on: 28 June 2023
|
||||
#
|
||||
#@ 3849638400
|
||||
#@ 3896899200
|
||||
#
|
||||
2272060800 10 # 1 Jan 1972
|
||||
2287785600 11 # 1 Jul 1972
|
||||
@@ -252,4 +252,4 @@
|
||||
# the hash line is also ignored in the
|
||||
# computation.
|
||||
#
|
||||
#h 2ab8253d d4380d28 75f01343 381504f8 8f8a4bfc
|
||||
#h 2c413af9 124e1031 f165174 ff527c6b 756ae00b
|
||||
@@ -72,11 +72,11 @@ Leap 2016 Dec 31 23:59:60 + S
|
||||
# Any additional leap seconds will come after this.
|
||||
# This Expires line is commented out for now,
|
||||
# so that pre-2020a zic implementations do not reject this file.
|
||||
#Expires 2021 Dec 28 00:00:00
|
||||
#Expires 2023 Jun 28 00:00:00
|
||||
|
||||
# POSIX timestamps for the data in this file:
|
||||
#updated 1467936000 (2016-07-08 00:00:00 UTC)
|
||||
#expires 1640649600 (2021-12-28 00:00:00 UTC)
|
||||
#expires 1687910400 (2023-06-28 00:00:00 UTC)
|
||||
|
||||
# Updated through IERS Bulletin C61
|
||||
# File expires on: 28 December 2021
|
||||
# Updated through IERS Bulletin C64
|
||||
# File expires on: 28 June 2023
|
||||
Executable → Regular
File mode changed.
+229
-400
File diff suppressed because it is too large.
Load diff
@@ -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 ##
|
||||
+126
-81
@@ -400,6 +400,7 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 -
|
||||
#
|
||||
# Buenos Aires (BA), Capital Federal (CF),
|
||||
Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May # Córdoba Mean Time
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
@@ -417,6 +418,7 @@ Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
|
||||
# - Santiago del Estero switched to -4:00 on 1991-04-01,
|
||||
# then to -3:00 on 1991-04-26.
|
||||
#
|
||||
#STDOFF -4:16:48.25
|
||||
Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
@@ -429,6 +431,7 @@ Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
|
||||
#
|
||||
# Salta (SA), La Pampa (LP), Neuquén (NQ), Rio Negro (RN)
|
||||
Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
@@ -441,6 +444,7 @@ Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
|
||||
#
|
||||
# Tucumán (TM)
|
||||
Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
@@ -454,6 +458,7 @@ Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
|
||||
#
|
||||
# La Rioja (LR)
|
||||
Zone America/Argentina/La_Rioja -4:27:24 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
@@ -468,6 +473,7 @@ Zone America/Argentina/La_Rioja -4:27:24 - LMT 1894 Oct 31
|
||||
#
|
||||
# San Juan (SJ)
|
||||
Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
@@ -482,6 +488,7 @@ Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31
|
||||
#
|
||||
# Jujuy (JY)
|
||||
Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
@@ -497,6 +504,7 @@ Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31
|
||||
#
|
||||
# Catamarca (CT), Chubut (CH)
|
||||
Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
@@ -511,6 +519,7 @@ Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31
|
||||
#
|
||||
# Mendoza (MZ)
|
||||
Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
@@ -533,6 +542,7 @@ Rule SanLuis 2008 2009 - Mar Sun>=8 0:00 0 -
|
||||
Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 -
|
||||
|
||||
Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
@@ -551,6 +561,7 @@ Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
|
||||
#
|
||||
# Santa Cruz (SC)
|
||||
Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
@@ -563,6 +574,7 @@ Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
|
||||
#
|
||||
# Tierra del Fuego, Antártida e Islas del Atlántico Sur (TF)
|
||||
Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
@@ -573,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
|
||||
Link America/Curacao America/Aruba
|
||||
|
||||
# Bolivia
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/La_Paz -4:32:36 - LMT 1890
|
||||
@@ -645,7 +654,7 @@ Zone America/La_Paz -4:32:36 - LMT 1890
|
||||
|
||||
# From Rodrigo Severo (2004-10-04):
|
||||
# It's just the biannual change made necessary by the much hyped, supposedly
|
||||
# modern Brazilian eletronic voting machines which, apparently, can't deal
|
||||
# modern Brazilian ... voting machines which, apparently, can't deal
|
||||
# with a time change between the first and the second rounds of the elections.
|
||||
|
||||
# From Steffen Thorsen (2007-09-20):
|
||||
@@ -1086,7 +1095,7 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
|
||||
# Chile
|
||||
|
||||
# From Paul Eggert (2015-04-03):
|
||||
# From Paul Eggert (2022-03-15):
|
||||
# Shanks & Pottenger says America/Santiago introduced standard time in
|
||||
# 1890 and rounds its UT offset to 70W40; guess that in practice this
|
||||
# was the same offset as in 1916-1919. It also says Pacific/Easter
|
||||
@@ -1109,7 +1118,7 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
# Historia de la hora oficial de Chile (retrieved 2012-10-24). See:
|
||||
# https://web.archive.org/web/20121024234627/http://www.horaoficial.cl/horaof.htm
|
||||
# A fancier Spanish version (requiring mouse-clicking) is at:
|
||||
# http://www.horaoficial.cl/historia_hora.html
|
||||
# http://www.horaoficial.cl/historia_hora.php
|
||||
# Conflicts between [1] and [2] were resolved as follows:
|
||||
#
|
||||
# - [1] says the 1910 transition was Jan 1, [2] says Jan 10 and cites
|
||||
@@ -1118,7 +1127,8 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
# - [1] says SMT was -4:42:45, [2] says Chile's official time from
|
||||
# 1916 to 1919 was -4:42:46.3, the meridian of Chile's National
|
||||
# Astronomical Observatory (OAN), then located in what is now
|
||||
# Quinta Normal in Santiago. Go with [2], rounding it to -4:42:46.
|
||||
# Quinta Normal in Santiago. Go with [1], as this matches the meridian
|
||||
# referred to by the relevant Chilean laws to this day.
|
||||
#
|
||||
# - [1] says the 1918 transition was Sep 1, [2] says Sep 10 and cites
|
||||
# Boletín No. 22, Aviso No. 129/1918 (1918-08-23). Go with [2].
|
||||
@@ -1140,6 +1150,39 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
# this is known to work for DST transitions starting in 2008 and
|
||||
# may well be true for earlier transitions.
|
||||
|
||||
# From Tim Parenti (2022-07-06):
|
||||
# For a brief period of roughly six weeks in 1946, DST was only observed on an
|
||||
# emergency basis in specific regions of central Chile; namely, "the national
|
||||
# territory between the provinces of Coquimbo and Concepción, inclusive".
|
||||
# This was enacted by Decree 3,891, dated 1946-07-13, and took effect
|
||||
# 1946-07-14 24:00, advancing these central regions to -03.
|
||||
# https://www.diariooficial.interior.gob.cl/versiones-anteriores/do-h/19460715/#page/1
|
||||
# The decree contemplated "[t]hat this advancement of the Official Time, even
|
||||
# though it has been proposed for the cities of Santiago and Valparaíso only,
|
||||
# must be agreed with that of other cities, due to the connection of various
|
||||
# activities that require it, such as, for example, the operation of rail
|
||||
# services". It was originally set to expire after 30 days but was extended
|
||||
# through 1946-08-31 by Decree 4,506, dated 1946-08-13.
|
||||
# https://www.diariooficial.interior.gob.cl/versiones-anteriores/do-h/19460814/#page/1
|
||||
#
|
||||
# Law Number 8,522, promulgated 1946-08-27, reunified Chilean clocks at their
|
||||
# new "Summer Time" of -04, reckoned as that of "the meridian of the
|
||||
# Astronomical Observatory of Lo Espejo, advanced by 42 minutes and 45
|
||||
# seconds". Although this law specified the new Summer Time to start on 1
|
||||
# September each year, a special "transitional article" started it a few days
|
||||
# early, as soon as the law took effect. As the law was to take force "from
|
||||
# the date of its publication in the 'Diario Oficial', which happened the
|
||||
# following day, presume the change took place in Santiago and its environs
|
||||
# from 24:00 -03 to 23:00 -04 on Wednesday 1946-08-28. Although this was a
|
||||
# no-op for wall clocks in the north and south of the country, put their formal
|
||||
# start to DST an hour later when they reached 24:00 -04.
|
||||
# https://www.diariooficial.interior.gob.cl/versiones-anteriores/do-h/19460828/#page/1
|
||||
# After a brief "Winter Time" stint at -05 beginning 1947-04-01, Law Number
|
||||
# 8,777, promulgated 1947-05-17, established year-round -04 "from 23:00 on the
|
||||
# second day after it is published in the 'Diario Oficial'." It was published
|
||||
# on Monday 1947-05-19 and so took effect from Wednesday 1947-05-21 23:00.
|
||||
# https://www.diariooficial.interior.gob.cl/versiones-anteriores/do-h/19470519/#page/1
|
||||
|
||||
# From Eduardo Krell (1995-10-19):
|
||||
# The law says to switch to DST at midnight [24:00] on the second SATURDAY
|
||||
# of October.... The law is the same for March and October.
|
||||
@@ -1252,11 +1295,25 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
# So we extend the new rules on Saturdays at 24:00 mainland time indefinitely.
|
||||
# From Juan Correa (2019-02-04):
|
||||
# http://www.diariooficial.interior.gob.cl/publicaciones/2018/11/23/42212/01/1498738.pdf
|
||||
# From Paul Eggert (2019-09-01):
|
||||
# The above says the Magallanes exception expires 2022-04-02 at 24:00,
|
||||
# so in theory, they will revert to -04/-03 after that.
|
||||
# For now, assume that they will not revert,
|
||||
# since they have extended the expiration date once already.
|
||||
|
||||
# From Juan Correa (2022-04-02):
|
||||
# I found there was a decree published last Thursday that will keep
|
||||
# Magallanes region to UTC -3 "indefinitely". The decree is available at
|
||||
# https://www.diariooficial.interior.gob.cl/publicaciones/2022/03/31/43217-B/01/2108910.pdf
|
||||
|
||||
# From Juan Correa (2022-08-09):
|
||||
# the Internal Affairs Ministry (Ministerio del Interior) informed DST
|
||||
# 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.
|
||||
#
|
||||
# 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 -
|
||||
@@ -1294,34 +1351,37 @@ Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 -
|
||||
Rule Chile 2016 2018 - May Sun>=9 3:00u 0 -
|
||||
Rule Chile 2016 2018 - Aug Sun>=9 4:00u 1:00 -
|
||||
Rule Chile 2019 max - Apr Sun>=2 3:00u 0 -
|
||||
Rule Chile 2019 max - Sep Sun>=2 4:00u 1:00 -
|
||||
Rule Chile 2019 2021 - Sep Sun>=2 4:00u 1:00 -
|
||||
Rule Chile 2022 only - Sep Sun>=9 4:00u 1:00 -
|
||||
Rule Chile 2023 max - Sep Sun>=2 4:00u 1:00 -
|
||||
# IATA SSIM anomalies: (1992-02) says 1992-03-14;
|
||||
# (1996-09) says 1998-03-08. Ignore these.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Santiago -4:42:46 - LMT 1890
|
||||
-4:42:46 - SMT 1910 Jan 10 # Santiago Mean Time
|
||||
Zone America/Santiago -4:42:45 - LMT 1890
|
||||
-4:42:45 - SMT 1910 Jan 10 # Santiago Mean Time
|
||||
-5:00 - -05 1916 Jul 1
|
||||
-4:42:46 - SMT 1918 Sep 10
|
||||
-4:42:45 - SMT 1918 Sep 10
|
||||
-4:00 - -04 1919 Jul 1
|
||||
-4:42:46 - SMT 1927 Sep 1
|
||||
-4:42:45 - SMT 1927 Sep 1
|
||||
-5:00 Chile -05/-04 1932 Sep 1
|
||||
-4:00 - -04 1942 Jun 1
|
||||
-5:00 - -05 1942 Aug 1
|
||||
-4:00 - -04 1946 Jul 15
|
||||
-4:00 1:00 -03 1946 Sep 1 # central Chile
|
||||
-4:00 - -04 1947 Apr 1
|
||||
-4:00 - -04 1946 Jul 14 24:00
|
||||
-4:00 1:00 -03 1946 Aug 28 24:00 # central CL
|
||||
-5:00 1:00 -04 1947 Mar 31 24:00
|
||||
-5:00 - -05 1947 May 21 23:00
|
||||
-4:00 Chile -04/-03
|
||||
Zone America/Punta_Arenas -4:43:40 - LMT 1890
|
||||
-4:42:46 - SMT 1910 Jan 10
|
||||
-4:42:45 - SMT 1910 Jan 10
|
||||
-5:00 - -05 1916 Jul 1
|
||||
-4:42:46 - SMT 1918 Sep 10
|
||||
-4:42:45 - SMT 1918 Sep 10
|
||||
-4:00 - -04 1919 Jul 1
|
||||
-4:42:46 - SMT 1927 Sep 1
|
||||
-4:42:45 - SMT 1927 Sep 1
|
||||
-5:00 Chile -05/-04 1932 Sep 1
|
||||
-4:00 - -04 1942 Jun 1
|
||||
-5:00 - -05 1942 Aug 1
|
||||
-4:00 - -04 1947 Apr 1
|
||||
-4:00 - -04 1946 Aug 28 24:00
|
||||
-5:00 1:00 -04 1947 Mar 31 24:00
|
||||
-5:00 - -05 1947 May 21 23:00
|
||||
-4:00 Chile -04/-03 2016 Dec 4
|
||||
-3:00 - -03
|
||||
@@ -1355,49 +1415,25 @@ Zone Antarctica/Palmer 0 - -00 1965
|
||||
|
||||
# Colombia
|
||||
|
||||
# Milne gives 4:56:16.4 for Bogotá time in 1899; round to nearest. He writes,
|
||||
# Milne gives 4:56:16.4 for Bogotá time in 1899. He writes,
|
||||
# "A variation of fifteen minutes in the public clocks of Bogota is not rare."
|
||||
|
||||
# From Alois Treindl (2022-11-10):
|
||||
# End of time change in Colombia 1993 ... should be 6 February 24h ...
|
||||
# DECRETO 267 DE 1993
|
||||
# https://www.suin-juriscol.gov.co/viewDocument.asp?ruta=Decretos/1061335
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule CO 1992 only - May 3 0:00 1:00 -
|
||||
Rule CO 1993 only - Apr 4 0:00 0 -
|
||||
Rule CO 1992 only - May 3 0:00 1:00 -
|
||||
Rule CO 1993 only - Feb 6 24:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#STDOFF -4:56:16.4
|
||||
Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
|
||||
-4:56:16 - BMT 1914 Nov 23 # Bogotá Mean Time
|
||||
-5:00 CO -05/-04
|
||||
# Malpelo, Providencia, San Andres
|
||||
# no information; probably like America/Bogota
|
||||
|
||||
# Curaçao
|
||||
|
||||
# Milne gives 4:35:46.9 for Curaçao mean time; round to nearest.
|
||||
#
|
||||
# From Paul Eggert (2006-03-22):
|
||||
# Shanks & Pottenger say that The Bottom and Philipsburg have been at
|
||||
# -4:00 since standard time was introduced on 1912-03-02; and that
|
||||
# Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from
|
||||
# 1912-02-02 to 1965-01-01. The former is dubious, since S&P also say
|
||||
# Saba Island has been like Curaçao.
|
||||
# This all predates our 1970 cutoff, though.
|
||||
#
|
||||
# By July 2007 Curaçao and St Maarten are planned to become
|
||||
# associated states within the Netherlands, much like Aruba;
|
||||
# Bonaire, Saba and St Eustatius would become directly part of the
|
||||
# Netherlands as Kingdom Islands. This won't affect their time zones
|
||||
# though, as far as we know.
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
|
||||
-4:30 - -0430 1965
|
||||
-4:00 - AST
|
||||
|
||||
# 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" below.
|
||||
|
||||
Link America/Curacao America/Lower_Princes # Sint Maarten
|
||||
Link America/Curacao America/Kralendijk # Caribbean Netherlands
|
||||
|
||||
# Ecuador
|
||||
#
|
||||
@@ -1540,11 +1576,40 @@ Zone America/Cayenne -3:29:20 - LMT 1911 Jul
|
||||
-3:00 - -03
|
||||
|
||||
# Guyana
|
||||
|
||||
# From P Chan (2020-11-27):
|
||||
# https://books.google.com/books?id=5-5CAQAAMAAJ&pg=SA1-PA547
|
||||
# The Official Gazette of British Guiana. (New Series.) Vol. XL. July to
|
||||
# December, 1915, p 1547, lists as several notes:
|
||||
# "Local Mean Time 3 hours 52 mins. 39 secs. slow of Greenwich Mean Time
|
||||
# (Georgetown.) From 1st August, 1911, British Guiana Standard Mean Time 4
|
||||
# hours slow of Greenwich Mean Time, by notice in Official Gazette on 1st July,
|
||||
# 1911. From 1st March, 1915, British Guiana Standard Mean Time 3 hours 45
|
||||
# mins. 0 secs. slow of Greenwich Mean Time, by notice in Official Gazette on
|
||||
# 23rd January, 1915."
|
||||
#
|
||||
# https://parliament.gov.gy/documents/acts/10923-act_no._27_of_1975_-_interpretation_and_general_clauses_(amendment)_act_1975.pdf
|
||||
# Interpretation and general clauses (Amendment) Act 1975 (Act No. 27 of 1975)
|
||||
# [dated 1975-07-31]
|
||||
# "This Act...shall come into operation on 1st August, 1975."
|
||||
# "...where any expression of time occurs...the time referred to shall signify
|
||||
# the standard time of Guyana which shall be three hours behind Greenwich Mean
|
||||
# Time."
|
||||
#
|
||||
# Circular No. 10/1992 dated 1992-03-20
|
||||
# https://dps.gov.gy/wp-content/uploads/2018/12/1992-03-20-Circular-010.pdf
|
||||
# "...cabinet has decided that with effect from Sunday 29th March, 1992, Guyana
|
||||
# Standard Time would be re-established at 01:00 hours by adjusting the hands
|
||||
# of the clock back to 24:00 hours."
|
||||
# Legislated in the Interpretation and general clauses (Amendment) Act 1992
|
||||
# (Act No. 6 of 1992) [passed 1992-03-27, published 1992-04-18]
|
||||
# https://parliament.gov.gy/documents/acts/5885-6_of_1992_interpretation_and_general_clauses_(amendment)_act_1992.pdf
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
|
||||
-3:45 - -0345 1975 Jul 31
|
||||
-3:00 - -03 1991
|
||||
# IATA SSIM (1996-06) says -4:00. Assume a 1991 switch.
|
||||
Zone America/Guyana -3:52:39 - LMT 1911 Aug 1 # Georgetown
|
||||
-4:00 - -04 1915 Mar 1
|
||||
-3:45 - -0345 1975 Aug 1
|
||||
-3:00 - -03 1992 Mar 29 1:00
|
||||
-4:00 - -04
|
||||
|
||||
# Paraguay
|
||||
@@ -1684,26 +1749,6 @@ Zone America/Paramaribo -3:40:40 - LMT 1911
|
||||
-3:30 - -0330 1984 Oct
|
||||
-3:00 - -03
|
||||
|
||||
# Trinidad and Tobago
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
|
||||
-4:00 - AST
|
||||
|
||||
# These all agree with Trinidad and Tobago since 1970.
|
||||
Link America/Port_of_Spain America/Anguilla
|
||||
Link America/Port_of_Spain America/Antigua
|
||||
Link America/Port_of_Spain America/Dominica
|
||||
Link America/Port_of_Spain America/Grenada
|
||||
Link America/Port_of_Spain America/Guadeloupe
|
||||
Link America/Port_of_Spain America/Marigot # St Martin (French part)
|
||||
Link America/Port_of_Spain America/Montserrat
|
||||
Link America/Port_of_Spain America/St_Barthelemy # St Barthélemy
|
||||
Link America/Port_of_Spain America/St_Kitts # St Kitts & Nevis
|
||||
Link America/Port_of_Spain America/St_Lucia
|
||||
Link America/Port_of_Spain America/St_Thomas # Virgin Islands (US)
|
||||
Link America/Port_of_Spain America/St_Vincent
|
||||
Link America/Port_of_Spain America/Tortola # Virgin Islands (UK)
|
||||
|
||||
# Uruguay
|
||||
# From Paul Eggert (1993-11-18):
|
||||
# Uruguay wins the prize for the strangest peacetime manipulation of the rules.
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
# tzdb data for System V rules (this file is obsolete)
|
||||
|
||||
# This file is in the public domain, so clarified as of
|
||||
# 2009-05-17 by Arthur David Olson.
|
||||
|
||||
# Old rules, should the need arise.
|
||||
# No attempt is made to handle Newfoundland, since it cannot be expressed
|
||||
# using the System V "TZ" scheme (half-hour offset), or anything outside
|
||||
# North America (no support for non-standard DST start/end dates), nor
|
||||
# the changes in the DST rules in the US after 1976 (which occurred after
|
||||
# the old rules were written).
|
||||
#
|
||||
# If you need the old rules, uncomment ## lines.
|
||||
# Compile this *without* leap second correction for true conformance.
|
||||
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule SystemV min 1973 - Apr lastSun 2:00 1:00 D
|
||||
Rule SystemV min 1973 - Oct lastSun 2:00 0 S
|
||||
Rule SystemV 1974 only - Jan 6 2:00 1:00 D
|
||||
Rule SystemV 1974 only - Nov lastSun 2:00 0 S
|
||||
Rule SystemV 1975 only - Feb 23 2:00 1:00 D
|
||||
Rule SystemV 1975 only - Oct lastSun 2:00 0 S
|
||||
Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D
|
||||
Rule SystemV 1976 max - Oct lastSun 2:00 0 S
|
||||
|
||||
# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL]
|
||||
## Zone SystemV/AST4ADT -4:00 SystemV A%sT
|
||||
## Zone SystemV/EST5EDT -5:00 SystemV E%sT
|
||||
## Zone SystemV/CST6CDT -6:00 SystemV C%sT
|
||||
## Zone SystemV/MST7MDT -7:00 SystemV M%sT
|
||||
## Zone SystemV/PST8PDT -8:00 SystemV P%sT
|
||||
## Zone SystemV/YST9YDT -9:00 SystemV Y%sT
|
||||
## Zone SystemV/AST4 -4:00 - AST
|
||||
## Zone SystemV/EST5 -5:00 - EST
|
||||
## Zone SystemV/CST6 -6:00 - CST
|
||||
## Zone SystemV/MST7 -7:00 - MST
|
||||
## Zone SystemV/PST8 -8:00 - PST
|
||||
## Zone SystemV/YST9 -9:00 - YST
|
||||
## Zone SystemV/HST10 -10:00 - HST
|
||||
+62
-40
@@ -42,12 +42,13 @@ href="https://en.wikipedia.org/wiki/Unix_time">POSIX Epoch</a>
|
||||
(1970-01-01 00:00:00 <a
|
||||
href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time"><abbr
|
||||
title="Coordinated Universal Time">UTC</abbr></a>).
|
||||
The database labels each timezone with a notable location and
|
||||
records all known clock transitions for that location.
|
||||
Although 1970 is a somewhat-arbitrary cutoff, there are significant
|
||||
challenges to moving the cutoff earlier even by a decade or two, due
|
||||
to the wide variety of local practices before computer timekeeping
|
||||
became prevalent.
|
||||
Most timezones correspond to a notable location and the database
|
||||
records all known clock transitions for that location;
|
||||
some timezones correspond instead to a fixed <abbr>UTC</abbr> offset.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -58,8 +59,8 @@ specifies current standard time. For example, applications that deal
|
||||
with current and future timestamps in the traditional North
|
||||
American mountain time zone can choose from the timezones
|
||||
<code>America/Denver</code> which observes US-style daylight saving
|
||||
time, <code>America/Mazatlan</code> which observes Mexican-style DST,
|
||||
and <code>America/Phoenix</code> which does not observe DST.
|
||||
time (<abbr>DST</abbr>),
|
||||
and <code>America/Phoenix</code> which does not observe <abbr>DST</abbr>.
|
||||
Applications that also deal with past timestamps in the mountain time
|
||||
zone can choose from over a dozen timezones, such as
|
||||
<code>America/Boise</code>, <code>America/Edmonton</code>, and
|
||||
@@ -68,7 +69,7 @@ time but differs from other timezones for some timestamps after 1970.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Clock transitions before 1970 are recorded for each timezone,
|
||||
Clock transitions before 1970 are recorded for location-based timezones,
|
||||
because most systems support timestamps before 1970 and could
|
||||
misbehave if data entries were omitted for pre-1970 transitions.
|
||||
However, the database is not designed for and does not suffice for
|
||||
@@ -120,7 +121,7 @@ If geolocation information is available, a selection interface can
|
||||
locate the user on a timezone map or prioritize names that are
|
||||
geographically close. For an example selection interface, see the
|
||||
<code>tzselect</code> program in the <code><abbr>tz</abbr></code> code.
|
||||
The <a href="http://cldr.unicode.org">Unicode Common Locale Data
|
||||
The <a href="https://cldr.unicode.org">Unicode Common Locale Data
|
||||
Repository</a> contains data that may be useful for other selection
|
||||
interfaces; it maps timezone names like <code>Europe/Prague</code> to
|
||||
locale-dependent strings like "Prague", "Praha", "Прага", and "布拉格".
|
||||
@@ -190,8 +191,8 @@ in decreasing order of importance:
|
||||
<code>TZ</code> strings</a>.
|
||||
A file name component must not exceed 14 characters or start with
|
||||
'<code>-</code>'.
|
||||
E.g., prefer <code>Asia/Brunei</code> to
|
||||
<code>Asia/Bandar_Seri_Begawan</code>.
|
||||
E.g., prefer <code>America/Noronha</code> to
|
||||
<code>America/Fernando_de_Noronha</code>.
|
||||
Exceptions: see the discussion of legacy names below.
|
||||
</li>
|
||||
<li>
|
||||
@@ -294,7 +295,7 @@ in decreasing order of importance:
|
||||
</li>
|
||||
<li>
|
||||
If a name is changed, put its old spelling in the
|
||||
'<code>backward</code>' file.
|
||||
'<code>backward</code>' file as a link to the new spelling.
|
||||
This means old spellings will continue to work.
|
||||
Ordinarily a name change should occur only in the rare case when
|
||||
a location's consensus English-language spelling changes; for example,
|
||||
@@ -327,6 +328,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>',
|
||||
@@ -346,22 +348,39 @@ timestamps correctly and it increased maintenance burden.
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
The file '<code>zone1970.tab</code>' lists geographical locations used
|
||||
The file <code>zone1970.tab</code> lists geographical locations used
|
||||
to name timezones.
|
||||
It is intended to be an exhaustive list of names for geographic
|
||||
regions as described above; this is a subset of the timezones in the data.
|
||||
Although a '<code>zone1970.tab</code>' location's
|
||||
Although a <code>zone1970.tab</code> location's
|
||||
<a href="https://en.wikipedia.org/wiki/Longitude">longitude</a>
|
||||
corresponds to
|
||||
its <a href="https://en.wikipedia.org/wiki/Local_mean_time">local mean
|
||||
time (<abbr>LMT</abbr>)</a> offset with one hour for every 15°
|
||||
east longitude, this relationship is not exact.
|
||||
The backward-compatibility file <code>zone.tab</code> is similar
|
||||
but conforms to the older-version guidelines related to <abbr>ISO</abbr> 3166-1;
|
||||
it lists only one country code per entry and unlike <code>zone1970.tab</code>
|
||||
it can list names defined in <code>backward</code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Excluding '<code>backward</code>' should not affect the other data.
|
||||
If '<code>backward</code>' is excluded, excluding
|
||||
'<code>etcetera</code>' should not affect the remaining data.
|
||||
The database defines each timezone name to be a zone, or a link to a zone.
|
||||
The source file <code>backward</code> defines links for backward
|
||||
compatibility; it does not define zones.
|
||||
Although <code>backward</code> was originally designed to be optional,
|
||||
nowadays distributions typically use it
|
||||
and no great weight should be attached to whether a link
|
||||
is defined in <code>backward</code> or in some other file.
|
||||
The source file <code>etcetera</code> defines names that may be useful
|
||||
on platforms that do not support POSIX-style <code>TZ</code> strings;
|
||||
no other source file other than <code>backward</code>
|
||||
contains links to its zones.
|
||||
One of <code>etcetera</code>'s names is <code>Etc/UTC</code>,
|
||||
used by functions like <code>gmtime</code> to obtain leap
|
||||
second information on platforms that support leap seconds.
|
||||
Another <code>etcetera</code> name, <code>GMT</code>,
|
||||
is used by older code releases.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
@@ -451,6 +470,7 @@ in decreasing order of importance:
|
||||
PST/PDT Philippine,
|
||||
SAST South Africa,
|
||||
SST Samoa,
|
||||
UTC Universal,
|
||||
WAT/WAST West Africa,
|
||||
WET/WEST/WEMT Western European,
|
||||
WIB Waktu Indonesia Barat,
|
||||
@@ -473,10 +493,10 @@ in decreasing order of importance:
|
||||
|
||||
<p>
|
||||
<small>These abbreviations are:
|
||||
AMT Amsterdam, Asunción, Athens;
|
||||
AMT Asunción, Athens;
|
||||
BMT Baghdad, Bangkok, Batavia, Bermuda, Bern, Bogotá, Bridgetown,
|
||||
Brussels, Bucharest;
|
||||
CMT Calamarca, Caracas, Chisinau, Colón, Copenhagen, Córdoba;
|
||||
CMT Calamarca, Caracas, Chisinau, Colón, Córdoba;
|
||||
DMT Dublin/Dunsink;
|
||||
EMT Easter;
|
||||
FFMT Fort-de-France;
|
||||
@@ -485,7 +505,7 @@ in decreasing order of importance:
|
||||
HMT Havana, Helsinki, Horta, Howrah;
|
||||
IMT Irkutsk, Istanbul;
|
||||
JMT Jerusalem;
|
||||
KMT Kaunas, Kiev, Kingston;
|
||||
KMT Kaunas, Kyiv, Kingston;
|
||||
LMT Lima, Lisbon, local, Luanda;
|
||||
MMT Macassar, Madras, Malé, Managua, Minsk, Monrovia, Montevideo,
|
||||
Moratuwa, Moscow;
|
||||
@@ -499,7 +519,8 @@ in decreasing order of importance:
|
||||
SMT Santiago, Simferopol, Singapore, Stanley;
|
||||
TBMT Tbilisi;
|
||||
TMT Tallinn, Tehran;
|
||||
WMT Warsaw</small>.
|
||||
WMT Warsaw;
|
||||
ZMT Zomba.</small>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -513,9 +534,7 @@ in decreasing order of importance:
|
||||
1880–1916,
|
||||
MMT/MST/MDST for Moscow 1880–1919, and
|
||||
RMT/LST for Riga Mean Time and Latvian Summer time 1880–1926.
|
||||
An extra-special case is SET for Swedish Time (<em>svensk
|
||||
normaltid</em>) 1879–1899, 3° west of the Stockholm
|
||||
Observatory.</small>
|
||||
</small>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -552,7 +571,7 @@ in decreasing order of importance:
|
||||
locations while uninhabited.
|
||||
The leading '<code>-</code>' is a flag that the <abbr>UT</abbr> offset is in
|
||||
some sense undefined; this notation is derived
|
||||
from <a href="https://tools.ietf.org/html/rfc3339">Internet
|
||||
from <a href="https://datatracker.ietf.org/doc/html/rfc3339">Internet
|
||||
<abbr title="Request For Comments">RFC</abbr> 3339</a>.
|
||||
</li>
|
||||
</ul>
|
||||
@@ -605,7 +624,7 @@ Errors in the <code><abbr>tz</abbr></code> database arise from many sources:
|
||||
should be observed.
|
||||
In her 2015 book
|
||||
<cite><a
|
||||
href="http://www.hup.harvard.edu/catalog.php?isbn=9780674286146">The
|
||||
href="https://www.hup.harvard.edu/catalog.php?isbn=9780674286146">The
|
||||
Global Transformation of Time, 1870–1950</a></cite>,
|
||||
Vanessa Ogle writes
|
||||
"Outside of Europe and North America there was no system of time
|
||||
@@ -702,12 +721,10 @@ href="https://www.dissentmagazine.org/blog/booked-a-global-history-of-time-vanes
|
||||
<li>
|
||||
Sometimes historical timekeeping was specified more precisely
|
||||
than what the <code><abbr>tz</abbr></code> code can handle.
|
||||
For example, from 1909 to 1937 <a
|
||||
href="https://www.staff.science.uu.nl/~gent0113/wettijd/wettijd.htm"
|
||||
hreflang="nl">Netherlands clocks</a> were legally Amsterdam Mean
|
||||
For example, from 1880 to 1916 clocks in Ireland observed Dublin Mean
|
||||
Time (estimated to be <abbr>UT</abbr>
|
||||
+00:19:32.13), but the <code><abbr>tz</abbr></code>
|
||||
code cannot represent the fractional second.
|
||||
−00:25:21.1); although the <code><abbr>tz</abbr></code>
|
||||
source data can represent the .1 second, TZif files and the code cannot.
|
||||
In practice these old specifications were rarely if ever
|
||||
implemented to subsecond precision.
|
||||
</li>
|
||||
@@ -753,7 +770,8 @@ href="https://www.dissentmagazine.org/blog/booked-a-global-history-of-time-vanes
|
||||
the Western 06:00 to be 12:00. These practices are largely outside
|
||||
the scope of the <code><abbr>tz</abbr></code> code and data, which
|
||||
provide only limited support for date and time localization
|
||||
such as that required by POSIX. If DST is not used a different time zone
|
||||
such as that required by POSIX.
|
||||
If <abbr>DST</abbr> is not used a different time zone
|
||||
can often do the trick; for example, in Kenya a <code>TZ</code> setting
|
||||
like <code><-03>3</code> or <code>America/Cayenne</code> starts
|
||||
the day six hours later than <code>Africa/Nairobi</code> does.
|
||||
@@ -792,7 +810,7 @@ href="https://www.dissentmagazine.org/blog/booked-a-global-history-of-time-vanes
|
||||
See: Stephenson FR, Morrison LV, Hohenkerk CY.
|
||||
<a href="https://dx.doi.org/10.1098/rspa.2016.0404">Measurement of
|
||||
the Earth's rotation: 720 BC to AD 2015</a>.
|
||||
<cite>Proc Royal Soc A</cite>. 2016 Dec 7;472:20160404.
|
||||
<cite>Proc Royal Soc A</cite>. 2016;472:20160404.
|
||||
Also see: Espenak F. <a
|
||||
href="https://eclipse.gsfc.nasa.gov/SEhelp/uncertainty2004.html">Uncertainty
|
||||
in Delta T (ΔT)</a>.
|
||||
@@ -1018,7 +1036,7 @@ an older <code>zic</code>.
|
||||
and numeric data as described <a href="#POSIX">above</a>.
|
||||
The file's format is <dfn><abbr>TZif</abbr></dfn>,
|
||||
a timezone information format that contains binary data; see
|
||||
<a href="https://tools.ietf.org/html/8536">Internet
|
||||
<a href="https://datatracker.ietf.org/doc/html/8536">Internet
|
||||
<abbr>RFC</abbr> 8536</a>.
|
||||
The daylight saving time rules to be used for a
|
||||
particular timezone are encoded in the
|
||||
@@ -1046,11 +1064,12 @@ an older <code>zic</code>.
|
||||
</li>
|
||||
<li>
|
||||
The code supports platforms with a <abbr>UT</abbr> offset member
|
||||
in <code>struct tm</code>, e.g., <code>tm_gmtoff</code>.
|
||||
</li>
|
||||
<li>
|
||||
The code supports platforms with a time zone abbreviation member in
|
||||
<code>struct tm</code>, e.g., <code>tm_zone</code>.
|
||||
in <code>struct tm</code>, e.g., <code>tm_gmtoff</code>,
|
||||
or with a time zone abbreviation member in
|
||||
<code>struct tm</code>, e.g., <code>tm_zone</code>. As noted
|
||||
in <a href="https://austingroupbugs.net/view.php?id=1533">Austin
|
||||
Group defect 1533</a>, a future version of POSIX is planned to
|
||||
require <code>tm_gmtoff</code> and <code>tm_zone</code>.
|
||||
</li>
|
||||
<li>
|
||||
Functions <code>tzalloc</code>, <code>tzfree</code>,
|
||||
@@ -1111,7 +1130,8 @@ The vestigial <abbr>API</abbr>s are:
|
||||
<abbr>API</abbr>s.
|
||||
Although it can still be used in arguments to
|
||||
<code>mktime</code> to disambiguate timestamps near
|
||||
a <abbr>DST</abbr> transition when the clock jumps back, this
|
||||
a <abbr>DST</abbr> transition when the clock jumps back on
|
||||
platforms lacking <code>tm_gmtoff</code>, this
|
||||
disambiguation does not work when standard time itself jumps back,
|
||||
which can occur when a location changes to a time zone with a
|
||||
lesser <abbr>UT</abbr> offset.
|
||||
@@ -1259,7 +1279,7 @@ the operating system kernel clock as described in
|
||||
<a href="tz-link.html#precision">Precision timekeeping</a>,
|
||||
and this package by default installs a <samp>leapseconds</samp> file
|
||||
commonly used by
|
||||
<a href="http://www.ntp.org"><abbr title="Network Time Protocol">NTP</abbr></a>
|
||||
<a href="https://www.ntp.org"><abbr title="Network Time Protocol">NTP</abbr></a>
|
||||
software that adjusts the kernel clock.
|
||||
However, kernel-clock twiddling approximates UTC only roughly,
|
||||
and systems needing more-precise UTC can use this package's leap
|
||||
@@ -1271,7 +1291,8 @@ The directly-supported mechanism assumes that <code>time_t</code>
|
||||
counts of seconds since the POSIX epoch normally include leap seconds,
|
||||
as opposed to POSIX <code>time_t</code> counts which exclude leap seconds.
|
||||
This modified timescale is converted to <abbr>UTC</abbr>
|
||||
at the same point that time zone and DST adjustments are applied –
|
||||
at the same point that time zone and <abbr>DST</abbr>
|
||||
adjustments are applied –
|
||||
namely, at calls to <code>localtime</code> and analogous functions –
|
||||
and the process is driven by leap second information
|
||||
stored in alternate versions of the <abbr>TZif</abbr> files.
|
||||
@@ -1279,7 +1300,8 @@ Because a leap second adjustment may be needed even
|
||||
if no time zone correction is desired,
|
||||
calls to <code>gmtime</code>-like functions
|
||||
also need to consult a <abbr>TZif</abbr> file,
|
||||
conventionally named <samp><abbr>GMT</abbr></samp>,
|
||||
conventionally named <samp><abbr>Etc/UTC</abbr></samp>
|
||||
(<samp><abbr>GMT</abbr></samp> in previous versions),
|
||||
to see whether leap second corrections are needed.
|
||||
To convert an application's <code>time_t</code> timestamps to or from
|
||||
POSIX <code>time_t</code> timestamps (for use when, say,
|
||||
|
||||
@@ -1 +1 @@
|
||||
2021a
|
||||
2022g
|
||||
@@ -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
|
||||
+294
-40
@@ -9,7 +9,14 @@
|
||||
# it does not do these nonessential tasks now.
|
||||
#
|
||||
# Although main and vanguard forms are currently equivalent,
|
||||
# this need not always be the case.
|
||||
# this need not always be the case. When the two forms differ,
|
||||
# this script can convert either from main to vanguard form (needed then),
|
||||
# or from vanguard to main form (this conversion would be needed later,
|
||||
# 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.
|
||||
@@ -19,26 +26,82 @@
|
||||
# of the input data as best it can within the constraints of the
|
||||
# rearguard format.
|
||||
|
||||
# Given a FIELD like "-0:30", return a minute count like -30.
|
||||
function get_minutes(field, \
|
||||
sign, hours, minutes)
|
||||
{
|
||||
sign = field ~ /^-/ ? -1 : 1
|
||||
hours = +field
|
||||
if (field ~ /:/) {
|
||||
minutes = field
|
||||
sub(/[^:]*:/, "", minutes)
|
||||
}
|
||||
return 60 * hours + sign * minutes
|
||||
}
|
||||
|
||||
# Given an OFFSET, which is a minute count like 300 or 330,
|
||||
# return a %z-style abbreviation like "+05" or "+0530".
|
||||
function offset_abbr(offset, \
|
||||
hours, minutes, sign)
|
||||
{
|
||||
hours = int(offset / 60)
|
||||
minutes = offset % 60
|
||||
if (minutes) {
|
||||
return sprintf("%+.4d", hours * 100 + minutes);
|
||||
} else {
|
||||
return sprintf("%+.2d", hours)
|
||||
}
|
||||
}
|
||||
|
||||
# Round TIMESTAMP (a +-hh:mm:ss.dddd string) to the nearest second.
|
||||
function round_to_second(timestamp, \
|
||||
hh, mm, ss, seconds, dot_dddd, subseconds)
|
||||
{
|
||||
dot_dddd = timestamp
|
||||
if (!sub(/^[+-]?[0-9]+:[0-9]+:[0-9]+\./, ".", dot_dddd))
|
||||
return timestamp
|
||||
hh = mm = ss = timestamp
|
||||
sub(/^[-+]?[0-9]+:[0-9]+:/, "", ss)
|
||||
sub(/^[-+]?[0-9]+:/, "", mm)
|
||||
sub(/^[-+]?/, "", hh)
|
||||
seconds = 3600 * hh + 60 * mm + ss
|
||||
subseconds = +dot_dddd
|
||||
seconds += 0.5 < subseconds || ((subseconds == 0.5) && (seconds % 2));
|
||||
return sprintf("%s%d:%.2d:%.2d", timestamp ~ /^-/ ? "-" : "", \
|
||||
seconds / 3600, seconds / 60 % 60, seconds % 60)
|
||||
}
|
||||
|
||||
BEGIN {
|
||||
dataform_type["vanguard"] = 1
|
||||
dataform_type["main"] = 1
|
||||
dataform_type["rearguard"] = 1
|
||||
|
||||
if (PACKRATLIST) {
|
||||
while (getline <PACKRATLIST) {
|
||||
if ($0 ~ /^#/) continue
|
||||
packratlist[$3] = 1
|
||||
}
|
||||
}
|
||||
|
||||
# The command line should set DATAFORM.
|
||||
if (!dataform_type[DATAFORM]) exit 1
|
||||
vanguard = DATAFORM == "vanguard"
|
||||
}
|
||||
|
||||
$1 == "#PACKRATLIST" && $2 == PACKRATLIST {
|
||||
sub(/^#PACKRATLIST[\t ]+[^\t ]+[\t ]+/, "")
|
||||
}
|
||||
|
||||
/^Zone/ { zone = $2 }
|
||||
|
||||
DATAFORM != "main" {
|
||||
in_comment = /^#/
|
||||
in_comment = $0 ~ /^#/
|
||||
uncomment = comment_out = 0
|
||||
|
||||
# If this line should differ due to Czechoslovakia using negative SAVE values,
|
||||
# uncomment the desired version and comment out the undesired one.
|
||||
if (zone == "Europe/Prague" && /^#?[\t ]+[01]:00[\t ]/ && /1947 Feb 23/) {
|
||||
if (($(in_comment + 2) != "-") == vanguard) {
|
||||
if (zone == "Europe/Prague" && $0 ~ /^#?[\t ]+[01]:00[\t ]/ \
|
||||
&& $0 ~ /1947 Feb 23/) {
|
||||
if (($(in_comment + 2) != "-") == (DATAFORM != "rearguard")) {
|
||||
uncomment = in_comment
|
||||
} else {
|
||||
comment_out = !in_comment
|
||||
@@ -47,14 +110,14 @@ DATAFORM != "main" {
|
||||
|
||||
# If this line should differ due to Ireland using negative SAVE values,
|
||||
# uncomment the desired version and comment out the undesired one.
|
||||
Rule_Eire = /^#?Rule[\t ]+Eire[\t ]/
|
||||
Rule_Eire = $0 ~ /^#?Rule[\t ]+Eire[\t ]/
|
||||
Zone_Dublin_post_1968 \
|
||||
= (zone == "Europe/Dublin" && /^#?[\t ]+[01]:00[\t ]/ \
|
||||
= (zone == "Europe/Dublin" && $0 ~ /^#?[\t ]+[01]:00[\t ]/ \
|
||||
&& (!$(in_comment + 4) || 1968 < $(in_comment + 4)))
|
||||
if (Rule_Eire || Zone_Dublin_post_1968) {
|
||||
if ((Rule_Eire \
|
||||
|| (Zone_Dublin_post_1968 && $(in_comment + 3) == "IST/GMT")) \
|
||||
== vanguard) {
|
||||
== (DATAFORM != "rearguard")) {
|
||||
uncomment = in_comment
|
||||
} else {
|
||||
comment_out = !in_comment
|
||||
@@ -63,19 +126,39 @@ DATAFORM != "main" {
|
||||
|
||||
# If this line should differ due to Namibia using negative SAVE values,
|
||||
# uncomment the desired version and comment out the undesired one.
|
||||
Rule_Namibia = /^#?Rule[\t ]+Namibia[\t ]/
|
||||
Rule_Namibia = $0 ~ /^#?Rule[\t ]+Namibia[\t ]/
|
||||
Zone_using_Namibia_rule \
|
||||
= (zone == "Africa/Windhoek" && /^#?[\t ]+[12]:00[\t ]/ \
|
||||
= (zone == "Africa/Windhoek" && $0 ~ /^#?[\t ]+[12]:00[\t ]/ \
|
||||
&& ($(in_comment + 2) == "Namibia" \
|
||||
|| ($(in_comment + 2) == "-" && $(in_comment + 3) == "CAT" \
|
||||
&& ((1994 <= $(in_comment + 4) && $(in_comment + 4) <= 2017) \
|
||||
|| in_comment + 3 == NF))))
|
||||
if (Rule_Namibia || Zone_using_Namibia_rule) {
|
||||
if ((Rule_Namibia \
|
||||
? ($(in_comment + 9) ~ /^-/ \
|
||||
|| ($(in_comment + 9) == 0 && $(in_comment + 10) == "CAT")) \
|
||||
: $(in_comment + 1) == "2:00" && $(in_comment + 2) == "Namibia") \
|
||||
== vanguard) {
|
||||
if ((Rule_Namibia \
|
||||
? ($9 ~ /^-/ || ($9 == 0 && $10 == "CAT")) \
|
||||
: $(in_comment + 1) == "2:00" && $(in_comment + 2) == "Namibia") \
|
||||
== (DATAFORM != "rearguard")) {
|
||||
uncomment = in_comment
|
||||
} else {
|
||||
comment_out = !in_comment
|
||||
}
|
||||
}
|
||||
|
||||
# If this line should differ due to Portugal benefiting from %z if supported,
|
||||
# uncomment the desired version and comment out the undesired one.
|
||||
if ($0 ~ /^#?[\t ]+-[12]:00[\t ]+Port[\t ]+[%+-]/) {
|
||||
if (($0 ~ /%z/) == (DATAFORM == "vanguard")) {
|
||||
uncomment = in_comment
|
||||
} else {
|
||||
comment_out = !in_comment
|
||||
}
|
||||
}
|
||||
|
||||
# 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
|
||||
@@ -89,44 +172,215 @@ DATAFORM != "main" {
|
||||
sub(/^/, "#")
|
||||
}
|
||||
|
||||
# In rearguard format, change the Japan rule line with "Sat>=8 25:00"
|
||||
# to "Sun>=9 1:00", to cater to zic before 2007 and to older Java.
|
||||
if (!vanguard && $1 == "Rule" && $7 == "Sat>=8" && $8 == "25:00") {
|
||||
sub(/Sat>=8/, "Sun>=9")
|
||||
sub(/25:00/, " 1:00")
|
||||
}
|
||||
|
||||
# In rearguard format, change the Morocco lines with negative SAVE values
|
||||
# to use positive SAVE values.
|
||||
if (!vanguard && $1 == "Rule" && $2 == "Morocco" && $4 == 2018 \
|
||||
&& $6 == "Oct") {
|
||||
sub(/\t2018\t/, "\t2017\t")
|
||||
}
|
||||
if (!vanguard && $1 == "Rule" && $2 == "Morocco" && 2019 <= $3) {
|
||||
if ($9 == "0") {
|
||||
sub(/\t0\t/, "\t1:00\t")
|
||||
} else {
|
||||
sub(/\t-1:00\t/, "\t0\t")
|
||||
# Prefer %z in vanguard form, explicit abbreviations otherwise.
|
||||
if (DATAFORM == "vanguard") {
|
||||
sub(/^(Zone[\t ]+[^\t ]+)?[\t ]+[^\t ]+[\t ]+[^\t ]+[\t ]+[-+][^\t ]+/, \
|
||||
"&CHANGE-TO-%z")
|
||||
sub(/-00CHANGE-TO-%z/, "-00")
|
||||
sub(/[-+][^\t ]+CHANGE-TO-/, "")
|
||||
} else {
|
||||
if ($0 ~ /^[^#]*%z/) {
|
||||
stdoff_column = 2 * ($0 ~ /^Zone/) + 1
|
||||
rules_column = stdoff_column + 1
|
||||
stdoff = get_minutes($stdoff_column)
|
||||
rules = $rules_column
|
||||
stdabbr = offset_abbr(stdoff)
|
||||
if (rules == "-") {
|
||||
abbr = stdabbr
|
||||
} else {
|
||||
dstabbr_only = rules ~ /^[+0-9-]/
|
||||
if (dstabbr_only) {
|
||||
dstoff = get_minutes(rules)
|
||||
} else {
|
||||
# The DST offset is normally an hour, but there are special cases.
|
||||
if (rules == "Morocco" && NF == 3) {
|
||||
dstoff = -60
|
||||
} else if (rules == "NBorneo") {
|
||||
dstoff = 20
|
||||
} else if (((rules == "Cook" || rules == "LH") && NF == 3) \
|
||||
|| (rules == "Uruguay" \
|
||||
&& $0 ~ /[\t ](1942 Dec 14|1960|1970|1974 Dec 22)$/)) {
|
||||
dstoff = 30
|
||||
} else if (rules == "Uruguay" && $0 ~ /[\t ]1974 Mar 10$/) {
|
||||
dstoff = 90
|
||||
} else {
|
||||
dstoff = 60
|
||||
}
|
||||
}
|
||||
dstabbr = offset_abbr(stdoff + dstoff)
|
||||
if (dstabbr_only) {
|
||||
abbr = dstabbr
|
||||
} else {
|
||||
abbr = stdabbr "/" dstabbr
|
||||
}
|
||||
}
|
||||
sub(/%z/, abbr)
|
||||
}
|
||||
}
|
||||
if (!vanguard && $1 == "1:00" && $2 == "Morocco" && $3 == "+01/+00") {
|
||||
sub(/1:00\tMorocco\t\+01\/\+00$/, "0:00\tMorocco\t+00/+01")
|
||||
|
||||
# Normally, prefer whole seconds. However, prefer subseconds
|
||||
# if generating vanguard form and the otherwise-undocumented
|
||||
# VANGUARD_SUBSECONDS environment variable is set.
|
||||
# This relies on #STDOFF comment lines in the data.
|
||||
# It is for hypothetical clients that support UT offsets that are
|
||||
# not integer multiples of one second (e.g., Europe/Lisbon, 1884 to 1912).
|
||||
# No known clients need this currently, and this experimental
|
||||
# feature may be changed or withdrawn in future releases.
|
||||
if ($1 == "#STDOFF") {
|
||||
stdoff = $2
|
||||
rounded_stdoff = round_to_second(stdoff)
|
||||
if (DATAFORM == "vanguard" && ENVIRON["VANGUARD_SUBSECONDS"]) {
|
||||
stdoff_subst[0] = rounded_stdoff
|
||||
stdoff_subst[1] = stdoff
|
||||
} else {
|
||||
stdoff_subst[0] = stdoff
|
||||
stdoff_subst[1] = rounded_stdoff
|
||||
}
|
||||
} else if (stdoff_subst[0]) {
|
||||
stdoff_column = 2 * ($0 ~ /^Zone/) + 1
|
||||
stdoff_column_val = $stdoff_column
|
||||
if (stdoff_column_val == stdoff_subst[0]) {
|
||||
sub(stdoff_subst[0], stdoff_subst[1])
|
||||
} else if (stdoff_column_val != stdoff_subst[1]) {
|
||||
stdoff_subst[0] = 0
|
||||
}
|
||||
}
|
||||
|
||||
# In rearguard form, change the Japan rule line with "Sat>=8 25:00"
|
||||
# to "Sun>=9 1:00", to cater to zic before 2007 and to older Java.
|
||||
if ($0 ~ /^Rule/ && $2 == "Japan") {
|
||||
if (DATAFORM == "rearguard") {
|
||||
if ($7 == "Sat>=8" && $8 == "25:00") {
|
||||
sub(/Sat>=8/, "Sun>=9")
|
||||
sub(/25:00/, " 1:00")
|
||||
}
|
||||
} else {
|
||||
if ($7 == "Sun>=9" && $8 == "1:00") {
|
||||
sub(/Sun>=9/, "Sat>=8")
|
||||
sub(/ 1:00/, "25:00")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# In rearguard form, change the Morocco lines with negative SAVE values
|
||||
# to use positive SAVE values.
|
||||
if ($2 == "Morocco") {
|
||||
if ($0 ~ /^Rule/) {
|
||||
if ($4 ~ /^201[78]$/ && $6 == "Oct") {
|
||||
if (DATAFORM == "rearguard") {
|
||||
sub(/\t2018\t/, "\t2017\t")
|
||||
} else {
|
||||
sub(/\t2017\t/, "\t2018\t")
|
||||
}
|
||||
}
|
||||
|
||||
if (2019 <= $3) {
|
||||
if ($8 == "2:00") {
|
||||
if (DATAFORM == "rearguard") {
|
||||
sub(/\t0\t/, "\t1:00\t")
|
||||
} else {
|
||||
sub(/\t1:00\t/, "\t0\t")
|
||||
}
|
||||
} else {
|
||||
if (DATAFORM == "rearguard") {
|
||||
sub(/\t-1:00\t/, "\t0\t")
|
||||
} else {
|
||||
sub(/\t0\t/, "\t-1:00\t")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($1 ~ /^[+0-9-]/ && NF == 3) {
|
||||
if (DATAFORM == "rearguard") {
|
||||
sub(/1:00\tMorocco/, "0:00\tMorocco")
|
||||
sub(/\t\+01\/\+00$/, "\t+00/+01")
|
||||
} else {
|
||||
sub(/0:00\tMorocco/, "1:00\tMorocco")
|
||||
sub(/\t\+00\/+01$/, "\t+01/+00")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# If a Link line is followed by a Zone line for the same data, comment
|
||||
# out the Link line. This can happen if backzone overrides a Link
|
||||
# with a Zone.
|
||||
/^Link/ {
|
||||
linkline[$3] = NR
|
||||
/^Zone/ {
|
||||
packrat_ignored = FILENAME == PACKRATDATA && PACKRATLIST && !packratlist[$2];
|
||||
}
|
||||
{
|
||||
if (packrat_ignored && $0 !~ /^Rule/) {
|
||||
sub(/^/, "#")
|
||||
}
|
||||
}
|
||||
|
||||
# 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.
|
||||
/^Zone/ {
|
||||
sub(/^Link/, "#Link", line[linkline[$2]])
|
||||
}
|
||||
/^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]
|
||||
}
|
||||
+50
-12
@@ -23,7 +23,7 @@ function record_hash(n, name)
|
||||
function gen_rule_name(name, \
|
||||
n)
|
||||
{
|
||||
# Use a simple memonic: the first two letters.
|
||||
# Use a simple mnemonic: the first two letters.
|
||||
n = substr(name, 1, 2)
|
||||
record_hash(n, name)
|
||||
# printf "# %s = %s\n", n, name
|
||||
@@ -150,10 +150,19 @@ function prehash_rule_names( \
|
||||
}
|
||||
}
|
||||
|
||||
function make_line(n, field, \
|
||||
f, r)
|
||||
{
|
||||
r = field[1]
|
||||
for (f = 2; f <= n; f++)
|
||||
r = r " " field[f]
|
||||
return r
|
||||
}
|
||||
|
||||
# Process the input line LINE and save it for later output.
|
||||
|
||||
function process_input_line(line, \
|
||||
field, end, i, n, startdef, \
|
||||
f, field, end, i, n, r, startdef, \
|
||||
linkline, ruleline, zoneline)
|
||||
{
|
||||
# Remove comments, normalize spaces, and append a space to each line.
|
||||
@@ -218,12 +227,11 @@ function process_input_line(line, \
|
||||
|
||||
n = split(line, field)
|
||||
|
||||
# Abbreviate rule names.
|
||||
i = zoneline ? 4 : linkline ? 0 : 2
|
||||
if (i && field[i] ~ /^[^-+0-9]/) {
|
||||
if (!rule[field[i]])
|
||||
rule[field[i]] = gen_rule_name(field[i])
|
||||
field[i] = rule[field[i]]
|
||||
# Record which rule names are used, and generate their abbreviations.
|
||||
f = zoneline ? 4 : linkline || ruleline ? 0 : 2
|
||||
r = field[f]
|
||||
if (r ~ /^[^-+0-9]/) {
|
||||
rule_used[r] = 1
|
||||
}
|
||||
|
||||
# If this zone supersedes an earlier one, delete the earlier one
|
||||
@@ -246,10 +254,38 @@ function process_input_line(line, \
|
||||
zonedef[zonename] = nout + 1
|
||||
|
||||
# Save the line for later output.
|
||||
line = field[1]
|
||||
for (i = 2; i <= n; i++)
|
||||
line = line " " field[i]
|
||||
output_line[nout++] = line
|
||||
output_line[nout++] = make_line(n, field)
|
||||
}
|
||||
|
||||
function omit_unused_rules( \
|
||||
i, field)
|
||||
{
|
||||
for (i = 0; i < nout; i++) {
|
||||
split(output_line[i], field)
|
||||
if (field[1] == "R" && !rule_used[field[2]]) {
|
||||
output_line[i] = ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function abbreviate_rule_names( \
|
||||
abbr, f, field, i, n, r)
|
||||
{
|
||||
for (i = 0; i < nout; i++) {
|
||||
n = split(output_line[i], field)
|
||||
if (n) {
|
||||
f = field[1] == "Z" ? 4 : field[1] == "L" ? 0 : 2
|
||||
r = field[f]
|
||||
if (r ~ /^[^-+0-9]/) {
|
||||
abbr = rule[r]
|
||||
if (!abbr) {
|
||||
rule[r] = abbr = gen_rule_name(r)
|
||||
}
|
||||
field[f] = abbr
|
||||
output_line[i] = make_line(n, field)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function output_saved_lines( \
|
||||
@@ -314,5 +350,7 @@ BEGIN {
|
||||
}
|
||||
|
||||
END {
|
||||
omit_unused_rules()
|
||||
abbreviate_rule_names()
|
||||
output_saved_lines()
|
||||
}
|
||||
+21
-23
@@ -3,7 +3,7 @@
|
||||
# This file is in the public domain, so clarified as of
|
||||
# 2009-05-17 by Arthur David Olson.
|
||||
#
|
||||
# From Paul Eggert (2018-06-27):
|
||||
# From Paul Eggert (2021-09-20):
|
||||
# This file is intended as a backward-compatibility aid for older programs.
|
||||
# New programs should use zone1970.tab. This file is like zone1970.tab (see
|
||||
# zone1970.tab's comments), but with the following additional restrictions:
|
||||
@@ -16,6 +16,9 @@
|
||||
# clocks have agreed since 1970; this is a narrower definition than
|
||||
# that of zone1970.tab.
|
||||
#
|
||||
# Unlike zone1970.tab, a row's third column can be a Link from
|
||||
# 'backward' instead of a Zone.
|
||||
#
|
||||
# This table is intended as an aid for users, to help them select timezones
|
||||
# appropriate for their practical needs. It is not intended to take or
|
||||
# endorse any position on legal or territorial claims.
|
||||
@@ -111,13 +114,9 @@ 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 +6344-06828 America/Iqaluit Eastern - NU (most areas)
|
||||
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)
|
||||
@@ -127,7 +126,7 @@ CA +690650-1050310 America/Cambridge_Bay Mountain - NU (west)
|
||||
CA +6227-11421 America/Yellowknife Mountain - NT (central)
|
||||
CA +682059-1334300 America/Inuvik Mountain - NT (west)
|
||||
CA +4906-11631 America/Creston MST - BC (Creston)
|
||||
CA +5946-12014 America/Dawson_Creek MST - BC (Dawson Cr, Ft St John)
|
||||
CA +5546-12014 America/Dawson_Creek MST - BC (Dawson Cr, Ft St John)
|
||||
CA +5848-12242 America/Fort_Nelson MST - BC (Ft Nelson)
|
||||
CA +6043-13503 America/Whitehorse MST - Yukon (east)
|
||||
CA +6404-13925 America/Dawson MST - Yukon (west)
|
||||
@@ -228,7 +227,7 @@ KE -0117+03649 Africa/Nairobi
|
||||
KG +4254+07436 Asia/Bishkek
|
||||
KH +1133+10455 Asia/Phnom_Penh
|
||||
KI +0125+17300 Pacific/Tarawa Gilbert Islands
|
||||
KI -0308-17105 Pacific/Enderbury Phoenix Islands
|
||||
KI -0247-17143 Pacific/Kanton Phoenix Islands
|
||||
KI +0152-15720 Pacific/Kiritimati Line Islands
|
||||
KM -1141+04316 Indian/Comoro
|
||||
KN +1718-06243 America/St_Kitts
|
||||
@@ -277,17 +276,18 @@ MT +3554+01431 Europe/Malta
|
||||
MU -2010+05730 Indian/Mauritius
|
||||
MV +0410+07330 Indian/Maldives
|
||||
MW -1547+03500 Africa/Blantyre
|
||||
MX +1924-09909 America/Mexico_City Central Time
|
||||
MX +2105-08646 America/Cancun Eastern Standard Time - Quintana Roo
|
||||
MX +2058-08937 America/Merida Central Time - Campeche, Yucatan
|
||||
MX +2540-10019 America/Monterrey Central Time - Durango; Coahuila, Nuevo Leon, Tamaulipas (most areas)
|
||||
MX +2550-09730 America/Matamoros Central Time US - Coahuila, Nuevo Leon, Tamaulipas (US border)
|
||||
MX +2313-10625 America/Mazatlan Mountain Time - Baja California Sur, Nayarit, Sinaloa
|
||||
MX +2838-10605 America/Chihuahua Mountain Time - Chihuahua (most areas)
|
||||
MX +2934-10425 America/Ojinaga Mountain Time US - Chihuahua (US border)
|
||||
MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora
|
||||
MX +3232-11701 America/Tijuana Pacific Time US - Baja California
|
||||
MX +2048-10515 America/Bahia_Banderas Central Time - Bahia de Banderas
|
||||
MX +1924-09909 America/Mexico_City Central Mexico
|
||||
MX +2105-08646 America/Cancun Quintana Roo
|
||||
MX +2058-08937 America/Merida Campeche, Yucatan
|
||||
MX +2540-10019 America/Monterrey Durango; Coahuila, Nuevo Leon, Tamaulipas (most areas)
|
||||
MX +2550-09730 America/Matamoros Coahuila, Nuevo Leon, Tamaulipas (US border)
|
||||
MX +2838-10605 America/Chihuahua Chihuahua (most areas)
|
||||
MX +3144-10629 America/Ciudad_Juarez Chihuahua (US border - west)
|
||||
MX +2934-10425 America/Ojinaga Chihuahua (US border - east)
|
||||
MX +2313-10625 America/Mazatlan Baja California Sur, Nayarit (most areas), Sinaloa
|
||||
MX +2048-10515 America/Bahia_Banderas Bahia de Banderas
|
||||
MX +2904-11058 America/Hermosillo Sonora
|
||||
MX +3232-11701 America/Tijuana Baja California
|
||||
MY +0310+10142 Asia/Kuala_Lumpur Malaysia (peninsula)
|
||||
MY +0133+11020 Asia/Kuching Sabah, Sarawak
|
||||
MZ -2558+03235 Africa/Maputo
|
||||
@@ -391,15 +391,13 @@ TK -0922-17114 Pacific/Fakaofo
|
||||
TL -0833+12535 Asia/Dili
|
||||
TM +3757+05823 Asia/Ashgabat
|
||||
TN +3648+01011 Africa/Tunis
|
||||
TO -2110-17510 Pacific/Tongatapu
|
||||
TO -210800-1751200 Pacific/Tongatapu
|
||||
TR +4101+02858 Europe/Istanbul
|
||||
TT +1039-06131 America/Port_of_Spain
|
||||
TV -0831+17913 Pacific/Funafuti
|
||||
TW +2503+12130 Asia/Taipei
|
||||
TZ -0648+03917 Africa/Dar_es_Salaam
|
||||
UA +5026+03031 Europe/Kiev Ukraine (most areas)
|
||||
UA +4837+02218 Europe/Uzhgorod Transcarpathia
|
||||
UA +4750+03510 Europe/Zaporozhye Zaporozhye and east Lugansk
|
||||
UA +5026+03031 Europe/Kyiv Ukraine (most areas)
|
||||
UG +0019+03225 Africa/Kampala
|
||||
UM +2813-17722 Pacific/Midway Midway Islands
|
||||
UM +1917+16637 Pacific/Wake Wake Island
|
||||
|
||||
+60
-71
@@ -35,19 +35,16 @@
|
||||
#country-
|
||||
#codes coordinates TZ comments
|
||||
AD +4230+00131 Europe/Andorra
|
||||
AE,OM +2518+05518 Asia/Dubai
|
||||
AE,OM,RE,SC,TF +2518+05518 Asia/Dubai UAE, Oman, Réunion, Seychelles, Crozet, Scattered Is
|
||||
AF +3431+06912 Asia/Kabul
|
||||
AL +4120+01950 Europe/Tirane
|
||||
AM +4011+04430 Asia/Yerevan
|
||||
AQ -6617+11031 Antarctica/Casey Casey
|
||||
AQ -6835+07758 Antarctica/Davis Davis
|
||||
AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville
|
||||
AQ -6736+06253 Antarctica/Mawson Mawson
|
||||
AQ -6448-06406 Antarctica/Palmer Palmer
|
||||
AQ -6734-06808 Antarctica/Rothera Rothera
|
||||
AQ -690022+0393524 Antarctica/Syowa Syowa
|
||||
AQ -720041+0023206 Antarctica/Troll Troll
|
||||
AQ -7824+10654 Antarctica/Vostok Vostok
|
||||
AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
|
||||
AR -3124-06411 America/Argentina/Cordoba Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF)
|
||||
AR -2447-06525 America/Argentina/Salta Salta (SA, LP, NQ, RN)
|
||||
@@ -77,10 +74,9 @@ AU -3143+12852 Australia/Eucla Western Australia (Eucla)
|
||||
AZ +4023+04951 Asia/Baku
|
||||
BB +1306-05937 America/Barbados
|
||||
BD +2343+09025 Asia/Dhaka
|
||||
BE +5050+00420 Europe/Brussels
|
||||
BE,LU,NL +5050+00420 Europe/Brussels
|
||||
BG +4241+02319 Europe/Sofia
|
||||
BM +3217-06446 Atlantic/Bermuda
|
||||
BN +0456+11455 Asia/Brunei
|
||||
BO -1630-06809 America/La_Paz
|
||||
BR -0351-03225 America/Noronha Atlantic islands
|
||||
BR -0127-04829 America/Belem Pará (east); Amapá
|
||||
@@ -98,7 +94,6 @@ BR +0249-06040 America/Boa_Vista Roraima
|
||||
BR -0308-06001 America/Manaus Amazonas (east)
|
||||
BR -0640-06952 America/Eirunepe Amazonas (west)
|
||||
BR -0958-06748 America/Rio_Branco Acre
|
||||
BS +2505-07721 America/Nassau
|
||||
BT +2728+08939 Asia/Thimphu
|
||||
BY +5354+02734 Europe/Minsk
|
||||
BZ +1730-08812 America/Belize
|
||||
@@ -107,15 +102,9 @@ CA +4439-06336 America/Halifax Atlantic - NS (most areas); PE
|
||||
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 +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,BS +4339-07923 America/Toronto Eastern - ON, QC (most areas), Bahamas
|
||||
CA +6344-06828 America/Iqaluit Eastern - NU (most areas)
|
||||
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)
|
||||
@@ -124,32 +113,27 @@ CA +5333-11328 America/Edmonton Mountain - AB; BC (E); SK (W)
|
||||
CA +690650-1050310 America/Cambridge_Bay Mountain - NU (west)
|
||||
CA +6227-11421 America/Yellowknife Mountain - NT (central)
|
||||
CA +682059-1334300 America/Inuvik Mountain - NT (west)
|
||||
CA +4906-11631 America/Creston MST - BC (Creston)
|
||||
CA +5946-12014 America/Dawson_Creek MST - BC (Dawson Cr, Ft St John)
|
||||
CA +5546-12014 America/Dawson_Creek MST - BC (Dawson Cr, Ft St John)
|
||||
CA +5848-12242 America/Fort_Nelson MST - BC (Ft Nelson)
|
||||
CA +6043-13503 America/Whitehorse MST - Yukon (east)
|
||||
CA +6404-13925 America/Dawson MST - Yukon (west)
|
||||
CA +4916-12307 America/Vancouver Pacific - BC (most areas)
|
||||
CC -1210+09655 Indian/Cocos
|
||||
CH,DE,LI +4723+00832 Europe/Zurich Swiss time
|
||||
CI,BF,GM,GN,ML,MR,SH,SL,SN,TG +0519-00402 Africa/Abidjan
|
||||
CI,BF,GH,GM,GN,IS,ML,MR,SH,SL,SN,TG +0519-00402 Africa/Abidjan
|
||||
CK -2114-15946 Pacific/Rarotonga
|
||||
CL -3327-07040 America/Santiago Chile (most areas)
|
||||
CL -5309-07055 America/Punta_Arenas Region of Magallanes
|
||||
CL -2709-10926 Pacific/Easter Easter Island
|
||||
CN +3114+12128 Asia/Shanghai Beijing Time
|
||||
CN +4348+08735 Asia/Urumqi Xinjiang Time
|
||||
CN,AQ +4348+08735 Asia/Urumqi Xinjiang Time, Vostok
|
||||
CO +0436-07405 America/Bogota
|
||||
CR +0956-08405 America/Costa_Rica
|
||||
CU +2308-08222 America/Havana
|
||||
CV +1455-02331 Atlantic/Cape_Verde
|
||||
CW,AW,BQ,SX +1211-06900 America/Curacao
|
||||
CX -1025+10543 Indian/Christmas
|
||||
CY +3510+03322 Asia/Nicosia Cyprus (most areas)
|
||||
CY +3507+03357 Asia/Famagusta Northern Cyprus
|
||||
CZ,SK +5005+01426 Europe/Prague
|
||||
DE +5230+01322 Europe/Berlin Germany (most areas)
|
||||
DK +5540+01235 Europe/Copenhagen
|
||||
DE,DK,NO,SE,SJ +5230+01322 Europe/Berlin Germany (most areas), Scandinavia
|
||||
DO +1828-06954 America/Santo_Domingo
|
||||
DZ +3647+00303 Africa/Algiers
|
||||
EC -0210-07950 America/Guayaquil Ecuador (mainland)
|
||||
@@ -163,15 +147,12 @@ ES +2806-01524 Atlantic/Canary Canary Islands
|
||||
FI,AX +6010+02458 Europe/Helsinki
|
||||
FJ -1808+17825 Pacific/Fiji
|
||||
FK -5142-05751 Atlantic/Stanley
|
||||
FM +0725+15147 Pacific/Chuuk Chuuk/Truk, Yap
|
||||
FM +0658+15813 Pacific/Pohnpei Pohnpei/Ponape
|
||||
FM +0519+16259 Pacific/Kosrae Kosrae
|
||||
FO +6201-00646 Atlantic/Faroe
|
||||
FR +4852+00220 Europe/Paris
|
||||
FR,MC +4852+00220 Europe/Paris
|
||||
GB,GG,IM,JE +513030-0000731 Europe/London
|
||||
GE +4143+04449 Asia/Tbilisi
|
||||
GF +0456-05220 America/Cayenne
|
||||
GH +0533-00013 Africa/Accra
|
||||
GI +3608-00521 Europe/Gibraltar
|
||||
GL +6411-05144 America/Nuuk Greenland (most areas)
|
||||
GL +7646-01840 America/Danmarkshavn National Park (east coast)
|
||||
@@ -197,15 +178,14 @@ IN +2232+08822 Asia/Kolkata
|
||||
IO -0720+07225 Indian/Chagos
|
||||
IQ +3321+04425 Asia/Baghdad
|
||||
IR +3540+05126 Asia/Tehran
|
||||
IS +6409-02151 Atlantic/Reykjavik
|
||||
IT,SM,VA +4154+01229 Europe/Rome
|
||||
JM +175805-0764736 America/Jamaica
|
||||
JO +3157+03556 Asia/Amman
|
||||
JP +353916+1394441 Asia/Tokyo
|
||||
KE,DJ,ER,ET,KM,MG,SO,TZ,UG,YT -0117+03649 Africa/Nairobi
|
||||
KG +4254+07436 Asia/Bishkek
|
||||
KI +0125+17300 Pacific/Tarawa Gilbert Islands
|
||||
KI -0308-17105 Pacific/Enderbury Phoenix Islands
|
||||
KI,MH,TV,UM,WF +0125+17300 Pacific/Tarawa Gilberts, Marshalls, Tuvalu, Wallis & Futuna, Wake
|
||||
KI -0247-17143 Pacific/Kanton Phoenix Islands
|
||||
KI +0152-15720 Pacific/Kiritimati Line Islands
|
||||
KP +3901+12545 Asia/Pyongyang
|
||||
KR +3733+12658 Asia/Seoul
|
||||
@@ -220,15 +200,12 @@ LB +3353+03530 Asia/Beirut
|
||||
LK +0656+07951 Asia/Colombo
|
||||
LR +0618-01047 Africa/Monrovia
|
||||
LT +5441+02519 Europe/Vilnius
|
||||
LU +4936+00609 Europe/Luxembourg
|
||||
LV +5657+02406 Europe/Riga
|
||||
LY +3254+01311 Africa/Tripoli
|
||||
MA +3339-00735 Africa/Casablanca
|
||||
MC +4342+00723 Europe/Monaco
|
||||
MD +4700+02850 Europe/Chisinau
|
||||
MH +0709+17112 Pacific/Majuro Marshall Islands (most areas)
|
||||
MH +0905+16720 Pacific/Kwajalein Kwajalein
|
||||
MM +1647+09610 Asia/Yangon
|
||||
MM,CC +1647+09610 Asia/Yangon
|
||||
MN +4755+10653 Asia/Ulaanbaatar Mongolia (most areas)
|
||||
MN +4801+09139 Asia/Hovd Bayan-Ölgii, Govi-Altai, Hovd, Uvs, Zavkhan
|
||||
MN +4804+11430 Asia/Choibalsan Dornod, Sükhbaatar
|
||||
@@ -236,46 +213,44 @@ MO +221150+1133230 Asia/Macau
|
||||
MQ +1436-06105 America/Martinique
|
||||
MT +3554+01431 Europe/Malta
|
||||
MU -2010+05730 Indian/Mauritius
|
||||
MV +0410+07330 Indian/Maldives
|
||||
MX +1924-09909 America/Mexico_City Central Time
|
||||
MX +2105-08646 America/Cancun Eastern Standard Time - Quintana Roo
|
||||
MX +2058-08937 America/Merida Central Time - Campeche, Yucatán
|
||||
MX +2540-10019 America/Monterrey Central Time - Durango; Coahuila, Nuevo León, Tamaulipas (most areas)
|
||||
MX +2550-09730 America/Matamoros Central Time US - Coahuila, Nuevo León, Tamaulipas (US border)
|
||||
MX +2313-10625 America/Mazatlan Mountain Time - Baja California Sur, Nayarit, Sinaloa
|
||||
MX +2838-10605 America/Chihuahua Mountain Time - Chihuahua (most areas)
|
||||
MX +2934-10425 America/Ojinaga Mountain Time US - Chihuahua (US border)
|
||||
MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora
|
||||
MX +3232-11701 America/Tijuana Pacific Time US - Baja California
|
||||
MX +2048-10515 America/Bahia_Banderas Central Time - Bahía de Banderas
|
||||
MY +0310+10142 Asia/Kuala_Lumpur Malaysia (peninsula)
|
||||
MY +0133+11020 Asia/Kuching Sabah, Sarawak
|
||||
MV,TF +0410+07330 Indian/Maldives Maldives, Kerguelen, St Paul I, Amsterdam I
|
||||
MX +1924-09909 America/Mexico_City Central Mexico
|
||||
MX +2105-08646 America/Cancun Quintana Roo
|
||||
MX +2058-08937 America/Merida Campeche, Yucatán
|
||||
MX +2540-10019 America/Monterrey Durango; Coahuila, Nuevo León, Tamaulipas (most areas)
|
||||
MX +2550-09730 America/Matamoros Coahuila, Nuevo León, Tamaulipas (US border)
|
||||
MX +2838-10605 America/Chihuahua Chihuahua (most areas)
|
||||
MX +3144-10629 America/Ciudad_Juarez Chihuahua (US border - west)
|
||||
MX +2934-10425 America/Ojinaga Chihuahua (US border - east)
|
||||
MX +2313-10625 America/Mazatlan Baja California Sur, Nayarit (most areas), Sinaloa
|
||||
MX +2048-10515 America/Bahia_Banderas Bahía de Banderas
|
||||
MX +2904-11058 America/Hermosillo Sonora
|
||||
MX +3232-11701 America/Tijuana Baja California
|
||||
MY,BN +0133+11020 Asia/Kuching Sabah, Sarawak, Brunei
|
||||
MZ,BI,BW,CD,MW,RW,ZM,ZW -2558+03235 Africa/Maputo Central Africa Time
|
||||
NA -2234+01706 Africa/Windhoek
|
||||
NC -2216+16627 Pacific/Noumea
|
||||
NF -2903+16758 Pacific/Norfolk
|
||||
NG,AO,BJ,CD,CF,CG,CM,GA,GQ,NE +0627+00324 Africa/Lagos West Africa Time
|
||||
NI +1209-08617 America/Managua
|
||||
NL +5222+00454 Europe/Amsterdam
|
||||
NO,SJ +5955+01045 Europe/Oslo
|
||||
NP +2743+08519 Asia/Kathmandu
|
||||
NR -0031+16655 Pacific/Nauru
|
||||
NU -1901-16955 Pacific/Niue
|
||||
NZ,AQ -3652+17446 Pacific/Auckland New Zealand time
|
||||
NZ -4357-17633 Pacific/Chatham Chatham Islands
|
||||
PA,KY +0858-07932 America/Panama
|
||||
PA,CA,KY +0858-07932 America/Panama EST - Panama, Cayman, ON (Atikokan), NU (Coral H)
|
||||
PE -1203-07703 America/Lima
|
||||
PF -1732-14934 Pacific/Tahiti Society Islands
|
||||
PF -0900-13930 Pacific/Marquesas Marquesas Islands
|
||||
PF -2308-13457 Pacific/Gambier Gambier Islands
|
||||
PG -0930+14710 Pacific/Port_Moresby Papua New Guinea (most areas)
|
||||
PG,AQ,FM -0930+14710 Pacific/Port_Moresby Papua New Guinea (most areas), Chuuk, Yap, Dumont d'Urville
|
||||
PG -0613+15534 Pacific/Bougainville Bougainville
|
||||
PH +1435+12100 Asia/Manila
|
||||
PK +2452+06703 Asia/Karachi
|
||||
PL +5215+02100 Europe/Warsaw
|
||||
PM +4703-05620 America/Miquelon
|
||||
PN -2504-13005 Pacific/Pitcairn
|
||||
PR +182806-0660622 America/Puerto_Rico
|
||||
PR,AG,CA,AI,AW,BL,BQ,CW,DM,GD,GP,KN,LC,MF,MS,SX,TT,VC,VG,VI +182806-0660622 America/Puerto_Rico AST
|
||||
PS +3130+03428 Asia/Gaza Gaza Strip
|
||||
PS +313200+0350542 Asia/Hebron West Bank
|
||||
PT +3843-00908 Europe/Lisbon Portugal (mainland)
|
||||
@@ -284,7 +259,6 @@ PT +3744-02540 Atlantic/Azores Azores
|
||||
PW +0720+13429 Pacific/Palau
|
||||
PY -2516-05740 America/Asuncion
|
||||
QA,BH +2517+05132 Asia/Qatar
|
||||
RE,TF -2052+05528 Indian/Reunion Réunion, Crozet, Scattered Islands
|
||||
RO +4426+02606 Europe/Bucharest
|
||||
RS,BA,HR,ME,MK,SI +4450+02030 Europe/Belgrade
|
||||
RU +5443+02030 Europe/Kaliningrad MSK-01 - Kaliningrad
|
||||
@@ -315,12 +289,10 @@ RU +4658+14242 Asia/Sakhalin MSK+08 - Sakhalin Island
|
||||
RU +6728+15343 Asia/Srednekolymsk MSK+08 - Sakha (E); North Kuril Is
|
||||
RU +5301+15839 Asia/Kamchatka MSK+09 - Kamchatka
|
||||
RU +6445+17729 Asia/Anadyr MSK+09 - Bering Sea
|
||||
SA,KW,YE +2438+04643 Asia/Riyadh
|
||||
SB -0932+16012 Pacific/Guadalcanal
|
||||
SC -0440+05528 Indian/Mahe
|
||||
SA,AQ,KW,YE +2438+04643 Asia/Riyadh Arabia, Syowa
|
||||
SB,FM -0932+16012 Pacific/Guadalcanal Solomons, Pohnpei
|
||||
SD +1536+03232 Africa/Khartoum
|
||||
SE +5920+01803 Europe/Stockholm
|
||||
SG +0117+10351 Asia/Singapore
|
||||
SG,MY +0117+10351 Asia/Singapore Singapore, peninsular Malaysia
|
||||
SR +0550-05510 America/Paramaribo
|
||||
SS +0451+03137 Africa/Juba
|
||||
ST +0020+00644 Africa/Sao_Tome
|
||||
@@ -328,22 +300,16 @@ SV +1342-08912 America/El_Salvador
|
||||
SY +3330+03618 Asia/Damascus
|
||||
TC +2128-07108 America/Grand_Turk
|
||||
TD +1207+01503 Africa/Ndjamena
|
||||
TF -492110+0701303 Indian/Kerguelen Kerguelen, St Paul Island, Amsterdam Island
|
||||
TH,KH,LA,VN +1345+10031 Asia/Bangkok Indochina (most areas)
|
||||
TH,CX,KH,LA,VN +1345+10031 Asia/Bangkok Indochina (most areas)
|
||||
TJ +3835+06848 Asia/Dushanbe
|
||||
TK -0922-17114 Pacific/Fakaofo
|
||||
TL -0833+12535 Asia/Dili
|
||||
TM +3757+05823 Asia/Ashgabat
|
||||
TN +3648+01011 Africa/Tunis
|
||||
TO -2110-17510 Pacific/Tongatapu
|
||||
TO -210800-1751200 Pacific/Tongatapu
|
||||
TR +4101+02858 Europe/Istanbul
|
||||
TT,AG,AI,BL,DM,GD,GP,KN,LC,MF,MS,VC,VG,VI +1039-06131 America/Port_of_Spain
|
||||
TV -0831+17913 Pacific/Funafuti
|
||||
TW +2503+12130 Asia/Taipei
|
||||
UA +5026+03031 Europe/Kiev Ukraine (most areas)
|
||||
UA +4837+02218 Europe/Uzhgorod Transcarpathia
|
||||
UA +4750+03510 Europe/Zaporozhye Zaporozhye and east Lugansk
|
||||
UM +1917+16637 Pacific/Wake Wake Island
|
||||
UA +5026+03031 Europe/Kyiv Ukraine (most areas)
|
||||
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)
|
||||
@@ -363,7 +329,7 @@ US +465042-1012439 America/North_Dakota/New_Salem Central - ND (Morton rural)
|
||||
US +471551-1014640 America/North_Dakota/Beulah Central - ND (Mercer)
|
||||
US +394421-1045903 America/Denver Mountain (most areas)
|
||||
US +433649-1161209 America/Boise Mountain - ID (south); OR (east)
|
||||
US +332654-1120424 America/Phoenix MST - Arizona (except Navajo)
|
||||
US,CA +332654-1120424 America/Phoenix MST - Arizona (except Navajo), Creston BC
|
||||
US +340308-1181434 America/Los_Angeles Pacific
|
||||
US +611305-1495401 America/Anchorage Alaska (most areas)
|
||||
US +581807-1342511 America/Juneau Alaska - Juneau area
|
||||
@@ -379,6 +345,29 @@ UZ +4120+06918 Asia/Tashkent Uzbekistan (east)
|
||||
VE +1030-06656 America/Caracas
|
||||
VN +1045+10640 Asia/Ho_Chi_Minh Vietnam (south)
|
||||
VU -1740+16825 Pacific/Efate
|
||||
WF -1318-17610 Pacific/Wallis
|
||||
WS -1350-17144 Pacific/Apia
|
||||
ZA,LS,SZ -2615+02800 Africa/Johannesburg
|
||||
#
|
||||
# The next section contains experimental tab-separated comments for
|
||||
# use by user agents like tzselect that identify continents and oceans.
|
||||
#
|
||||
# For example, the comment "#@AQ<tab>Antarctica/" means the country code
|
||||
# AQ is in the continent Antarctica regardless of the Zone name,
|
||||
# so Pacific/Auckland should be listed under Antarctica as well as
|
||||
# under the Pacific because its line's country codes include AQ.
|
||||
#
|
||||
# If more than one country code is affected each is listed separated
|
||||
# by commas, e.g., #@IS,SH<tab>Atlantic/". If a country code is in
|
||||
# more than one continent or ocean, each is listed separated by
|
||||
# commas, e.g., the second column of "#@CY,TR<tab>Asia/,Europe/".
|
||||
#
|
||||
# These experimental comments are present only for country codes where
|
||||
# the continent or ocean is not already obvious from the Zone name.
|
||||
# For example, there is no such comment for RU since it already
|
||||
# corresponds to Zone names starting with both "Europe/" and "Asia/".
|
||||
#
|
||||
#@AQ Antarctica/
|
||||
#@IS,SH Atlantic/
|
||||
#@CY,TR Asia/,Europe/
|
||||
#@SJ Arctic/
|
||||
#@CC,CX,KM,MG,YT Indian/
|
||||
@@ -1,53 +0,0 @@
|
||||
#! /usr/bin/perl -w
|
||||
# Summarize .zi input in a .zi-like format.
|
||||
|
||||
# Courtesy Ken Pizzini.
|
||||
|
||||
use strict;
|
||||
|
||||
#This file released to the public domain.
|
||||
|
||||
# Note: error checking is poor; trust the output only if the input
|
||||
# has been checked by zic.
|
||||
|
||||
my $contZone = '';
|
||||
while (<>) {
|
||||
my $origline = $_;
|
||||
my @fields = ();
|
||||
while (s/^\s*((?:"[^"]*"|[^\s#])+)//) {
|
||||
push @fields, $1;
|
||||
}
|
||||
next unless @fields;
|
||||
|
||||
my $type = lc($fields[0]);
|
||||
if ($contZone) {
|
||||
@fields >= 3 or warn "bad continuation line";
|
||||
unshift @fields, '+', $contZone;
|
||||
$type = 'zone';
|
||||
}
|
||||
|
||||
$contZone = '';
|
||||
if ($type eq 'zone') {
|
||||
# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL]
|
||||
my $nfields = @fields;
|
||||
$nfields >= 5 or warn "bad zone line";
|
||||
if ($nfields > 6) {
|
||||
#this splice is optional, depending on one's preference
|
||||
#(one big date-time field, or componentized date and time):
|
||||
splice(@fields, 5, $nfields-5, "@fields[5..$nfields-1]");
|
||||
}
|
||||
$contZone = $fields[1] if @fields > 5;
|
||||
} elsif ($type eq 'rule') {
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
@fields == 10 or warn "bad rule line";
|
||||
} elsif ($type eq 'link') {
|
||||
# Link TARGET LINK-NAME
|
||||
@fields == 3 or warn "bad link line";
|
||||
} elsif ($type eq 'leap') {
|
||||
# Leap YEAR MONTH DAY HH:MM:SS CORR R/S
|
||||
@fields == 7 or warn "bad leap line";
|
||||
} else {
|
||||
warn "Fubar at input line $.: $origline";
|
||||
}
|
||||
print join("\t", @fields), "\n";
|
||||
}
|
||||
@@ -217,7 +217,6 @@ kt_change (struct change_options *opt, int argc, char **argv)
|
||||
krb5_kt_end_seq_get(context, keytab, &cursor);
|
||||
|
||||
if (ret == KRB5_KT_END) {
|
||||
ret = 0;
|
||||
for (i = 0; i < j; i++) {
|
||||
if (verbose_flag) {
|
||||
char *client_name;
|
||||
|
||||
@@ -949,7 +949,9 @@ HandleOP(WrapExt)
|
||||
memcpy(p, iov[4].buffer.value, iov[4].buffer.length);
|
||||
p += iov[4].buffer.length;
|
||||
memcpy(p, iov[5].buffer.value, iov[5].buffer.length);
|
||||
#ifndef __clang_analyzer__
|
||||
p += iov[5].buffer.length;
|
||||
#endif
|
||||
|
||||
gss_release_iov_buffer(NULL, iov, iov_len);
|
||||
|
||||
|
||||
@@ -116,7 +116,11 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
argc -= optidx;
|
||||
#ifndef __clang_analyzer__
|
||||
argv += optidx;
|
||||
#endif
|
||||
if (argc != 0)
|
||||
usage(1);
|
||||
|
||||
if (config_file == NULL) {
|
||||
asprintf(&config_file, "%s/kdc.conf", hdb_db_dir(context));
|
||||
|
||||
@@ -106,7 +106,7 @@ static void
|
||||
add_aliases(krb5_context contextp, kadm5_principal_ent_rec *princ,
|
||||
struct getarg_strings *strings)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
krb5_error_code ret = 0;
|
||||
HDB_extension ext;
|
||||
krb5_data buf;
|
||||
krb5_principal p;
|
||||
@@ -127,9 +127,16 @@ add_aliases(krb5_context contextp, kadm5_principal_ent_rec *princ,
|
||||
sizeof(ext.data.u.aliases.aliases.val[0]));
|
||||
ext.data.u.aliases.aliases.len = strings->num_strings;
|
||||
|
||||
for (i = 0; i < strings->num_strings; i++) {
|
||||
for (i = 0; ret == 0 && i < strings->num_strings; i++) {
|
||||
ret = krb5_parse_name(contextp, strings->strings[i], &p);
|
||||
ret = copy_Principal(p, &ext.data.u.aliases.aliases.val[i]);
|
||||
if (ret)
|
||||
krb5_err(contextp, 1, ret, "Could not parse alias %s",
|
||||
strings->strings[i]);
|
||||
if (ret == 0)
|
||||
ret = copy_Principal(p, &ext.data.u.aliases.aliases.val[i]);
|
||||
if (ret)
|
||||
krb5_err(contextp, 1, ret, "Could not copy parsed alias %s",
|
||||
strings->strings[i]);
|
||||
krb5_free_principal(contextp, p);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,7 +103,10 @@ stash(struct stash_options *opt, int argc, char **argv)
|
||||
}
|
||||
}
|
||||
ret = krb5_string_to_key_salt(context, enctype, buf, salt, &key);
|
||||
ret = hdb_add_master_key(context, &key, &mkey);
|
||||
if (ret == 0)
|
||||
ret = hdb_add_master_key(context, &key, &mkey);
|
||||
if (ret)
|
||||
krb5_warn(context, errno, "setting master key");
|
||||
krb5_free_keyblock_contents(context, &key);
|
||||
}
|
||||
|
||||
|
||||
@@ -423,7 +423,7 @@ kcm_op_get_principal(krb5_context context,
|
||||
free(name);
|
||||
kcm_release_ccache(context, ccache);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1467,6 +1467,10 @@ _kdc_do_digest(krb5_context context,
|
||||
ret = krb5_encrypt_EncryptedData(context, crypto, KRB5_KU_DIGEST_ENCRYPT,
|
||||
buf.data, buf.length, 0,
|
||||
&rep.innerRep);
|
||||
if (ret) {
|
||||
krb5_prepend_error_message(context, ret, "Failed to encrypt digest: ");
|
||||
goto out;
|
||||
}
|
||||
|
||||
ASN1_MALLOC_ENCODE(DigestREP, reply->data, reply->length, &rep, &size, ret);
|
||||
if (ret) {
|
||||
|
||||
@@ -107,7 +107,9 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
argc -= optidx;
|
||||
#ifndef __clang_analyzer__
|
||||
argv += optidx;
|
||||
#endif
|
||||
|
||||
if (argc != 0)
|
||||
usage(1);
|
||||
@@ -125,6 +127,7 @@ main(int argc, char **argv)
|
||||
krb5_ticket *ticket;
|
||||
char *server;
|
||||
|
||||
memset(&ss, 0, sizeof(ss));
|
||||
sock = STDIN_FILENO;
|
||||
#ifdef SUPPORT_INETD
|
||||
if (inetd_flag == -1) {
|
||||
|
||||
@@ -184,6 +184,8 @@ main(int argc, char **argv)
|
||||
unsigned int tag2;
|
||||
ret = der_get_tag (r.data, r.length,
|
||||
&cl, &ty, &tag2, NULL);
|
||||
if (ret)
|
||||
krb5_err(context, 1, ret, "Could not decode replay data");
|
||||
if (MAKE_TAG(cl, ty, 0) != clty)
|
||||
krb5_errx(context, 1, "class|type mismatch: %d != %d",
|
||||
(int)MAKE_TAG(cl, ty, 0), (int)clty);
|
||||
|
||||
@@ -1928,30 +1928,40 @@ server_lookup:
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = _kdc_db_fetch(context, config, tp, HDB_F_GET_CLIENT | flags,
|
||||
NULL, &s4u2self_impersonated_clientdb,
|
||||
&s4u2self_impersonated_client);
|
||||
if (ret) {
|
||||
const char *msg;
|
||||
|
||||
/*
|
||||
* If the client belongs to the same realm as our krbtgt, it
|
||||
* should exist in the local database.
|
||||
*
|
||||
*/
|
||||
|
||||
if (ret == HDB_ERR_NOENTRY)
|
||||
ret = KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN;
|
||||
msg = krb5_get_error_message(context, ret);
|
||||
kdc_log(context, config, 2,
|
||||
"S4U2Self principal to impersonate %s not found in database: %s",
|
||||
tpn, msg);
|
||||
krb5_free_error_message(context, msg);
|
||||
goto out;
|
||||
}
|
||||
|
||||
free(s4u2self_impersonated_client->entry.pw_end);
|
||||
s4u2self_impersonated_client->entry.pw_end = NULL;
|
||||
|
||||
ret = kdc_check_flags(context, config, s4u2self_impersonated_client, tpn,
|
||||
NULL, NULL, FALSE);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
/* If we were about to put a PAC into the ticket, we better fix it to be the right PAC */
|
||||
if(rspac.data) {
|
||||
krb5_pac p = NULL;
|
||||
krb5_data_free(&rspac);
|
||||
ret = _kdc_db_fetch(context, config, tp, HDB_F_GET_CLIENT | flags,
|
||||
NULL, &s4u2self_impersonated_clientdb, &s4u2self_impersonated_client);
|
||||
if (ret) {
|
||||
const char *msg;
|
||||
|
||||
/*
|
||||
* If the client belongs to the same realm as our krbtgt, it
|
||||
* should exist in the local database.
|
||||
*
|
||||
*/
|
||||
|
||||
if (ret == HDB_ERR_NOENTRY)
|
||||
ret = KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN;
|
||||
msg = krb5_get_error_message(context, ret);
|
||||
kdc_log(context, config, 1,
|
||||
"S2U4Self principal to impersonate %s not found in database: %s",
|
||||
tpn, msg);
|
||||
krb5_free_error_message(context, msg);
|
||||
goto out;
|
||||
}
|
||||
ret = _kdc_pac_generate(context, s4u2self_impersonated_client, &p);
|
||||
if (ret) {
|
||||
kdc_log(context, config, 0, "PAC generation failed for -- %s",
|
||||
@@ -1987,10 +1997,12 @@ server_lookup:
|
||||
|
||||
/*
|
||||
* If the service isn't trusted for authentication to
|
||||
* delegation, remove the forward flag.
|
||||
* delegation or if the impersonate client is disallowed
|
||||
* forwardable, remove the forwardable flag.
|
||||
*/
|
||||
|
||||
if (client->entry.flags.trusted_for_delegation) {
|
||||
if (client->entry.flags.trusted_for_delegation &&
|
||||
s4u2self_impersonated_client->entry.flags.forwardable) {
|
||||
str = "[forwardable]";
|
||||
} else {
|
||||
b->kdc_options.forwardable = 0;
|
||||
|
||||
@@ -126,6 +126,8 @@ main(int argc, char **argv)
|
||||
krb5_string_to_key_salt(context, enctype, buf, salt, &key);
|
||||
}
|
||||
ret = hdb_add_master_key(context, &key, &mkey);
|
||||
if (ret)
|
||||
krb5_err(context, 1, ret, "hdb_add_master_key");
|
||||
|
||||
krb5_free_keyblock_contents(context, &key);
|
||||
|
||||
|
||||
@@ -249,7 +249,6 @@ generate_dh_keyblock(krb5_context context,
|
||||
memset(dh_gen_key, 0, size);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
#ifdef HAVE_OPENSSL
|
||||
} else if (client_params->keyex == USE_ECDH) {
|
||||
|
||||
|
||||
@@ -90,7 +90,9 @@ main (int argc, char **argv)
|
||||
}
|
||||
|
||||
argc -= optidx;
|
||||
#ifndef __clang_analyzer__
|
||||
argv += optidx;
|
||||
#endif
|
||||
|
||||
if (argc != 0)
|
||||
usage (1);
|
||||
|
||||
@@ -86,14 +86,15 @@ kswitch(struct kswitch_options *opt, int argc, char **argv)
|
||||
krb5_err(kcc_context, 1, ret, "krb5_cc_cache_get_first");
|
||||
|
||||
while (krb5_cc_cache_next(kcc_context, cursor, &id) == 0) {
|
||||
krb5_principal p;
|
||||
krb5_principal p = NULL;
|
||||
char num[10];
|
||||
|
||||
ret = krb5_cc_get_principal(kcc_context, id, &p);
|
||||
if (ret == 0)
|
||||
ret = krb5_unparse_name(kcc_context, p, &name);
|
||||
if (ret)
|
||||
continue;
|
||||
|
||||
ret = krb5_unparse_name(kcc_context, p, &name);
|
||||
krb5_free_principal(kcc_context, p);
|
||||
|
||||
snprintf(num, sizeof(num), "%d", (int)(len + 1));
|
||||
|
||||
@@ -135,8 +135,12 @@ int
|
||||
der_copy_octet_string (const heim_octet_string *from, heim_octet_string *to)
|
||||
{
|
||||
to->length = from->length;
|
||||
to->data = malloc(to->length);
|
||||
if(to->length != 0 && to->data == NULL)
|
||||
if (from->data == NULL) {
|
||||
to->data = NULL;
|
||||
return 0;
|
||||
}
|
||||
to->data = malloc(to->length);
|
||||
if (to->length != 0 && to->data == NULL)
|
||||
return ENOMEM;
|
||||
memcpy(to->data, from->data, to->length);
|
||||
return 0;
|
||||
|
||||
@@ -584,14 +584,14 @@ decode_type (const char *name, const Type *t, int optional,
|
||||
classname(cl),
|
||||
ty ? "CONS" : "PRIM",
|
||||
valuename(cl, tag));
|
||||
fprintf(codefile,
|
||||
"(%s)->element = %s;\n",
|
||||
name, m->label);
|
||||
if (asprintf (&s, "%s(%s)->u.%s", m->optional ? "" : "&",
|
||||
name, m->gen_name) < 0 || s == NULL)
|
||||
errx(1, "malloc");
|
||||
decode_type (s, m->type, m->optional, forwstr, m->gen_name, NULL,
|
||||
depth + 1);
|
||||
fprintf(codefile,
|
||||
"(%s)->element = %s;\n",
|
||||
name, m->label);
|
||||
free(s);
|
||||
fprintf(codefile,
|
||||
"}\n");
|
||||
@@ -600,23 +600,23 @@ decode_type (const char *name, const Type *t, int optional,
|
||||
if (have_ellipsis) {
|
||||
fprintf(codefile,
|
||||
"else {\n"
|
||||
"(%s)->element = %s;\n"
|
||||
"(%s)->u.%s.data = calloc(1, len);\n"
|
||||
"if ((%s)->u.%s.data == NULL) {\n"
|
||||
"e = ENOMEM; %s;\n"
|
||||
"}\n"
|
||||
"(%s)->u.%s.length = len;\n"
|
||||
"memcpy((%s)->u.%s.data, p, len);\n"
|
||||
"(%s)->element = %s;\n"
|
||||
"p += len;\n"
|
||||
"ret += len;\n"
|
||||
"len = 0;\n"
|
||||
"}\n",
|
||||
name, have_ellipsis->label,
|
||||
name, have_ellipsis->gen_name,
|
||||
name, have_ellipsis->gen_name,
|
||||
forwstr,
|
||||
name, have_ellipsis->gen_name,
|
||||
name, have_ellipsis->gen_name,
|
||||
name, have_ellipsis->label);
|
||||
name, have_ellipsis->gen_name);
|
||||
} else {
|
||||
fprintf(codefile,
|
||||
"else {\n"
|
||||
|
||||
@@ -425,6 +425,7 @@ gsskrb5_acceptor_start(OM_uint32 * minor_status,
|
||||
* lets only send the error token on clock skew, that
|
||||
* limit when send error token for non-MUTUAL.
|
||||
*/
|
||||
free_Authenticator(ctx->auth_context->authenticator);
|
||||
return send_error_token(minor_status, context, kret,
|
||||
server, &indata, output_token);
|
||||
} else if (kret) {
|
||||
|
||||
@@ -307,7 +307,7 @@ _gssapi_verify_mic_arcfour(OM_uint32 * minor_status,
|
||||
return GSS_S_FAILURE;
|
||||
}
|
||||
|
||||
cmp = ct_memcmp(cksum_data, p + 8, 8);
|
||||
cmp = (ct_memcmp(cksum_data, p + 8, 8) == 0);
|
||||
if (cmp) {
|
||||
*minor_status = 0;
|
||||
return GSS_S_BAD_MIC;
|
||||
@@ -331,9 +331,9 @@ _gssapi_verify_mic_arcfour(OM_uint32 * minor_status,
|
||||
_gsskrb5_decode_be_om_uint32(SND_SEQ, &seq_number);
|
||||
|
||||
if (context_handle->more_flags & LOCAL)
|
||||
cmp = memcmp(&SND_SEQ[4], "\xff\xff\xff\xff", 4);
|
||||
cmp = (ct_memcmp(&SND_SEQ[4], "\xff\xff\xff\xff", 4) != 0);
|
||||
else
|
||||
cmp = memcmp(&SND_SEQ[4], "\x00\x00\x00\x00", 4);
|
||||
cmp = (ct_memcmp(&SND_SEQ[4], "\x00\x00\x00\x00", 4) != 0);
|
||||
|
||||
memset(SND_SEQ, 0, sizeof(SND_SEQ));
|
||||
if (cmp != 0) {
|
||||
@@ -616,9 +616,9 @@ OM_uint32 _gssapi_unwrap_arcfour(OM_uint32 *minor_status,
|
||||
_gsskrb5_decode_be_om_uint32(SND_SEQ, &seq_number);
|
||||
|
||||
if (context_handle->more_flags & LOCAL)
|
||||
cmp = memcmp(&SND_SEQ[4], "\xff\xff\xff\xff", 4);
|
||||
cmp = (ct_memcmp(&SND_SEQ[4], "\xff\xff\xff\xff", 4) != 0);
|
||||
else
|
||||
cmp = memcmp(&SND_SEQ[4], "\x00\x00\x00\x00", 4);
|
||||
cmp = (ct_memcmp(&SND_SEQ[4], "\x00\x00\x00\x00", 4) != 0);
|
||||
|
||||
if (cmp != 0) {
|
||||
*minor_status = 0;
|
||||
@@ -695,7 +695,7 @@ OM_uint32 _gssapi_unwrap_arcfour(OM_uint32 *minor_status,
|
||||
return GSS_S_FAILURE;
|
||||
}
|
||||
|
||||
cmp = ct_memcmp(cksum_data, p0 + 16, 8); /* SGN_CKSUM */
|
||||
cmp = (ct_memcmp(cksum_data, p0 + 16, 8) == 0); /* SGN_CKSUM */
|
||||
if (cmp) {
|
||||
_gsskrb5_release_buffer(minor_status, output_message_buffer);
|
||||
*minor_status = 0;
|
||||
|
||||
@@ -54,6 +54,8 @@ _gsskrb5_get_mech (const u_char *ptr,
|
||||
e = der_get_length (p, total_len - 1, &len, &len_len);
|
||||
if (e || 1 + len_len + len != total_len)
|
||||
return -1;
|
||||
if (total_len < 1 + len_len + 1)
|
||||
return -1;
|
||||
p += len_len;
|
||||
if (*p++ != 0x06)
|
||||
return -1;
|
||||
@@ -80,6 +82,10 @@ _gssapi_verify_mech_header(u_char **str,
|
||||
|
||||
if (mech_len != mech->length)
|
||||
return GSS_S_BAD_MECH;
|
||||
if (mech_len > total_len)
|
||||
return GSS_S_BAD_MECH;
|
||||
if (p - *str > total_len - mech_len)
|
||||
return GSS_S_BAD_MECH;
|
||||
if (ct_memcmp(p,
|
||||
mech->elements,
|
||||
mech->length) != 0)
|
||||
@@ -190,13 +196,13 @@ _gssapi_verify_pad(gss_buffer_t wrapped_token,
|
||||
size_t padlength;
|
||||
int i;
|
||||
|
||||
pad = (u_char *)wrapped_token->value + wrapped_token->length - 1;
|
||||
padlength = *pad;
|
||||
pad = (u_char *)wrapped_token->value + wrapped_token->length;
|
||||
padlength = pad[-1];
|
||||
|
||||
if (padlength > datalen)
|
||||
return GSS_S_BAD_MECH;
|
||||
|
||||
for (i = padlength; i > 0 && *pad == padlength; i--, pad--)
|
||||
for (i = padlength; i > 0 && *--pad == padlength; i--)
|
||||
;
|
||||
if (i != 0)
|
||||
return GSS_S_BAD_MIC;
|
||||
|
||||
@@ -64,6 +64,8 @@ unwrap_des
|
||||
|
||||
if (IS_DCE_STYLE(context_handle)) {
|
||||
token_len = 22 + 8 + 15; /* 45 */
|
||||
if (input_message_buffer->length < token_len)
|
||||
return GSS_S_BAD_MECH;
|
||||
} else {
|
||||
token_len = input_message_buffer->length;
|
||||
}
|
||||
@@ -76,6 +78,11 @@ unwrap_des
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
len = (p - (u_char *)input_message_buffer->value)
|
||||
+ 22 + 8;
|
||||
if (input_message_buffer->length < len)
|
||||
return GSS_S_BAD_MECH;
|
||||
|
||||
if (memcmp (p, "\x00\x00", 2) != 0)
|
||||
return GSS_S_BAD_SIG;
|
||||
p += 2;
|
||||
@@ -122,7 +129,7 @@ unwrap_des
|
||||
} else {
|
||||
/* check pad */
|
||||
ret = _gssapi_verify_pad(input_message_buffer,
|
||||
input_message_buffer->length - len,
|
||||
input_message_buffer->length - len - 8,
|
||||
&padlength);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -195,9 +202,10 @@ unwrap_des
|
||||
output_message_buffer->value = malloc(output_message_buffer->length);
|
||||
if(output_message_buffer->length != 0 && output_message_buffer->value == NULL)
|
||||
return GSS_S_FAILURE;
|
||||
memcpy (output_message_buffer->value,
|
||||
p + 24,
|
||||
output_message_buffer->length);
|
||||
if (output_message_buffer->value != NULL)
|
||||
memcpy (output_message_buffer->value,
|
||||
p + 24,
|
||||
output_message_buffer->length);
|
||||
return GSS_S_COMPLETE;
|
||||
}
|
||||
#endif
|
||||
@@ -230,6 +238,8 @@ unwrap_des3
|
||||
|
||||
if (IS_DCE_STYLE(context_handle)) {
|
||||
token_len = 34 + 8 + 15; /* 57 */
|
||||
if (input_message_buffer->length < token_len)
|
||||
return GSS_S_BAD_MECH;
|
||||
} else {
|
||||
token_len = input_message_buffer->length;
|
||||
}
|
||||
@@ -242,7 +252,12 @@ unwrap_des3
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (memcmp (p, "\x04\x00", 2) != 0) /* HMAC SHA1 DES3_KD */
|
||||
len = (p - (u_char *)input_message_buffer->value)
|
||||
+ 34 + 8;
|
||||
if (input_message_buffer->length < len)
|
||||
return GSS_S_BAD_MECH;
|
||||
|
||||
if (ct_memcmp (p, "\x04\x00", 2) != 0) /* HMAC SHA1 DES3_KD */
|
||||
return GSS_S_BAD_SIG;
|
||||
p += 2;
|
||||
if (ct_memcmp (p, "\x02\x00", 2) == 0) {
|
||||
@@ -289,7 +304,7 @@ unwrap_des3
|
||||
} else {
|
||||
/* check pad */
|
||||
ret = _gssapi_verify_pad(input_message_buffer,
|
||||
input_message_buffer->length - len,
|
||||
input_message_buffer->length - len - 8,
|
||||
&padlength);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -389,9 +404,10 @@ unwrap_des3
|
||||
output_message_buffer->value = malloc(output_message_buffer->length);
|
||||
if(output_message_buffer->length != 0 && output_message_buffer->value == NULL)
|
||||
return GSS_S_FAILURE;
|
||||
memcpy (output_message_buffer->value,
|
||||
p + 36,
|
||||
output_message_buffer->length);
|
||||
if (output_message_buffer->value != NULL)
|
||||
memcpy (output_message_buffer->value,
|
||||
p + 36,
|
||||
output_message_buffer->length);
|
||||
return GSS_S_COMPLETE;
|
||||
}
|
||||
|
||||
|
||||
@@ -91,8 +91,7 @@ routine_error(OM_uint32 v)
|
||||
"Incorrect channel bindings were supplied",
|
||||
"An invalid status code was supplied",
|
||||
"A token had an invalid MIC",
|
||||
"No credentials were supplied, "
|
||||
"or the credentials were unavailable or inaccessible.",
|
||||
"No credentials were supplied, or the credentials were unavailable or inaccessible.",
|
||||
"No context has been established",
|
||||
"A token was invalid",
|
||||
"A credential was invalid",
|
||||
|
||||
@@ -113,7 +113,7 @@ _gss_import_export_name(OM_uint32 *minor_status,
|
||||
len -= t;
|
||||
|
||||
t = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
|
||||
p += 4;
|
||||
/* p += 4; */
|
||||
len -= 4;
|
||||
|
||||
if (!composite && len != t)
|
||||
|
||||
@@ -137,6 +137,8 @@ _gss_string_to_oid(const char* s, gss_OID oid)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (byte_count == 0)
|
||||
return EINVAL;
|
||||
if (!res) {
|
||||
res = malloc(byte_count);
|
||||
if (!res)
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
|
||||
#include <roken.h>
|
||||
|
||||
#include <krb5.h>
|
||||
#include <gssapi.h>
|
||||
#include <gssapi_mech.h>
|
||||
#include <gssapi_krb5.h>
|
||||
|
||||
@@ -52,6 +52,8 @@ from_file(const char *fn, const char *target_domain,
|
||||
continue;
|
||||
str = NULL;
|
||||
d = strtok_r(buf, ":", &str);
|
||||
if (!d)
|
||||
continue;
|
||||
if (d && strcasecmp(target_domain, d) != 0)
|
||||
continue;
|
||||
u = strtok_r(NULL, ":", &str);
|
||||
|
||||
@@ -619,13 +619,15 @@ acceptor_start
|
||||
if (ret == 0)
|
||||
break;
|
||||
}
|
||||
if (preferred_mech_type == GSS_C_NO_OID) {
|
||||
HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
|
||||
free_NegotiationToken(&nt);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
ctx->preferred_mech_type = preferred_mech_type;
|
||||
ctx->preferred_mech_type = preferred_mech_type;
|
||||
|
||||
if (preferred_mech_type == GSS_C_NO_OID) {
|
||||
send_reject(minor_status, output_token);
|
||||
HEIMDAL_MUTEX_unlock(&ctx->ctx_id_mutex);
|
||||
free_NegotiationToken(&nt);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -720,7 +720,6 @@ mdb_remove(krb5_context context, HDB *db, krb5_const_principal principal)
|
||||
krb5_error_code code;
|
||||
krb5_data key;
|
||||
|
||||
mdb_principal2key(context, principal, &key);
|
||||
code = db->hdb__del(context, db, key);
|
||||
krb5_data_free(&key);
|
||||
return code;
|
||||
|
||||
@@ -1288,6 +1288,7 @@ request_create(struct request_create_options *opt, int argc, char **argv)
|
||||
const char *outfile = argv[0];
|
||||
|
||||
memset(&key, 0, sizeof(key));
|
||||
memset(&signer, 0, sizeof(signer));
|
||||
|
||||
get_key(opt->key_string,
|
||||
opt->generate_key_string,
|
||||
|
||||
@@ -533,7 +533,7 @@ store_func(hx509_context context, void *ctx, hx509_cert c)
|
||||
{
|
||||
struct store_ctx *sc = ctx;
|
||||
heim_octet_string data;
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
ret = hx509_cert_binary(context, c, &data);
|
||||
if (ret)
|
||||
@@ -554,14 +554,14 @@ store_func(hx509_context context, void *ctx, hx509_cert c)
|
||||
HX509_KEY_FORMAT_DER, &data);
|
||||
if (ret)
|
||||
break;
|
||||
hx509_pem_write(context, _hx509_private_pem_name(key), NULL, sc->f,
|
||||
data.data, data.length);
|
||||
ret = hx509_pem_write(context, _hx509_private_pem_name(key), NULL,
|
||||
sc->f, data.data, data.length);
|
||||
free(data.data);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
@@ -938,6 +938,7 @@ int
|
||||
hx509_general_name_unparse(GeneralName *name, char **str)
|
||||
{
|
||||
struct rk_strpool *strpool = NULL;
|
||||
int ret = 0;
|
||||
|
||||
*str = NULL;
|
||||
|
||||
@@ -964,7 +965,6 @@ hx509_general_name_unparse(GeneralName *name, char **str)
|
||||
case choice_GeneralName_directoryName: {
|
||||
Name dir;
|
||||
char *s;
|
||||
int ret;
|
||||
memset(&dir, 0, sizeof(dir));
|
||||
dir.element = name->u.directoryName.element;
|
||||
dir.u.rdnSequence = name->u.directoryName.u.rdnSequence;
|
||||
@@ -1017,10 +1017,9 @@ hx509_general_name_unparse(GeneralName *name, char **str)
|
||||
default:
|
||||
return EINVAL;
|
||||
}
|
||||
if (strpool == NULL)
|
||||
if (ret)
|
||||
rk_strpoolfree(strpool);
|
||||
else if (strpool == NULL || (*str = rk_strpoolcollect(strpool)) == NULL)
|
||||
return ENOMEM;
|
||||
|
||||
*str = rk_strpoolcollect(strpool);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
@@ -342,6 +342,9 @@ add_object_attribute(struct st_object *o,
|
||||
struct st_attr *a;
|
||||
int i;
|
||||
|
||||
if (pValue == NULL && ulValueLen)
|
||||
return CKR_ARGUMENTS_BAD;
|
||||
|
||||
i = o->num_attributes;
|
||||
a = realloc(o->attrs, (i + 1) * sizeof(o->attrs[0]));
|
||||
if (a == NULL)
|
||||
@@ -352,7 +355,8 @@ add_object_attribute(struct st_object *o,
|
||||
o->attrs[i].attribute.pValue = malloc(ulValueLen);
|
||||
if (o->attrs[i].attribute.pValue == NULL && ulValueLen != 0)
|
||||
return CKR_DEVICE_MEMORY;
|
||||
memcpy(o->attrs[i].attribute.pValue, pValue, ulValueLen);
|
||||
if (ulValueLen)
|
||||
memcpy(o->attrs[i].attribute.pValue, pValue, ulValueLen);
|
||||
o->attrs[i].attribute.ulValueLen = ulValueLen;
|
||||
o->num_attributes++;
|
||||
|
||||
|
||||
@@ -332,10 +332,8 @@ connect_unix(struct path_ctx *s)
|
||||
return errno;
|
||||
rk_cloexec(s->fd);
|
||||
|
||||
if (connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)) != 0) {
|
||||
close(s->fd);
|
||||
if (connect(s->fd, (struct sockaddr *)&addr, sizeof(addr)) != 0)
|
||||
return errno;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -246,7 +246,7 @@ kadm5_s_get_principal(void *server_handle,
|
||||
ret = hdb_entry_get_password(context->context,
|
||||
context->db, &ent.entry, &pw);
|
||||
if (ret == 0) {
|
||||
ret = add_tl_data(out, KRB5_TL_PASSWORD, pw, strlen(pw) + 1);
|
||||
(void) add_tl_data(out, KRB5_TL_PASSWORD, pw, strlen(pw) + 1);
|
||||
free(pw);
|
||||
}
|
||||
krb5_clear_error_message(context->context);
|
||||
|
||||
@@ -567,7 +567,7 @@ kadm5_c_init_with_context(krb5_context context,
|
||||
void **server_handle)
|
||||
{
|
||||
kadm5_ret_t ret;
|
||||
kadm5_client_context *ctx;
|
||||
kadm5_client_context *ctx = NULL;
|
||||
krb5_ccache cc;
|
||||
|
||||
ret = _kadm5_c_init_context(&ctx, realm_params, context);
|
||||
|
||||
@@ -755,7 +755,10 @@ write_stats(krb5_context context, slave *slaves, uint32_t current_version)
|
||||
rtbl_add_column_entry(tbl, SLAVE_STATUS, "Up");
|
||||
|
||||
ret = krb5_format_time(context, slaves->seen, str, sizeof(str), TRUE);
|
||||
rtbl_add_column_entry(tbl, SLAVE_SEEN, str);
|
||||
if (ret)
|
||||
rtbl_add_column_entry(tbl, SLAVE_SEEN, "<error-formatting-time>");
|
||||
else
|
||||
rtbl_add_column_entry(tbl, SLAVE_SEEN, str);
|
||||
|
||||
slaves = slaves->next;
|
||||
}
|
||||
|
||||
@@ -89,8 +89,6 @@ v5_to_kt(krb5_creds *cred, uid_t uid, struct kafs_token *kt, int local524)
|
||||
return ENOMEM;
|
||||
kt->ticket_len = cred->ticket.length;
|
||||
memcpy(kt->ticket, cred->ticket.data, kt->ticket_len);
|
||||
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -248,7 +248,7 @@ krb5_acl_match_file(krb5_context context,
|
||||
...)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
struct acl_field *acl;
|
||||
struct acl_field *acl = NULL;
|
||||
char buf[256];
|
||||
va_list ap;
|
||||
FILE *f;
|
||||
|
||||
@@ -525,7 +525,7 @@ arange_parse_addr (krb5_context context,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if(high.len != 1 && high.val[0].addr_type != low.val[0].addr_type) {
|
||||
if(high.len != 1 || high.val[0].addr_type != low.val[0].addr_type) {
|
||||
krb5_free_addresses(context, &low);
|
||||
krb5_free_addresses(context, &high);
|
||||
return -1;
|
||||
|
||||
@@ -97,7 +97,7 @@ init_context_from_config_file(krb5_context context)
|
||||
krb5_error_code ret;
|
||||
const char * tmp;
|
||||
char **s;
|
||||
krb5_enctype *tmptypes;
|
||||
krb5_enctype *tmptypes = NULL;
|
||||
|
||||
INIT_FIELD(context, time, max_skew, 5 * 60, "clockskew");
|
||||
INIT_FIELD(context, time, kdc_timeout, 3, "kdc_timeout");
|
||||
|
||||
@@ -325,15 +325,13 @@ krb5_keytab_key_proc (krb5_context context,
|
||||
|
||||
ret = krb5_kt_get_entry (context, real_keytab, principal,
|
||||
0, enctype, &entry);
|
||||
if (ret == 0) {
|
||||
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
}
|
||||
|
||||
if (keytab == NULL)
|
||||
krb5_kt_close (context, real_keytab);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -1491,15 +1491,13 @@ keytab_key_proc(krb5_context context, krb5_enctype enctype,
|
||||
|
||||
ret = krb5_kt_get_entry (context, real_keytab, principal,
|
||||
0, enctype, &entry);
|
||||
if (ret == 0) {
|
||||
ret = krb5_copy_keyblock(context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
}
|
||||
|
||||
if (keytab == NULL)
|
||||
krb5_kt_close (context, real_keytab);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -348,10 +348,11 @@ krb5_kt_read_service_key(krb5_context context,
|
||||
krb5_enctype enctype,
|
||||
krb5_keyblock **key)
|
||||
{
|
||||
krb5_keytab keytab;
|
||||
krb5_keytab keytab = NULL; /* Quiet lint */
|
||||
krb5_keytab_entry entry;
|
||||
krb5_error_code ret;
|
||||
|
||||
memset(&entry, 0, sizeof(entry));
|
||||
if (keyprocarg)
|
||||
ret = krb5_kt_resolve (context, keyprocarg, &keytab);
|
||||
else
|
||||
@@ -361,11 +362,11 @@ krb5_kt_read_service_key(krb5_context context,
|
||||
return ret;
|
||||
|
||||
ret = krb5_kt_get_entry (context, keytab, principal, vno, enctype, &entry);
|
||||
if (ret == 0) {
|
||||
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
}
|
||||
krb5_kt_close (context, keytab);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = krb5_copy_keyblock (context, &entry.keyblock, key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -473,11 +474,13 @@ KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
|
||||
krb5_kt_close(krb5_context context,
|
||||
krb5_keytab id)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
krb5_error_code ret = 0;
|
||||
|
||||
ret = (*id->close)(context, id);
|
||||
memset(id, 0, sizeof(*id));
|
||||
free(id);
|
||||
if (id) {
|
||||
ret = (id->close)(context, id);
|
||||
memset(id, 0, sizeof(*id));
|
||||
free(id);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -620,6 +623,7 @@ krb5_kt_get_entry(krb5_context context,
|
||||
if(id->get)
|
||||
return (*id->get)(context, id, principal, kvno, enctype, entry);
|
||||
|
||||
memset(&tmp, 0, sizeof(tmp));
|
||||
ret = krb5_kt_start_seq_get (context, id, &cursor);
|
||||
if (ret) {
|
||||
/* This is needed for krb5_verify_init_creds, but keep error
|
||||
@@ -674,21 +678,21 @@ krb5_kt_copy_entry_contents(krb5_context context,
|
||||
krb5_error_code ret;
|
||||
|
||||
memset(out, 0, sizeof(*out));
|
||||
out->vno = in->vno;
|
||||
|
||||
ret = krb5_copy_principal (context, in->principal, &out->principal);
|
||||
if (ret)
|
||||
goto fail;
|
||||
return ret;
|
||||
ret = krb5_copy_keyblock_contents (context,
|
||||
&in->keyblock,
|
||||
&out->keyblock);
|
||||
if (ret)
|
||||
goto fail;
|
||||
if (ret) {
|
||||
krb5_free_principal(context, out->principal);
|
||||
memset(out, 0, sizeof(*out));
|
||||
return ret;
|
||||
}
|
||||
out->vno = in->vno;
|
||||
out->timestamp = in->timestamp;
|
||||
return 0;
|
||||
fail:
|
||||
krb5_kt_free_entry (context, out);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -869,6 +873,7 @@ krb5_kt_have_content(krb5_context context,
|
||||
krb5_error_code ret;
|
||||
char *name;
|
||||
|
||||
memset(&entry, 0, sizeof(entry));
|
||||
ret = krb5_kt_start_seq_get(context, id, &cursor);
|
||||
if (ret)
|
||||
goto notfound;
|
||||
|
||||
@@ -914,3 +914,22 @@ extern KRB5_LIB_VARIABLE const char *krb5_cc_type_scc;
|
||||
|
||||
#endif /* __KRB5_H__ */
|
||||
|
||||
/* clang analyzer workarounds */
|
||||
|
||||
#ifdef __clang_analyzer__
|
||||
/*
|
||||
* The clang analyzer (lint) can't know that krb5_enomem() always returns
|
||||
* non-zero, so code like:
|
||||
*
|
||||
* if ((x = malloc(...)) == NULL)
|
||||
* ret = krb5_enomem(context)
|
||||
* if (ret == 0)
|
||||
* *x = ...;
|
||||
*
|
||||
* causes false positives.
|
||||
*
|
||||
* The fix is to make krb5_enomem() a macro that always evaluates to ENOMEM.
|
||||
*/
|
||||
#define krb5_enomem(c) (krb5_enomem(c), ENOMEM)
|
||||
#endif
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
#include <krb5-types.h>
|
||||
|
||||
#ifdef __APPLE__
|
||||
#ifdef __APPLE__
|
||||
#pragma pack(push,2)
|
||||
#endif
|
||||
|
||||
|
||||
@@ -96,6 +96,12 @@ srv_find_realm(krb5_context context, krb5_krbhst_info ***res, int *count,
|
||||
if(rr->type == rk_ns_t_srv)
|
||||
num_srv++;
|
||||
|
||||
if (num_srv == 0) {
|
||||
_krb5_debug(context, 0,
|
||||
"DNS SRV RR lookup domain nodata: %s", domain);
|
||||
return KRB5_KDC_UNREACH;
|
||||
}
|
||||
|
||||
*res = malloc(num_srv * sizeof(**res));
|
||||
if(*res == NULL) {
|
||||
rk_dns_free_data(r);
|
||||
|
||||
+150
-28
@@ -112,6 +112,56 @@ HMAC_MD5_any_checksum(krb5_context context,
|
||||
}
|
||||
|
||||
|
||||
static krb5_error_code pac_header_size(krb5_context context,
|
||||
uint32_t num_buffers,
|
||||
uint32_t *result)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
uint32_t header_size;
|
||||
|
||||
/* Guard against integer overflow on 32-bit systems. */
|
||||
if (num_buffers > 1000) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "PAC has too many buffers");
|
||||
return ret;
|
||||
}
|
||||
header_size = PAC_INFO_BUFFER_SIZE * num_buffers;
|
||||
|
||||
/* Guard against integer overflow on 32-bit systems. */
|
||||
if (header_size > UINT32_MAX - PACTYPE_SIZE) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "PAC has too many buffers");
|
||||
return ret;
|
||||
}
|
||||
header_size += PACTYPE_SIZE;
|
||||
|
||||
*result = header_size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static krb5_error_code pac_aligned_size(krb5_context context,
|
||||
uint32_t size,
|
||||
uint32_t *aligned_size)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
|
||||
/* Guard against integer overflow on 32-bit systems. */
|
||||
if (size > UINT32_MAX - (PAC_ALIGNMENT - 1)) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
return ret;
|
||||
}
|
||||
size += PAC_ALIGNMENT - 1;
|
||||
|
||||
/* align to PAC_ALIGNMENT */
|
||||
size = (size / PAC_ALIGNMENT) * PAC_ALIGNMENT;
|
||||
|
||||
*aligned_size = size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
@@ -153,8 +203,12 @@ krb5_pac_parse(krb5_context context, const void *ptr, size_t len,
|
||||
goto out;
|
||||
}
|
||||
|
||||
p->pac = calloc(1,
|
||||
sizeof(*p->pac) + (sizeof(p->pac->buffers[0]) * (tmp - 1)));
|
||||
ret = pac_header_size(context, tmp, &header_end);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
p->pac = calloc(1, header_end);
|
||||
if (p->pac == NULL) {
|
||||
ret = krb5_enomem(context);
|
||||
goto out;
|
||||
@@ -163,7 +217,6 @@ krb5_pac_parse(krb5_context context, const void *ptr, size_t len,
|
||||
p->pac->numbuffers = tmp;
|
||||
p->pac->version = tmp2;
|
||||
|
||||
header_end = PACTYPE_SIZE + (PAC_INFO_BUFFER_SIZE * p->pac->numbuffers);
|
||||
if (header_end > len) {
|
||||
ret = EINVAL;
|
||||
goto out;
|
||||
@@ -292,37 +345,65 @@ krb5_pac_add_buffer(krb5_context context, krb5_pac p,
|
||||
{
|
||||
krb5_error_code ret;
|
||||
void *ptr;
|
||||
size_t len, offset, header_end, old_end;
|
||||
uint32_t unaligned_len, num_buffers, len, offset, header_end, old_end;
|
||||
uint32_t i;
|
||||
|
||||
len = p->pac->numbuffers;
|
||||
if (data->length > UINT32_MAX) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ptr = realloc(p->pac,
|
||||
sizeof(*p->pac) + (sizeof(p->pac->buffers[0]) * len));
|
||||
num_buffers = p->pac->numbuffers;
|
||||
|
||||
if (num_buffers >= UINT32_MAX) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
return ret;
|
||||
}
|
||||
ret = pac_header_size(context, num_buffers + 1, &header_end);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
ptr = realloc(p->pac, header_end);
|
||||
if (ptr == NULL)
|
||||
return krb5_enomem(context);
|
||||
|
||||
p->pac = ptr;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
p->pac->buffers[i].offset_lo += PAC_INFO_BUFFER_SIZE;
|
||||
for (i = 0; i < num_buffers; i++) {
|
||||
if (p->pac->buffers[i].offset_lo > UINT32_MAX - PAC_INFO_BUFFER_SIZE) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
return ret;
|
||||
}
|
||||
|
||||
p->pac->buffers[i].offset_lo += PAC_INFO_BUFFER_SIZE;
|
||||
}
|
||||
|
||||
if (p->data.length > UINT32_MAX - PAC_INFO_BUFFER_SIZE) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
return ret;
|
||||
}
|
||||
offset = p->data.length + PAC_INFO_BUFFER_SIZE;
|
||||
|
||||
p->pac->buffers[len].type = type;
|
||||
p->pac->buffers[len].buffersize = data->length;
|
||||
p->pac->buffers[len].offset_lo = offset;
|
||||
p->pac->buffers[len].offset_hi = 0;
|
||||
p->pac->buffers[num_buffers].type = type;
|
||||
p->pac->buffers[num_buffers].buffersize = data->length;
|
||||
p->pac->buffers[num_buffers].offset_lo = offset;
|
||||
p->pac->buffers[num_buffers].offset_hi = 0;
|
||||
|
||||
old_end = p->data.length;
|
||||
len = p->data.length + data->length + PAC_INFO_BUFFER_SIZE;
|
||||
if (len < p->data.length) {
|
||||
if (offset > UINT32_MAX - data->length) {
|
||||
krb5_set_error_message(context, EINVAL, "integer overrun");
|
||||
return EINVAL;
|
||||
}
|
||||
unaligned_len = offset + data->length;
|
||||
|
||||
/* align to PAC_ALIGNMENT */
|
||||
len = ((len + PAC_ALIGNMENT - 1) / PAC_ALIGNMENT) * PAC_ALIGNMENT;
|
||||
ret = pac_aligned_size(context, unaligned_len, &len);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = krb5_data_realloc(&p->data, len);
|
||||
if (ret) {
|
||||
@@ -333,7 +414,7 @@ krb5_pac_add_buffer(krb5_context context, krb5_pac p,
|
||||
/*
|
||||
* make place for new PAC INFO BUFFER header
|
||||
*/
|
||||
header_end = PACTYPE_SIZE + (PAC_INFO_BUFFER_SIZE * p->pac->numbuffers);
|
||||
header_end -= PAC_INFO_BUFFER_SIZE;
|
||||
memmove((unsigned char *)p->data.data + header_end + PAC_INFO_BUFFER_SIZE,
|
||||
(unsigned char *)p->data.data + header_end ,
|
||||
old_end - header_end);
|
||||
@@ -346,7 +427,7 @@ krb5_pac_add_buffer(krb5_context context, krb5_pac p,
|
||||
memcpy((unsigned char *)p->data.data + offset,
|
||||
data->data, data->length);
|
||||
memset((unsigned char *)p->data.data + offset + data->length,
|
||||
0, p->data.length - offset - data->length);
|
||||
0, p->data.length - unaligned_len);
|
||||
|
||||
p->pac->numbuffers += 1;
|
||||
|
||||
@@ -375,8 +456,8 @@ krb5_pac_get_buffer(krb5_context context, krb5_pac p,
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < p->pac->numbuffers; i++) {
|
||||
const size_t len = p->pac->buffers[i].buffersize;
|
||||
const size_t offset = p->pac->buffers[i].offset_lo;
|
||||
const uint32_t len = p->pac->buffers[i].buffersize;
|
||||
const uint32_t offset = p->pac->buffers[i].offset_lo;
|
||||
|
||||
if (p->pac->buffers[i].type != type)
|
||||
continue;
|
||||
@@ -963,8 +1044,8 @@ _krb5_pac_sign(krb5_context context,
|
||||
size_t server_size, priv_size;
|
||||
uint32_t server_offset = 0, priv_offset = 0;
|
||||
uint32_t server_cksumtype = 0, priv_cksumtype = 0;
|
||||
int num = 0;
|
||||
size_t i;
|
||||
uint32_t num = 0;
|
||||
uint32_t i;
|
||||
krb5_data logon, d;
|
||||
|
||||
krb5_data_zero(&logon);
|
||||
@@ -978,8 +1059,18 @@ _krb5_pac_sign(krb5_context context,
|
||||
|
||||
if (num) {
|
||||
void *ptr;
|
||||
uint32_t len;
|
||||
|
||||
ptr = realloc(p->pac, sizeof(*p->pac) + (sizeof(p->pac->buffers[0]) * (p->pac->numbuffers + num - 1)));
|
||||
if (p->pac->numbuffers > UINT32_MAX - num) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
ret = pac_header_size(context, p->pac->numbuffers + num, &len);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ptr = realloc(p->pac, len);
|
||||
if (ptr == NULL)
|
||||
return krb5_enomem(context);
|
||||
|
||||
@@ -1032,7 +1123,9 @@ _krb5_pac_sign(krb5_context context,
|
||||
CHECK(ret, krb5_store_uint32(sp, p->pac->numbuffers), out);
|
||||
CHECK(ret, krb5_store_uint32(sp, p->pac->version), out);
|
||||
|
||||
end = PACTYPE_SIZE + (PAC_INFO_BUFFER_SIZE * p->pac->numbuffers);
|
||||
ret = pac_header_size(context, p->pac->numbuffers, &end);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
for (i = 0; i < p->pac->numbuffers; i++) {
|
||||
uint32_t len;
|
||||
@@ -1042,11 +1135,31 @@ _krb5_pac_sign(krb5_context context,
|
||||
/* store data */
|
||||
|
||||
if (p->pac->buffers[i].type == PAC_SERVER_CHECKSUM) {
|
||||
if (server_size > UINT32_MAX - 4) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
if (end > UINT32_MAX - 4) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
len = server_size + 4;
|
||||
server_offset = end + 4;
|
||||
CHECK(ret, krb5_store_uint32(spdata, server_cksumtype), out);
|
||||
CHECK(ret, fill_zeros(context, spdata, server_size), out);
|
||||
} else if (p->pac->buffers[i].type == PAC_PRIVSVR_CHECKSUM) {
|
||||
if (priv_size > UINT32_MAX - 4) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
if (end > UINT32_MAX - 4) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
len = priv_size + 4;
|
||||
priv_offset = end + 4;
|
||||
CHECK(ret, krb5_store_uint32(spdata, priv_cksumtype), out);
|
||||
@@ -1077,11 +1190,20 @@ _krb5_pac_sign(krb5_context context,
|
||||
|
||||
/* advance data endpointer and align */
|
||||
{
|
||||
int32_t e;
|
||||
uint32_t e;
|
||||
|
||||
if (end > UINT32_MAX - len) {
|
||||
ret = EINVAL;
|
||||
krb5_set_error_message(context, ret, "integer overrun");
|
||||
goto out;
|
||||
}
|
||||
end += len;
|
||||
e = ((end + PAC_ALIGNMENT - 1) / PAC_ALIGNMENT) * PAC_ALIGNMENT;
|
||||
if ((int32_t)end != e) {
|
||||
|
||||
ret = pac_aligned_size(context, end, &e);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
if (end != e) {
|
||||
CHECK(ret, fill_zeros(context, spdata, e - end), out);
|
||||
}
|
||||
end = e;
|
||||
|
||||
@@ -802,11 +802,10 @@ get_key_from_keytab(krb5_context context,
|
||||
kvno,
|
||||
ap_req->ticket.enc_part.etype,
|
||||
&entry);
|
||||
if(ret)
|
||||
goto out;
|
||||
ret = krb5_copy_keyblock(context, &entry.keyblock, out_key);
|
||||
krb5_kt_free_entry (context, &entry);
|
||||
out:
|
||||
if(ret == 0) {
|
||||
ret = krb5_copy_keyblock(context, &entry.keyblock, out_key);
|
||||
krb5_kt_free_entry(context, &entry);
|
||||
}
|
||||
if(keytab == NULL)
|
||||
krb5_kt_close(context, real_keytab);
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ test_int16(krb5_context context, krb5_storage *sp)
|
||||
krb5_error_code ret;
|
||||
int i;
|
||||
int16_t val[] = {
|
||||
0, 1, -1, 32768, -32767
|
||||
0, 1, -1, 32767, -32768
|
||||
}, v;
|
||||
|
||||
krb5_storage_truncate(sp, 0);
|
||||
|
||||
@@ -281,6 +281,7 @@ decode_realms(krb5_context context,
|
||||
r = make_realm(tmp);
|
||||
if(r == NULL){
|
||||
free_realms(*realms);
|
||||
*realms = NULL;
|
||||
return krb5_enomem(context);
|
||||
}
|
||||
*realms = append_realm(*realms, r);
|
||||
@@ -289,7 +290,8 @@ decode_realms(krb5_context context,
|
||||
}
|
||||
tmp = malloc(tr + i - start + 1);
|
||||
if(tmp == NULL){
|
||||
free(*realms);
|
||||
free_realms(*realms);
|
||||
*realms = NULL;
|
||||
return krb5_enomem(context);
|
||||
}
|
||||
memcpy(tmp, start, tr + i - start);
|
||||
@@ -297,6 +299,7 @@ decode_realms(krb5_context context,
|
||||
r = make_realm(tmp);
|
||||
if(r == NULL){
|
||||
free_realms(*realms);
|
||||
*realms = NULL;
|
||||
return krb5_enomem(context);
|
||||
}
|
||||
*realms = append_realm(*realms, r);
|
||||
|
||||
@@ -188,7 +188,7 @@ get_null (const struct addrinfo *hints,
|
||||
struct addrinfo *first = NULL;
|
||||
struct addrinfo **current = &first;
|
||||
int family = PF_UNSPEC;
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
if (hints != NULL)
|
||||
family = hints->ai_family;
|
||||
@@ -209,6 +209,8 @@ get_null (const struct addrinfo *hints,
|
||||
if (family == PF_INET6 || family == PF_UNSPEC) {
|
||||
ret = add_one (port, protocol, socktype,
|
||||
¤t, const_v6, &v6_addr, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
if (family == PF_INET || family == PF_UNSPEC) {
|
||||
@@ -216,7 +218,7 @@ get_null (const struct addrinfo *hints,
|
||||
¤t, const_v4, &v4_addr, NULL);
|
||||
}
|
||||
*res = first;
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
@@ -156,7 +156,9 @@ main(int argc, char **argv)
|
||||
if (argc == 0)
|
||||
usage(1);
|
||||
|
||||
for (i = 0; i < argc; ++i)
|
||||
lookup(argv[i]);
|
||||
for (i = 0; i < argc; ++i) {
|
||||
if (argv[i][0]) /* Quiet lint */
|
||||
lookup(argv[i]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -227,9 +227,9 @@ find_composition(const uint32_t *in, unsigned in_len)
|
||||
unsigned i;
|
||||
|
||||
if (n % 5 == 0) {
|
||||
cur = *in++;
|
||||
if (in_len-- == 0)
|
||||
return c->val;
|
||||
cur = *in++;
|
||||
}
|
||||
|
||||
i = cur >> 16;
|
||||
|
||||
@@ -106,20 +106,23 @@ static unsigned long getauxval(unsigned long key)
|
||||
* ARM puts the feature bits for Crypto Extensions in AT_HWCAP2, whereas
|
||||
* AArch64 used AT_HWCAP.
|
||||
*/
|
||||
# ifndef AT_HWCAP
|
||||
# define AT_HWCAP 16
|
||||
# endif
|
||||
# ifndef AT_HWCAP2
|
||||
# define AT_HWCAP2 26
|
||||
# endif
|
||||
# if defined(__arm__) || defined (__arm)
|
||||
# define HWCAP 16
|
||||
/* AT_HWCAP */
|
||||
# define HWCAP AT_HWCAP
|
||||
# define HWCAP_NEON (1 << 12)
|
||||
|
||||
# define HWCAP_CE 26
|
||||
/* AT_HWCAP2 */
|
||||
# define HWCAP_CE AT_HWCAP2
|
||||
# define HWCAP_CE_AES (1 << 0)
|
||||
# define HWCAP_CE_PMULL (1 << 1)
|
||||
# define HWCAP_CE_SHA1 (1 << 2)
|
||||
# define HWCAP_CE_SHA256 (1 << 3)
|
||||
# elif defined(__aarch64__)
|
||||
# define HWCAP 16
|
||||
/* AT_HWCAP */
|
||||
# define HWCAP AT_HWCAP
|
||||
# define HWCAP_NEON (1 << 1)
|
||||
|
||||
# define HWCAP_CE HWCAP
|
||||
|
||||
@@ -49,12 +49,19 @@ static int ndef_suffix(BIO *b, unsigned char **pbuf, int *plen, void *parg);
|
||||
static int ndef_suffix_free(BIO *b, unsigned char **pbuf, int *plen,
|
||||
void *parg);
|
||||
|
||||
/*
|
||||
* On success, the returned BIO owns the input BIO as part of its BIO chain.
|
||||
* On failure, NULL is returned and the input BIO is owned by the caller.
|
||||
*
|
||||
* Unfortunately cannot constify this due to CMS_stream() and PKCS7_stream()
|
||||
*/
|
||||
BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it)
|
||||
{
|
||||
NDEF_SUPPORT *ndef_aux = NULL;
|
||||
BIO *asn_bio = NULL;
|
||||
const ASN1_AUX *aux = it->funcs;
|
||||
ASN1_STREAM_ARG sarg;
|
||||
BIO *pop_bio = NULL;
|
||||
|
||||
if (!aux || !aux->asn1_cb) {
|
||||
ASN1err(ASN1_F_BIO_NEW_NDEF, ASN1_R_STREAMING_NOT_SUPPORTED);
|
||||
@@ -69,21 +76,39 @@ BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it)
|
||||
out = BIO_push(asn_bio, out);
|
||||
if (out == NULL)
|
||||
goto err;
|
||||
pop_bio = asn_bio;
|
||||
|
||||
BIO_asn1_set_prefix(asn_bio, ndef_prefix, ndef_prefix_free);
|
||||
BIO_asn1_set_suffix(asn_bio, ndef_suffix, ndef_suffix_free);
|
||||
if (BIO_asn1_set_prefix(asn_bio, ndef_prefix, ndef_prefix_free) <= 0
|
||||
|| BIO_asn1_set_suffix(asn_bio, ndef_suffix, ndef_suffix_free) <= 0
|
||||
|| BIO_ctrl(asn_bio, BIO_C_SET_EX_ARG, 0, ndef_aux) <= 0)
|
||||
goto err;
|
||||
|
||||
/*
|
||||
* Now let callback prepends any digest, cipher etc BIOs ASN1 structure
|
||||
* needs.
|
||||
* Now let the callback prepend any digest, cipher, etc., that the BIO's
|
||||
* ASN1 structure needs.
|
||||
*/
|
||||
|
||||
sarg.out = out;
|
||||
sarg.ndef_bio = NULL;
|
||||
sarg.boundary = NULL;
|
||||
|
||||
if (aux->asn1_cb(ASN1_OP_STREAM_PRE, &val, it, &sarg) <= 0)
|
||||
/*
|
||||
* The asn1_cb(), must not have mutated asn_bio on error, leaving it in the
|
||||
* middle of some partially built, but not returned BIO chain.
|
||||
*/
|
||||
if (aux->asn1_cb(ASN1_OP_STREAM_PRE, &val, it, &sarg) <= 0) {
|
||||
/*
|
||||
* ndef_aux is now owned by asn_bio so we must not free it in the err
|
||||
* clean up block
|
||||
*/
|
||||
ndef_aux = NULL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* We must not fail now because the callback has prepended additional
|
||||
* BIOs to the chain
|
||||
*/
|
||||
|
||||
ndef_aux->val = val;
|
||||
ndef_aux->it = it;
|
||||
@@ -91,11 +116,11 @@ BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it)
|
||||
ndef_aux->boundary = sarg.boundary;
|
||||
ndef_aux->out = out;
|
||||
|
||||
BIO_ctrl(asn_bio, BIO_C_SET_EX_ARG, 0, ndef_aux);
|
||||
|
||||
return sarg.ndef_bio;
|
||||
|
||||
err:
|
||||
/* BIO_pop() is NULL safe */
|
||||
(void)BIO_pop(pop_bio);
|
||||
BIO_free(asn_bio);
|
||||
OPENSSL_free(ndef_aux);
|
||||
return NULL;
|
||||
|
||||
@@ -13,20 +13,6 @@
|
||||
|
||||
#define BN_BLINDING_COUNTER 32
|
||||
|
||||
struct bn_blinding_st {
|
||||
BIGNUM *A;
|
||||
BIGNUM *Ai;
|
||||
BIGNUM *e;
|
||||
BIGNUM *mod; /* just a reference */
|
||||
CRYPTO_THREAD_ID tid;
|
||||
int counter;
|
||||
unsigned long flags;
|
||||
BN_MONT_CTX *m_ctx;
|
||||
int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
||||
CRYPTO_RWLOCK *lock;
|
||||
};
|
||||
|
||||
BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod)
|
||||
{
|
||||
BN_BLINDING *ret = NULL;
|
||||
|
||||
@@ -73,6 +73,8 @@ static const ERR_STRING_DATA BN_str_functs[] = {
|
||||
{ERR_PACK(ERR_LIB_BN, BN_F_BN_SET_WORDS, 0), "bn_set_words"},
|
||||
{ERR_PACK(ERR_LIB_BN, BN_F_BN_STACK_PUSH, 0), "BN_STACK_push"},
|
||||
{ERR_PACK(ERR_LIB_BN, BN_F_BN_USUB, 0), "BN_usub"},
|
||||
{ERR_PACK(ERR_LIB_BN, BN_F_OSSL_BN_RSA_DO_UNBLIND, 0),
|
||||
"ossl_bn_rsa_do_unblind"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
|
||||
@@ -263,6 +263,20 @@ struct bn_gencb_st {
|
||||
} cb;
|
||||
};
|
||||
|
||||
struct bn_blinding_st {
|
||||
BIGNUM *A;
|
||||
BIGNUM *Ai;
|
||||
BIGNUM *e;
|
||||
BIGNUM *mod; /* just a reference */
|
||||
CRYPTO_THREAD_ID tid;
|
||||
int counter;
|
||||
unsigned long flags;
|
||||
BN_MONT_CTX *m_ctx;
|
||||
int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
||||
const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);
|
||||
CRYPTO_RWLOCK *lock;
|
||||
};
|
||||
|
||||
/*-
|
||||
* BN_window_bits_for_exponent_size -- macro for sliding window mod_exp functions
|
||||
*
|
||||
|
||||
@@ -14,7 +14,8 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
|
||||
/*
|
||||
* Returns 'ret' such that ret^2 == a (mod p), using the Tonelli/Shanks
|
||||
* algorithm (cf. Henri Cohen, "A Course in Algebraic Computational Number
|
||||
* Theory", algorithm 1.5.1). 'p' must be prime!
|
||||
* Theory", algorithm 1.5.1). 'p' must be prime, otherwise an error or
|
||||
* an incorrect "result" will be returned.
|
||||
*/
|
||||
{
|
||||
BIGNUM *ret = in;
|
||||
@@ -301,18 +302,23 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
|
||||
goto vrfy;
|
||||
}
|
||||
|
||||
/* find smallest i such that b^(2^i) = 1 */
|
||||
i = 1;
|
||||
if (!BN_mod_sqr(t, b, p, ctx))
|
||||
goto end;
|
||||
while (!BN_is_one(t)) {
|
||||
i++;
|
||||
if (i == e) {
|
||||
BNerr(BN_F_BN_MOD_SQRT, BN_R_NOT_A_SQUARE);
|
||||
goto end;
|
||||
/* Find the smallest i, 0 < i < e, such that b^(2^i) = 1. */
|
||||
for (i = 1; i < e; i++) {
|
||||
if (i == 1) {
|
||||
if (!BN_mod_sqr(t, b, p, ctx))
|
||||
goto end;
|
||||
|
||||
} else {
|
||||
if (!BN_mod_mul(t, t, t, p, ctx))
|
||||
goto end;
|
||||
}
|
||||
if (!BN_mod_mul(t, t, t, p, ctx))
|
||||
goto end;
|
||||
if (BN_is_one(t))
|
||||
break;
|
||||
}
|
||||
/* If not found, a is not a square or p is not prime. */
|
||||
if (i >= e) {
|
||||
BNerr(BN_F_BN_MOD_SQRT, BN_R_NOT_A_SQUARE);
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* t := y^2^(e - i - 1) */
|
||||
|
||||
@@ -0,0 +1,614 @@
|
||||
#include <openssl/e_os2.h>
|
||||
#include <stddef.h>
|
||||
#include <sys/types.h>
|
||||
#include <string.h>
|
||||
#include <openssl/bn.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/rsaerr.h>
|
||||
#include "internal/numbers.h"
|
||||
#include "internal/constant_time.h"
|
||||
#include "bn_local.h"
|
||||
|
||||
# if BN_BYTES == 8
|
||||
typedef uint64_t limb_t;
|
||||
# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16
|
||||
/* nonstandard; implemented by gcc on 64-bit platforms */
|
||||
typedef __uint128_t limb2_t;
|
||||
# define HAVE_LIMB2_T
|
||||
# endif
|
||||
# define LIMB_BIT_SIZE 64
|
||||
# define LIMB_BYTE_SIZE 8
|
||||
# elif BN_BYTES == 4
|
||||
typedef uint32_t limb_t;
|
||||
typedef uint64_t limb2_t;
|
||||
# define LIMB_BIT_SIZE 32
|
||||
# define LIMB_BYTE_SIZE 4
|
||||
# define HAVE_LIMB2_T
|
||||
# else
|
||||
# error "Not supported"
|
||||
# endif
|
||||
|
||||
/*
|
||||
* For multiplication we're using schoolbook multiplication,
|
||||
* so if we have two numbers, each with 6 "digits" (words)
|
||||
* the multiplication is calculated as follows:
|
||||
* A B C D E F
|
||||
* x I J K L M N
|
||||
* --------------
|
||||
* N*F
|
||||
* N*E
|
||||
* N*D
|
||||
* N*C
|
||||
* N*B
|
||||
* N*A
|
||||
* M*F
|
||||
* M*E
|
||||
* M*D
|
||||
* M*C
|
||||
* M*B
|
||||
* M*A
|
||||
* L*F
|
||||
* L*E
|
||||
* L*D
|
||||
* L*C
|
||||
* L*B
|
||||
* L*A
|
||||
* K*F
|
||||
* K*E
|
||||
* K*D
|
||||
* K*C
|
||||
* K*B
|
||||
* K*A
|
||||
* J*F
|
||||
* J*E
|
||||
* J*D
|
||||
* J*C
|
||||
* J*B
|
||||
* J*A
|
||||
* I*F
|
||||
* I*E
|
||||
* I*D
|
||||
* I*C
|
||||
* I*B
|
||||
* + I*A
|
||||
* ==========================
|
||||
* N*B N*D N*F
|
||||
* + N*A N*C N*E
|
||||
* + M*B M*D M*F
|
||||
* + M*A M*C M*E
|
||||
* + L*B L*D L*F
|
||||
* + L*A L*C L*E
|
||||
* + K*B K*D K*F
|
||||
* + K*A K*C K*E
|
||||
* + J*B J*D J*F
|
||||
* + J*A J*C J*E
|
||||
* + I*B I*D I*F
|
||||
* + I*A I*C I*E
|
||||
*
|
||||
* 1+1 1+3 1+5
|
||||
* 1+0 1+2 1+4
|
||||
* 0+1 0+3 0+5
|
||||
* 0+0 0+2 0+4
|
||||
*
|
||||
* 0 1 2 3 4 5 6
|
||||
* which requires n^2 multiplications and 2n full length additions
|
||||
* as we can keep every other result of limb multiplication in two separate
|
||||
* limbs
|
||||
*/
|
||||
|
||||
#if defined HAVE_LIMB2_T
|
||||
static ossl_inline void _mul_limb(limb_t *hi, limb_t *lo, limb_t a, limb_t b)
|
||||
{
|
||||
limb2_t t;
|
||||
/*
|
||||
* this is idiomatic code to tell compiler to use the native mul
|
||||
* those three lines will actually compile to single instruction
|
||||
*/
|
||||
|
||||
t = (limb2_t)a * b;
|
||||
*hi = t >> LIMB_BIT_SIZE;
|
||||
*lo = (limb_t)t;
|
||||
}
|
||||
#elif (BN_BYTES == 8) && (defined _MSC_VER)
|
||||
/* https://learn.microsoft.com/en-us/cpp/intrinsics/umul128?view=msvc-170 */
|
||||
#pragma intrinsic(_umul128)
|
||||
static ossl_inline void _mul_limb(limb_t *hi, limb_t *lo, limb_t a, limb_t b)
|
||||
{
|
||||
*lo = _umul128(a, b, hi);
|
||||
}
|
||||
#else
|
||||
/*
|
||||
* if the compiler doesn't have either a 128bit data type nor a "return
|
||||
* high 64 bits of multiplication"
|
||||
*/
|
||||
static ossl_inline void _mul_limb(limb_t *hi, limb_t *lo, limb_t a, limb_t b)
|
||||
{
|
||||
limb_t a_low = (limb_t)(uint32_t)a;
|
||||
limb_t a_hi = a >> 32;
|
||||
limb_t b_low = (limb_t)(uint32_t)b;
|
||||
limb_t b_hi = b >> 32;
|
||||
|
||||
limb_t p0 = a_low * b_low;
|
||||
limb_t p1 = a_low * b_hi;
|
||||
limb_t p2 = a_hi * b_low;
|
||||
limb_t p3 = a_hi * b_hi;
|
||||
|
||||
uint32_t cy = (uint32_t)(((p0 >> 32) + (uint32_t)p1 + (uint32_t)p2) >> 32);
|
||||
|
||||
*lo = p0 + (p1 << 32) + (p2 << 32);
|
||||
*hi = p3 + (p1 >> 32) + (p2 >> 32) + cy;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* add two limbs with carry in, return carry out */
|
||||
static ossl_inline limb_t _add_limb(limb_t *ret, limb_t a, limb_t b, limb_t carry)
|
||||
{
|
||||
limb_t carry1, carry2, t;
|
||||
/*
|
||||
* `c = a + b; if (c < a)` is idiomatic code that makes compilers
|
||||
* use add with carry on assembly level
|
||||
*/
|
||||
|
||||
*ret = a + carry;
|
||||
if (*ret < a)
|
||||
carry1 = 1;
|
||||
else
|
||||
carry1 = 0;
|
||||
|
||||
t = *ret;
|
||||
*ret = t + b;
|
||||
if (*ret < t)
|
||||
carry2 = 1;
|
||||
else
|
||||
carry2 = 0;
|
||||
|
||||
return carry1 + carry2;
|
||||
}
|
||||
|
||||
/*
|
||||
* add two numbers of the same size, return overflow
|
||||
*
|
||||
* add a to b, place result in ret; all arrays need to be n limbs long
|
||||
* return overflow from addition (0 or 1)
|
||||
*/
|
||||
static ossl_inline limb_t add(limb_t *ret, limb_t *a, limb_t *b, size_t n)
|
||||
{
|
||||
limb_t c = 0;
|
||||
ossl_ssize_t i;
|
||||
|
||||
for(i = n - 1; i > -1; i--)
|
||||
c = _add_limb(&ret[i], a[i], b[i], c);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
/*
|
||||
* return number of limbs necessary for temporary values
|
||||
* when multiplying numbers n limbs large
|
||||
*/
|
||||
static ossl_inline size_t mul_limb_numb(size_t n)
|
||||
{
|
||||
return 2 * n * 2;
|
||||
}
|
||||
|
||||
/*
|
||||
* multiply two numbers of the same size
|
||||
*
|
||||
* multiply a by b, place result in ret; a and b need to be n limbs long
|
||||
* ret needs to be 2*n limbs long, tmp needs to be mul_limb_numb(n) limbs
|
||||
* long
|
||||
*/
|
||||
static void limb_mul(limb_t *ret, limb_t *a, limb_t *b, size_t n, limb_t *tmp)
|
||||
{
|
||||
limb_t *r_odd, *r_even;
|
||||
size_t i, j, k;
|
||||
|
||||
r_odd = tmp;
|
||||
r_even = &tmp[2 * n];
|
||||
|
||||
memset(ret, 0, 2 * n * sizeof(limb_t));
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
for (k = 0; k < i + n + 1; k++) {
|
||||
r_even[k] = 0;
|
||||
r_odd[k] = 0;
|
||||
}
|
||||
for (j = 0; j < n; j++) {
|
||||
/*
|
||||
* place results from even and odd limbs in separate arrays so that
|
||||
* we don't have to calculate overflow every time we get individual
|
||||
* limb multiplication result
|
||||
*/
|
||||
if (j % 2 == 0)
|
||||
_mul_limb(&r_even[i + j], &r_even[i + j + 1], a[i], b[j]);
|
||||
else
|
||||
_mul_limb(&r_odd[i + j], &r_odd[i + j + 1], a[i], b[j]);
|
||||
}
|
||||
/*
|
||||
* skip the least significant limbs when adding multiples of
|
||||
* more significant limbs (they're zero anyway)
|
||||
*/
|
||||
add(ret, ret, r_even, n + i + 1);
|
||||
add(ret, ret, r_odd, n + i + 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* modifies the value in place by performing a right shift by one bit */
|
||||
static ossl_inline void rshift1(limb_t *val, size_t n)
|
||||
{
|
||||
limb_t shift_in = 0, shift_out = 0;
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
shift_out = val[i] & 1;
|
||||
val[i] = shift_in << (LIMB_BIT_SIZE - 1) | (val[i] >> 1);
|
||||
shift_in = shift_out;
|
||||
}
|
||||
}
|
||||
|
||||
/* extend the LSB of flag to all bits of limb */
|
||||
static ossl_inline limb_t mk_mask(limb_t flag)
|
||||
{
|
||||
flag |= flag << 1;
|
||||
flag |= flag << 2;
|
||||
flag |= flag << 4;
|
||||
flag |= flag << 8;
|
||||
flag |= flag << 16;
|
||||
#if (LIMB_BYTE_SIZE == 8)
|
||||
flag |= flag << 32;
|
||||
#endif
|
||||
return flag;
|
||||
}
|
||||
|
||||
/*
|
||||
* copy from either a or b to ret based on flag
|
||||
* when flag == 0, then copies from b
|
||||
* when flag == 1, then copies from a
|
||||
*/
|
||||
static ossl_inline void cselect(limb_t flag, limb_t *ret, limb_t *a, limb_t *b, size_t n)
|
||||
{
|
||||
/*
|
||||
* would be more efficient with non volatile mask, but then gcc
|
||||
* generates code with jumps
|
||||
*/
|
||||
volatile limb_t mask;
|
||||
size_t i;
|
||||
|
||||
mask = mk_mask(flag);
|
||||
for (i = 0; i < n; i++) {
|
||||
#if (LIMB_BYTE_SIZE == 8)
|
||||
ret[i] = constant_time_select_64(mask, a[i], b[i]);
|
||||
#else
|
||||
ret[i] = constant_time_select_32(mask, a[i], b[i]);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static limb_t _sub_limb(limb_t *ret, limb_t a, limb_t b, limb_t borrow)
|
||||
{
|
||||
limb_t borrow1, borrow2, t;
|
||||
/*
|
||||
* while it doesn't look constant-time, this is idiomatic code
|
||||
* to tell compilers to use the carry bit from subtraction
|
||||
*/
|
||||
|
||||
*ret = a - borrow;
|
||||
if (*ret > a)
|
||||
borrow1 = 1;
|
||||
else
|
||||
borrow1 = 0;
|
||||
|
||||
t = *ret;
|
||||
*ret = t - b;
|
||||
if (*ret > t)
|
||||
borrow2 = 1;
|
||||
else
|
||||
borrow2 = 0;
|
||||
|
||||
return borrow1 + borrow2;
|
||||
}
|
||||
|
||||
/*
|
||||
* place the result of a - b into ret, return the borrow bit.
|
||||
* All arrays need to be n limbs long
|
||||
*/
|
||||
static limb_t sub(limb_t *ret, limb_t *a, limb_t *b, size_t n)
|
||||
{
|
||||
limb_t borrow = 0;
|
||||
ossl_ssize_t i;
|
||||
|
||||
for (i = n - 1; i > -1; i--)
|
||||
borrow = _sub_limb(&ret[i], a[i], b[i], borrow);
|
||||
|
||||
return borrow;
|
||||
}
|
||||
|
||||
/* return the number of limbs necessary to allocate for the mod() tmp operand */
|
||||
static ossl_inline size_t mod_limb_numb(size_t anum, size_t modnum)
|
||||
{
|
||||
return (anum + modnum) * 3;
|
||||
}
|
||||
|
||||
/*
|
||||
* calculate a % mod, place the result in ret
|
||||
* size of a is defined by anum, size of ret and mod is modnum,
|
||||
* size of tmp is returned by mod_limb_numb()
|
||||
*/
|
||||
static void mod(limb_t *ret, limb_t *a, size_t anum, limb_t *mod,
|
||||
size_t modnum, limb_t *tmp)
|
||||
{
|
||||
limb_t *atmp, *modtmp, *rettmp;
|
||||
limb_t res;
|
||||
size_t i;
|
||||
|
||||
memset(tmp, 0, mod_limb_numb(anum, modnum) * LIMB_BYTE_SIZE);
|
||||
|
||||
atmp = tmp;
|
||||
modtmp = &tmp[anum + modnum];
|
||||
rettmp = &tmp[(anum + modnum) * 2];
|
||||
|
||||
for (i = modnum; i <modnum + anum; i++)
|
||||
atmp[i] = a[i-modnum];
|
||||
|
||||
for (i = 0; i < modnum; i++)
|
||||
modtmp[i] = mod[i];
|
||||
|
||||
for (i = 0; i < anum * LIMB_BIT_SIZE; i++) {
|
||||
rshift1(modtmp, anum + modnum);
|
||||
res = sub(rettmp, atmp, modtmp, anum+modnum);
|
||||
cselect(res, atmp, atmp, rettmp, anum+modnum);
|
||||
}
|
||||
|
||||
memcpy(ret, &atmp[anum], sizeof(limb_t) * modnum);
|
||||
}
|
||||
|
||||
/* necessary size of tmp for a _mul_add_limb() call with provided anum */
|
||||
static ossl_inline size_t _mul_add_limb_numb(size_t anum)
|
||||
{
|
||||
return 2 * (anum + 1);
|
||||
}
|
||||
|
||||
/* multiply a by m, add to ret, return carry */
|
||||
static limb_t _mul_add_limb(limb_t *ret, limb_t *a, size_t anum,
|
||||
limb_t m, limb_t *tmp)
|
||||
{
|
||||
limb_t carry = 0;
|
||||
limb_t *r_odd, *r_even;
|
||||
size_t i;
|
||||
|
||||
memset(tmp, 0, sizeof(limb_t) * (anum + 1) * 2);
|
||||
|
||||
r_odd = tmp;
|
||||
r_even = &tmp[anum + 1];
|
||||
|
||||
for (i = 0; i < anum; i++) {
|
||||
/*
|
||||
* place the results from even and odd limbs in separate arrays
|
||||
* so that we have to worry about carry just once
|
||||
*/
|
||||
if (i % 2 == 0)
|
||||
_mul_limb(&r_even[i], &r_even[i + 1], a[i], m);
|
||||
else
|
||||
_mul_limb(&r_odd[i], &r_odd[i + 1], a[i], m);
|
||||
}
|
||||
/* assert: add() carry here will be equal zero */
|
||||
add(r_even, r_even, r_odd, anum + 1);
|
||||
/*
|
||||
* while here it will not overflow as the max value from multiplication
|
||||
* is -2 while max overflow from addition is 1, so the max value of
|
||||
* carry is -1 (i.e. max int)
|
||||
*/
|
||||
carry = add(ret, ret, &r_even[1], anum) + r_even[0];
|
||||
|
||||
return carry;
|
||||
}
|
||||
|
||||
static ossl_inline size_t mod_montgomery_limb_numb(size_t modnum)
|
||||
{
|
||||
return modnum * 2 + _mul_add_limb_numb(modnum);
|
||||
}
|
||||
|
||||
/*
|
||||
* calculate a % mod, place result in ret
|
||||
* assumes that a is in Montgomery form with the R (Montgomery modulus) being
|
||||
* smallest power of two big enough to fit mod and that's also a power
|
||||
* of the count of number of bits in limb_t (B).
|
||||
* For calculation, we also need n', such that mod * n' == -1 mod B.
|
||||
* anum must be <= 2 * modnum
|
||||
* ret needs to be modnum words long
|
||||
* tmp needs to be mod_montgomery_limb_numb(modnum) limbs long
|
||||
*/
|
||||
static void mod_montgomery(limb_t *ret, limb_t *a, size_t anum, limb_t *mod,
|
||||
size_t modnum, limb_t ni0, limb_t *tmp)
|
||||
{
|
||||
limb_t carry, v;
|
||||
limb_t *res, *rp, *tmp2;
|
||||
ossl_ssize_t i;
|
||||
|
||||
res = tmp;
|
||||
/*
|
||||
* for intermediate result we need an integer twice as long as modulus
|
||||
* but keep the input in the least significant limbs
|
||||
*/
|
||||
memset(res, 0, sizeof(limb_t) * (modnum * 2));
|
||||
memcpy(&res[modnum * 2 - anum], a, sizeof(limb_t) * anum);
|
||||
rp = &res[modnum];
|
||||
tmp2 = &res[modnum * 2];
|
||||
|
||||
carry = 0;
|
||||
|
||||
/* add multiples of the modulus to the value until R divides it cleanly */
|
||||
for (i = modnum; i > 0; i--, rp--) {
|
||||
v = _mul_add_limb(rp, mod, modnum, rp[modnum - 1] * ni0, tmp2);
|
||||
v = v + carry + rp[-1];
|
||||
carry |= (v != rp[-1]);
|
||||
carry &= (v <= rp[-1]);
|
||||
rp[-1] = v;
|
||||
}
|
||||
|
||||
/* perform the final reduction by mod... */
|
||||
carry -= sub(ret, rp, mod, modnum);
|
||||
|
||||
/* ...conditionally */
|
||||
cselect(carry, ret, rp, ret, modnum);
|
||||
}
|
||||
|
||||
/* allocated buffer should be freed afterwards */
|
||||
static void BN_to_limb(const BIGNUM *bn, limb_t *buf, size_t limbs)
|
||||
{
|
||||
int i;
|
||||
int real_limbs = (BN_num_bytes(bn) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE;
|
||||
limb_t *ptr = buf + (limbs - real_limbs);
|
||||
|
||||
for (i = 0; i < real_limbs; i++)
|
||||
ptr[i] = bn->d[real_limbs - i - 1];
|
||||
}
|
||||
|
||||
#if LIMB_BYTE_SIZE == 8
|
||||
static ossl_inline uint64_t be64(uint64_t host)
|
||||
{
|
||||
const union {
|
||||
long one;
|
||||
char little;
|
||||
} is_endian = { 1 };
|
||||
|
||||
if (is_endian.little) {
|
||||
uint64_t big = 0;
|
||||
|
||||
big |= (host & 0xff00000000000000) >> 56;
|
||||
big |= (host & 0x00ff000000000000) >> 40;
|
||||
big |= (host & 0x0000ff0000000000) >> 24;
|
||||
big |= (host & 0x000000ff00000000) >> 8;
|
||||
big |= (host & 0x00000000ff000000) << 8;
|
||||
big |= (host & 0x0000000000ff0000) << 24;
|
||||
big |= (host & 0x000000000000ff00) << 40;
|
||||
big |= (host & 0x00000000000000ff) << 56;
|
||||
return big;
|
||||
} else {
|
||||
return host;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
/* Not all platforms have htobe32(). */
|
||||
static ossl_inline uint32_t be32(uint32_t host)
|
||||
{
|
||||
const union {
|
||||
long one;
|
||||
char little;
|
||||
} is_endian = { 1 };
|
||||
|
||||
if (is_endian.little) {
|
||||
uint32_t big = 0;
|
||||
|
||||
big |= (host & 0xff000000) >> 24;
|
||||
big |= (host & 0x00ff0000) >> 8;
|
||||
big |= (host & 0x0000ff00) << 8;
|
||||
big |= (host & 0x000000ff) << 24;
|
||||
return big;
|
||||
} else {
|
||||
return host;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We assume that intermediate, possible_arg2, blinding, and ctx are used
|
||||
* similar to BN_BLINDING_invert_ex() arguments.
|
||||
* to_mod is RSA modulus.
|
||||
* buf and num is the serialization buffer and its length.
|
||||
*
|
||||
* Here we use classic/Montgomery multiplication and modulo. After the calculation finished
|
||||
* we serialize the new structure instead of BIGNUMs taking endianness into account.
|
||||
*/
|
||||
int ossl_bn_rsa_do_unblind(const BIGNUM *intermediate,
|
||||
const BN_BLINDING *blinding,
|
||||
const BIGNUM *possible_arg2,
|
||||
const BIGNUM *to_mod, BN_CTX *ctx,
|
||||
unsigned char *buf, int num)
|
||||
{
|
||||
limb_t *l_im = NULL, *l_mul = NULL, *l_mod = NULL;
|
||||
limb_t *l_ret = NULL, *l_tmp = NULL, l_buf;
|
||||
size_t l_im_count = 0, l_mul_count = 0, l_size = 0, l_mod_count = 0;
|
||||
size_t l_tmp_count = 0;
|
||||
int ret = 0;
|
||||
size_t i;
|
||||
unsigned char *tmp;
|
||||
const BIGNUM *arg1 = intermediate;
|
||||
const BIGNUM *arg2 = (possible_arg2 == NULL) ? blinding->Ai : possible_arg2;
|
||||
|
||||
l_im_count = (BN_num_bytes(arg1) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE;
|
||||
l_mul_count = (BN_num_bytes(arg2) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE;
|
||||
l_mod_count = (BN_num_bytes(to_mod) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE;
|
||||
|
||||
l_size = l_im_count > l_mul_count ? l_im_count : l_mul_count;
|
||||
l_im = OPENSSL_zalloc(l_size * LIMB_BYTE_SIZE);
|
||||
l_mul = OPENSSL_zalloc(l_size * LIMB_BYTE_SIZE);
|
||||
l_mod = OPENSSL_zalloc(l_mod_count * LIMB_BYTE_SIZE);
|
||||
|
||||
if ((l_im == NULL) || (l_mul == NULL) || (l_mod == NULL))
|
||||
goto err;
|
||||
|
||||
BN_to_limb(arg1, l_im, l_size);
|
||||
BN_to_limb(arg2, l_mul, l_size);
|
||||
BN_to_limb(to_mod, l_mod, l_mod_count);
|
||||
|
||||
l_ret = OPENSSL_malloc(2 * l_size * LIMB_BYTE_SIZE);
|
||||
|
||||
if (blinding->m_ctx != NULL) {
|
||||
l_tmp_count = mul_limb_numb(l_size) > mod_montgomery_limb_numb(l_mod_count) ?
|
||||
mul_limb_numb(l_size) : mod_montgomery_limb_numb(l_mod_count);
|
||||
l_tmp = OPENSSL_malloc(l_tmp_count * LIMB_BYTE_SIZE);
|
||||
} else {
|
||||
l_tmp_count = mul_limb_numb(l_size) > mod_limb_numb(2 * l_size, l_mod_count) ?
|
||||
mul_limb_numb(l_size) : mod_limb_numb(2 * l_size, l_mod_count);
|
||||
l_tmp = OPENSSL_malloc(l_tmp_count * LIMB_BYTE_SIZE);
|
||||
}
|
||||
|
||||
if ((l_ret == NULL) || (l_tmp == NULL))
|
||||
goto err;
|
||||
|
||||
if (blinding->m_ctx != NULL) {
|
||||
limb_mul(l_ret, l_im, l_mul, l_size, l_tmp);
|
||||
mod_montgomery(l_ret, l_ret, 2 * l_size, l_mod, l_mod_count,
|
||||
blinding->m_ctx->n0[0], l_tmp);
|
||||
} else {
|
||||
limb_mul(l_ret, l_im, l_mul, l_size, l_tmp);
|
||||
mod(l_ret, l_ret, 2 * l_size, l_mod, l_mod_count, l_tmp);
|
||||
}
|
||||
|
||||
/* modulus size in bytes can be equal to num but after limbs conversion it becomes bigger */
|
||||
if (num < BN_num_bytes(to_mod)) {
|
||||
BNerr(BN_F_OSSL_BN_RSA_DO_UNBLIND, ERR_R_PASSED_INVALID_ARGUMENT);
|
||||
goto err;
|
||||
}
|
||||
|
||||
memset(buf, 0, num);
|
||||
tmp = buf + num - BN_num_bytes(to_mod);
|
||||
for (i = 0; i < l_mod_count; i++) {
|
||||
#if LIMB_BYTE_SIZE == 8
|
||||
l_buf = be64(l_ret[i]);
|
||||
#else
|
||||
l_buf = be32(l_ret[i]);
|
||||
#endif
|
||||
if (i == 0) {
|
||||
int delta = LIMB_BYTE_SIZE - ((l_mod_count * LIMB_BYTE_SIZE) - num);
|
||||
|
||||
memcpy(tmp, ((char *)&l_buf) + LIMB_BYTE_SIZE - delta, delta);
|
||||
tmp += delta;
|
||||
} else {
|
||||
memcpy(tmp, &l_buf, LIMB_BYTE_SIZE);
|
||||
tmp += LIMB_BYTE_SIZE;
|
||||
}
|
||||
}
|
||||
ret = num;
|
||||
|
||||
err:
|
||||
OPENSSL_free(l_im);
|
||||
OPENSSL_free(l_mul);
|
||||
OPENSSL_free(l_mod);
|
||||
OPENSSL_free(l_tmp);
|
||||
OPENSSL_free(l_ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved.
|
||||
# Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved.
|
||||
#
|
||||
# Licensed under the OpenSSL license (the "License"). You may not use
|
||||
# this file except in compliance with the License. You can obtain a copy
|
||||
@@ -232,6 +232,7 @@ BN_F_BN_RSHIFT:146:BN_rshift
|
||||
BN_F_BN_SET_WORDS:144:bn_set_words
|
||||
BN_F_BN_STACK_PUSH:148:BN_STACK_push
|
||||
BN_F_BN_USUB:115:BN_usub
|
||||
BN_F_OSSL_BN_RSA_DO_UNBLIND:151:ossl_bn_rsa_do_unblind
|
||||
BUF_F_BUF_MEM_GROW:100:BUF_MEM_grow
|
||||
BUF_F_BUF_MEM_GROW_CLEAN:105:BUF_MEM_grow_clean
|
||||
BUF_F_BUF_MEM_NEW:101:BUF_MEM_new
|
||||
|
||||
@@ -954,7 +954,9 @@ int PEM_read_bio_ex(BIO *bp, char **name_out, char **header,
|
||||
*data = pem_malloc(len, flags);
|
||||
if (*header == NULL || *data == NULL) {
|
||||
pem_free(*header, flags, 0);
|
||||
*header = NULL;
|
||||
pem_free(*data, flags, 0);
|
||||
*data = NULL;
|
||||
goto end;
|
||||
}
|
||||
BIO_read(headerB, *header, headerlen);
|
||||
|
||||
@@ -465,11 +465,20 @@ static int rsa_ossl_private_decrypt(int flen, const unsigned char *from,
|
||||
BN_free(d);
|
||||
}
|
||||
|
||||
if (blinding)
|
||||
if (!rsa_blinding_invert(blinding, ret, unblind, ctx))
|
||||
if (blinding) {
|
||||
/*
|
||||
* ossl_bn_rsa_do_unblind() combines blinding inversion and
|
||||
* 0-padded BN BE serialization
|
||||
*/
|
||||
j = ossl_bn_rsa_do_unblind(ret, blinding, unblind, rsa->n, ctx,
|
||||
buf, num);
|
||||
if (j == 0)
|
||||
goto err;
|
||||
|
||||
j = BN_bn2binpad(ret, buf, num);
|
||||
} else {
|
||||
j = BN_bn2binpad(ret, buf, num);
|
||||
if (j < 0)
|
||||
goto err;
|
||||
}
|
||||
|
||||
switch (padding) {
|
||||
case RSA_PKCS1_PADDING:
|
||||
|
||||
@@ -98,7 +98,7 @@ int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b)
|
||||
return -1;
|
||||
switch (a->type) {
|
||||
case GEN_X400:
|
||||
result = ASN1_TYPE_cmp(a->d.x400Address, b->d.x400Address);
|
||||
result = ASN1_STRING_cmp(a->d.x400Address, b->d.x400Address);
|
||||
break;
|
||||
|
||||
case GEN_EDIPARTY:
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
=head1 NAME
|
||||
|
||||
BN_add, BN_sub, BN_mul, BN_sqr, BN_div, BN_mod, BN_nnmod, BN_mod_add,
|
||||
BN_mod_sub, BN_mod_mul, BN_mod_sqr, BN_exp, BN_mod_exp, BN_gcd -
|
||||
BN_mod_sub, BN_mod_mul, BN_mod_sqr, BN_mod_sqrt, BN_exp, BN_mod_exp, BN_gcd -
|
||||
arithmetic operations on BIGNUMs
|
||||
|
||||
=head1 SYNOPSIS
|
||||
@@ -36,6 +36,8 @@ arithmetic operations on BIGNUMs
|
||||
|
||||
int BN_mod_sqr(BIGNUM *r, BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);
|
||||
|
||||
BIGNUM *BN_mod_sqrt(BIGNUM *in, BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);
|
||||
|
||||
int BN_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BN_CTX *ctx);
|
||||
|
||||
int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
|
||||
@@ -87,6 +89,12 @@ L<BN_mod_mul_reciprocal(3)>.
|
||||
BN_mod_sqr() takes the square of I<a> modulo B<m> and places the
|
||||
result in I<r>.
|
||||
|
||||
BN_mod_sqrt() returns the modular square root of I<a> such that
|
||||
C<in^2 = a (mod p)>. The modulus I<p> must be a
|
||||
prime, otherwise an error or an incorrect "result" will be returned.
|
||||
The result is stored into I<in> which can be NULL. The result will be
|
||||
newly allocated in that case.
|
||||
|
||||
BN_exp() raises I<a> to the I<p>-th power and places the result in I<r>
|
||||
(C<r=a^p>). This function is faster than repeated applications of
|
||||
BN_mul().
|
||||
@@ -108,7 +116,10 @@ the arguments.
|
||||
|
||||
=head1 RETURN VALUES
|
||||
|
||||
For all functions, 1 is returned for success, 0 on error. The return
|
||||
The BN_mod_sqrt() returns the result (possibly incorrect if I<p> is
|
||||
not a prime), or NULL.
|
||||
|
||||
For all remaining functions, 1 is returned for success, 0 on error. The return
|
||||
value should always be checked (e.g., C<if (!BN_add(r,a,b)) goto err;>).
|
||||
The error codes can be obtained by L<ERR_get_error(3)>.
|
||||
|
||||
|
||||
@@ -86,5 +86,10 @@ int bn_lshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n);
|
||||
int bn_rshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n);
|
||||
int bn_div_fixed_top(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
|
||||
const BIGNUM *d, BN_CTX *ctx);
|
||||
int ossl_bn_rsa_do_unblind(const BIGNUM *intermediate,
|
||||
const BN_BLINDING *blinding,
|
||||
const BIGNUM *possible_arg2,
|
||||
const BIGNUM *to_mod, BN_CTX *ctx,
|
||||
unsigned char *buf, int num);
|
||||
|
||||
#endif
|
||||
@@ -72,6 +72,7 @@ int ERR_load_BN_strings(void);
|
||||
# define BN_F_BN_SET_WORDS 144
|
||||
# define BN_F_BN_STACK_PUSH 148
|
||||
# define BN_F_BN_USUB 115
|
||||
# define BN_F_OSSL_BN_RSA_DO_UNBLIND 151
|
||||
|
||||
/*
|
||||
* BN reason codes.
|
||||
|
||||
Loaded 100 of 152 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user