]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-tcp.c
Functions in libnetdissect must use ndo_error() function
[tcpdump] / print-tcp.c
index 5c979235e6fe19f2612ff510c52731a0c29898e6..a1d68a8adddaa0269a2f42007d0bb9581a076e1e 100644 (file)
@@ -51,11 +51,9 @@ __RCSID("$NetBSD: print-tcp.c,v 1.8 2007/07/24 11:53:48 drochner Exp $");
 #include "rpc_auth.h"
 #include "rpc_msg.h"
 
-#include "nameser.h"
-
 #ifdef HAVE_LIBCRYPTO
 #include <openssl/md5.h>
-#include <signature.h>
+#include "signature.h"
 
 static int tcp_verify_signature(netdissect_options *ndo,
                                 const struct ip *ip, const struct tcphdr *tp,
@@ -170,11 +168,11 @@ tcp_print(netdissect_options *ndo,
         register const struct ip6_hdr *ip6;
 #endif
 
-        tp = (struct tcphdr *)bp;
-        ip = (struct ip *)bp2;
+        tp = (const struct tcphdr *)bp;
+        ip = (const struct ip *)bp2;
 #ifdef INET6
         if (IP_V(ip) == 6)
-                ip6 = (struct ip6_hdr *)bp2;
+                ip6 = (const struct ip6_hdr *)bp2;
         else
                 ip6 = NULL;
 #endif /*INET6*/
@@ -196,12 +194,12 @@ tcp_print(netdissect_options *ndo,
                 if (ip6->ip6_nxt == IPPROTO_TCP) {
                         ND_PRINT((ndo, "%s.%s > %s.%s: ",
                                      ip6addr_string(ndo, &ip6->ip6_src),
-                                     tcpport_string(sport),
+                                     tcpport_string(ndo, sport),
                                      ip6addr_string(ndo, &ip6->ip6_dst),
-                                     tcpport_string(dport)));
+                                     tcpport_string(ndo, dport)));
                 } else {
                         ND_PRINT((ndo, "%s > %s: ",
-                                     tcpport_string(sport), tcpport_string(dport)));
+                                     tcpport_string(ndo, sport), tcpport_string(ndo, dport)));
                 }
         } else
 #endif /*INET6*/
@@ -209,12 +207,12 @@ tcp_print(netdissect_options *ndo,
                 if (ip->ip_p == IPPROTO_TCP) {
                         ND_PRINT((ndo, "%s.%s > %s.%s: ",
                                      ipaddr_string(ndo, &ip->ip_src),
-                                     tcpport_string(sport),
+                                     tcpport_string(ndo, sport),
                                      ipaddr_string(ndo, &ip->ip_dst),
-                                     tcpport_string(dport)));
+                                     tcpport_string(ndo, dport)));
                 } else {
                         ND_PRINT((ndo, "%s > %s: ",
-                                     tcpport_string(sport), tcpport_string(dport)));
+                                     tcpport_string(ndo, sport), tcpport_string(ndo, dport)));
                 }
         }
 
@@ -289,7 +287,8 @@ tcp_print(netdissect_options *ndo,
                                         th->nxt = (struct tcp_seq_hash6 *)
                                                 calloc(1, sizeof(*th));
                                         if (th->nxt == NULL)
-                                                error("tcp_print: calloc");
+                                                (*ndo->ndo_error)(ndo,
+                                                                 "tcp_print: calloc");
                                 }
                                 th->addr = tha;
                                 if (rev)
@@ -345,7 +344,8 @@ tcp_print(netdissect_options *ndo,
                                         th->nxt = (struct tcp_seq_hash *)
                                                 calloc(1, sizeof(*th));
                                         if (th->nxt == NULL)
-                                                error("tcp_print: calloc");
+                                                (*ndo->ndo_error)(ndo,
+                                                                 "tcp_print: calloc");
                                 }
                                 th->addr = tha;
                                 if (rev)
@@ -700,8 +700,7 @@ tcp_print(netdissect_options *ndo,
                 ND_PRINT((ndo, ": "));
                 rtsp_print(ndo, bp, length);
         } else if (length > 2 &&
-                 (sport == NAMESERVER_PORT || dport == NAMESERVER_PORT ||
-                  sport == MULTICASTDNS_PORT || dport == MULTICASTDNS_PORT)) {
+                 (sport == NAMESERVER_PORT || dport == NAMESERVER_PORT)) {
                 /*
                  * TCP DNS query has 2byte length at the head.
                  * XXX packet could be unaligned, it can go strange
@@ -724,23 +723,23 @@ tcp_print(netdissect_options *ndo,
                  * to NFS print routines.
                  */
                 uint32_t fraglen;
-                register struct sunrpc_msg *rp;
+                register const struct sunrpc_msg *rp;
                 enum sunrpc_msg_type direction;
 
                 fraglen = EXTRACT_32BITS(bp) & 0x7FFFFFFF;
                 if (fraglen > (length) - 4)
                         fraglen = (length) - 4;
-                rp = (struct sunrpc_msg *)(bp + 4);
+                rp = (const struct sunrpc_msg *)(bp + 4);
                 if (ND_TTEST(rp->rm_direction)) {
                         direction = (enum sunrpc_msg_type)EXTRACT_32BITS(&rp->rm_direction);
                         if (dport == NFS_PORT && direction == SUNRPC_CALL) {
                                 ND_PRINT((ndo, ": NFS request xid %u ", EXTRACT_32BITS(&rp->rm_xid)));
-                                nfsreq_print_noaddr(ndo, (u_char *)rp, fraglen, (u_char *)ip);
+                                nfsreq_print_noaddr(ndo, (const u_char *)rp, fraglen, (const u_char *)ip);
                                 return;
                         }
                         if (sport == NFS_PORT && direction == SUNRPC_REPLY) {
                                 ND_PRINT((ndo, ": NFS reply xid %u ", EXTRACT_32BITS(&rp->rm_xid)));
-                                nfsreply_print_noaddr(ndo, (u_char *)rp, fraglen, (u_char *)ip);
+                                nfsreply_print_noaddr(ndo, (const u_char *)rp, fraglen, (const u_char *)ip);
                                 return;
                         }
                 }
@@ -829,7 +828,7 @@ tcp_verify_signature(netdissect_options *ndo,
         MD5_CTX ctx;
         uint16_t savecsum, tlen;
 #ifdef INET6
-        struct ip6_hdr *ip6;
+        const struct ip6_hdr *ip6;
         uint32_t len32;
         uint8_t nxt;
 #endif
@@ -851,26 +850,26 @@ tcp_verify_signature(netdissect_options *ndo,
          * Step 1: Update MD5 hash with IP pseudo-header.
          */
         if (IP_V(ip) == 4) {
-                MD5_Update(&ctx, (char *)&ip->ip_src, sizeof(ip->ip_src));
-                MD5_Update(&ctx, (char *)&ip->ip_dst, sizeof(ip->ip_dst));
-                MD5_Update(&ctx, (char *)&zero_proto, sizeof(zero_proto));
-                MD5_Update(&ctx, (char *)&ip->ip_p, sizeof(ip->ip_p));
+                MD5_Update(&ctx, (const char *)&ip->ip_src, sizeof(ip->ip_src));
+                MD5_Update(&ctx, (const char *)&ip->ip_dst, sizeof(ip->ip_dst));
+                MD5_Update(&ctx, (const char *)&zero_proto, sizeof(zero_proto));
+                MD5_Update(&ctx, (const char *)&ip->ip_p, sizeof(ip->ip_p));
                 tlen = EXTRACT_16BITS(&ip->ip_len) - IP_HL(ip) * 4;
                 tlen = htons(tlen);
-                MD5_Update(&ctx, (char *)&tlen, sizeof(tlen));
+                MD5_Update(&ctx, (const char *)&tlen, sizeof(tlen));
 #ifdef INET6
         } else if (IP_V(ip) == 6) {
-                ip6 = (struct ip6_hdr *)ip;
-                MD5_Update(&ctx, (char *)&ip6->ip6_src, sizeof(ip6->ip6_src));
-                MD5_Update(&ctx, (char *)&ip6->ip6_dst, sizeof(ip6->ip6_dst));
+                ip6 = (const struct ip6_hdr *)ip;
+                MD5_Update(&ctx, (const char *)&ip6->ip6_src, sizeof(ip6->ip6_src));
+                MD5_Update(&ctx, (const char *)&ip6->ip6_dst, sizeof(ip6->ip6_dst));
                 len32 = htonl(EXTRACT_16BITS(&ip6->ip6_plen));
-                MD5_Update(&ctx, (char *)&len32, sizeof(len32));
+                MD5_Update(&ctx, (const char *)&len32, sizeof(len32));
                 nxt = 0;
-                MD5_Update(&ctx, (char *)&nxt, sizeof(nxt));
-                MD5_Update(&ctx, (char *)&nxt, sizeof(nxt));
-                MD5_Update(&ctx, (char *)&nxt, sizeof(nxt));
+                MD5_Update(&ctx, (const char *)&nxt, sizeof(nxt));
+                MD5_Update(&ctx, (const char *)&nxt, sizeof(nxt));
+                MD5_Update(&ctx, (const char *)&nxt, sizeof(nxt));
                 nxt = IPPROTO_TCP;
-                MD5_Update(&ctx, (char *)&nxt, sizeof(nxt));
+                MD5_Update(&ctx, (const char *)&nxt, sizeof(nxt));
 #endif
         } else {
 #ifdef INET6
@@ -887,7 +886,7 @@ tcp_verify_signature(netdissect_options *ndo,
          */
         savecsum = tp1.th_sum;
         tp1.th_sum = 0;
-        MD5_Update(&ctx, (char *)&tp1, sizeof(struct tcphdr));
+        MD5_Update(&ctx, (const char *)&tp1, sizeof(struct tcphdr));
         tp1.th_sum = savecsum;
         /*
          * Step 3: Update MD5 hash with TCP segment data, if present.