summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authorbabkin <babkin@FreeBSD.org>2001-01-23 01:17:40 +0000
committerbabkin <babkin@FreeBSD.org>2001-01-23 01:17:40 +0000
commit1a75d1a0c2c2ee5cba6afc98d93e702362ba141f (patch)
tree1e1a358c0e40fcbb8629911e19909ecd6a65ec67 /usr.sbin
parent7e93e9011992d235b1e22839b4c25342284946a5 (diff)
downloadFreeBSD-src-1a75d1a0c2c2ee5cba6afc98d93e702362ba141f.zip
FreeBSD-src-1a75d1a0c2c2ee5cba6afc98d93e702362ba141f.tar.gz
Backed out the DST support changes.
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/cron/cron/cron.835
-rw-r--r--usr.sbin/cron/cron/cron.c142
-rw-r--r--usr.sbin/cron/cron/cron.h3
3 files changed, 7 insertions, 173 deletions
diff --git a/usr.sbin/cron/cron/cron.8 b/usr.sbin/cron/cron/cron.8
index afd618c..12f1a96 100644
--- a/usr.sbin/cron/cron/cron.8
+++ b/usr.sbin/cron/cron/cron.8
@@ -25,7 +25,6 @@
.Nd daemon to execute scheduled commands (Vixie Cron)
.Sh SYNOPSIS
.Nm
-.Op Fl s
.Op Fl x Ar debugflag Ns Op ,...
.Sh DESCRIPTION
.Nm Cron
@@ -69,40 +68,6 @@ need not be restarted whenever a crontab file is modified. Note that the
.Xr crontab 1
command updates the modtime of the spool directory whenever it changes a
crontab.
-.Pp
-Available options:
-.Bl -tag -width indent
-.It Fl s
-Enable special handling of the switching between the standard time and
-daylight saving time.
-.Pp
-If the time zone has daylight saving time which differs by one hour from
-the standard time and the switch to and from daylight saving time occurs
-at :00 minutes (as in most of the world with very few exceptions) then these
-time switches would be handled specially by
-.Nm cron .
-The time zones with other variations of daylight saving time (such as with
-30 minutes difference or switched at :30 minutes etc.) do not have such
-support.
-.Pp
-In the supported time zones the jobs run during the switches to and
-from daylinght saving time as
-intuitively expected. If a job falls
-into a time interval that disappears during the switch from
-standard time to daylight saving time or is
-duplicated during the reverse switch, then it's handled
-in one of two ways. The jobs that run every hour work
-as always, they skip the skipped hour or run in the added
-hour as usual. But the jobs that run less frequently
-are executed exactly once, they are not skipped nor
-executed twice (unless cron is restarted or the user's
-.Xr crontab 5
-is changed during such a time interval). If an hour disappears
-during the switch to daylight saving time, such jobs are
-executed during the next hour at the first minute that is specified
-for them in
-.Xr crontab 5 .
-.El
.Sh SEE ALSO
.Xr crontab 1 ,
.Xr crontab 5
diff --git a/usr.sbin/cron/cron/cron.c b/usr.sbin/cron/cron/cron.c
index f4b990f..e8f8557 100644
--- a/usr.sbin/cron/cron/cron.c
+++ b/usr.sbin/cron/cron/cron.c
@@ -36,22 +36,19 @@ static void usage __P((void)),
run_reboot_jobs __P((cron_db *)),
cron_tick __P((cron_db *)),
cron_sync __P((void)),
- cron_sleep __P((cron_db *)),
- cron_clean __P((cron_db *)),
+ cron_sleep __P((void)),
#ifdef USE_SIGCHLD
sigchld_handler __P((int)),
#endif
sighup_handler __P((int)),
parse_args __P((int c, char *v[]));
-static time_t last_time = 0;
-static int dst_enabled = 0;
static void
usage() {
char **dflags;
- fprintf(stderr, "usage: cron [-s] [-x debugflag[,...]]\n");
+ fprintf(stderr, "usage: cron [-x debugflag[,...]]\n");
fprintf(stderr, "\ndebugflags: ");
for(dflags = DebugFlagNames; *dflags; dflags++) {
@@ -69,6 +66,7 @@ main(argc, argv)
char *argv[];
{
cron_db database;
+
ProgramName = argv[0];
#if defined(BSD)
@@ -129,7 +127,7 @@ main(argc, argv)
# if DEBUGGING
/* if (!(DebugFlags & DTEST)) */
# endif /*DEBUGGING*/
- cron_sleep(&database);
+ cron_sleep();
load_database(&database);
@@ -166,7 +164,6 @@ static void
cron_tick(db)
cron_db *db;
{
- static struct tm lasttm;
register struct tm *tm = localtime(&TargetTime);
register int minute, hour, dom, month, dow;
register user *u;
@@ -183,94 +180,6 @@ cron_tick(db)
Debug(DSCH, ("[%d] tick(%d,%d,%d,%d,%d)\n",
getpid(), minute, hour, dom, month, dow))
- /* check for the daylight saving time change
- * we support only change by +-1 hour happening at :00 minutes,
- * those living in more strange timezones are out of luck
- */
- if (dst_enabled && last_time != 0
- && TargetTime > last_time /* exclude stepping back */
- && tm->tm_isdst != lasttm.tm_isdst ) {
- int prevhr, nexthr, runtime;
- int lastmin, lasthour;
- int trandom, tranmonth, trandow;
- time_t diff; /* time difference in seconds */
-
- lastmin = lasttm.tm_min -FIRST_MINUTE;
- lasthour = lasttm.tm_hour -FIRST_HOUR;
-
- prevhr = (hour + (HOUR_COUNT-1)) % HOUR_COUNT;
- nexthr = (lasthour + 1) % HOUR_COUNT;
-
- if ( lasttm.tm_isdst != 1 && tm->tm_isdst == 1 /* ST->DST */
- && prevhr == nexthr ) {
- diff = ( (hour*MINUTE_COUNT + minute)
- - (lasthour*MINUTE_COUNT + lastmin)
- + HOUR_COUNT*MINUTE_COUNT
- ) % (HOUR_COUNT*MINUTE_COUNT);
- diff -= (TargetTime - last_time) / 60/*seconds*/;
- if (diff != MINUTE_COUNT)
- goto dstdone;
-
- if (hour == 0) {
- trandom = lasttm.tm_mday -FIRST_DOM;
- tranmonth = lasttm.tm_mon +1 /* 0..11 -> 1..12 */ -FIRST_MONTH;
- trandow = lasttm.tm_wday -FIRST_DOW;
- } else {
- trandom = dom;
- tranmonth = month;
- trandow = dow;
- }
-
- for (u = db->head; u != NULL; u = u->next) {
- for (e = u->crontab; e != NULL; e = e->next) {
- /* adjust only jobs less frequent than 1 hr */
- if ( !bit_test(e->hour, prevhr)
- || bit_test(e->hour, lasthour)
- || bit_test(e->hour, hour) )
- continue;
-
- if ( bit_test(e->month, tranmonth)
- && ( ((e->flags & DOM_STAR) || (e->flags & DOW_STAR))
- ? (bit_test(e->dow,trandow) && bit_test(e->dom,trandom))
- : (bit_test(e->dow,trandow) || bit_test(e->dom,trandom)) )
- ) {
- bit_ffs(e->minute, MINUTE_COUNT, &runtime);
- if(runtime >= 0) {
- e->tmval = TargetTime + (runtime-minute)*60;
- e->flags |= RUN_AT;
- e->flags &= ~NOT_UNTIL;
- }
- }
- }
- }
- } else if ( lasttm.tm_isdst == 1 && tm->tm_isdst != 1 /* DST->ST */
- && lasthour == hour ) {
- diff = ( (lasthour*MINUTE_COUNT + lastmin)
- - (hour*MINUTE_COUNT + minute)
- + HOUR_COUNT*MINUTE_COUNT
- ) % (HOUR_COUNT*MINUTE_COUNT);
- diff += (TargetTime - last_time) / 60/*seconds*/;
- if (diff != MINUTE_COUNT)
- goto dstdone;
-
- runtime = TargetTime + (MINUTE_COUNT - minute)*60;
- for (u = db->head; u != NULL; u = u->next) {
- for (e = u->crontab; e != NULL; e = e->next) {
- /* adjust only jobs less frequent than 1 hr */
- if ( !bit_test(e->hour, hour)
- || bit_test(e->hour, prevhr)
- || bit_test(e->hour, nexthr) )
- continue;
-
- e->tmval = runtime;
- e->flags |= NOT_UNTIL;
- e->flags &= ~RUN_AT;
- }
- }
- }
- }
-dstdone:
-
/* the dom/dow situation is odd. '* * 1,15 * Sun' will run on the
* first and fifteenth AND every Sunday; '* * * * Sun' will run *only*
* on Sundays; '* * 1,15 * *' will run *only* the 1st and 15th. this
@@ -282,14 +191,7 @@ dstdone:
Debug(DSCH|DEXT, ("user [%s:%d:%d:...] cmd=\"%s\"\n",
env_get("LOGNAME", e->envp),
e->uid, e->gid, e->cmd))
- if (e->flags & NOT_UNTIL) {
- if (TargetTime >= e->tmval)
- e->flags &= ~NOT_UNTIL;
- else
- continue;
- }
- if ( (e->flags & RUN_AT) && TargetTime == e->tmval
- || bit_test(e->minute, minute)
+ if (bit_test(e->minute, minute)
&& bit_test(e->hour, hour)
&& bit_test(e->month, month)
&& ( ((e->flags & DOM_STAR) || (e->flags & DOW_STAR))
@@ -297,14 +199,10 @@ dstdone:
: (bit_test(e->dow,dow) || bit_test(e->dom,dom))
)
) {
- e->flags &= ~RUN_AT;
job_add(e, u);
}
}
}
-
- last_time = TargetTime;
- lasttm = *tm;
}
@@ -328,9 +226,7 @@ cron_sync() {
static void
-cron_sleep(db)
- cron_db *db;
-{
+cron_sleep() {
int seconds_to_wait = 0;
/*
@@ -345,7 +241,6 @@ cron_sleep(db)
*/
if (seconds_to_wait < -600 || seconds_to_wait > 600) {
- cron_clean(db);
cron_sync();
continue;
}
@@ -370,26 +265,6 @@ cron_sleep(db)
}
-/* if the time was changed abruptly, clear the flags related
- * to the daylight time switch handling to avoid strange effects
- */
-
-static void
-cron_clean(db)
- cron_db *db;
-{
- user *u;
- entry *e;
-
- last_time = 0;
-
- for (u = db->head; u != NULL; u = u->next) {
- for (e = u->crontab; e != NULL; e = e->next) {
- e->flags &= ~(RUN_AT|NOT_UNTIL);
- }
- }
-}
-
#ifdef USE_SIGCHLD
static void
sigchld_handler(x) {
@@ -434,11 +309,8 @@ parse_args(argc, argv)
{
int argch;
- while ((argch = getopt(argc, argv, "sx:")) != -1) {
+ while ((argch = getopt(argc, argv, "x:")) != -1) {
switch (argch) {
- case 's':
- dst_enabled = 1;
- break;
case 'x':
if (!set_debug_flags(optarg))
usage();
diff --git a/usr.sbin/cron/cron/cron.h b/usr.sbin/cron/cron/cron.h
index a5abf53..9d7b8d3 100644
--- a/usr.sbin/cron/cron/cron.h
+++ b/usr.sbin/cron/cron/cron.h
@@ -172,9 +172,6 @@ typedef struct _entry {
#define DOM_STAR 0x01
#define DOW_STAR 0x02
#define WHEN_REBOOT 0x04
-#define RUN_AT 0x08
-#define NOT_UNTIL 0x10
- time_t tmval;
} entry;
/* the crontab database will be a list of the
OpenPOWER on IntegriCloud