Package: cron
Version: 3.0pl1-137
Severity: normal
Tags: patch
X-Debbugs-Cc: [email protected]
Dear Maintainer,
Please see the writeup for this bug at:
https://gist.github.com/stephanGarland/b7cdd963e0ac53ea42f8ed15e35b193d
In short, if the timezone for a system is changed while cron is running,
and the timezone change is _not_ due to a DST event, cron is unaware of
the change and will continue using the old `GMToff` value until it is
restarted.
While this seems like a bizarre edge case, and it is, it happened to me
via moving, booting up my server rack, realizing the timezone needed to
be modified, and then not restarting the server. I noticed afterwards
that a daily cronjob I have ran one hour late.
The supplied patch fixes this, although I am cognizant of the fact that
this may be intended behavior. I'm willing to modify it to include an
optional flag (default: false) to set this behavior.
-- Package-specific info:
--- EDITOR:
--- /usr/bin/editor:
/usr/bin/nvim
--- /usr/bin/crontab:
-rwxr-sr-x 1 root crontab 43568 Feb 22 2021 /usr/bin/crontab
--- /var/spool/cron:
drwxr-xr-x 3 root root 4096 Dec 23 2021 /var/spool/cron
--- /var/spool/cron/crontabs:
drwx-wx--T 2 root crontab 4096 Sep 11 15:53 /var/spool/cron/crontabs
--- /etc/cron.d:
drwxr-xr-x 2 root root 4096 Sep 11 21:13 /etc/cron.d
--- /etc/cron.daily:
drwxr-xr-x 2 root root 4096 Sep 11 06:34 /etc/cron.daily
--- /etc/cron.hourly:
drwxr-xr-x 2 root root 4096 Dec 23 2021 /etc/cron.hourly
--- /etc/cron.monthly:
drwxr-xr-x 2 root root 4096 Dec 23 2021 /etc/cron.monthly
--- /etc/cron.weekly:
drwxr-xr-x 2 root root 4096 Dec 23 2021 /etc/cron.weekly
-- System Information:
Debian Release: 11.5
APT prefers stable
APT policy: (700, 'stable'), (650, 'testing'), (600, 'unstable'), (500,
'stable-updates'), (500, 'stable-security')
Architecture: amd64 (x86_64)
Kernel: Linux 5.10.0-16-amd64 (SMP w/8 CPU threads)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages cron depends on:
ii adduser 3.118
ii debianutils 4.11.2
ii init-system-helpers 1.60
ii libc6 2.31-13+deb11u4
ii libpam-runtime 1.4.0-9+deb11u1
ii libpam0g 1.4.0-9+deb11u1
ii libselinux1 3.1-3
ii lsb-base 11.1.0
ii sensible-utils 0.0.14
Versions of packages cron recommends:
pn default-mta | mail-transport-agent <none>
Versions of packages cron suggests:
pn anacron <none>
pn checksecurity <none>
ii logrotate 3.18.0-2+deb11u1
Versions of packages cron is related to:
pn libnss-ldap <none>
pn libnss-ldapd <none>
pn libpam-ldap <none>
pn libpam-mount <none>
pn nis <none>
pn nscd <none>
-- no debconf information
diff --git a/cron.c b/cron.c
index 613e7bf..7b0b69c 100644
--- a/cron.c
+++ b/cron.c
@@ -372,9 +372,9 @@ set_time(int initialize)
/* We adjust the time to GMT so we can catch DST changes. */
tm = *localtime(&StartTime);
+ GMToff = get_gmtoff(&StartTime, &tm);
if (initialize || tm.tm_isdst != isdst) {
isdst = tm.tm_isdst;
- GMToff = get_gmtoff(&StartTime, &tm);
Debug(DSCH, ("[%d] GMToff=%ld\n",
getpid(), (long)GMToff))
}