From: Lennart Poettering Date: Mon, 22 Nov 2021 13:37:54 +0000 (+0100) Subject: resolved: fix ResolveService() hostname handling X-Git-Tag: v250-rc1~186^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5a78106ad92d3f122f7ac653eecf767f0a8948cf;p=thirdparty%2Fsystemd.git resolved: fix ResolveService() hostname handling 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) --- diff --git a/src/resolve/resolved-bus.c b/src/resolve/resolved-bus.c index 8ad50ba29b4..48e5321d79a 100644 --- a/src/resolve/resolved-bus.c +++ b/src/resolve/resolved-bus.c @@ -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); }