From 1bb9306f1e96afe7f53dee98c17ebae4f572be74 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 16 Feb 2026 09:50:46 +0900 Subject: [PATCH 1/3] timesync: rename have_fallbacks -> fallback_set --- src/timesync/test-timesync.c | 4 ++-- src/timesync/timesyncd-conf.c | 4 ++-- src/timesync/timesyncd-manager.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/timesync/test-timesync.c b/src/timesync/test-timesync.c index 7cbdd4060d..5f4ffa5953 100644 --- a/src/timesync/test-timesync.c +++ b/src/timesync/test-timesync.c @@ -15,9 +15,9 @@ TEST(manager_parse_string) { assert_se(manager_new(&m) == 0); - assert_se(!m->have_fallbacks); + assert_se(!m->fallback_set); assert_se(manager_parse_server_string(m, SERVER_FALLBACK, NTP_SERVERS) == 0); - assert_se(m->have_fallbacks); + assert_se(m->fallback_set); assert_se(manager_parse_fallback_string(m, NTP_SERVERS) == 0); assert_se(manager_parse_server_string(m, SERVER_SYSTEM, "time1.foobar.com time2.foobar.com axrfav.,avf..ra 12345..123") == 0); diff --git a/src/timesync/timesyncd-conf.c b/src/timesync/timesyncd-conf.c index 0c7d9f39c1..1ae4156520 100644 --- a/src/timesync/timesyncd-conf.c +++ b/src/timesync/timesyncd-conf.c @@ -20,7 +20,7 @@ int manager_parse_server_string(Manager *m, ServerType type, const char *string) first = type == SERVER_FALLBACK ? m->fallback_servers : m->system_servers; if (type == SERVER_FALLBACK) - m->have_fallbacks = true; + m->fallback_set = true; for (;;) { _cleanup_free_ char *word = NULL; @@ -59,7 +59,7 @@ int manager_parse_server_string(Manager *m, ServerType type, const char *string) } int manager_parse_fallback_string(Manager *m, const char *string) { - if (m->have_fallbacks) + if (m->fallback_set) return 0; return manager_parse_server_string(m, SERVER_FALLBACK, string); diff --git a/src/timesync/timesyncd-manager.h b/src/timesync/timesyncd-manager.h index 252e5164d3..9966b64ac6 100644 --- a/src/timesync/timesyncd-manager.h +++ b/src/timesync/timesyncd-manager.h @@ -33,7 +33,7 @@ typedef struct Manager { RateLimit ratelimit; bool exhausted_servers; - bool have_fallbacks; + bool fallback_set; /* Indicate if FallbackNTP= is explicitly configured. */ /* network */ sd_event_source *network_event_source; From b0ca2ef2649e6d43abbf0fab9910217ca3bd6e84 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 16 Feb 2026 09:51:36 +0900 Subject: [PATCH 2/3] timesync: return earlier when an empty string is specified --- src/timesync/timesyncd-conf.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/timesync/timesyncd-conf.c b/src/timesync/timesyncd-conf.c index 1ae4156520..f0af1f9d43 100644 --- a/src/timesync/timesyncd-conf.c +++ b/src/timesync/timesyncd-conf.c @@ -84,15 +84,16 @@ int config_parse_servers( assert(lvalue); assert(rvalue); - if (isempty(rvalue)) + if (isempty(rvalue)) { manager_flush_server_names(m, ltype); - else { - r = manager_parse_server_string(m, ltype, rvalue); - if (r < 0) { - log_syntax(unit, LOG_WARNING, filename, line, r, - "Failed to parse NTP server string '%s', ignoring: %m", rvalue); - return 0; - } + return 0; + } + + r = manager_parse_server_string(m, ltype, rvalue); + if (r < 0) { + log_syntax(unit, LOG_WARNING, filename, line, r, + "Failed to parse NTP server string '%s', ignoring: %m", rvalue); + return 0; } return 0; From 1b1799e9ba70d5f190d89cef88ea67397db42c2c Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 16 Feb 2026 09:00:42 +0900 Subject: [PATCH 3/3] timesync: actually disables built-in fallback NTP servers when an empty string is specified Follow-up for 3745770ae4dcf262707882a38f6c5ba2684329a3. Fixes #40621. --- src/timesync/timesyncd-conf.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/timesync/timesyncd-conf.c b/src/timesync/timesyncd-conf.c index f0af1f9d43..a273c0af9f 100644 --- a/src/timesync/timesyncd-conf.c +++ b/src/timesync/timesyncd-conf.c @@ -86,6 +86,11 @@ int config_parse_servers( if (isempty(rvalue)) { manager_flush_server_names(m, ltype); + + /* FallbackNTP= with an empty string disables the built-in fallback servers. */ + if (ltype == SERVER_FALLBACK) + m->fallback_set = true; + return 0; }