summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2023-02-07 14:43:48 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2023-02-07 14:49:58 +0100
commitbbb86efa7c668fa79331aa9a7f0567d89a3af50f (patch)
treeb4c704c86944ddf2d5e078bc7fdedc80b5ae1a24
parentresolve: define normal macros for BUS_ERROR_DNS error codes (diff)
downloadsystemd-bbb86efa7c668fa79331aa9a7f0567d89a3af50f.tar.xz
systemd-bbb86efa7c668fa79331aa9a7f0567d89a3af50f.zip
resolve: adjust message for NXDOMAIN lookup result
Previously, we reported: nx.example.org: resolve call failed: 'nx.example.org' not found But the call did succeed, and in fact all communication with the upstream servers was successful, and we got an authoritative negative answer. So instead of saying that the call fail, just say that the host doesn't exist: nx.example.org: Name 'nx.example.org' not found I wanted to keep the prefix of "<name>: ", to keep the output uniform. But it'd look a bit strange to say "<name>: <name> not found", so I added "Name " to make the output more readable. (Another option would be to not display the error string received from resolved, but that seems risky: even if right now resolved uses just one message format, it could start doing something else in the future, so it's better to display the error as received.) Fixes #26233.
-rw-r--r--src/resolve/resolvectl.c9
-rw-r--r--src/resolve/resolved-bus.c2
2 files changed, 9 insertions, 2 deletions
diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c
index 505be23051..2638e985fb 100644
--- a/src/resolve/resolvectl.c
+++ b/src/resolve/resolvectl.c
@@ -232,6 +232,13 @@ static void print_ifindex_comment(int printed_so_far, int ifindex) {
ansi_grey(), ifname, ansi_normal());
}
+static int resolve_host_error(const char *name, int r, const sd_bus_error *error) {
+ if (sd_bus_error_has_name(error, BUS_ERROR_DNS_NXDOMAIN))
+ return log_error_errno(r, "%s: %s", name, bus_error_message(error, r));
+
+ return log_error_errno(r, "%s: resolve call failed: %s", name, bus_error_message(error, r));
+}
+
static int resolve_host(sd_bus *bus, const char *name) {
_cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL, *reply = NULL;
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
@@ -257,7 +264,7 @@ static int resolve_host(sd_bus *bus, const char *name) {
r = sd_bus_call(bus, req, SD_RESOLVED_QUERY_TIMEOUT_USEC, &error, &reply);
if (r < 0)
- return log_error_errno(r, "%s: resolve call failed: %s", name, bus_error_message(&error, r));
+ return resolve_host_error(name, r, &error);
ts = now(CLOCK_MONOTONIC) - ts;
diff --git a/src/resolve/resolved-bus.c b/src/resolve/resolved-bus.c
index 3bbf612078..1c1e5bc3aa 100644
--- a/src/resolve/resolved-bus.c
+++ b/src/resolve/resolved-bus.c
@@ -176,7 +176,7 @@ static int reply_query_state(DnsQuery *q) {
return 0;
if (q->answer_rcode == DNS_RCODE_NXDOMAIN)
- sd_bus_error_setf(&error, BUS_ERROR_DNS_NXDOMAIN, "'%s' not found", dns_query_string(q));
+ sd_bus_error_setf(&error, BUS_ERROR_DNS_NXDOMAIN, "Name '%s' not found", dns_query_string(q));
else {
const char *rc, *n;