resolved: bus - follow CNAME chains when resolving addresses
authorTom Gundersen <teg@jklm.no>
Thu, 26 Nov 2015 02:58:08 +0000 (03:58 +0100)
committerTom Gundersen <teg@jklm.no>
Thu, 26 Nov 2015 03:03:08 +0000 (04:03 +0100)
It may be unexpected to find a CNAME record when doing a reverse lookup, as we
expect to find a PTR record directly. However, it is explicitly supported
according to <https://tools.ietf.org/html/rfc2181#section-10.2>, and there
seems to be no benefit to not supporting it.

src/resolve/resolved-bus.c

index a43aa59..da1b501 100644 (file)
@@ -298,7 +298,15 @@ static void bus_method_resolve_address_complete(DnsQuery *q) {
                 goto finish;
         }
 
-        /* We don't process CNAME for PTR lookups. */
+        r = dns_query_process_cname(q);
+        if (r == -ELOOP) {
+                r = sd_bus_reply_method_errorf(q->request, BUS_ERROR_CNAME_LOOP, "CNAME loop detected, or CNAME resolving disabled on '%s'", dns_question_name(q->question));
+                goto finish;
+        }
+        if (r < 0)
+                goto finish;
+        if (r > 0) /* This was a cname, and the query was restarted. */
+                return;
 
         r = sd_bus_message_new_method_return(q->request, &reply);
         if (r < 0)