#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"
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;
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;
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;
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);
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;
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;
assert(message);
assert(m);
+ bus_client_log(message, "cache flush");
+
manager_flush_caches(m, LOG_INFO);
return sd_bus_reply_method_return(message, NULL);
assert(message);
assert(m);
+ bus_client_log(message, "server feature reset");
+
manager_reset_server_features(m);
return sd_bus_reply_method_return(message, NULL);
}
}
+ bus_client_log(message, "DNS server change");
+
dns_server_mark_all(l->dns_servers);
for (size_t i = 0; i < n; i++) {
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 (;;) {
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;
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);
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);
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);
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);
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);
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);