X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Ftimesync%2Ftimesyncd.c;h=fa9671da1dfd9c3b9558679049b8543fa1bde741;hb=376cd3b89c62f580a6f576cecfbbb28d3944118f;hp=26d26b0d6d30b8414f3bcc0ffa4b11f56b79fbda;hpb=becad8f1ed696433b9841cbb9c4603c303338d30;p=elogind.git diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c index 26d26b0d6..fa9671da1 100644 --- a/src/timesync/timesyncd.c +++ b/src/timesync/timesyncd.c @@ -32,6 +32,7 @@ #include #include #include +#include #include "missing.h" #include "util.h" @@ -40,6 +41,7 @@ #include "socket-util.h" #include "list.h" #include "ratelimit.h" +#include "strv.h" #include "sd-event.h" #include "sd-resolve.h" #include "sd-daemon.h" @@ -333,7 +335,7 @@ static int manager_clock_watch_setup(Manager *m) { assert(m); m->event_clock_watch = sd_event_source_unref(m->event_clock_watch); - m->clock_watch_fd = safe_close(m->clock_watch_fd); + safe_close(m->clock_watch_fd); m->clock_watch_fd = timerfd_create(CLOCK_REALTIME, TFD_NONBLOCK|TFD_CLOEXEC); if (m->clock_watch_fd < 0) { @@ -613,7 +615,7 @@ static int manager_receive_response(sd_event_source *source, int fd, uint32_t re return manager_connect(m); } - if (NTP_FIELD_VERSION(ntpmsg.field) != 4) { + if (NTP_FIELD_VERSION(ntpmsg.field) != 4 && NTP_FIELD_VERSION(ntpmsg.field) != 3) { log_debug("Response NTPv%d. Disconnecting.", NTP_FIELD_VERSION(ntpmsg.field)); return manager_connect(m); } @@ -912,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)); @@ -929,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); @@ -944,7 +950,9 @@ static int manager_add_server(Manager *m, const char *server) { return -ENOMEM; } - LIST_PREPEND(names, m->servers, n); + LIST_FIND_TAIL(names, m->servers, tail); + LIST_INSERT_AFTER(names, m->servers, tail, n); + return 0; } @@ -1019,6 +1027,7 @@ static void manager_free(Manager *m) { int main(int argc, char *argv[]) { _cleanup_manager_free_ Manager *m = NULL; + const char *x; int r; log_set_target(LOG_TARGET_AUTO); @@ -1035,10 +1044,12 @@ int main(int argc, char *argv[]) { sd_notify(false, "READY=1"); - r = manager_add_server(m, "time1.google.com"); - if (r < 0) { - log_error("Failed to add server: %s", strerror(-r)); - goto out; + FOREACH_STRING(x, "time1.google.com", "time2.google.com", "time3.google.com", "time4.google.com", "0.fedora.pool.ntp.org") { + r = manager_add_server(m, x); + if (r < 0) { + log_error("Failed to add server %s: %s", x, strerror(-r)); + goto out; + } } r = manager_connect(m);