From 4eee6460ff38dd268576d998b2eeed807d3d6f10 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Fri, 8 Apr 2022 00:33:24 -0700 Subject: [PATCH] ensure dig sets exitcode after local UDP connection failure dig previously set an exit code of 9 when a TCP connection failed or when a UDP connection timed out, but when the server address is localhost it's possible for a UDP query to fail with ISC_R_CONNREFUSED. that code path didn't update the exit code, causing dig to exit with status 0. we now set the exit code to 9 in this failure case. --- bin/dig/dighost.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index 0b3a66a5c0..a4c2865509 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -3120,6 +3120,10 @@ udp_ready(isc_nmhandle_t *handle, isc_result_t eresult, void *arg) { dig_lookup_t *l = query->lookup; debug("udp setup failed: %s", isc_result_totext(eresult)); + + if (exitcode < 9) { + exitcode = 9; + } query_detach(&query); cancel_lookup(l); lookup_detach(&l); @@ -3980,6 +3984,8 @@ recv_done(isc_nmhandle_t *handle, isc_result_t eresult, isc_region_t *region, if (eresult == ISC_R_EOF) { requeue_or_update_exitcode(l); + } else if (exitcode < 9) { + exitcode = 9; } goto cancel_lookup;