diff --git a/src/netconfig.c b/src/netconfig.c index e6779d7c..6e82add3 100644 --- a/src/netconfig.c +++ b/src/netconfig.c @@ -56,6 +56,7 @@ */ static uint32_t ROUTE_PRIORITY_OFFSET; static bool ipv6_enabled; +static char *mdns_global; static void do_debug(const char *str, void *user_data) { @@ -396,19 +397,36 @@ send_hostname: } mdns: - if (l_settings_has_key(active_settings, "Network", "MulticastDNS") && - !(mdns = l_settings_get_string(active_settings, - "Network", - "MulticastDNS"))) { - l_error("netconfig: Can't load Network.MulticastDNS"); - success = false; + /* If the networks has this set take that over the global */ + if (l_settings_has_key(active_settings, "Network", "MulticastDNS")) { + mdns = l_settings_get_string(active_settings, "Network", + "MulticastDNS"); + if (!mdns) { + l_error("netconfig: Can't load Network.MulticastDNS"); + success = false; + } + + if (mdns && !L_IN_STRSET(mdns, "true", "false", "resolve")) { + l_error("netconfig: Bad profile Network.MulticastDNS " + "value '%s'", mdns); + success = false; + } + + if (!success) + goto check_config; } - if (mdns && !L_IN_STRSET(mdns, "true", "false", "resolve")) { - l_error("netconfig: Bad Network.MulticastDNS value '%s'", mdns); - success = false; + if (!mdns && mdns_global) { + mdns = l_strdup(mdns_global); + + if (!L_IN_STRSET(mdns, "true", "false", "resolve")) { + l_error("netconfig: Bad global Network.MulticastDNS " + "value '%s'", mdns); + success = false; + } } +check_config: if (!l_netconfig_check_config(netconfig->nc)) { l_error("netconfig: Invalid configuration"); success = false; @@ -753,11 +771,15 @@ static int netconfig_init(void) &ipv6_enabled)) ipv6_enabled = false; + mdns_global = l_settings_get_string(iwd_get_config(), "Network", + "MulticastDNS"); + return 0; } static void netconfig_exit(void) { + l_free(mdns_global); } IWD_MODULE(netconfig, netconfig_init, netconfig_exit)