X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/64e81f2917f6865dff8df96e18cec1b8bf2fa836..13c623cda77c2215c1641c53edf6e2de1786f36b:/print-smb.c diff --git a/print-smb.c b/print-smb.c index f3002e09..48b0eead 100644 --- a/print-smb.c +++ b/print-smb.c @@ -11,7 +11,7 @@ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-smb.c,v 1.8 2001-01-15 03:24:00 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-smb.c,v 1.10 2001-02-20 19:28:02 fenner Exp $"; #endif #include @@ -624,9 +624,13 @@ static void print_smb(const uchar *buf, const uchar *maxbuf) fn = smbfind(command,smb_fns); - printf("\nSMB PACKET: %s (%s)\n",fn->name,request?"REQUEST":"REPLY"); + if (vflag > 1) + printf("\n"); - if (vflag == 0) return; + printf("SMB PACKET: %s (%s)\n",fn->name,request?"REQUEST":"REPLY"); + + if (vflag < 2) + return; /* print out the header */ fdata(buf,fmt_smbheader,buf+33); @@ -712,8 +716,16 @@ void nbt_tcp_print(const uchar *data,int length) startbuf = data; if (maxbuf <= data) return; - printf("\n>>> NBT Packet\n"); + if (vflag > 1) + printf ("\n>>> "); + + printf("NBT Packet"); + if (vflag < 2) + return; + + printf("\n"); + switch (flags) { case 1: printf("flags=0x%x\n", flags); @@ -798,7 +810,10 @@ void nbt_udp137_print(const uchar *data, int length) if (maxbuf <= data) return; - printf("\n>>> NBT UDP PACKET(137): "); + if (vflag > 1) + printf("\n>>> "); + + printf("NBT UDP PACKET(137): "); switch (opcode) { case 0: opcodestr = "QUERY"; break; @@ -827,7 +842,8 @@ void nbt_udp137_print(const uchar *data, int length) else printf("; UNICAST"); - if (vflag == 0) return; + if (vflag < 2) + return; printf("\nTrnID=0x%X\nOpCode=%d\nNmFlags=0x%X\nRcode=%d\nQueryCount=%d\nAnswerCount=%d\nAuthorityCount=%d\nAddressRecCount=%d\n", name_trn_id,opcode,nm_flags,rcode,qdcount,ancount,nscount,arcount); @@ -918,8 +934,15 @@ out: void nbt_udp138_print(const uchar *data, int length) { const uchar *maxbuf = data + length; - startbuf = data; + + if (maxbuf > snapend) maxbuf = snapend; if (maxbuf <= data) return; + startbuf = data; + + if (vflag < 2) { + printf("NBT UDP PACKET(138)"); + return; + } data = fdata(data,"\n>>> NBT UDP PACKET(138) Res=[rw] ID=[rw] IP=[b.b.b.b] Port=[rd] Length=[rd] Res2=[rw]\nSourceName=[n1]\nDestName=[n1]\n#",maxbuf); @@ -935,13 +958,21 @@ void nbt_udp138_print(const uchar *data, int length) /* print netbeui frames */ -void netbeui_print(u_short control, const uchar *data, const uchar *maxbuf) +void netbeui_print(u_short control, const uchar *data, int length) { - int len = SVAL(data,0); - int command = CVAL(data,4); - const uchar *data2 = data + len; + const uchar *maxbuf = data + length; + int len; + int command; + const uchar *data2; int is_truncated = 0; + if (maxbuf > snapend) + maxbuf = snapend; + if (&data[7] >= maxbuf) + goto out; + len = SVAL(data,0); + command = CVAL(data,4); + data2 = data + len; if (data2 >= maxbuf) { data2 = maxbuf; is_truncated = 1; @@ -949,6 +980,11 @@ void netbeui_print(u_short control, const uchar *data, const uchar *maxbuf) startbuf = data; + if (vflag < 2) { + printf("NetBeui Packet"); + return; + } + printf("\n>>> NetBeui Packet\nType=0x%X ", control); data = fdata(data,"Length=[d] Signature=[w] Command=[B]\n#",maxbuf); if (data == NULL) @@ -1004,7 +1040,7 @@ void netbeui_print(u_short control, const uchar *data, const uchar *maxbuf) } /* If there isn't enough data for "\377SMB", don't look for it. */ - if (!TTEST2(data2[3], 4)) + if (&data2[3] >= maxbuf) goto out; if (memcmp(data2,"\377SMB",4)==0) { @@ -1012,8 +1048,6 @@ void netbeui_print(u_short control, const uchar *data, const uchar *maxbuf) } else { int i; for (i=0;i<128;i++) { - if (!TTEST2(data2[i], 4)) - break; if (&data2[i+3] >= maxbuf) break; if (memcmp(&data2[i],"\377SMB",4)==0) { @@ -1040,10 +1074,11 @@ void ipx_netbios_print(const uchar *data, u_int length) const uchar *maxbuf; maxbuf = data + length; + /* Don't go past the end of the captured data in the packet. */ + if (maxbuf > snapend) + maxbuf = snapend; startbuf = data; for (i=0;i<128;i++) { - if (!TTEST2(data[i], 4)) - break; if (&data[i+3] >= maxbuf) break; if (memcmp(&data[i],"\377SMB",4)==0) {