]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
timesyncd: don't use compiled-in list if FallbackNTP has been configured explicitly
authorMichael Biebl <biebl@debian.org>
Sun, 21 May 2017 01:22:43 +0000 (03:22 +0200)
committerMichael Biebl <biebl@debian.org>
Wed, 24 May 2017 15:45:46 +0000 (17:45 +0200)
Parse the config files first and only apply the compiled-in list of
fallback servers if no NTP server was configured via FallbackNTP.

Closes: #5091
src/timesync/timesyncd-conf.c
src/timesync/timesyncd-conf.h
src/timesync/timesyncd-manager.c
src/timesync/timesyncd-manager.h
src/timesync/timesyncd.c

index 99bdb55e986f403b5c4b9d80a609431f392a647b..f394d0a2af615888d13898e6f071061937e75d58 100644 (file)
@@ -34,6 +34,9 @@ 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;
+
         for (;;) {
                 _cleanup_free_ char *word = NULL;
                 bool found = false;
@@ -63,6 +66,13 @@ int manager_parse_server_string(Manager *m, ServerType type, const char *string)
         return 0;
 }
 
+int manager_parse_fallback_string(Manager *m, const char *string) {
+        if (m->have_fallbacks)
+                return 0;
+
+        return manager_parse_server_string(m, SERVER_FALLBACK, string);
+}
+
 int config_parse_servers(
                 const char *unit,
                 const char *filename,
index 0280697e9cc8ef3a986d4af9d93a492747071b63..0c4b44e707cf754f37841a497845c7f0d39a9125 100644 (file)
@@ -29,3 +29,4 @@ int manager_parse_server_string(Manager *m, ServerType type, const char *string)
 int config_parse_servers(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
 
 int manager_parse_config_file(Manager *m);
+int manager_parse_fallback_string(Manager *m, const char *string);
index ae8514550aa990a34f10d67f88d3351d7fb8610f..a24c821bdcbe66684ad62c0eb01e2ce6319b288c 100644 (file)
@@ -1124,10 +1124,6 @@ int manager_new(Manager **ret) {
 
         RATELIMIT_INIT(m->ratelimit, RATELIMIT_INTERVAL_USEC, RATELIMIT_BURST);
 
-        r = manager_parse_server_string(m, SERVER_FALLBACK, NTP_SERVERS);
-        if (r < 0)
-                return r;
-
         r = sd_event_default(&m->event);
         if (r < 0)
                 return r;
index efe3e60d3e4ef694d4b556ce977470b71b7ee24e..cf681f6098718f2a89c57c027b3e178351b2c9e1 100644 (file)
@@ -38,6 +38,8 @@ struct Manager {
         LIST_HEAD(ServerName, link_servers);
         LIST_HEAD(ServerName, fallback_servers);
 
+        bool have_fallbacks:1;
+
         RateLimit ratelimit;
         bool exhausted_servers;
 
index b67d672a6ade4c15384888bf0768994df4a28667..052329f61e91db655c4f5614b13a98f5fbca9094 100644 (file)
@@ -132,6 +132,8 @@ int main(int argc, char *argv[]) {
         if (r < 0)
                 log_warning_errno(r, "Failed to parse configuration file: %m");
 
+        assert_se(manager_parse_fallback_string(m, NTP_SERVERS) >= 0);
+
         log_debug("systemd-timesyncd running as pid " PID_FMT, getpid());
         sd_notify(false,
                   "READY=1\n"