smb.h revision 56893
156893Sfenner/* 256893Sfenner Copyright (C) Andrew Tridgell 1995-1999 356893Sfenner 456893Sfenner This software may be distributed either under the terms of the 556893Sfenner BSD-style license that accompanies tcpdump or the GNU GPL version 2 656893Sfenner or later */ 756893Sfenner 856893Sfenner#define CVAL(buf,pos) (((unsigned char *)(buf))[pos]) 956893Sfenner#define PVAL(buf,pos) ((unsigned)CVAL(buf,pos)) 1056893Sfenner#define SCVAL(buf,pos,val) (CVAL(buf,pos) = (val)) 1156893Sfenner 1256893Sfenner#define SVAL(buf,pos) (PVAL(buf,pos)|PVAL(buf,(pos)+1)<<8) 1356893Sfenner#define IVAL(buf,pos) (SVAL(buf,pos)|SVAL(buf,(pos)+2)<<16) 1456893Sfenner#define SSVALX(buf,pos,val) (CVAL(buf,pos)=(val)&0xFF,CVAL(buf,pos+1)=(val)>>8) 1556893Sfenner#define SIVALX(buf,pos,val) (SSVALX(buf,pos,val&0xFFFF),SSVALX(buf,pos+2,val>>16)) 1656893Sfenner#define SVALS(buf,pos) ((int16)SVAL(buf,pos)) 1756893Sfenner#define IVALS(buf,pos) ((int32)IVAL(buf,pos)) 1856893Sfenner#define SSVAL(buf,pos,val) SSVALX((buf),(pos),((uint16)(val))) 1956893Sfenner#define SIVAL(buf,pos,val) SIVALX((buf),(pos),((uint32)(val))) 2056893Sfenner#define SSVALS(buf,pos,val) SSVALX((buf),(pos),((int16)(val))) 2156893Sfenner#define SIVALS(buf,pos,val) SIVALX((buf),(pos),((int32)(val))) 2256893Sfenner 2356893Sfenner/* now the reverse routines - these are used in nmb packets (mostly) */ 2456893Sfenner#define SREV(x) ((((x)&0xFF)<<8) | (((x)>>8)&0xFF)) 2556893Sfenner#define IREV(x) ((SREV(x)<<16) | (SREV((x)>>16))) 2656893Sfenner 2756893Sfenner#define RSVAL(buf,pos) SREV(SVAL(buf,pos)) 2856893Sfenner#define RIVAL(buf,pos) IREV(IVAL(buf,pos)) 2956893Sfenner#define RSSVAL(buf,pos,val) SSVAL(buf,pos,SREV(val)) 3056893Sfenner#define RSIVAL(buf,pos,val) SIVAL(buf,pos,IREV(val)) 3156893Sfenner 3256893Sfenner#define uint16 unsigned short 3356893Sfenner#define uint32 unsigned int 3456893Sfenner#ifndef uchar 3556893Sfenner#define uchar unsigned char 3656893Sfenner#endif 3756893Sfenner 3856893Sfenner#ifndef MIN 3956893Sfenner#define MIN(a,b) ((a)<(b)?(a):(b)) 4056893Sfenner#endif 4156893Sfenner 4256893Sfenner/* the complete */ 4356893Sfenner#define SMBmkdir 0x00 /* create directory */ 4456893Sfenner#define SMBrmdir 0x01 /* delete directory */ 4556893Sfenner#define SMBopen 0x02 /* open file */ 4656893Sfenner#define SMBcreate 0x03 /* create file */ 4756893Sfenner#define SMBclose 0x04 /* close file */ 4856893Sfenner#define SMBflush 0x05 /* flush file */ 4956893Sfenner#define SMBunlink 0x06 /* delete file */ 5056893Sfenner#define SMBmv 0x07 /* rename file */ 5156893Sfenner#define SMBgetatr 0x08 /* get file attributes */ 5256893Sfenner#define SMBsetatr 0x09 /* set file attributes */ 5356893Sfenner#define SMBread 0x0A /* read from file */ 5456893Sfenner#define SMBwrite 0x0B /* write to file */ 5556893Sfenner#define SMBlock 0x0C /* lock byte range */ 5656893Sfenner#define SMBunlock 0x0D /* unlock byte range */ 5756893Sfenner#define SMBctemp 0x0E /* create temporary file */ 5856893Sfenner#define SMBmknew 0x0F /* make new file */ 5956893Sfenner#define SMBchkpth 0x10 /* check directory path */ 6056893Sfenner#define SMBexit 0x11 /* process exit */ 6156893Sfenner#define SMBlseek 0x12 /* seek */ 6256893Sfenner#define SMBtcon 0x70 /* tree connect */ 6356893Sfenner#define SMBtconX 0x75 /* tree connect and X*/ 6456893Sfenner#define SMBtdis 0x71 /* tree disconnect */ 6556893Sfenner#define SMBnegprot 0x72 /* negotiate protocol */ 6656893Sfenner#define SMBdskattr 0x80 /* get disk attributes */ 6756893Sfenner#define SMBsearch 0x81 /* search directory */ 6856893Sfenner#define SMBsplopen 0xC0 /* open print spool file */ 6956893Sfenner#define SMBsplwr 0xC1 /* write to print spool file */ 7056893Sfenner#define SMBsplclose 0xC2 /* close print spool file */ 7156893Sfenner#define SMBsplretq 0xC3 /* return print queue */ 7256893Sfenner#define SMBsends 0xD0 /* send single block message */ 7356893Sfenner#define SMBsendb 0xD1 /* send broadcast message */ 7456893Sfenner#define SMBfwdname 0xD2 /* forward user name */ 7556893Sfenner#define SMBcancelf 0xD3 /* cancel forward */ 7656893Sfenner#define SMBgetmac 0xD4 /* get machine name */ 7756893Sfenner#define SMBsendstrt 0xD5 /* send start of multi-block message */ 7856893Sfenner#define SMBsendend 0xD6 /* send end of multi-block message */ 7956893Sfenner#define SMBsendtxt 0xD7 /* send text of multi-block message */ 8056893Sfenner 8156893Sfenner/* Core+ protocol */ 8256893Sfenner#define SMBlockread 0x13 /* Lock a range and read */ 8356893Sfenner#define SMBwriteunlock 0x14 /* Unlock a range then write */ 8456893Sfenner#define SMBreadbraw 0x1a /* read a block of data with no smb header */ 8556893Sfenner#define SMBwritebraw 0x1d /* write a block of data with no smb header */ 8656893Sfenner#define SMBwritec 0x20 /* secondary write request */ 8756893Sfenner#define SMBwriteclose 0x2c /* write a file then close it */ 8856893Sfenner 8956893Sfenner/* dos extended protocol */ 9056893Sfenner#define SMBreadBraw 0x1A /* read block raw */ 9156893Sfenner#define SMBreadBmpx 0x1B /* read block multiplexed */ 9256893Sfenner#define SMBreadBs 0x1C /* read block (secondary response) */ 9356893Sfenner#define SMBwriteBraw 0x1D /* write block raw */ 9456893Sfenner#define SMBwriteBmpx 0x1E /* write block multiplexed */ 9556893Sfenner#define SMBwriteBs 0x1F /* write block (secondary request) */ 9656893Sfenner#define SMBwriteC 0x20 /* write complete response */ 9756893Sfenner#define SMBsetattrE 0x22 /* set file attributes expanded */ 9856893Sfenner#define SMBgetattrE 0x23 /* get file attributes expanded */ 9956893Sfenner#define SMBlockingX 0x24 /* lock/unlock byte ranges and X */ 10056893Sfenner#define SMBtrans 0x25 /* transaction - name, bytes in/out */ 10156893Sfenner#define SMBtranss 0x26 /* transaction (secondary request/response) */ 10256893Sfenner#define SMBioctl 0x27 /* IOCTL */ 10356893Sfenner#define SMBioctls 0x28 /* IOCTL (secondary request/response) */ 10456893Sfenner#define SMBcopy 0x29 /* copy */ 10556893Sfenner#define SMBmove 0x2A /* move */ 10656893Sfenner#define SMBecho 0x2B /* echo */ 10756893Sfenner#define SMBopenX 0x2D /* open and X */ 10856893Sfenner#define SMBreadX 0x2E /* read and X */ 10956893Sfenner#define SMBwriteX 0x2F /* write and X */ 11056893Sfenner#define SMBsesssetupX 0x73 /* Session Set Up & X (including User Logon) */ 11156893Sfenner#define SMBffirst 0x82 /* find first */ 11256893Sfenner#define SMBfunique 0x83 /* find unique */ 11356893Sfenner#define SMBfclose 0x84 /* find close */ 11456893Sfenner#define SMBinvalid 0xFE /* invalid command */ 11556893Sfenner 11656893Sfenner/* Extended 2.0 protocol */ 11756893Sfenner#define SMBtrans2 0x32 /* TRANS2 protocol set */ 11856893Sfenner#define SMBtranss2 0x33 /* TRANS2 protocol set, secondary command */ 11956893Sfenner#define SMBfindclose 0x34 /* Terminate a TRANSACT2_FINDFIRST */ 12056893Sfenner#define SMBfindnclose 0x35 /* Terminate a TRANSACT2_FINDNOTIFYFIRST */ 12156893Sfenner#define SMBulogoffX 0x74 /* user logoff */ 12256893Sfenner 12356893Sfenner/* NT SMB extensions. */ 12456893Sfenner#define SMBnttrans 0xA0 /* NT transact */ 12556893Sfenner#define SMBnttranss 0xA1 /* NT transact secondary */ 12656893Sfenner#define SMBntcreateX 0xA2 /* NT create and X */ 12756893Sfenner#define SMBntcancel 0xA4 /* NT cancel */ 12856893Sfenner 12956893Sfenner/* pathworks special */ 13056893Sfenner#define pSETDIR '\377' 13156893Sfenner 13256893Sfenner 13356893Sfenner/* these are the TRANS2 sub commands */ 13456893Sfenner#define TRANSACT2_OPEN 0 13556893Sfenner#define TRANSACT2_FINDFIRST 1 13656893Sfenner#define TRANSACT2_FINDNEXT 2 13756893Sfenner#define TRANSACT2_QFSINFO 3 13856893Sfenner#define TRANSACT2_SETFSINFO 4 13956893Sfenner#define TRANSACT2_QPATHINFO 5 14056893Sfenner#define TRANSACT2_SETPATHINFO 6 14156893Sfenner#define TRANSACT2_QFILEINFO 7 14256893Sfenner#define TRANSACT2_SETFILEINFO 8 14356893Sfenner#define TRANSACT2_FSCTL 9 14456893Sfenner#define TRANSACT2_IOCTL 10 14556893Sfenner#define TRANSACT2_FINDNOTIFYFIRST 11 14656893Sfenner#define TRANSACT2_FINDNOTIFYNEXT 12 14756893Sfenner#define TRANSACT2_MKDIR 13 14856893Sfenner 14956893Sfenner#define PTR_DIFF(p1,p2) ((unsigned long)(((char *)(p1)) - (char *)(p2))) 15056893Sfenner 15156893Sfenner/* some protos */ 15256893Sfennerconst uchar *fdata(const uchar *buf, const char *fmt, const uchar *maxbuf); 153