From dcb37458cba57e94b8cd37167f25ad5430b83fd5 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 3 Jun 2018 18:54:29 +0900 Subject: [PATCH] timesync: check validity of NTP server name or address --- src/timesync/test-timesync.c | 6 +++--- src/timesync/timesyncd-conf.c | 9 +++++++++ src/timesync/timesyncd-manager.c | 10 ++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/timesync/test-timesync.c b/src/timesync/test-timesync.c index 02fb2b7..2bf484f 100644 --- a/src/timesync/test-timesync.c +++ b/src/timesync/test-timesync.c @@ -24,9 +24,9 @@ static void test_manager_parse_string(void) { assert_se(m->have_fallbacks); 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") == 0); - assert_se(manager_parse_server_string(m, SERVER_FALLBACK, "time1.foobar.com time2.foobar.com") == 0); - assert_se(manager_parse_server_string(m, SERVER_LINK, "time1.foobar.com time2.foobar.com") == 0); + assert_se(manager_parse_server_string(m, SERVER_SYSTEM, "time1.foobar.com time2.foobar.com axrfav.,avf..ra 12345..123") == 0); + assert_se(manager_parse_server_string(m, SERVER_FALLBACK, "time1.foobar.com time2.foobar.com axrfav.,avf..ra 12345..123") == 0); + assert_se(manager_parse_server_string(m, SERVER_LINK, "time1.foobar.com time2.foobar.com axrfav.,avf..ra 12345..123") == 0); } int main(int argc, char **argv) { diff --git a/src/timesync/timesyncd-conf.c b/src/timesync/timesyncd-conf.c index 23ee8f7..506781e 100644 --- a/src/timesync/timesyncd-conf.c +++ b/src/timesync/timesyncd-conf.c @@ -7,6 +7,7 @@ #include "alloc-util.h" #include "def.h" +#include "dns-domain.h" #include "extract-word.h" #include "string-util.h" #include "timesyncd-conf.h" @@ -36,6 +37,14 @@ int manager_parse_server_string(Manager *m, ServerType type, const char *string) if (r == 0) break; + r = dns_name_is_valid_or_address(word); + if (r < 0) + return log_error_errno(r, "Failed to check validity of NTP server name or address '%s': %m", word); + if (r == 0) { + log_error("Invalid NTP server name or address, ignoring: %s", word); + continue; + } + /* Filter out duplicates */ LIST_FOREACH(names, n, first) if (streq_ptr(n->string, word)) { diff --git a/src/timesync/timesyncd-manager.c b/src/timesync/timesyncd-manager.c index 46036c4..2c565aa 100644 --- a/src/timesync/timesyncd-manager.c +++ b/src/timesync/timesyncd-manager.c @@ -20,6 +20,7 @@ #include "sd-daemon.h" #include "alloc-util.h" +#include "dns-domain.h" #include "fd-util.h" #include "fs-util.h" #include "list.h" @@ -968,6 +969,15 @@ static int manager_network_read_link_servers(Manager *m) { STRV_FOREACH(i, ntp) { bool found = false; + r = dns_name_is_valid_or_address(*i); + if (r < 0) { + log_error_errno(r, "Failed to check validity of NTP server name or address '%s': %m", *i); + goto clear; + } else if (r == 0) { + log_error("Invalid NTP server name or address, ignoring: %s", *i); + continue; + } + LIST_FOREACH(names, n, m->link_servers) if (streq(n->string, *i)) { n->marked = false; -- 2.7.4