summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2020-11-09 22:20:16 +0100
committerLennart Poettering <lennart@poettering.net>2021-02-16 13:42:49 +0100
commit1e69eaddf8e39d96def9bec6c9bf0ba6c62e2b64 (patch)
tree2a43e41bf16589dc9bc8d66fabd40752b60e4d4c
parentMerge pull request #18617 from poettering/resolved-confidential (diff)
downloadsystemd-1e69eaddf8e39d96def9bec6c9bf0ba6c62e2b64.tar.xz
systemd-1e69eaddf8e39d96def9bec6c9bf0ba6c62e2b64.zip
resolved: log process info of clients requesting resolution via D-Bus
Let's make things more debuggable: when debug logging is on, let's say which client is asking for our services. This is helpful for easily figuring out which local process might interfere with your debugging sessions by issuing additional requests while you try to debug a request (I am looking at you, geoclue!).
-rw-r--r--src/resolve/resolved-bus.c40
-rw-r--r--src/resolve/resolved-bus.h2
-rw-r--r--src/resolve/resolved-link-bus.c18
3 files changed, 60 insertions, 0 deletions
diff --git a/src/resolve/resolved-bus.c b/src/resolve/resolved-bus.c
index 71374a19ad..032ed0256b 100644
--- a/src/resolve/resolved-bus.c
+++ b/src/resolve/resolved-bus.c
@@ -7,6 +7,7 @@
#include "bus-message-util.h"
#include "bus-polkit.h"
#include "dns-domain.h"
+#include "format-util.h"
#include "memory-util.h"
#include "missing_capability.h"
#include "resolved-bus.h"
@@ -375,6 +376,31 @@ static int parse_as_address(sd_bus_message *m, int ifindex, const char *hostname
return sd_bus_send(sd_bus_message_get_bus(m), reply, NULL);
}
+void bus_client_log(sd_bus_message *m, const char *what) {
+ _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
+ const char *comm = NULL;
+ uid_t uid = UID_INVALID;
+ pid_t pid = 0;
+ int r;
+
+ assert(m);
+ assert(what);
+
+ if (!DEBUG_LOGGING)
+ return;
+
+ r = sd_bus_query_sender_creds(m, SD_BUS_CREDS_PID|SD_BUS_CREDS_UID|SD_BUS_CREDS_COMM|SD_BUS_CREDS_AUGMENT, &creds);
+ if (r < 0)
+ return (void) log_debug_errno(r, "Failed to query client credentials, ignoring: %m");
+
+ (void) sd_bus_creds_get_uid(creds, &uid);
+ (void) sd_bus_creds_get_pid(creds, &pid);
+ (void) sd_bus_creds_get_comm(creds, &comm);
+
+ log_debug("D-Bus %s request from client PID " PID_FMT " (%s) with UID " UID_FMT,
+ what, pid, strna(comm), uid);
+}
+
static int bus_method_resolve_hostname(sd_bus_message *message, void *userdata, sd_bus_error *error) {
_cleanup_(dns_question_unrefp) DnsQuestion *question_idna = NULL, *question_utf8 = NULL;
Manager *m = userdata;
@@ -421,6 +447,8 @@ static int bus_method_resolve_hostname(sd_bus_message *message, void *userdata,
if (r < 0 && r != -EALREADY)
return r;
+ bus_client_log(message, "hostname resolution");
+
r = dns_query_new(m, &q, question_utf8, question_idna ?: question_utf8, NULL, ifindex, flags);
if (r < 0)
return r;
@@ -563,6 +591,8 @@ static int bus_method_resolve_address(sd_bus_message *message, void *userdata, s
if (r < 0)
return r;
+ bus_client_log(message, "address resolution");
+
r = dns_query_new(m, &q, question, question, NULL, ifindex, flags|SD_RESOLVED_NO_SEARCH);
if (r < 0)
return r;
@@ -739,6 +769,8 @@ static int bus_method_resolve_record(sd_bus_message *message, void *userdata, sd
if (r < 0)
return r;
+ bus_client_log(message, "resource record resolution");
+
/* Setting SD_RESOLVED_CLAMP_TTL: let's request that the TTL is fixed up for locally cached entries,
* after all we return it in the wire format blob. */
r = dns_query_new(m, &q, question, question, NULL, ifindex, flags|SD_RESOLVED_NO_SEARCH|SD_RESOLVED_CLAMP_TTL);
@@ -1271,6 +1303,8 @@ static int bus_method_resolve_service(sd_bus_message *message, void *userdata, s
if (r < 0)
return r;
+ bus_client_log(message, "service resolution");
+
r = dns_query_new(m, &q, question_utf8, question_idna, NULL, ifindex, flags|SD_RESOLVED_NO_SEARCH);
if (r < 0)
return r;
@@ -1663,6 +1697,8 @@ static int bus_method_reset_statistics(sd_bus_message *message, void *userdata,
assert(message);
assert(m);
+ bus_client_log(message, "statistics reset");
+
LIST_FOREACH(scopes, s, m->dns_scopes)
s->cache.n_hit = s->cache.n_miss = 0;
@@ -1775,6 +1811,8 @@ static int bus_method_flush_caches(sd_bus_message *message, void *userdata, sd_b
assert(message);
assert(m);
+ bus_client_log(message, "cache flush");
+
manager_flush_caches(m, LOG_INFO);
return sd_bus_reply_method_return(message, NULL);
@@ -1786,6 +1824,8 @@ static int bus_method_reset_server_features(sd_bus_message *message, void *userd
assert(message);
assert(m);
+ bus_client_log(message, "server feature reset");
+
manager_reset_server_features(m);
return sd_bus_reply_method_return(message, NULL);
diff --git a/src/resolve/resolved-bus.h b/src/resolve/resolved-bus.h
index 8628d8ba6f..6c2bd26680 100644
--- a/src/resolve/resolved-bus.h
+++ b/src/resolve/resolved-bus.h
@@ -13,3 +13,5 @@ int bus_dns_server_append(sd_bus_message *reply, DnsServer *s, bool with_ifindex
int bus_property_get_resolve_support(sd_bus *bus, const char *path, const char *interface,
const char *property, sd_bus_message *reply,
void *userdata, sd_bus_error *error);
+
+void bus_client_log(sd_bus_message *m, const char *what);
diff --git a/src/resolve/resolved-link-bus.c b/src/resolve/resolved-link-bus.c
index e435fd3a80..8649804674 100644
--- a/src/resolve/resolved-link-bus.c
+++ b/src/resolve/resolved-link-bus.c
@@ -296,6 +296,8 @@ static int bus_link_method_set_dns_servers_internal(sd_bus_message *message, voi
}
}
+ bus_client_log(message, "DNS server change");
+
dns_server_mark_all(l->dns_servers);
for (size_t i = 0; i < n; i++) {
@@ -404,6 +406,8 @@ int bus_link_method_set_domains(sd_bus_message *message, void *userdata, sd_bus_
if (r == 0)
return 1; /* Polkit will call us back */
+ bus_client_log(message, "dns domains change");
+
dns_search_domain_mark_all(l->search_domains);
for (;;) {
@@ -477,6 +481,8 @@ int bus_link_method_set_default_route(sd_bus_message *message, void *userdata, s
if (r == 0)
return 1; /* Polkit will call us back */
+ bus_client_log(message, "dns default route change");
+
if (l->default_route != b) {
l->default_route = b;
@@ -523,6 +529,8 @@ int bus_link_method_set_llmnr(sd_bus_message *message, void *userdata, sd_bus_er
if (r == 0)
return 1; /* Polkit will call us back */
+ bus_client_log(message, "LLMNR change");
+
l->llmnr_support = mode;
link_allocate_scopes(l);
link_add_rrs(l, false);
@@ -568,6 +576,8 @@ int bus_link_method_set_mdns(sd_bus_message *message, void *userdata, sd_bus_err
if (r == 0)
return 1; /* Polkit will call us back */
+ bus_client_log(message, "mDNS change");
+
l->mdns_support = mode;
link_allocate_scopes(l);
link_add_rrs(l, false);
@@ -613,6 +623,8 @@ int bus_link_method_set_dns_over_tls(sd_bus_message *message, void *userdata, sd
if (r == 0)
return 1; /* Polkit will call us back */
+ bus_client_log(message, "D-o-T change");
+
link_set_dns_over_tls_mode(l, mode);
(void) link_save_user(l);
@@ -657,6 +669,8 @@ int bus_link_method_set_dnssec(sd_bus_message *message, void *userdata, sd_bus_e
if (r == 0)
return 1; /* Polkit will call us back */
+ bus_client_log(message, "DNSSEC change");
+
link_set_dnssec_mode(l, mode);
(void) link_save_user(l);
@@ -715,6 +729,8 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v
if (r == 0)
return 1; /* Polkit will call us back */
+ bus_client_log(message, "DNSSEC NTA change");
+
set_free_free(l->dnssec_negative_trust_anchors);
l->dnssec_negative_trust_anchors = TAKE_PTR(ns);
@@ -748,6 +764,8 @@ int bus_link_method_revert(sd_bus_message *message, void *userdata, sd_bus_error
if (r == 0)
return 1; /* Polkit will call us back */
+ bus_client_log(message, "revert");
+
link_flush_settings(l);
link_allocate_scopes(l);
link_add_rrs(l, false);