]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-domain.c
Fix tpyo.
[tcpdump] / print-domain.c
index 63c541a81a7de7f08b065a15942f5e0e87d3d962..e83a4afe9fbe12b97ff1b32597b8736a51504d07 100644 (file)
@@ -332,6 +332,7 @@ const struct tok ns_type2str[] = {
        { T_MAILB,      "MAILB" },              /* RFC 1035 */
        { T_MAILA,      "MAILA" },              /* RFC 1035 */
        { T_ANY,        "ANY" },
+       { T_URI,        "URI" },                /* RFC 7553 */
        { 0,            NULL }
 };
 
@@ -525,7 +526,7 @@ ns_rprint(netdissect_options *ndo,
 
        case T_A6:
            {
-               struct in6_addr a;
+               nd_ipv6 a;
                int pbit, pbyte;
                char ntop_buf[INET6_ADDRSTRLEN];
 
@@ -539,8 +540,8 @@ ns_rprint(netdissect_options *ndo,
                } else if (pbit < 128) {
                        if (!ND_TTEST_LEN(cp + 1, sizeof(a) - pbyte))
                                return(NULL);
-                       memset(&a, 0, sizeof(a));
-                       memcpy(&a.s6_addr[pbyte], cp + 1, sizeof(a) - pbyte);
+                       memset(a, 0, sizeof(a));
+                       memcpy(a + pbyte, cp + 1, sizeof(a) - pbyte);
                        ND_PRINT(" %u %s", pbit,
                            addrtostr6(&a, ntop_buf, sizeof(ntop_buf)));
                }
@@ -552,6 +553,14 @@ ns_rprint(netdissect_options *ndo,
                break;
            }
 
+       case T_URI:
+               if (!ND_TTEST_LEN(cp, len))
+                       return(NULL);
+               ND_PRINT(" %u %u ", GET_BE_U_2(cp), GET_BE_U_2(cp + 2));
+               if (nd_printn(ndo, cp + 4, len - 4, ndo->ndo_snapend))
+                       return(NULL);
+               break;
+
        case T_OPT:
                ND_PRINT(" UDPsize=%u", class);
                if (opt_flags & 0x8000)
@@ -613,6 +622,14 @@ domain_print(netdissect_options *ndo,
 
        ndo->ndo_protocol = "domain";
        np = (const dns_header_t *)bp;
+
+       if(length < sizeof(*np)) {
+               nd_print_protocol(ndo);
+               ND_PRINT(" [length %u < %zu]", length, sizeof(*np));
+               nd_print_invalid(ndo);
+               return;
+       }
+
        ND_TCHECK_SIZE(np);
        flags = GET_BE_U_2(np->flags);
        /* get the byte-order right */