File tree Expand file tree Collapse file tree 1 file changed +18
-6
lines changed
Expand file tree Collapse file tree 1 file changed +18
-6
lines changed Original file line number Diff line number Diff line change @@ -523,12 +523,24 @@ lease_next(void)
523523 continue ;
524524
525525 n = strtol (p , NULL , 10 );
526- if (n > lease_state .now )
527- e .expire = n - lease_state .now ;
528- else if (n >= 0 )
529- e .expire = 0 ;
530- else
531- e .expire = -1 ;
526+ if (n < 0 ) {
527+ e .expire = -1 ; // unlimited
528+ } else {
529+ // If n looks like a relative duration (< ~3 years in seconds), treat as relative
530+ // This happens if dnsmasq has the HAVE_BROKEN_RTC flag set
531+ int relative_expire = (n > 0 && n < 100000000 );
532+
533+ if (relative_expire ) {
534+ // n is a relative duration in seconds
535+ e .expire = n ; // already relative, pass through as-is
536+ } else {
537+ // n is an absolute timestamp
538+ if (n > lease_state .now )
539+ e .expire = n - lease_state .now ;
540+ else if (n >= 0 )
541+ e .expire = 0 ; // expired, cap at 0
542+ }
543+ }
532544
533545 strtok (NULL , " \t\n" ); /* id */
534546
You can’t perform that action at this time.
0 commit comments