Commit 34b5d194 authored by Kevin Darbyshire-Bryant's avatar Kevin Darbyshire-Bryant Committed by Simon Kelley

Update DNSSEC timestamp file on process TERM.

parent d6cb7e48
...@@ -1321,6 +1321,15 @@ static void async_event(int pipe, time_t now) ...@@ -1321,6 +1321,15 @@ static void async_event(int pipe, time_t now)
if (daemon->lease_stream) if (daemon->lease_stream)
fclose(daemon->lease_stream); fclose(daemon->lease_stream);
#ifdef HAVE_DNSSEC
/* update timestamp file on TERM if time is considered valid */
if (daemon->back_to_the_future)
{
if (utime(daemon->timestamp_file, NULL) == -1)
my_syslog(LOG_ERR, _("failed to update mtime on %s: %s"), daemon->timestamp_file, strerror(errno));
}
#endif
if (daemon->runfile) if (daemon->runfile)
unlink(daemon->runfile); unlink(daemon->runfile);
......
...@@ -992,6 +992,7 @@ extern struct daemon { ...@@ -992,6 +992,7 @@ extern struct daemon {
#endif #endif
#ifdef HAVE_DNSSEC #ifdef HAVE_DNSSEC
struct ds_config *ds; struct ds_config *ds;
int back_to_the_future;
char *timestamp_file; char *timestamp_file;
#endif #endif
......
...@@ -427,13 +427,12 @@ static int serial_compare_32(unsigned long s1, unsigned long s2) ...@@ -427,13 +427,12 @@ static int serial_compare_32(unsigned long s1, unsigned long s2)
*/ */
static time_t timestamp_time; static time_t timestamp_time;
static int back_to_the_future;
int setup_timestamp(void) int setup_timestamp(void)
{ {
struct stat statbuf; struct stat statbuf;
back_to_the_future = 0; daemon->back_to_the_future = 0;
if (!daemon->timestamp_file) if (!daemon->timestamp_file)
return 0; return 0;
...@@ -447,7 +446,7 @@ int setup_timestamp(void) ...@@ -447,7 +446,7 @@ int setup_timestamp(void)
/* time already OK, update timestamp, and do key checking from the start. */ /* time already OK, update timestamp, and do key checking from the start. */
if (utime(daemon->timestamp_file, NULL) == -1) if (utime(daemon->timestamp_file, NULL) == -1)
my_syslog(LOG_ERR, _("failed to update mtime on %s: %s"), daemon->timestamp_file, strerror(errno)); my_syslog(LOG_ERR, _("failed to update mtime on %s: %s"), daemon->timestamp_file, strerror(errno));
back_to_the_future = 1; daemon->back_to_the_future = 1;
return 0; return 0;
} }
return 1; return 1;
...@@ -487,17 +486,17 @@ static int check_date_range(unsigned long date_start, unsigned long date_end) ...@@ -487,17 +486,17 @@ static int check_date_range(unsigned long date_start, unsigned long date_end)
and start checking keys */ and start checking keys */
if (daemon->timestamp_file) if (daemon->timestamp_file)
{ {
if (back_to_the_future == 0 && difftime(timestamp_time, curtime) <= 0) if (daemon->back_to_the_future == 0 && difftime(timestamp_time, curtime) <= 0)
{ {
if (utime(daemon->timestamp_file, NULL) != 0) if (utime(daemon->timestamp_file, NULL) != 0)
my_syslog(LOG_ERR, _("failed to update mtime on %s: %s"), daemon->timestamp_file, strerror(errno)); my_syslog(LOG_ERR, _("failed to update mtime on %s: %s"), daemon->timestamp_file, strerror(errno));
back_to_the_future = 1; daemon->back_to_the_future = 1;
set_option_bool(OPT_DNSSEC_TIME); set_option_bool(OPT_DNSSEC_TIME);
queue_event(EVENT_RELOAD); /* purge cache */ queue_event(EVENT_RELOAD); /* purge cache */
} }
if (back_to_the_future == 0) if (daemon->back_to_the_future == 0)
return 1; return 1;
} }
else if (option_bool(OPT_DNSSEC_TIME)) else if (option_bool(OPT_DNSSEC_TIME))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment