]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
LDNS_FMT_SHORT output format option 138/head upstream/features/short-format
authorWillem Toorop <willem@nlnetlabs.nl>
Tue, 7 Sep 2021 08:20:49 +0000 (10:20 +0200)
committerWillem Toorop <willem@nlnetlabs.nl>
Tue, 7 Sep 2021 08:22:02 +0000 (10:22 +0200)
and a -Q option to drill to print short format answers

resolves issue #28

drill/drill.c
host2str.c
ldns/host2str.h

index 24502cbbd9fcf37deb837ace8397fa94364f8e76..13afb84ff2c94efd88bdd57864479515561245ca 100644 (file)
@@ -173,6 +173,8 @@ main(int argc, char *argv[])
        int r;
        WSADATA wsa_data;
 #endif
+       ldns_output_format_storage fmt_storage;
+       ldns_output_format* fmt = ldns_output_format_init(&fmt_storage);
 
        int_type = -1; serv = NULL; type = 0; 
        int_clas = -1; name = NULL; clas = 0;
@@ -247,6 +249,7 @@ main(int argc, char *argv[])
                                verbosity = atoi(optarg);
                                break;
                        case 'Q':
+                               fmt->flags |= LDNS_FMT_SHORT;
                                verbosity = -1;
                                break;
                        case 'f':
@@ -879,8 +882,8 @@ main(int argc, char *argv[])
                                mesg("No packet received");
                                result = EXIT_FAILURE;
                        } else {
+                               ldns_pkt_print_fmt(stdout, fmt, pkt);
                                if (verbosity != -1) {
-                                       ldns_pkt_print(stdout, pkt);
                                        if (ldns_pkt_tc(pkt)) {
                                                fprintf(stdout,
                                                        "\n;; WARNING: The answer packet was truncated; you might want to\n");
index c98bb738a04dd2fce4a9a9ce5056dd4eeafedab5..692540277ad0d4623d577d399a8c1761a071bab7 100644 (file)
@@ -1817,45 +1817,50 @@ ldns_rr2buffer_str_fmt(ldns_buffer *output,
                fmt_st = (ldns_output_format_storage*)
                          ldns_output_format_default;
        }
-       if (!rr) {
-               if (LDNS_COMMENT_NULLS & fmt_st->flags) {
-                       ldns_buffer_printf(output, "; (null)\n");
+       if (!(fmt_st->flags & LDNS_FMT_SHORT)) {
+               if (!rr) {
+                       if (LDNS_COMMENT_NULLS & fmt_st->flags) {
+                               ldns_buffer_printf(output, "; (null)\n");
+                       }
+                       return ldns_buffer_status(output);
+               }
+               if (ldns_rr_owner(rr)) {
+                       status = ldns_rdf2buffer_str_dname(output, ldns_rr_owner(rr));
+               }
+               if (status != LDNS_STATUS_OK) {
+                       return status;
                }
-               return ldns_buffer_status(output);
-       }
-       if (ldns_rr_owner(rr)) {
-               status = ldns_rdf2buffer_str_dname(output, ldns_rr_owner(rr));
-       }
-       if (status != LDNS_STATUS_OK) {
-               return status;
-       }
 
-       /* TTL should NOT be printed if it is a question */
-       if (!ldns_rr_is_question(rr)) {
-               ldns_buffer_printf(output, "\t%d", ldns_rr_ttl(rr));
-       }
+               /* TTL should NOT be printed if it is a question */
+               if (!ldns_rr_is_question(rr)) {
+                       ldns_buffer_printf(output, "\t%d", ldns_rr_ttl(rr));
+               }
 
-       ldns_buffer_printf(output, "\t");
-       status = ldns_rr_class2buffer_str(output, ldns_rr_get_class(rr));
-       if (status != LDNS_STATUS_OK) {
-               return status;
-       }
-       ldns_buffer_printf(output, "\t");
+               ldns_buffer_printf(output, "\t");
+               status = ldns_rr_class2buffer_str(output, ldns_rr_get_class(rr));
+               if (status != LDNS_STATUS_OK) {
+                       return status;
+               }
+               ldns_buffer_printf(output, "\t");
 
-       if (ldns_output_format_covers_type(fmt, ldns_rr_get_type(rr))) {
-               return ldns_rr2buffer_str_rfc3597(output, rr);
-       }
-       status = ldns_rr_type2buffer_str(output, ldns_rr_get_type(rr));
-       if (status != LDNS_STATUS_OK) {
-               return status;
-       }
+               if (ldns_output_format_covers_type(fmt, ldns_rr_get_type(rr))) {
+                       return ldns_rr2buffer_str_rfc3597(output, rr);
+               }
+               status = ldns_rr_type2buffer_str(output, ldns_rr_get_type(rr));
+               if (status != LDNS_STATUS_OK) {
+                       return status;
+               }
 
-       if (ldns_rr_rd_count(rr) > 0) {
-               ldns_buffer_printf(output, "\t");
-       } else if (!ldns_rr_is_question(rr)) {
-               ldns_buffer_printf(output, "\t\\# 0");
-       }
+               if (ldns_rr_rd_count(rr) > 0) {
+                       ldns_buffer_printf(output, "\t");
+               } else if (!ldns_rr_is_question(rr)) {
+                       ldns_buffer_printf(output, "\t\\# 0");
+               }
+       } else if (ldns_rr_rd_count(rr) == 0) {
+               /* assert(fmt_st->flags & LDNS_FMT_SHORT); */
 
+               ldns_buffer_printf(output, "# 0");
+       }
        for (i = 0; i < ldns_rr_rd_count(rr); i++) {
                /* ldns_rdf2buffer_str handles NULL input fine! */
                if ((fmt_st->flags & LDNS_FMT_ZEROIZE_RRSIGS) &&
@@ -2111,13 +2116,18 @@ ldns_pkt2buffer_str_fmt(ldns_buffer *output,
        char *tmp;
        struct timeval time;
        time_t time_tt;
+       int short_fmt = fmt && (fmt->flags & LDNS_FMT_SHORT);
 
        if (!pkt) {
                ldns_buffer_printf(output, "null");
                return LDNS_STATUS_OK;
        }
 
-       if (ldns_buffer_status_ok(output)) {
+       if (!ldns_buffer_status_ok(output)) {
+               return ldns_buffer_status(output);
+       }
+
+       if (!short_fmt) {
                status = ldns_pktheader2buffer_str(output, pkt);
                if (status != LDNS_STATUS_OK) {
                        return status;
@@ -2139,15 +2149,16 @@ ldns_pkt2buffer_str_fmt(ldns_buffer *output,
                ldns_buffer_printf(output, "\n");
 
                ldns_buffer_printf(output, ";; ANSWER SECTION:\n");
-               for (i = 0; i < ldns_pkt_ancount(pkt); i++) {
-                       status = ldns_rr2buffer_str_fmt(output, fmt,
-                                      ldns_rr_list_rr(
-                                              ldns_pkt_answer(pkt), i));
-                       if (status != LDNS_STATUS_OK) {
-                               return status;
-                       }
-
+       }
+       for (i = 0; i < ldns_pkt_ancount(pkt); i++) {
+               status = ldns_rr2buffer_str_fmt(output, fmt,
+                              ldns_rr_list_rr(
+                                      ldns_pkt_answer(pkt), i));
+               if (status != LDNS_STATUS_OK) {
+                       return status;
                }
+       }
+       if (!short_fmt) {
                ldns_buffer_printf(output, "\n");
 
                ldns_buffer_printf(output, ";; AUTHORITY SECTION:\n");
@@ -2217,8 +2228,6 @@ ldns_pkt2buffer_str_fmt(ldns_buffer *output,
 
                ldns_buffer_printf(output, ";; MSG SIZE  rcvd: %d\n",
                                (int)ldns_pkt_size(pkt));
-       } else {
-               return ldns_buffer_status(output);
        }
        return status;
 }
index 7d39785bd377385e9de7bcb9e8f3a30c9d0b8e37..f3cffd3673f33319fab7b47fb3e50925b1088757 100644 (file)
@@ -65,6 +65,8 @@ extern "C" {
 #define LDNS_FMT_ZEROIZE_RRSIGS                (1 <<  9)
 #define LDNS_FMT_PAD_SOA_SERIAL                (1 << 10)
 #define LDNS_FMT_RFC3597               (1 << 11)       /* yes */
+/** Prints only answer section of packets and only rdata of RRs **/
+#define LDNS_FMT_SHORT                 (1 << 12)
 
 #define LDNS_FMT_FLAGS_WITH_DATA                           2