+ groups = g_key_file_get_groups(f, NULL);
+
+ for (g = groups; *g; g++) {
+ if (g_strcasecmp(*g, "server") == 0) {
+ gchar **k;
+
+ keys = g_key_file_get_keys(f, *g, NULL, NULL);
+
+ for (k = keys; *k; k++) {
+
+ v = g_key_file_get_value(f, *g, *k, NULL);
+
+ if (g_strcasecmp(*k, "host-name") == 0) {
+ g_free(config->server_config.host_name);
+ config->server_config.host_name = v;
+ v = NULL;
+ } else if (g_strcasecmp(*k, "domain-name") == 0) {
+ g_free(config->server_config.domain_name);
+ config->server_config.domain_name = v;
+ v = NULL;
+ } else if (g_strcasecmp(*k, "use-ipv4") == 0)
+ config->server_config.use_ipv4 = is_yes(v);
+ else if (g_strcasecmp(*k, "use-ipv6") == 0)
+ config->server_config.use_ipv6 = is_yes(v);
+ else if (g_strcasecmp(*k, "check-response-ttl") == 0)
+ config->server_config.check_response_ttl = is_yes(v);
+ else if (g_strcasecmp(*k, "use-iff-running") == 0)
+ config->server_config.use_iff_running = is_yes(v);
+ else if (g_strcasecmp(*k, "enable-dbus") == 0)
+ config->enable_dbus = is_yes(v);
+ else if (g_strcasecmp(*k, "drop-root") == 0)
+ config->drop_root = is_yes(v);
+ else {
+ fprintf(stderr, "Invalid configuration key \"%s\" in group \"%s\"\n", *k, *g);
+ goto finish;
+ }
+
+ g_free(v);
+ v = NULL;
+ }
+
+ g_strfreev(keys);
+ keys = NULL;
+
+ } else if (g_strcasecmp(*g, "publish") == 0) {
+ gchar **k;
+
+ keys = g_key_file_get_keys(f, *g, NULL, NULL);
+
+ for (k = keys; *k; k++) {
+
+ v = g_key_file_get_string(f, *g, *k, NULL);
+
+ if (g_strcasecmp(*k, "publish-addresses") == 0)
+ config->server_config.publish_addresses = is_yes(v);
+ else if (g_strcasecmp(*k, "publish-hinfo") == 0)
+ config->server_config.publish_hinfo = is_yes(v);
+ else if (g_strcasecmp(*k, "publish-workstation") == 0)
+ config->server_config.publish_workstation = is_yes(v);
+ else if (g_strcasecmp(*k, "publish-domain") == 0)
+ config->server_config.publish_domain = is_yes(v);
+ else if (g_strcasecmp(*k, "publish-resolv-conf-dns-servers") == 0)
+ config->publish_resolv_conf = is_yes(v);
+ else if (g_strcasecmp(*k, "publish-dns-servers") == 0) {
+ g_strfreev(config->publish_dns_servers);
+ config->publish_dns_servers = g_key_file_get_string_list(f, *g, *k, NULL, NULL);
+ } else {
+ fprintf(stderr, "Invalid configuration key \"%s\" in group \"%s\"\n", *k, *g);
+ goto finish;
+ }
+
+ g_free(v);
+ v = NULL;
+ }
+
+ g_strfreev(keys);
+ keys = NULL;
+
+ } else if (g_strcasecmp(*g, "reflector") == 0) {
+ gchar **k;
+
+ keys = g_key_file_get_keys(f, *g, NULL, NULL);
+
+ for (k = keys; *k; k++) {
+
+ v = g_key_file_get_string(f, *g, *k, NULL);
+
+ if (g_strcasecmp(*k, "enable-reflector") == 0)
+ config->server_config.enable_reflector = is_yes(v);
+ else if (g_strcasecmp(*k, "reflect-ipv") == 0)
+ config->server_config.reflect_ipv = is_yes(v);
+ else {
+ fprintf(stderr, "Invalid configuration key \"%s\" in group \"%s\"\n", *k, *g);
+ goto finish;
+ }
+
+ g_free(v);
+ v = NULL;
+ }
+
+ g_strfreev(keys);
+ keys = NULL;
+
+ } else {
+ fprintf(stderr, "Invalid configuration file group \"%s\".\n", *g);
+ goto finish;
+ }
+ }