]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: don't eat up errors 2143/head
authorLennart Poettering <lennart@poettering.net>
Fri, 11 Dec 2015 14:10:56 +0000 (15:10 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 11 Dec 2015 14:10:56 +0000 (15:10 +0100)
dns_resource_key_match_soa() and dns_resource_key_match_cname_or_dname()
may return errors as negative return values. Make sure to propagate
those.

src/resolve/resolved-dns-answer.c

index 55e6ffbad76079d880f8d16894f515a246a32081..6a37345e7e0a75b17369f8d570884c5da952b4ef 100644 (file)
@@ -228,9 +228,9 @@ int dns_answer_contains_rr(DnsAnswer *a, DnsResourceRecord *rr) {
 
 int dns_answer_find_soa(DnsAnswer *a, const DnsResourceKey *key, DnsResourceRecord **ret) {
         DnsResourceRecord *rr;
+        int r;
 
         assert(key);
-        assert(ret);
 
         if (!a)
                 return 0;
@@ -240,8 +240,12 @@ int dns_answer_find_soa(DnsAnswer *a, const DnsResourceKey *key, DnsResourceReco
                 return 0;
 
         DNS_ANSWER_FOREACH(rr, a) {
-                if (dns_resource_key_match_soa(key, rr->key)) {
-                        *ret = rr;
+                r = dns_resource_key_match_soa(key, rr->key);
+                if (r < 0)
+                        return r;
+                if (r > 0) {
+                        if (ret)
+                                *ret = rr;
                         return 1;
                 }
         }
@@ -251,6 +255,7 @@ int dns_answer_find_soa(DnsAnswer *a, const DnsResourceKey *key, DnsResourceReco
 
 int dns_answer_find_cname_or_dname(DnsAnswer *a, const DnsResourceKey *key, DnsResourceRecord **ret) {
         DnsResourceRecord *rr;
+        int r;
 
         assert(key);
 
@@ -262,7 +267,10 @@ int dns_answer_find_cname_or_dname(DnsAnswer *a, const DnsResourceKey *key, DnsR
                 return 0;
 
         DNS_ANSWER_FOREACH(rr, a) {
-                if (dns_resource_key_match_cname_or_dname(key, rr->key, NULL)) {
+                r = dns_resource_key_match_cname_or_dname(key, rr->key, NULL);
+                if (r < 0)
+                        return r;
+                if (r > 0) {
                         if (ret)
                                 *ret = rr;
                         return 1;