From: Tatuya JINMEI 神明達哉 Date: Fri, 20 Sep 2002 06:26:10 +0000 (+0000) Subject: host exits with a non-zero code for erroneous results X-Git-Tag: v9.2.3rc1~104^2~316 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=e9b85f0309c6bb6eebc2d6a0acf6a8f3bcc376ac;p=thirdparty%2Fbind9.git host exits with a non-zero code for erroneous results (RT #3536) developer: marka reviewer: jinmei --- diff --git a/bin/dig/host.c b/bin/dig/host.c index 3e55f5ff0c2..93f620439d2 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); }