chiark / gitweb /
dns-domain: introduce macros for accessing all DNS header fields
[elogind.git] / src / resolve / resolved-bus.c
index 4a011efc4db7669c6d4ced7285c852ac8ee40a23..02e971dbf3bfe65092c92b29b05d4ced40ca19a9 100644 (file)
@@ -86,10 +86,9 @@ static void bus_method_resolve_hostname_complete(DnsQuery *q) {
                 if (r < 0)
                         goto finish;
 
-                n = be16toh(DNS_PACKET_HEADER(q->packet)->ancount) +
-                    be16toh(DNS_PACKET_HEADER(q->packet)->nscount) +
-                    be16toh(DNS_PACKET_HEADER(q->packet)->arcount);
-
+                n = DNS_PACKET_ANCOUNT(q->packet) +
+                    DNS_PACKET_NSCOUNT(q->packet) +
+                    DNS_PACKET_ARCOUNT(q->packet);
                 for (i = 0; i < n; i++) {
                         _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
 
@@ -138,8 +137,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)
@@ -290,10 +291,9 @@ static void bus_method_resolve_address_complete(DnsQuery *q) {
                 if (r < 0)
                         goto finish;
 
-                n = be16toh(DNS_PACKET_HEADER(q->packet)->ancount) +
-                    be16toh(DNS_PACKET_HEADER(q->packet)->nscount) +
-                    be16toh(DNS_PACKET_HEADER(q->packet)->arcount);
-
+                n = DNS_PACKET_ANCOUNT(q->packet) +
+                    DNS_PACKET_NSCOUNT(q->packet) +
+                    DNS_PACKET_ARCOUNT(q->packet);
                 for (i = 0; i < n; i++) {
                         _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
 
@@ -315,8 +315,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)
@@ -446,7 +448,7 @@ int manager_connect_bus(Manager *m) {
                 return 0;
         }
 
-        r = sd_bus_add_object_vtable(m->bus, NULL, "/org/freedesktop/resolve1", "org.freedesktop.resolve1", resolve_vtable, m);
+        r = sd_bus_add_object_vtable(m->bus, NULL, "/org/freedesktop/resolve1", "org.freedesktop.resolve1.Manager", resolve_vtable, m);
         if (r < 0) {
                 log_error("Failed to register object: %s", strerror(-r));
                 return r;