chiark / gitweb /
timesyncd: keep order of NTP servers
[elogind.git] / src / timesync / timesyncd.c
index 33afbce6b38081141de719fb3af50c0f63334131..1c0f113778ecf6982e356f4e1db2064bc74cae4b 100644 (file)
@@ -32,6 +32,7 @@
 #include <sys/timerfd.h>
 #include <sys/timex.h>
 #include <sys/socket.h>
+#include <resolv.h>
 
 #include "missing.h"
 #include "util.h"
@@ -913,6 +914,10 @@ static int manager_connect(Manager *m) {
                         m->current_server_name = m->servers;
                 }
 
+                /* Tell the resolver to reread /etc/resolv.conf, in
+                 * case it changed. */
+                res_init();
+
                 r = sd_resolve_getaddrinfo(m->resolve, &m->resolve_query, m->current_server_name->string, "123", &hints, manager_resolve_handler, m);
                 if (r < 0) {
                         log_error("Failed to create resolver: %s", strerror(-r));
@@ -930,7 +935,7 @@ static int manager_connect(Manager *m) {
 }
 
 static int manager_add_server(Manager *m, const char *server) {
-        ServerName *n;
+        ServerName *n, *tail;
 
         assert(m);
         assert(server);
@@ -945,7 +950,12 @@ static int manager_add_server(Manager *m, const char *server) {
                 return -ENOMEM;
         }
 
-        LIST_PREPEND(names, m->servers, n);
+        if (m->servers) {
+                LIST_FIND_TAIL(names, m->servers, tail);
+                LIST_INSERT_AFTER(names, m->servers, tail, n);
+        } else
+                LIST_PREPEND(names, m->servers, n);
+
         return 0;
 }