1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 #include "alloc-util.h"
5 #include "dns-domain.h"
6 #include "extract-word.h"
7 #include "string-util.h"
8 #include "timesyncd-conf.h"
9 #include "timesyncd-manager.h"
10 #include "timesyncd-server.h"
12 int manager_parse_server_string(Manager
*m
, ServerType type
, const char *string
) {
19 first
= type
== SERVER_FALLBACK
? m
->fallback_servers
: m
->system_servers
;
21 if (type
== SERVER_FALLBACK
)
22 m
->have_fallbacks
= true;
25 _cleanup_free_
char *word
= NULL
;
29 r
= extract_first_word(&string
, &word
, NULL
, 0);
31 return log_error_errno(r
, "Failed to parse timesyncd server syntax \"%s\": %m", string
);
35 r
= dns_name_is_valid_or_address(word
);
37 return log_error_errno(r
, "Failed to check validity of NTP server name or address '%s': %m", word
);
39 log_error("Invalid NTP server name or address, ignoring: %s", word
);
43 /* Filter out duplicates */
44 LIST_FOREACH(names
, n
, first
)
45 if (streq_ptr(n
->string
, word
)) {
53 r
= server_name_new(m
, NULL
, type
, word
);
61 int manager_parse_fallback_string(Manager
*m
, const char *string
) {
62 if (m
->have_fallbacks
)
65 return manager_parse_server_string(m
, SERVER_FALLBACK
, string
);
68 int config_parse_servers(
73 unsigned section_line
,
80 Manager
*m
= userdata
;
88 manager_flush_server_names(m
, ltype
);
90 r
= manager_parse_server_string(m
, ltype
, rvalue
);
92 log_syntax(unit
, LOG_WARNING
, filename
, line
, r
,
93 "Failed to parse NTP server string '%s', ignoring: %m", rvalue
);
101 int manager_parse_config_file(Manager
*m
) {
106 r
= config_parse_many_nulstr(
107 PKGSYSCONFDIR
"/timesyncd.conf",
108 CONF_PATHS_NULSTR("systemd/timesyncd.conf.d"),
110 config_item_perf_lookup
, timesyncd_gperf_lookup
,
117 if (m
->poll_interval_min_usec
< 16 * USEC_PER_SEC
) {
118 log_warning("Invalid PollIntervalMinSec=. Using default value.");
119 m
->poll_interval_min_usec
= NTP_POLL_INTERVAL_MIN_USEC
;
122 if (m
->poll_interval_max_usec
< m
->poll_interval_min_usec
) {
123 log_warning("PollIntervalMaxSec= is smaller than PollIntervalMinSec=. Using default value.");
124 m
->poll_interval_max_usec
= MAX(NTP_POLL_INTERVAL_MAX_USEC
, m
->poll_interval_min_usec
* 32);