]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
host exits with a non-zero code for erroneous results
authorTatuya JINMEI 神明達哉 <jinmei@isc.org>
Fri, 20 Sep 2002 06:26:10 +0000 (06:26 +0000)
committerTatuya JINMEI 神明達哉 <jinmei@isc.org>
Fri, 20 Sep 2002 06:26:10 +0000 (06:26 +0000)
(RT #3536)
developer: marka
reviewer: jinmei

bin/dig/host.c

index 3e55f5ff0c2ebb9e9e65f4c766b9c4ad5c29b76c..93f620439d28334a629af29c33a31f0581029c13 100644 (file)
@@ -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 <config.h>
 #include <stdlib.h>
@@ -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);
 }