resolved: log when a bus client changes per-link DNS info

Fixes: #16298
This commit is contained in:
Lennart Poettering 2020-11-05 18:45:46 +01:00 committed by Yu Watanabe
parent 4cbd28af60
commit 0b261ac5be
1 changed files with 61 additions and 0 deletions

View File

@ -9,6 +9,7 @@
#include "bus-get-properties.h"
#include "bus-message-util.h"
#include "bus-polkit.h"
#include "log-link.h"
#include "parse-util.h"
#include "resolve-util.h"
#include "resolved-bus.h"
@ -252,6 +253,7 @@ static int verify_unmanaged_link(Link *l, sd_bus_error *error) {
}
static int bus_link_method_set_dns_servers_internal(sd_bus_message *message, void *userdata, sd_bus_error *error, bool extended) {
_cleanup_free_ char *j = NULL;
struct in_addr_full **dns;
Link *l = userdata;
size_t n;
@ -279,6 +281,21 @@ static int bus_link_method_set_dns_servers_internal(sd_bus_message *message, voi
goto finalize;
}
for (size_t i = 0; i < n; i++) {
const char *s;
s = in_addr_full_to_string(dns[i]);
if (!s) {
r = -ENOMEM;
goto finalize;
}
if (!strextend_with_separator(&j, ", ", s, NULL)) {
r = -ENOMEM;
goto finalize;
}
}
dns_server_mark_all(l->dns_servers);
for (size_t i = 0; i < n; i++) {
@ -304,6 +321,11 @@ static int bus_link_method_set_dns_servers_internal(sd_bus_message *message, voi
(void) manager_write_resolv_conf(l->manager);
(void) manager_send_changed(l->manager, "DNS");
if (j)
log_link_info(l, "Bus client set DNS server list to: %s", j);
else
log_link_info(l, "Bus client reset DNS server list.");
r = sd_bus_reply_method_return(message, NULL);
finalize:
@ -323,6 +345,7 @@ int bus_link_method_set_dns_servers_ex(sd_bus_message *message, void *userdata,
}
int bus_link_method_set_domains(sd_bus_message *message, void *userdata, sd_bus_error *error) {
_cleanup_free_ char *j = NULL;
Link *l = userdata;
int r;
@ -338,6 +361,7 @@ int bus_link_method_set_domains(sd_bus_message *message, void *userdata, sd_bus_
return r;
for (;;) {
_cleanup_free_ char *prefixed = NULL;
const char *name;
int route_only;
@ -354,6 +378,17 @@ int bus_link_method_set_domains(sd_bus_message *message, void *userdata, sd_bus_
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid search domain %s", name);
if (!route_only && dns_name_is_root(name))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Root domain is not suitable as search domain");
if (route_only) {
prefixed = strjoin("~", name);
if (!prefixed)
return -ENOMEM;
name = prefixed;
}
if (!strextend_with_separator(&j, ", ", name, NULL))
return -ENOMEM;
}
r = sd_bus_message_rewind(message, false);
@ -406,6 +441,11 @@ int bus_link_method_set_domains(sd_bus_message *message, void *userdata, sd_bus_
(void) link_save_user(l);
(void) manager_write_resolv_conf(l->manager);
if (j)
log_link_info(l, "Bus client set search domain list to: %s", j);
else
log_link_info(l, "Bus client reset search domain list.");
return sd_bus_reply_method_return(message, NULL);
clear:
@ -444,6 +484,8 @@ int bus_link_method_set_default_route(sd_bus_message *message, void *userdata, s
(void) manager_write_resolv_conf(l->manager);
}
log_link_info(l, "Bus client set default route setting: %s", yes_no(b));
return sd_bus_reply_method_return(message, NULL);
}
@ -487,6 +529,8 @@ int bus_link_method_set_llmnr(sd_bus_message *message, void *userdata, sd_bus_er
(void) link_save_user(l);
log_link_info(l, "Bus client set LLMNR setting: %s", resolve_support_to_string(mode));
return sd_bus_reply_method_return(message, NULL);
}
@ -530,6 +574,8 @@ int bus_link_method_set_mdns(sd_bus_message *message, void *userdata, sd_bus_err
(void) link_save_user(l);
log_link_info(l, "Bus client set MulticastDNS setting: %s", resolve_support_to_string(mode));
return sd_bus_reply_method_return(message, NULL);
}
@ -571,6 +617,9 @@ int bus_link_method_set_dns_over_tls(sd_bus_message *message, void *userdata, sd
(void) link_save_user(l);
log_link_info(l, "Bus client set DNSOverTLS setting: %s",
mode < 0 ? "default" : dns_over_tls_mode_to_string(mode));
return sd_bus_reply_method_return(message, NULL);
}
@ -612,12 +661,16 @@ int bus_link_method_set_dnssec(sd_bus_message *message, void *userdata, sd_bus_e
(void) link_save_user(l);
log_link_info(l, "Bus client set DNSSEC setting: %s",
mode < 0 ? "default" : dnssec_mode_to_string(mode));
return sd_bus_reply_method_return(message, NULL);
}
int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, void *userdata, sd_bus_error *error) {
_cleanup_set_free_free_ Set *ns = NULL;
_cleanup_strv_free_ char **ntas = NULL;
_cleanup_free_ char *j = NULL;
Link *l = userdata;
int r;
char **i;
@ -648,6 +701,9 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v
r = set_put_strdup(&ns, *i);
if (r < 0)
return r;
if (!strextend_with_separator(&j, ", ", *i, NULL))
return -ENOMEM;
}
r = bus_verify_polkit_async(message, CAP_NET_ADMIN,
@ -664,6 +720,11 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v
(void) link_save_user(l);
if (j)
log_link_info(l, "Bus client set NTA list to: %s", j);
else
log_link_info(l, "Bus client reset NTA list.");
return sd_bus_reply_method_return(message, NULL);
}