chiark / gitweb /
remove unused includes
[elogind.git] / src / timesync / timesyncd-conf.c
index 5ec907bb41d2c100b669cfb51ddf87114cf55823..df4d89a62048c94a69a04657aa448066d036b815 100644 (file)
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
+
 #include "timesyncd-manager.h"
+#include "timesyncd-server.h"
 #include "timesyncd-conf.h"
 
+int manager_parse_server_string(Manager *m, ServerType type, const char *string) {
+        const char *word, *state;
+        size_t length;
+        ServerName *first;
+        int r;
+
+        assert(m);
+        assert(string);
+
+        first = type == SERVER_FALLBACK ? m->fallback_servers : m->system_servers;
+
+        FOREACH_WORD_QUOTED(word, length, string, state) {
+                char buffer[length+1];
+                bool found = false;
+                ServerName *n;
+
+                memcpy(buffer, word, length);
+                buffer[length] = 0;
+
+                /* Filter out duplicates */
+                LIST_FOREACH(names, n, first)
+                        if (streq_ptr(n->string, buffer)) {
+                                found = true;
+                                break;
+                        }
+
+                if (found)
+                        continue;
+
+                r = server_name_new(m, NULL, type, buffer);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 int config_parse_servers(
                 const char *unit,
                 const char *filename,
@@ -35,15 +74,31 @@ int config_parse_servers(
                 void *userdata) {
 
         Manager *m = userdata;
+        int r;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
 
         if (isempty(rvalue))
-                manager_flush_names(m);
-
-        manager_add_server_string(m, rvalue);
+                manager_flush_server_names(m, ltype);
+        else {
+                r = manager_parse_server_string(m, ltype, rvalue);
+                if (r < 0) {
+                        log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to parse NTP server string '%s'. Ignoring.", rvalue);
+                        return 0;
+                }
+        }
 
         return 0;
 }
+
+int manager_parse_config_file(Manager *m) {
+        assert(m);
+
+        return config_parse_many("/etc/systemd/timesyncd.conf",
+                                 CONF_DIRS_NULSTR("systemd/timesyncd.conf"),
+                                 "Time\0",
+                                 config_item_perf_lookup, timesyncd_gperf_lookup,
+                                 false, m);
+}