]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: fix ResolveService() hostname handling
authorLennart Poettering <lennart@poettering.net>
Mon, 22 Nov 2021 13:37:54 +0000 (14:37 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 22 Nov 2021 21:33:40 +0000 (22:33 +0100)
Let's eat up special returns of dns_query_process_cname_many() when
storing hostname resolution results.

The rest of the code assumes only == 0 means success and != 0 means
error, but so far > 0 also could mean success, let's fix that.

Fixes: #21365 #21140
(This was originally broken in 1db8e6d1db0880de240e5598e28d24d708479434)

src/resolve/resolved-bus.c

index 8ad50ba29b4e6a7487a60d023589c27a8b45ebe7..48e5321d79a8965068de021c52693ee87cb93478 100644 (file)
@@ -1005,6 +1005,7 @@ static void resolve_service_all_complete(DnsQuery *q) {
                                         goto finish;
                                 }
 
+                                assert(bad->auxiliary_result < 0);
                                 r = bad->auxiliary_result;
                                 goto finish;
                         }
@@ -1112,7 +1113,7 @@ static void resolve_service_hostname_complete(DnsQuery *q) {
                 return;
 
         /* This auxiliary lookup is finished or failed, let's see if all are finished now. */
-        q->auxiliary_result = r;
+        q->auxiliary_result = r < 0 ? r : 0;
         resolve_service_all_complete(q->auxiliary_for);
 }