diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-07-16 03:28:18 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-07-16 03:28:18 +0200 |
commit | b9d394ea565fd742bcdd34e8dd61ae07c58a9565 (patch) | |
tree | 29ca3c5d2f4fb27ee3bd70106e77db146b9d25e8 | |
parent | 9d6db739ce1eaa3eace21801fd606d523b73c8f4 (diff) |
resolve: add distinct bus error code for hosts that exist but lack A or AAAA records
-rw-r--r-- | src/resolve/resolved-bus.c | 12 | ||||
-rw-r--r-- | src/resolve/resolved-dns-query.c | 9 | ||||
-rw-r--r-- | src/shared/bus-errors.h | 1 |
3 files changed, 12 insertions, 10 deletions
diff --git a/src/resolve/resolved-bus.c b/src/resolve/resolved-bus.c index 4a011efc4d..50eb012f8e 100644 --- a/src/resolve/resolved-bus.c +++ b/src/resolve/resolved-bus.c @@ -138,8 +138,10 @@ static void bus_method_resolve_hostname_complete(DnsQuery *q) { added ++; } - if (added <= 0) - goto parse_fail; + if (added <= 0) { + r = sd_bus_reply_method_errorf(q->request, BUS_ERROR_NO_SUCH_RR, "Hostname %s does not have RR of this type", q->request_hostname); + break; + } r = sd_bus_message_close_container(reply); if (r < 0) @@ -315,8 +317,10 @@ static void bus_method_resolve_address_complete(DnsQuery *q) { added ++; } - if (added <= 0) - goto parse_fail; + if (added <= 0) { + r = sd_bus_reply_method_errorf(q->request, BUS_ERROR_NO_SUCH_RR, "Address %s does not have RR of this type", ip); + break; + } r = sd_bus_message_close_container(reply); if (r < 0) diff --git a/src/resolve/resolved-dns-query.c b/src/resolve/resolved-dns-query.c index a9880524e6..dd812150cf 100644 --- a/src/resolve/resolved-dns-query.c +++ b/src/resolve/resolved-dns-query.c @@ -107,12 +107,9 @@ int dns_query_transaction_reply(DnsQueryTransaction *t, DnsPacket *p) { t->packet = dns_packet_ref(p); - if (DNS_PACKET_RCODE(p) == DNS_RCODE_SUCCESS) { - if( be16toh(DNS_PACKET_HEADER(p)->ancount) > 0) - dns_query_transaction_set_state(t, DNS_QUERY_SUCCESS); - else - dns_query_transaction_set_state(t, DNS_QUERY_INVALID_REPLY); - } else + if (DNS_PACKET_RCODE(p) == DNS_RCODE_SUCCESS) + dns_query_transaction_set_state(t, DNS_QUERY_SUCCESS); + else dns_query_transaction_set_state(t, DNS_QUERY_FAILURE); return 0; diff --git a/src/shared/bus-errors.h b/src/shared/bus-errors.h index 388b42b4fd..08a7acc99c 100644 --- a/src/shared/bus-errors.h +++ b/src/shared/bus-errors.h @@ -62,4 +62,5 @@ #define BUS_ERROR_NO_NAME_SERVERS "org.freedesktop.resolve1.NoNameServers" #define BUS_ERROR_INVALID_REPLY "org.freedesktop.resolve1.InvalidReply" +#define BUS_ERROR_NO_SUCH_RR "org.freedesktop.resolve1.NoSuchRR" #define _BUS_ERROR_DNS "org.freedesktop.resolve1.DnsError." |