X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/d58c39ce13befcab7da81eb0f61c6e3c2652e44a..cff875676ce4da91a345ca476e3da65819c58d46:/print-smb.c diff --git a/print-smb.c b/print-smb.c index a3b30248..85644ad4 100644 --- a/print-smb.c +++ b/print-smb.c @@ -9,7 +9,13 @@ #include "config.h" #endif +#ifndef lint +static const char rcsid[] = + "@(#) $Header: /tcpdump/master/tcpdump/print-smb.c,v 1.5 2000-01-19 05:17:13 itojun Exp $"; +#endif + #include +#include #include #include "interface.h" @@ -17,7 +23,7 @@ static int request=0; -uchar *startbuf=NULL; +const uchar *startbuf=NULL; struct smbdescript { @@ -25,7 +31,8 @@ struct smbdescript char *req_f2; char *rep_f1; char *rep_f2; - void (*fn)(); + void (*fn)(); /* sometimes (u_char *, u_char *, u_char *, u_char *) + and sometimes (u_char *, u_char *, int, int) */ }; struct smbfns @@ -177,9 +184,9 @@ static void print_trans2(uchar *words,uchar *dat,uchar *buf,uchar *maxbuf) } -static void print_browse(uchar *param,int paramlen,uchar *data,int datalen) +static void print_browse(uchar *param,int paramlen,const uchar *data,int datalen) { - uchar *maxbuf = data + datalen; + const uchar *maxbuf = data + datalen; int command = CVAL(data,0); fdata(param,"BROWSE PACKET\n|Param ",param+paramlen); @@ -234,7 +241,6 @@ static void print_browse(uchar *param,int paramlen,uchar *data,int datalen) static void print_ipc(uchar *param,int paramlen,uchar *data,int datalen) { - int command = SVAL(param,0); if (paramlen) fdata(param,"Command=[w]\nStr1=[S]\nStr2=[S]\n",param+paramlen); if (datalen) @@ -247,7 +253,6 @@ static void print_trans(uchar *words,uchar *data1,uchar *buf,uchar *maxbuf) uchar *f1,*f2,*f3,*f4; uchar *data,*param; int datalen,paramlen; - int buflen = SVAL(data1,0); if (request) { paramlen = SVAL(words+1,9*2); @@ -288,7 +293,7 @@ static void print_trans(uchar *words,uchar *data1,uchar *buf,uchar *maxbuf) -void print_negprot(uchar *words,uchar *data,uchar *buf,uchar *maxbuf) +static void print_negprot(uchar *words,uchar *data,uchar *buf,uchar *maxbuf) { uchar *f1=NULL,*f2=NULL; @@ -316,7 +321,7 @@ void print_negprot(uchar *words,uchar *data,uchar *buf,uchar *maxbuf) } -void print_sesssetup(uchar *words,uchar *data,uchar *buf,uchar *maxbuf) +static void print_sesssetup(uchar *words,uchar *data,uchar *buf,uchar *maxbuf) { int wcnt = CVAL(words,0); uchar *f1=NULL,*f2=NULL; @@ -605,10 +610,10 @@ NULL,NULL}}, /******************************************************************* print a SMB message ********************************************************************/ -void print_smb(uchar *buf,uchar *maxbuf) +static void print_smb(const uchar *buf, const uchar *maxbuf) { int command; - uchar *words, *data; + const uchar *words, *data; struct smbfns *fn; char *fmt_smbheader = "[P4]SMB Command = [B]\nError class = [BP1]\nError code = [d]\nFlags1 = [B]\nFlags2 = [B][P13]\nTree ID = [d]\nProc ID = [d]\nUID = [d]\nMID = [d]\nWord Count = [b]\n"; @@ -673,7 +678,7 @@ void print_smb(uchar *buf,uchar *maxbuf) printf("smb_bcc=%d\n",bcc); if (bcc>0) { printf("smb_buf[]=\n"); - print_data(data+2,MIN(bcc,PTR_DIFF(maxbuf,data+2))); + print_data(data + 2, MIN(bcc,PTR_DIFF(maxbuf,data+2))); } } } @@ -698,11 +703,12 @@ void print_smb(uchar *buf,uchar *maxbuf) /* print a NBT packet received across tcp on port 139 */ -void nbt_tcp_print(uchar *data,int length) +void nbt_tcp_print(const uchar *data,int length) { - uchar *maxbuf = data + length; + const uchar *maxbuf = data + length; int flags = CVAL(data,0); int nbt_len = RSVAL(data,2); + startbuf = data; if (maxbuf <= data) return; @@ -715,7 +721,7 @@ void nbt_tcp_print(uchar *data,int length) data = fdata(data,"NBT Session Packet\nFlags=[rw]\nLength=[rd]\n",data+4); if (memcmp(data,"\377SMB",4)==0) { if (nbt_len>PTR_DIFF(maxbuf,data)) - printf("WARNING: Short packet. Try increasing the snap length (%d)\n", + printf("WARNING: Short packet. Try increasing the snap length (%ld)\n", PTR_DIFF(maxbuf,data)); print_smb(data,maxbuf>data+nbt_len?data+nbt_len:maxbuf); } else { @@ -771,9 +777,9 @@ void nbt_tcp_print(uchar *data,int length) /* print a NBT packet received across udp on port 137 */ -void nbt_udp137_print(uchar *data,int length) +void nbt_udp137_print(const uchar *data, int length) { - uchar *maxbuf = data + length; + const uchar *maxbuf = data + length; int name_trn_id = RSVAL(data,0); int response = (CVAL(data,2)>>7); int opcode = (CVAL(data,2) >> 3) & 0xF; @@ -783,15 +789,14 @@ void nbt_udp137_print(uchar *data,int length) int ancount = RSVAL(data,6); int nscount = RSVAL(data,8); int arcount = RSVAL(data,10); - char des[1024]; - char *opcodestr="OPUNKNOWN"; - char *p; + char *opcodestr; + const char *p; startbuf = data; if (maxbuf <= data) return; - strcpy(des,"\n>>> NBT UDP PACKET(137): "); + printf("\n>>> NBT UDP PACKET(137): "); switch (opcode) { case 0: opcodestr = "QUERY"; break; @@ -800,27 +805,26 @@ void nbt_udp137_print(uchar *data,int length) case 7: opcodestr = "WACK"; break; case 8: opcodestr = "REFRESH(8)"; break; case 9: opcodestr = "REFRESH"; break; + default: opcodestr = "OPUNKNOWN"; break; } - strcat(des,opcodestr); + printf("%s", opcodestr); if (response) { if (rcode) - strcat(des,"; NEGATIVE"); + printf("; NEGATIVE"); else - strcat(des,"; POSITIVE"); + printf("; POSITIVE"); } if (response) - strcat(des,"; RESPONSE"); + printf("; RESPONSE"); else - strcat(des,"; REQUEST"); + printf("; REQUEST"); if (nm_flags&1) - strcat(des,"; BROADCAST"); + printf("; BROADCAST"); else - strcat(des,"; UNICAST"); + printf("; UNICAST"); - printf("%s", des); - if (vflag == 0) return; printf("\nTrnID=0x%X\nOpCode=%d\nNmFlags=0x%X\nRcode=%d\nQueryCount=%d\nAnswerCount=%d\nAuthorityCount=%d\nAddressRecCount=%d\n", @@ -861,18 +865,19 @@ void nbt_udp137_print(uchar *data,int length) int numnames = CVAL(p,0); p = fdata(p,"NumNames=[B]\n",p+1); while (numnames--) { - char flags[128]=""; p = fdata(p,"Name=[n2]\t#",maxbuf); - if (p[0] & 0x80) strcat(flags," "); - if (p[0] & 0x60 == 0) strcat(flags,"B "); - if (p[0] & 0x60 == 1) strcat(flags,"P "); - if (p[0] & 0x60 == 2) strcat(flags,"M "); - if (p[0] & 0x60 == 3) strcat(flags,"_ "); - if (p[0] & 0x10) strcat(flags," "); - if (p[0] & 0x08) strcat(flags," "); - if (p[0] & 0x04) strcat(flags," "); - if (p[0] & 0x02) strcat(flags," "); - printf("%s\n",flags); + if (p[0] & 0x80) printf(" "); + switch (p[0] & 0x60) { + case 0x00: printf("B "); break; + case 0x20: printf("P "); break; + case 0x40: printf("M "); break; + case 0x60: printf("_ "); break; + } + if (p[0] & 0x10) printf(" "); + if (p[0] & 0x08) printf(" "); + if (p[0] & 0x04) printf(" "); + if (p[0] & 0x02) printf(" "); + printf("\n"); p += 2; } } else { @@ -897,9 +902,9 @@ void nbt_udp137_print(uchar *data,int length) /* print a NBT packet received across udp on port 138 */ -void nbt_udp138_print(uchar *data,int length) +void nbt_udp138_print(const uchar *data, int length) { - uchar *maxbuf = data + length; + const uchar *maxbuf = data + length; startbuf = data; if (maxbuf <= data) return; @@ -916,11 +921,11 @@ void nbt_udp138_print(uchar *data,int length) /* print netbeui frames */ -void netbeui_print(uchar *data,uchar *maxbuf) +void netbeui_print(const uchar *data, const uchar *maxbuf) { int len = SVAL(data,1); int command = CVAL(data,5); - uchar *data2 = data + 1 + len; + const uchar *data2 = data + 1 + len; startbuf = data; @@ -984,7 +989,7 @@ void netbeui_print(uchar *data,uchar *maxbuf) /* print IPX-Netbios frames */ -void ipx_netbios_print(uchar *data,uchar *maxbuf) +void ipx_netbios_print(const uchar *data, const uchar *maxbuf) { /* this is a hack till I work out how to parse the rest of the IPX stuff */ int i;