Skip to content

Commit 0075126

Browse files
authored
Improve expiration handling in luci.c
Refactor expiration logic to handle relative durations (as in dnsmasq with HAVE_BROKEN_RTC). Signed-off-by: nettnikl <niklas.j.nett@disroot.org>
1 parent a7c82c5 commit 0075126

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

libs/rpcd-mod-luci/src/luci.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)