[Dnsmasq-discuss] [PATCH] Update DNSSEC timestamp file on process TERM

Simon Kelley simon at thekelleys.org.uk
Mon Jul 27 19:36:54 BST 2015


Patch applied.   Many thanks.

Cheers,

Simon.

On 18/07/15 20:51, Kevin Darbyshire-Bryant wrote:
> Patch to update the DNSSEC timestamp file upon receipt of
> SIGTERM.  Helps to ensure the last known good time is noted
> at system shutdown.
> 
> Signed-off-by: Kevin Darbyshire-Bryant <kevin at darbyshire-bryant.me.uk>
> ---
>  src/dnsmasq.c |  9 +++++++++
>  src/dnsmasq.h |  1 +
>  src/dnssec.c  | 11 +++++------
>  3 files changed, 15 insertions(+), 6 deletions(-)
> 
> diffUpdate DNSSEC timestamp file on process TERM --git a/src/dnsmasq.c b/src/dnsmasq.c
> index 514e10b..04d5758 100644
> --- a/src/dnsmasq.c
> +++ b/src/dnsmasq.c
> @@ -1321,6 +1321,15 @@ static void async_event(int pipe, time_t now)
>  	if (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)
>  	  unlink(daemon->runfile);
>  	
> diff --git a/src/dnsmasq.h b/src/dnsmasq.h
> index de146c6..e4035db 100644
> --- a/src/dnsmasq.h
> +++ b/src/dnsmasq.h
> @@ -992,6 +992,7 @@ extern struct daemon {
>  #endif
>  #ifdef HAVE_DNSSEC
>    struct ds_config *ds;
> +  int back_to_the_future;
>    char *timestamp_file;
>  #endif
>  
> diff --git a/src/dnssec.c b/src/dnssec.c
> index 39b6b51..f1adc93 100644
> --- a/src/dnssec.c
> +++ b/src/dnssec.c
> @@ -427,13 +427,12 @@ static int serial_compare_32(unsigned long s1, unsigned long s2)
>  */
>  
>  static time_t timestamp_time;
> -static int back_to_the_future;
>  
>  int setup_timestamp(void)
>  {
>    struct stat statbuf;
>    
> -  back_to_the_future = 0;
> +  daemon->back_to_the_future = 0;
>    
>    if (!daemon->timestamp_file)
>      return 0;
> @@ -447,7 +446,7 @@ int setup_timestamp(void)
>  	  /* time already OK, update timestamp, and do key checking from the start. */
>  	  if (utime(daemon->timestamp_file, NULL) == -1)
>  	    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 1;
> @@ -487,17 +486,17 @@ static int check_date_range(unsigned long date_start, unsigned long date_end)
>       and start checking keys */
>    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)
>  	    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);
>  	  queue_event(EVENT_RELOAD); /* purge cache */
>  	} 
>  
> -      if (back_to_the_future == 0)
> +      if (daemon->back_to_the_future == 0)
>  	return 1;
>      }
>    else if (option_bool(OPT_DNSSEC_TIME))
> 




More information about the Dnsmasq-discuss mailing list