From e9b85f0309c6bb6eebc2d6a0acf6a8f3bcc376ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tatuya=20JINMEI=20=E7=A5=9E=E6=98=8E=E9=81=94=E5=93=89?= Date: Fri, 20 Sep 2002 06:26:10 +0000 Subject: [PATCH] host exits with a non-zero code for erroneous results (RT #3536) developer: marka reviewer: jinmei --- bin/dig/host.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/bin/dig/host.c b/bin/dig/host.c index 3e55f5ff0c..93f620439d 100644 --- a/bin/dig/host.c +++ b/bin/dig/host.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: host.c,v 1.85 2002/08/12 18:25:25 mayer Exp $ */ +/* $Id: host.c,v 1.86 2002/09/20 06:26:10 jinmei Exp $ */ #include #include @@ -54,6 +54,7 @@ extern char *progname; extern isc_task_t *global_task; static isc_boolean_t short_form = ISC_TRUE, listed_server = ISC_FALSE; +static int seen_error = -1; static const char *opcodetext[] = { "QUERY", @@ -344,9 +345,16 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) { dns_rdataset_t *opt, *tsig = NULL; dns_name_t *tsigname; isc_result_t result = ISC_R_SUCCESS; + int force_error; UNUSED(headers); + /* + * We get called multiple times. + * Preserve any existing error status. + */ + force_error = (seen_error == 1) ? 1 : 0; + seen_error = 1; if (listed_server) { char sockstr[ISC_SOCKADDR_FORMATSIZE]; @@ -465,7 +473,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) { sizeof(typestr)); printf("%s has no %s record\n", namestr, typestr); } - + seen_error = force_error; return (result); } @@ -629,6 +637,6 @@ main(int argc, char **argv) { cancel_all(); destroy_libs(); isc_app_finish(); - return (0); + return ((seen_error == 0) ? 0 : 1); }