]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Teach ns_nskip() that pointers can occur anywhere, not just as
authorfenner <fenner>
Fri, 4 Apr 2003 00:18:54 +0000 (00:18 +0000)
committerfenner <fenner>
Fri, 4 Apr 2003 00:18:54 +0000 (00:18 +0000)
 the first label.
Add SRV record data section printing, in the form
 SRV target:port priority weight

print-domain.c

index 16dfeed187e5006ce5f8cd55f724dde50895907a..b55d362da29399f3de4c377b43ba149858a4a41b 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-domain.c,v 1.82 2002-12-11 07:13:59 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-domain.c,v 1.83 2003-04-04 00:18:54 fenner Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -60,9 +60,10 @@ ns_nskip(register const u_char *cp)
 
        if (!TTEST2(*cp, 1))
                return (NULL);
-       if (((i = *cp++) & INDIR_MASK) == INDIR_MASK)
-               return (cp + 1);
+       i = *cp++;
        while (i) {
+               if ((i & INDIR_MASK) == INDIR_MASK)
+                       return (cp + 1);
                if ((i & INDIR_MASK) == EDNS0_MASK) {
                        int bitlen, bytelen;
 
@@ -419,6 +420,16 @@ ns_rprint(register const u_char *cp, register const u_char *bp)
                (void)ns_cprint(cp);
                break;
 
+       case T_SRV:
+               putchar(' ');
+               if (!TTEST2(*cp, 6))
+                       return(NULL);
+               if (ns_nprint(cp + 6, bp) == NULL)
+                       return(NULL);
+               printf(":%d %d %d", EXTRACT_16BITS(cp + 4),
+                       EXTRACT_16BITS(cp), EXTRACT_16BITS(cp + 2));
+               break;
+
 #ifdef INET6
        case T_AAAA:
                if (!TTEST2(*cp, sizeof(struct in6_addr)))