X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/f16863a8b30925a1558cbadacde1b050a377e727..e847135d66e822a96198a8d15771cf3a827b1ee9:/print-tcp.c diff --git a/print-tcp.c b/print-tcp.c index 5c979235..a1d68a8a 100644 --- a/print-tcp.c +++ b/print-tcp.c @@ -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 -#include +#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.