#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 <stdio.h>
#include <string.h>
#include <sys/types.h>
static int request=0;
-uchar *startbuf=NULL;
+const uchar *startbuf=NULL;
struct smbdescript
{
}
-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);
/*******************************************************************
print a SMB message
********************************************************************/
-static 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";
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)));
}
}
}
/*
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;
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 {
/*
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;
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;
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",
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,"<GROUP> ");
- if ((p[0] & 0x60) == 0x00) strcat(flags,"B ");
- if ((p[0] & 0x60) == 0x20) strcat(flags,"P ");
- if ((p[0] & 0x60) == 0x40) strcat(flags,"M ");
- if ((p[0] & 0x60) == 0x60) strcat(flags,"_ ");
- if (p[0] & 0x10) strcat(flags,"<DEREGISTERING> ");
- if (p[0] & 0x08) strcat(flags,"<CONFLICT> ");
- if (p[0] & 0x04) strcat(flags,"<ACTIVE> ");
- if (p[0] & 0x02) strcat(flags,"<PERMANENT> ");
- printf("%s\n",flags);
+ if (p[0] & 0x80) printf("<GROUP> ");
+ 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("<DEREGISTERING> ");
+ if (p[0] & 0x08) printf("<CONFLICT> ");
+ if (p[0] & 0x04) printf("<ACTIVE> ");
+ if (p[0] & 0x02) printf("<PERMANENT> ");
+ printf("\n");
p += 2;
}
} else {
/*
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;
/*
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;
/*
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;