123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- typedef struct SmbSession SmbSession;
- typedef struct SmbTree SmbTree;
- typedef struct SmbService SmbService;
- typedef struct SmbPeerInfo SmbPeerInfo;
- typedef struct SmbTransaction SmbTransaction;
- typedef struct SmbBuffer SmbBuffer;
- typedef struct SmbIdMap SmbIdMap;
- typedef struct SmbSearch SmbSearch;
- typedef struct SmbDirCache SmbDirCache;
- typedef struct SmbFile SmbFile;
- typedef struct SmbSharedFile SmbSharedFile;
- typedef struct SmbCifsSession SmbCifsSession;
- typedef struct SmbServerInfo SmbServerInfo;
- typedef struct SmbRapServerInfo1 SmbRapServerInfo1;
- typedef struct SmbFindFileBothDirectoryInfo SmbFindFileBothDirectoryInfo;
- typedef struct SmbLock SmbLock;
- typedef struct SmbLockList SmbLockList;
- typedef struct SmbSlut SmbSlut;
- #pragma incomplete SmbIdMap
- #pragma incomplete SmbBuffer
- #pragma incomplete SmbLockList
- typedef int SMBCIFSWRITEFN(SmbCifsSession *cifs, void *buf, long n);
- typedef int SMBCIFSACCEPTFN(SmbCifsSession *cifs, SMBCIFSWRITEFN **fnp);
- typedef void SMBIDMAPAPPLYFN(void *magic, void *p);
- struct SmbPeerInfo {
- ulong capabilities;
- ushort maxlen;
- uchar securitymode;
- ushort maxmpxcount;
- ushort maxnumbervcs;
- ulong maxbuffersize;
- ulong maxrawsize;
- ulong sessionkey;
- vlong utc;
- short tzoff;
- uchar encryptionkeylength;
- uchar *encryptionkey;
- char *oemdomainname;
- };
- struct SmbTransaction {
- struct {
- char *name;
- ulong tpcount;
- uchar *parameters;
- ulong pcount;
- ulong tdcount;
- uchar *data;
- ulong maxpcount;
- ulong maxdcount;
- ulong maxscount;
- ulong dcount;
- ushort scount;
- ushort *setup;
- ushort flags;
- } in;
- struct {
- ulong tpcount;
- ulong tdcount;
- SmbBuffer *parameters;
- SmbBuffer *data;
- ushort *setup;
- } out;
- };
- enum {
- SmbSessionNeedNegotiate,
- SmbSessionNeedSetup,
- SmbSessionEstablished,
- };
- struct SmbSession {
- NbSession *nbss;
- SmbCifsSession *cifss;
- uchar nextcommand;
- SmbBuffer *response;
- SmbPeerInfo peerinfo;
- Chalstate *cs;
- struct {
- char *accountname;
- char *primarydomain;
- char *nativeos;
- char *nativelanman;
- ushort maxmpxcount;
- MSchapreply mschapreply;
- } client;
- SmbTransaction transaction;
- SmbIdMap *fidmap;
- SmbIdMap *tidmap;
- SmbIdMap *sidmap;
- int state;
- uchar errclass;
- ushort error;
- int tzoff; // as passed to client during negotiation
- SmbService *serv;
- };
- typedef struct SmbHeader {
- uchar command;
- union {
- struct {
- uchar errclass;
- ushort error;
- };
- ulong status;
- };
- uchar flags;
- ushort flags2;
- union {
- struct {
- ushort pidhigh;
- uchar securitysignature[8];
- };
- };
- ushort tid;
- ushort pid;
- ushort uid;
- ushort mid;
- uchar wordcount;
- } SmbHeader;
- typedef enum SmbProcessResult {
- SmbProcessResultOk,
- SmbProcessResultUnimp,
- SmbProcessResultFormat,
- SmbProcessResultMisc,
- SmbProcessResultError,
- SmbProcessResultReply,
- SmbProcessResultDie,
- } SmbProcessResult;
- typedef SmbProcessResult SMBPROCESSFN(SmbSession *s, SmbHeader *h, uchar *pdata, SmbBuffer *);
- typedef struct SmbOpTableEntry SmbOpTableEntry;
- struct SmbOpTableEntry {
- char *name;
- SMBPROCESSFN *process;
- int debug;
- };
- extern SmbOpTableEntry smboptable[256];
- typedef struct SmbGlobals SmbGlobals;
- extern SmbGlobals smbglobals;
- struct SmbServerInfo {
- char *name;
- char *nativelanman;
- uchar vmaj, vmin;
- ulong stype;
- char *remark;
- };
- struct SmbGlobals {
- int maxreceive;
- int unicode;
- SmbServerInfo serverinfo;
- char *nativeos;
- char *primarydomain;
- NbName nbname;
- char *accountname;
- char *mailslotbrowse;
- char *pipelanman;
- int l2sectorsize;
- int l2allocationsize;
- int convertspace;
- struct {
- int fd;
- int print;
- int tids;
- int sids;
- int fids;
- int rap2;
- int find;
- int query;
- int sharedfiles;
- int sessions;
- int rep;
- int poolparanoia;
- int locks;
- } log;
- };
- struct SmbTree {
- long id;
- SmbService *serv;
- };
- struct SmbService {
- Ref;
- char *name;
- char *type;
- ushort stype;
- char *path;
- char *remark;
- SmbService *next;
- };
- extern SmbService *smbservices;
- typedef struct SmbClient SmbClient;
- typedef struct SmbTransactionMethod {
- int (*encodeprimary)(SmbTransaction *t, SmbHeader *h, SmbPeerInfo *p,
- SmbBuffer *ob, uchar *wordcount, ushort *bytecount, char **errmsgp);
- int (*encodesecondary)(SmbTransaction *t, SmbHeader *h, SmbBuffer *ob, char **errmsgp);
- int (*sendrequest)(void *magic, SmbBuffer *ob, char **errmsgp);
- int (*receiveintermediate)(void *magic, uchar *wordcountp, ushort *bytecountp, char **errmsgp);
- int (*receiveresponse)(void *magic, SmbBuffer *ib, char **errmsgp);
- int (*decoderesponse)(SmbTransaction *t, SmbHeader *h, uchar *pdata, SmbBuffer *b, char **errmsgp);
- int (*encoderesponse)(SmbTransaction *t, SmbHeader *h, SmbPeerInfo *p,
- SmbBuffer *ob, char **errmsgp);
- int (*sendresponse)(void *magic, SmbBuffer *ob, char **errmsgp);
- } SmbTransactionMethod;
- extern SmbTransactionMethod smbtransactionmethoddgram;
- struct SmbSearch {
- long id;
- SmbTree *t;
- SmbDirCache *dc;
- Reprog *rep;
- ushort tid;
- };
- struct SmbFile {
- long id;
- SmbTree *t; // tree this belongs to
- int fd;
- char *name;
- int p9mode; // how it was opened
- int share; // additional sharing restictions added by this fid
- int ioallowed;
- SmbSharedFile *sf;
- };
- struct SmbSharedFile {
- ushort type;
- ulong dev;
- vlong path;
- // char *name;
- int share; // current share level
- int deleteonclose;
- SmbLockList *locklist;
- };
- struct SmbLock {
- vlong base;
- vlong limit;
- SmbSession *s; // owning session
- ushort pid; // owning pid
- };
- struct SmbCifsSession {
- int fd;
- void *magic;
- };
- struct SmbClient {
- SmbPeerInfo peerinfo;
- NbSession *nbss;
- SmbBuffer *b;
- ushort ipctid;
- ushort sharetid;
- SmbHeader protoh;
- };
- struct SmbRapServerInfo1 {
- char name[16];
- uchar vmaj;
- uchar vmin;
- ulong type;
- char *remark;
- };
- struct SmbFindFileBothDirectoryInfo {
- ulong fileindex;
- vlong creationtime;
- vlong lastaccesstime;
- vlong lastwritetime;
- vlong changetime;
- vlong endoffile;
- vlong allocationsize;
- ulong extfileattributes;
- char *filename;
- };
- enum {
- SMB_STRING_UNALIGNED = 1,
- SMB_STRING_UPCASE = 2,
- SMB_STRING_UNTERMINATED = 4,
- SMB_STRING_UNICODE = 8,
- SMB_STRING_ASCII = 16,
- SMB_STRING_REVPATH = 32,
- SMB_STRING_PATH = 64,
- SMB_STRING_CONVERT_MASK = SMB_STRING_PATH | SMB_STRING_REVPATH | SMB_STRING_UPCASE,
- };
- struct SmbDirCache {
- Dir *buf;
- long n;
- long i;
- };
- typedef struct SmbTrans2OpTableEntry SmbTrans2OpTableEntry;
- typedef SmbProcessResult SMBTRANS2PROCESSFN(SmbSession *s, SmbHeader *h);
- struct SmbTrans2OpTableEntry {
- char *name;
- SMBTRANS2PROCESSFN *process;
- int debug;
- };
- extern SmbTrans2OpTableEntry smbtrans2optable[];
- extern int smbtrans2optablesize;
- struct SmbSlut {
- char *name;
- int val;
- };
- extern SmbSlut smbopenmodeslut[];
- extern SmbSlut smbsharemodeslut[];
|