]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: add a call that dumps the contents of a DnsAnswer structure
authorLennart Poettering <lennart@poettering.net>
Fri, 18 Dec 2015 18:42:02 +0000 (19:42 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 18 Dec 2015 18:42:02 +0000 (19:42 +0100)
This is not used anywhere, but it's extremely useful when debugging.

src/resolve/resolved-dns-answer.c
src/resolve/resolved-dns-answer.h

index fa0e026ea7445670cc5944742735537f44523e38..70577453e88298ce27a2e21434f53ba6031b6e1b 100644 (file)
@@ -639,3 +639,40 @@ int dns_answer_reserve_or_clone(DnsAnswer **a, unsigned n_free) {
 
         return 0;
 }
+
+void dns_answer_dump(DnsAnswer *answer, FILE *f) {
+        DnsResourceRecord *rr;
+        DnsAnswerFlags flags;
+        int ifindex, r;
+
+        if (!f)
+                f = stdout;
+
+        DNS_ANSWER_FOREACH_FULL(rr, ifindex, flags, answer) {
+                _cleanup_free_ char *t = NULL;
+
+                fputc('\t', f);
+
+                r = dns_resource_record_to_string(rr, &t);
+                if (r < 0) {
+                        log_oom();
+                        continue;
+                }
+
+                fputs(t, f);
+
+                if (ifindex != 0 || flags & (DNS_ANSWER_AUTHENTICATED|DNS_ANSWER_CACHEABLE|DNS_ANSWER_SHARED_OWNER))
+                        fputs("\t;", f);
+
+                if (ifindex != 0)
+                        printf(" ifindex=%i", ifindex);
+                if (flags & DNS_ANSWER_AUTHENTICATED)
+                        fputs(" authenticated", f);
+                if (flags & DNS_ANSWER_CACHEABLE)
+                        fputs(" cachable", f);
+                if (flags & DNS_ANSWER_SHARED_OWNER)
+                        fputs(" shared-owner", f);
+
+                fputc('\n', f);
+        }
+}
index 29d6636e68ee90d817a679fb72afa098ebf0227d..28ded3b252b719e679b31ea0e9fd7f87e1c0a055 100644 (file)
@@ -84,6 +84,8 @@ static inline unsigned dns_answer_size(DnsAnswer *a) {
         return a ? a->n_rrs : 0;
 }
 
+void dns_answer_dump(DnsAnswer *answer, FILE *f);
+
 DEFINE_TRIVIAL_CLEANUP_FUNC(DnsAnswer*, dns_answer_unref);
 
 #define _DNS_ANSWER_FOREACH(q, kk, a)                                   \