resolved: do not disable mdns/llmnr globally if it's enabled on any link (#36158)
Fixes a regression caused by 2976730a4d.
Fixes #36078.
Fixes #36126.
Replaces #36153.
Replaces #36156.
This commit is contained in:
@@ -14,6 +14,8 @@
|
||||
#include "resolve-util.h"
|
||||
#include "resolved-bus.h"
|
||||
#include "resolved-link-bus.h"
|
||||
#include "resolved-llmnr.h"
|
||||
#include "resolved-mdns.h"
|
||||
#include "resolved-resolv-conf.h"
|
||||
#include "socket-netlink.h"
|
||||
#include "stdio-util.h"
|
||||
@@ -517,6 +519,8 @@ int bus_link_method_set_llmnr(sd_bus_message *message, void *userdata, sd_bus_er
|
||||
|
||||
(void) link_save_user(l);
|
||||
|
||||
manager_llmnr_maybe_stop(l->manager);
|
||||
|
||||
log_link_info(l, "Bus client set LLMNR setting: %s", resolve_support_to_string(mode));
|
||||
}
|
||||
|
||||
@@ -567,6 +571,8 @@ int bus_link_method_set_mdns(sd_bus_message *message, void *userdata, sd_bus_err
|
||||
|
||||
(void) link_save_user(l);
|
||||
|
||||
manager_mdns_maybe_stop(l->manager);
|
||||
|
||||
log_link_info(l, "Bus client set MulticastDNS setting: %s", resolve_support_to_string(mode));
|
||||
}
|
||||
|
||||
@@ -769,6 +775,9 @@ int bus_link_method_revert(sd_bus_message *message, void *userdata, sd_bus_error
|
||||
(void) manager_write_resolv_conf(l->manager);
|
||||
(void) manager_send_changed(l->manager, "DNS");
|
||||
|
||||
manager_llmnr_maybe_stop(l->manager);
|
||||
manager_mdns_maybe_stop(l->manager);
|
||||
|
||||
return sd_bus_reply_method_return(message, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -651,16 +651,13 @@ int link_update(Link *l) {
|
||||
r = manager_llmnr_start(l->manager);
|
||||
if (r < 0)
|
||||
return r;
|
||||
} else
|
||||
manager_llmnr_stop(l->manager);
|
||||
|
||||
}
|
||||
|
||||
if (link_get_mdns_support(l) != RESOLVE_SUPPORT_NO) {
|
||||
r = manager_mdns_start(l->manager);
|
||||
if (r < 0)
|
||||
return r;
|
||||
} else
|
||||
manager_mdns_stop(l->manager);
|
||||
}
|
||||
|
||||
link_allocate_scopes(l);
|
||||
link_add_rrs(l, false);
|
||||
|
||||
@@ -25,6 +25,19 @@ void manager_llmnr_stop(Manager *m) {
|
||||
m->llmnr_ipv6_tcp_fd = safe_close(m->llmnr_ipv6_tcp_fd);
|
||||
}
|
||||
|
||||
void manager_llmnr_maybe_stop(Manager *m) {
|
||||
assert(m);
|
||||
|
||||
/* This stops LLMNR only when no interface enables LLMNR. */
|
||||
|
||||
Link *l;
|
||||
HASHMAP_FOREACH(l, m->links)
|
||||
if (link_get_llmnr_support(l) != RESOLVE_SUPPORT_NO)
|
||||
return;
|
||||
|
||||
manager_llmnr_stop(m);
|
||||
}
|
||||
|
||||
int manager_llmnr_start(Manager *m) {
|
||||
int r;
|
||||
|
||||
|
||||
@@ -11,4 +11,5 @@ int manager_llmnr_ipv4_tcp_fd(Manager *m);
|
||||
int manager_llmnr_ipv6_tcp_fd(Manager *m);
|
||||
|
||||
void manager_llmnr_stop(Manager *m);
|
||||
void manager_llmnr_maybe_stop(Manager *m);
|
||||
int manager_llmnr_start(Manager *m);
|
||||
|
||||
@@ -105,6 +105,9 @@ static int manager_process_link(sd_netlink *rtnl, sd_netlink_message *mm, void *
|
||||
break;
|
||||
}
|
||||
|
||||
/* Now check all the links, and if mDNS/llmr are disabled everywhere, stop them globally too. */
|
||||
manager_llmnr_maybe_stop(m);
|
||||
manager_mdns_maybe_stop(m);
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
@@ -287,6 +290,9 @@ static int on_network_event(sd_event_source *s, int fd, uint32_t revents, void *
|
||||
(void) manager_write_resolv_conf(m);
|
||||
(void) manager_send_changed(m, "DNS");
|
||||
|
||||
/* Now check all the links, and if mDNS/llmr are disabled everywhere, stop them globally too. */
|
||||
manager_llmnr_maybe_stop(m);
|
||||
manager_mdns_maybe_stop(m);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,19 @@ void manager_mdns_stop(Manager *m) {
|
||||
m->mdns_ipv6_fd = safe_close(m->mdns_ipv6_fd);
|
||||
}
|
||||
|
||||
void manager_mdns_maybe_stop(Manager *m) {
|
||||
assert(m);
|
||||
|
||||
/* This stops mDNS only when no interface enables mDNS. */
|
||||
|
||||
Link *l;
|
||||
HASHMAP_FOREACH(l, m->links)
|
||||
if (link_get_mdns_support(l) != RESOLVE_SUPPORT_NO)
|
||||
return;
|
||||
|
||||
manager_mdns_stop(m);
|
||||
}
|
||||
|
||||
int manager_mdns_start(Manager *m) {
|
||||
int r;
|
||||
|
||||
|
||||
@@ -10,4 +10,5 @@ int manager_mdns_ipv4_fd(Manager *m);
|
||||
int manager_mdns_ipv6_fd(Manager *m);
|
||||
|
||||
void manager_mdns_stop(Manager *m);
|
||||
void manager_mdns_maybe_stop(Manager *m);
|
||||
int manager_mdns_start(Manager *m);
|
||||
|
||||
Reference in New Issue
Block a user