summaryrefslogtreecommitdiff
path: root/sys/src/cmd/cifs/cifs.h
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
commite5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch)
treed8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/cifs/cifs.h
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/cifs/cifs.h')
-rwxr-xr-xsys/src/cmd/cifs/cifs.h638
1 files changed, 638 insertions, 0 deletions
diff --git a/sys/src/cmd/cifs/cifs.h b/sys/src/cmd/cifs/cifs.h
new file mode 100755
index 000000000..a600ed7d4
--- /dev/null
+++ b/sys/src/cmd/cifs/cifs.h
@@ -0,0 +1,638 @@
+/* cifs.h */
+
+enum {
+ Proot = 1, /* LSBs of qid.path for root dir */
+ Pinfo = 2, /* LSBs of qid.path for info files */
+ Pshare = 4, /* LSBs of qid.path for share dirs */
+ NBHDRLEN = 4, /* length of a netbios header */
+ T2HDRLEN = 64, /* Transaction2 header length */
+ NO_UID = 0xffff, /* initial UID on connect */
+ NO_TID = 0xffff, /* initial TID on connect */
+ MTU = 0xefff, /* our MTU */
+ CACHETIME = 2, /* seconds read-ahead is valid for */
+ CIFS_FNAME_MAX = 0xff, /* max file path component len */
+ OVERHEAD = 80, /* max packet overhead when reading & writing */
+ IDLE_TIME = 10, /* keepalive send rate in mins */
+ NBNSTOUT = 300, /* Netbios Name Service Timeout (300ms x 3retrys) */
+ NBRPCTOUT = 45*60*1000, /* Netbios RPC Timeout (45sec) */
+ MAX_SHARES = 4096, /* static table of shares attached */
+ RAP_ERR_MOREINFO= 234, /* non-error code, more info to be fetched */
+ MAX_DFS_PATH = 512, /* MS says never more than 250 chars... */
+};
+
+enum {
+ SMB_COM_CREATE_DIRECTORY = 0x00,
+ SMB_COM_DELETE_DIRECTORY = 0x01,
+ SMB_COM_OPEN = 0x02,
+ SMB_COM_CREATE = 0x03,
+ SMB_COM_CLOSE = 0x04,
+ SMB_COM_FLUSH = 0x05,
+ SMB_COM_DELETE = 0x06,
+ SMB_COM_RENAME = 0x07,
+ SMB_COM_QUERY_INFORMATION = 0x08,
+ SMB_COM_SET_INFORMATION = 0x09,
+ SMB_COM_READ = 0x0A,
+ SMB_COM_WRITE = 0x0B,
+ SMB_COM_LOCK_BYTE_RANGE = 0x0C,
+ SMB_COM_UNLOCK_BYTE_RANGE = 0x0D,
+ SMB_COM_CREATE_TEMPORARY = 0x0E,
+ SMB_COM_CREATE_NEW = 0x0F,
+ SMB_COM_CHECK_DIRECTORY = 0x10,
+ SMB_COM_PROCESS_EXIT = 0x11,
+ SMB_COM_SEEK = 0x12,
+ SMB_COM_LOCK_AND_READ = 0x13,
+ SMB_COM_WRITE_AND_UNLOCK = 0x14,
+ SMB_COM_READ_RAW = 0x1A,
+ SMB_COM_READ_MPX = 0x1B,
+ SMB_COM_READ_MPX_SECONDARY = 0x1C,
+ SMB_COM_WRITE_RAW = 0x1D,
+ SMB_COM_WRITE_MPX = 0x1E,
+ SMB_COM_WRITE_MPX_SECONDARY = 0x1F,
+ SMB_COM_WRITE_COMPLETE = 0x20,
+ SMB_COM_QUERY_SERVER = 0x21,
+ SMB_COM_SET_INFORMATION2 = 0x22,
+ SMB_COM_QUERY_INFORMATION2 = 0x23,
+ SMB_COM_LOCKING_ANDX = 0x24,
+ SMB_COM_TRANSACTION = 0x25,
+ SMB_COM_TRANSACTION_SECONDARY = 0x26,
+ SMB_COM_IOCTL = 0x27,
+ SMB_COM_IOCTL_SECONDARY = 0x28,
+ SMB_COM_COPY = 0x29,
+ SMB_COM_MOVE = 0x2A,
+ SMB_COM_ECHO = 0x2B,
+ SMB_COM_WRITE_AND_CLOSE = 0x2C,
+ SMB_COM_OPEN_ANDX = 0x2D,
+ SMB_COM_READ_ANDX = 0x2E,
+ SMB_COM_WRITE_ANDX = 0x2F,
+ SMB_COM_NEW_FILE_SIZE = 0x30,
+ SMB_COM_CLOSE_AND_TREE_DISC = 0x31,
+ SMB_COM_TRANSACTION2 = 0x32,
+ SMB_COM_TRANSACTION2_SECONDARY = 0x33,
+ SMB_COM_FIND_CLOSE2 = 0x34,
+ SMB_COM_FIND_NOTIFY_CLOSE = 0x35,
+ SMB_COM_TREE_CONNECT = 0x70,
+ SMB_COM_TREE_DISCONNECT = 0x71,
+ SMB_COM_NEGOTIATE = 0x72,
+ SMB_COM_SESSION_SETUP_ANDX = 0x73,
+ SMB_COM_LOGOFF_ANDX = 0x74,
+ SMB_COM_TREE_CONNECT_ANDX = 0x75,
+ SMB_COM_QUERY_INFORMATION_DISK = 0x80,
+ SMB_COM_SEARCH = 0x81,
+ SMB_COM_FIND = 0x82,
+ SMB_COM_FIND_UNIQUE = 0x83,
+ SMB_COM_FIND_CLOSE = 0x84,
+ SMB_COM_NT_TRANSACT = 0xA0,
+ SMB_COM_NT_TRANSACT_SECONDARY = 0xA1,
+ SMB_COM_NT_CREATE_ANDX = 0xA2,
+ SMB_COM_NT_CANCEL = 0xA4,
+ SMB_COM_NT_RENAME = 0xA5,
+ SMB_COM_OPEN_PRINT_FILE = 0xC0,
+ SMB_COM_WRITE_PRINT_FILE = 0xC1,
+ SMB_COM_CLOSE_PRINT_FILE = 0xC2,
+ SMB_COM_GET_PRINT_QUEUE = 0xC3,
+ SMB_COM_READ_BULK = 0xD8,
+ SMB_COM_WRITE_BULK = 0xD9,
+ SMB_COM_WRITE_BULK_DATA = 0xDA,
+
+ TRANS2_OPEN2 = 0x00,
+ TRANS2_FIND_FIRST2 = 0x01,
+ TRANS2_FIND_NEXT2 = 0x02,
+ TRANS2_QUERY_FS_INFORMATION = 0x03,
+ TRANS2_QUERY_PATH_INFORMATION = 0x05,
+ TRANS2_SET_PATH_INFORMATION = 0x06,
+ TRANS2_QUERY_FILE_INFORMATION = 0x07,
+ TRANS2_SET_FILE_INFORMATION = 0x08,
+ TRANS2_CREATE_DIRECTORY = 0x0D,
+ TRANS2_SESSION_SETUP = 0x0E,
+ TRANS2_GET_DFS_REFERRAL = 0x10,
+
+ NT_TRANSACT_CREATE = 0x01,
+ NT_TRANSACT_IOCTL = 0x02,
+ NT_TRANSACT_SET_SECURITY_DESC = 0x03,
+ NT_TRANSACT_NOTIFY_CHANGE = 0x04,
+ NT_TRANSACT_RENAME = 0x05,
+ NT_TRANSACT_QUERY_SECURITY_DESC = 0x06
+};
+
+enum { /* CIFS flags */
+ FL_CASELESS_NAMES = 1<<3,
+ FL_CANNONICAL_NAMES = 1<<4,
+
+ FL2_KNOWS_LONG_NAMES = 1<<0,
+ FL2_PACKET_SIGNATURES = 1<<2,
+ FL2_HAS_LONG_NAMES = 1<<6,
+ FL2_EXTENDED_SECURITY = 1<<11,
+ FL2_DFS = 1<<12,
+ FL2_PAGEING_IO = 1<<13, /* allow read of exec only files */
+ FL2_NT_ERRCODES = 1<<14,
+ FL2_UNICODE = 1<<15,
+};
+
+enum { /* Capabilities Negoiated */
+ CAP_RAW_MODE = 1,
+ CAP_MPX_MODE = 1<<1,
+ CAP_UNICODE = 1<<2,
+ CAP_LARGE_FILES = 1<<3, /* 64 bit files */
+ CAP_NT_SMBS = 1<<4,
+ CAP_RPC_REMOTE_APIS = 1<<5,
+ CAP_STATUS32 = 1<<6,
+ CAP_L2_OPLOCKS = 1<<7,
+ CAP_LOCK_READ = 1<<8,
+ CAP_NT_FIND = 1<<9,
+ CAP_DFS = 1<<12,
+ CAP_INFO_PASSTHRU = 1<<13,
+ CAP_LARGE_READX = 1<<14,
+ CAP_LARGE_WRITEX = 1<<15,
+ CAP_UNIX = 1<<23,
+ CAP_BULK_TRANSFER = 1<<29,
+ CAP_COMPRESSED = 1<<30,
+ CAP_EX_SECURE = 1<<31
+};
+
+enum { /* string prefixes */
+ STR_DIALECT = 2,
+ STR_PATH = 3,
+ STR_ASCII = 4,
+};
+
+enum { /* optional support bits in treeconnect */
+ SMB_SUPPROT_SEARCH_BITS = 1,
+ SMB_SHARE_IS_IN_DFS = 2,
+};
+
+enum { /* DFS referal header flags */
+ DFS_HEADER_ROOT = 1, /* Server type, returns root targets */
+ DFS_HEADER_STORAGE = 2, /* server has storage, no more referals */
+ DFS_HEADER_FAILBACK = 4, /* target failback enabled */
+};
+
+enum { /* DFS referal entry flags */
+ DFS_SERVER_ROOT = 1, /* Server type, returns root targets */
+ DFS_REFERAL_LIST = 0x200, /* reply is a list (v3 only) */
+ DFS_REFERAL_SET = 0x400, /* target is a member of a set */
+};
+
+enum { /* share types */
+ STYPE_DISKTREE = 0,
+ STYPE_PRINTQ = 1,
+ STYPE_DEVICE = 2,
+ STYPE_IPC = 3,
+ STYPE_SPECIAL = 4,
+ STYPE_TEMP = 5,
+};
+
+enum { /* Security */
+ SECMODE_USER = 0x01, /* i.e. not share level security */
+ SECMODE_PW_ENCRYPT = 0x02,
+ SECMODE_SIGN_ENABLED = 0x04,
+ SECMODE_SIGN_REQUIRED = 0x08,
+};
+
+enum { /* file access rights */
+ DELETE = 0x00010000,
+ SYNCHRONIZE = 0x00100000,
+
+ READ_CONTROL = 0x00020000,
+ GENERIC_ALL = 0x10000000,
+ GENERIC_EXECUTE = 0x20000000,
+ GENERIC_WRITE = 0x40000000,
+ GENERIC_READ = 0x80000000,
+
+ ATTR_READONLY = 0x0001,
+ ATTR_HIDDEN = 0x0002,
+ ATTR_SYSTEM = 0x0004,
+ ATTR_VOLUME = 0x0008,
+ ATTR_DIRECTORY = 0x0010,
+ ATTR_ARCHIVE = 0x0020,
+ ATTR_DEVICE = 0x0040,
+ ATTR_NORMAL = 0x0080,
+ ATTR_TEMPORARY = 0x0100,
+ ATTR_SPARSE = 0x0200,
+ ATTR_REPARSE = 0x0400,
+ ATTR_COMPRESSED = 0x0800,
+ ATTR_OFFLINE = 0x100, /* offline storage */
+ ATTR_NOT_CONTENT_INDEXED= 0x2000,
+ ATTR_ENCRYPTED = 0x4000,
+ ATTR_POSIX_SEMANTICS = 0x01000000,
+ ATTR_BACKUP_SEMANTICS = 0x02000000,
+ ATTR_DELETE_ON_CLOSE = 0x04000000,
+ ATTR_SEQUENTIAL_SCAN = 0x08000000,
+ ATTR_RANDOM_ACCESS = 0x10000000,
+ ATTR_NO_BUFFERING = 0x20000000,
+ ATTR_WRITE_THROUGH = 0x80000000,
+
+ /* ShareAccess flags */
+ FILE_NO_SHARE = 0,
+ FILE_SHARE_READ = 1,
+ FILE_SHARE_WRITE = 2,
+ FILE_SHARE_DELETE = 4,
+ FILE_SHARE_ALL = 7,
+
+ /* CreateDisposition flags */
+ FILE_SUPERSEDE = 0,
+ FILE_OPEN = 1,
+ FILE_CREATE = 2,
+ FILE_OPEN_IF = 3,
+ FILE_OVERWRITE = 4,
+ FILE_OVERWRITE_IF = 5,
+
+ /* CreateOptions */
+ FILE_DIRECTORY_FILE = 0x00000001,
+ FILE_WRITE_THROUGH = 0x00000002,
+ FILE_SEQUENTIAL_ONLY = 0x00000004,
+ FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008,
+ FILE_SYNCHRONOUS_IO_ALERT = 0x00000010,
+ FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020,
+ FILE_NON_DIRECTORY_FILE = 0x00000040,
+ FILE_CREATE_TREE_CONNECTION = 0x00000080,
+ FILE_COMPLETE_IF_OPLOCKED = 0x00000100,
+ FILE_NO_EA_KNOWLEDGE = 0x00000200,
+ FILE_OPEN_FOR_RECOVERY = 0x00000400,
+ FILE_EIGHT_DOT_THREE_ONLY = 0x00000400, /* samba source says so... */
+ FILE_RANDOM_ACCESS = 0x00000800,
+ FILE_DELETE_ON_CLOSE = 0x00001000,
+ FILE_OPEN_BY_FILE_ID = 0x00002000,
+ FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000,
+ FILE_NO_COMPRESSION = 0x00008000,
+
+ /* open/create result codes */
+ FILE_WAS_OPENED = 1,
+ FILE_WAS_CREATED = 2,
+ FILE_WAS_OVERWRITTEN = 3,
+
+ /* ImpersonationLevel flags */
+ SECURITY_ANONYMOUS = 0,
+ SECURITY_IDENTIFICATION = 1,
+ SECURITY_IMPERSONATION = 2,
+ SECURITY_DELEGATION = 3,
+
+ /* SecurityFlags */
+ SECURITY_CONTEXT_TRACKING = 1,
+ SECURITY_EFFECTIVE_ONLY = 2,
+
+ /* security descriptor bitmask */
+ QUERY_OWNER_SECURITY_INFORMATION = 1,
+ QUERY_GROUP_SECURITY_INFORMATION = 2,
+ QUERY_DACL_SECURITY_INFORMATION = 4,
+ QUERY_SACL_SECURITY_INFORMATION = 8,
+
+};
+
+enum { /* PathInfo/FileInfo infolevels */
+ SMB_INFO_STANDARD = 0x1,
+ SMB_INFO_IS_NAME_VALID = 0x6,
+ SMB_QUERY_FILE_BASIC_INFO = 0x101,
+ SMB_QUERY_FILE_STANDARD_INFO = 0x102,
+ SMB_QUERY_FILE_NAME_INFO = 0x104,
+ SMB_QUERY_FILE_ALLOCATION_INFO = 0x105,
+ SMB_QUERY_FILE_END_OF_FILE_INFO = 0x106,
+ SMB_QUERY_FILE_ALL_INFO = 0x107,
+ SMB_QUERY_ALT_NAME_INFO = 0x108,
+ SMB_QUERY_FILE_STREAM_INFO = 0x109,
+ SMB_QUERY_FILE_COMPRESSION_INFO = 0x10b,
+ SMB_QUERY_FILE_UNIX_BASIC = 0x200,
+ SMB_QUERY_FILE_UNIX_LINK = 0x201,
+
+ SMB_SET_FILE_BASIC_INFO = 0x101,
+ SMB_SET_FILE_DISPOSITION_INFO = 0x102,
+ SMB_SET_FILE_ALLOCATION_INFO = 0x103,
+ SMB_SET_FILE_END_OF_FILE_INFO = 0x104,
+ SMB_SET_FILE_UNIX_BASIC = 0x200,
+ SMB_SET_FILE_UNIX_LINK = 0x201,
+ SMB_SET_FILE_UNIX_HLINK = 0x203,
+ SMB_SET_FILE_BASIC_INFO2 = 0x3ec,
+ SMB_SET_FILE_RENAME_INFORMATION = 0x3f2,
+ SMB_SET_FILE_ALLOCATION_INFO2 = 0x3fb,
+ SMB_SET_FILE_END_OF_FILE_INFO2 = 0x3fc,
+
+ /* Find File infolevels */
+ SMB_FIND_FILE_DIRECTORY_INFO = 0x101,
+ SMB_FIND_FILE_FULL_DIRECTORY_INFO= 0x102,
+ SMB_FIND_FILE_NAMES_INFO = 0x103,
+ SMB_FIND_FILE_BOTH_DIRECTORY_INFO= 0x104,
+ SMB_FIND_FILE_UNIX = 0x202,
+
+ /* Trans2 FindFirst & FindNext */
+ CIFS_SEARCH_CLOSE_ALWAYS = 0x0001,
+ CIFS_SEARCH_CLOSE_AT_END = 0x0002,
+ CIFS_SEARCH_RETURN_RESUME = 0x0004,
+ CIFS_SEARCH_CONTINUE_FROM_LAST = 0x0008,
+ CIFS_SEARCH_BACKUP_SEARCH = 0x0010,
+
+ /* Trans2 FsInfo */
+ SMB_INFO_ALLOCATION = 0x1,
+ SMB_INFO_VOLUME = 0x2,
+ SMB_QUERY_FS_VOLUME_INFO = 0x102,
+ SMB_QUERY_FS_SIZE_INFO = 0x103,
+ SMB_QUERY_FS_DEVICE_INFO = 0x104,
+ SMB_QUERY_FS_ATTRIBUTE_INFO = 0x105,
+ SMB_QUERY_CIFS_UNIX_INFO = 0x200,
+};
+
+enum { /* things to search for in server lookups */
+ LOCAL_AUTHORATIVE_ONLY = 0x40000000,
+ LIST_DOMAINS_ONLY = 0x80000000,
+ ALL_LEARNT_IN_DOMAIN = 0xFFFFFFFF
+};
+
+typedef struct {
+ char *user; /* username */
+ char *windom; /* remote server's domain name */
+ char *resp[2]; /* ASCII/Unicode or LM/NTLM keys */
+ int len[2]; /* length of above */
+ uchar *mackey[2]; /* Message Authentication key */
+} Auth;
+
+typedef struct {
+ int fd; /* File descriptor for I/O */
+ int nbt; /* am using cifs over netbios */
+ int trn; /* TRN (unique RPC) ID */
+ int uid; /* user (authentication) ID */
+ int seq; /* sequence number */
+ int seqrun; /* sequence numbering active */
+ int caps; /* server capabilities */
+ int support; /* support bits */
+ int flags; /* SMB flags */
+ int flags2; /* SMB flags 2 */
+ int nocache; /* disable write behind caching in server */
+ int pid; /* process ID */
+ int mid; /* multiplex ID */
+ int mtu; /* max size of packet */
+ int tz; /* Timezone, mins from UTC */
+ int isguest; /* logged in as guest */
+ int secmode; /* security mode */
+ int macidx; /* which MAC is in use, -1 is none */
+ uchar chal[0xff +1]; /* server's challange for authentication */
+ int challen; /* length of challange */
+ long slip; /* time difference between the server and us */
+ uvlong lastfind; /* nsec when last find peformed */
+ QLock seqlock; /* sequence number increment */
+ QLock rpclock; /* actual remote procedure call */
+ char *cname; /* remote hosts called name (for info) */
+ char *remos; /* remote hosts OS (for info) */
+ Auth *auth; /* authentication info */
+} Session;
+
+typedef struct {
+ Session *s;
+
+ int tid; /* tree ID received from server */
+ int seq; /* sequence number expected in reply */
+
+ uchar *seqbase; /* cifs: pos of sequence number in packet */
+ uchar *wordbase; /* cifs: base of words section of data */
+ uchar *bytebase; /* cifs: base of bytes section of data */
+ uchar *tbase; /* transactions: start of trans packet */
+ uchar *tsetup; /* transactions: start of setup section */
+ uchar *tparam; /* transactions: start of params section */
+ uchar *tdata; /* transactions: start of data section */
+
+ uchar *eop; /* received end of packet */
+ uchar *pos; /* current pos in packet */
+ uchar *buf; /* packet buffer, must be last entry in struct */
+} Pkt;
+
+typedef struct {
+ char *name;
+ int tid; /* not part of the protocol, housekeeping */
+ int options; /* not part of the protocol, housekeeping */
+} Share;
+
+typedef struct {
+ long created; /* last access time */
+ long accessed; /* last access time */
+ long written; /* last written time */
+ long changed; /* change time */
+ uvlong size; /* file size */
+ long attribs; /* attributes */
+ char name[CIFS_FNAME_MAX +1]; /* name */
+} FInfo;
+
+typedef struct {
+ char *wrkstn;
+ char *user;
+ long sesstime;
+ long idletime;
+} Sessinfo;
+
+typedef struct {
+ char *name;
+} Namelist;
+
+typedef struct {
+ char *user;
+ char *comment;
+ char *user_comment;
+ char *fullname;
+} Userinfo;
+
+typedef struct {
+ char *name;
+ int type;
+ char *comment;
+ int perms;
+ int maxusrs;
+ int activeusrs;
+ char *path;
+ char *passwd;
+} Shareinfo2;
+
+typedef struct {
+ char *name;
+ int major;
+ int minor;
+ int type;
+ char *comment;
+} Serverinfo;
+
+typedef struct {
+ int type; /* o=unknown, 1=CIFS, 2=netware 3=domain */
+ int flags; /* 1 == strip off consumed chars before resubmitting */
+ int ttl; /* time to live of this info in secs */
+ int prox; /* lower value is preferred */
+ char *path; /* new path */
+ char *addr; /* new server */
+} Refer;
+
+typedef struct {
+ char *node;
+ char *user;
+ char *langroup;
+ int major;
+ int minor;
+ char *pridom;
+ char *otherdoms;
+} Wrkstainfo;
+
+typedef struct {
+ int ident;
+ int perms;
+ int locks;
+ char *path;
+ char *user;
+} Fileinfo;
+
+extern int Active;
+extern int Checkcase;
+extern int Dfstout;
+extern char *Debug;
+extern char *Host;
+extern Session *Sess;
+extern Share Ipc;
+
+extern Share Shares[MAX_SHARES];
+extern int Nshares;
+
+/* main.c */
+Qid mkqid(char *, int, long, int, long);
+
+/* auth.c */
+Auth *getauth(char *, char *, char *, int, uchar *, int);
+void autherr(void);
+int macsign(Pkt *, int);
+
+/* cifs.c */
+Session *cifsdial(char *, char *, char *);
+void cifsclose(Session *);
+Pkt *cifshdr(Session *, Share *, int);
+void pbytes(Pkt *);
+int cifsrpc(Pkt *);
+int CIFSnegotiate(Session *, long *, char *, int, char *, int);
+int CIFSsession(Session *);
+int CIFStreeconnect(Session *, char *, char *, Share *);
+int CIFSlogoff(Session *);
+int CIFStreedisconnect(Session *, Share *);
+int CIFSdeletefile(Session *, Share *, char *);
+int CIFSdeletedirectory(Session *, Share *, char *);
+int CIFScreatedirectory(Session *, Share *, char *);
+int CIFSrename(Session *, Share *, char *, char *);
+int CIFS_NT_opencreate(Session *, Share *, char *, int, int, int, int, int, int, int *, FInfo *);
+int CIFS_SMB_opencreate(Session *, Share *, char *, int, int, int, int *);
+vlong CIFSwrite(Session *, Share *, int, uvlong, void *, vlong);
+vlong CIFSread(Session *, Share *, int, uvlong, void *, vlong, vlong);
+int CIFSflush(Session *, Share *, int);
+int CIFSclose(Session *, Share *, int);
+int CIFSfindclose2(Session *, Share *, int);
+int CIFSecho(Session *);
+int CIFSsetinfo(Session *, Share *, char *, FInfo *);
+void goff(Pkt *, uchar *, char *, int);
+
+/* dfs.c */
+char *mapfile(char *);
+int mapshare(char *, Share **);
+int redirect(Session *, Share *s, char *);
+int dfscacheinfo(Fmt *);
+char *trimshare(char *);
+
+/* doserrstr.c */
+char *doserrstr(uint);
+
+/* fs.c */
+int shareinfo(Fmt *);
+int conninfo(Fmt *);
+int sessioninfo(Fmt *);
+int userinfo(Fmt *);
+int groupinfo(Fmt *);
+int domaininfo(Fmt *);
+int workstationinfo(Fmt *);
+int dfsrootinfo(Fmt *);
+int openfileinfo(Fmt *);
+int dfsrootinfo(Fmt *);
+int filetableinfo(Fmt *); /* is in main.c due to C scope */
+
+/* info.c */
+int walkinfo(char *);
+int numinfo(void);
+int dirgeninfo(int, Dir *);
+int makeinfo(int);
+int readinfo(int, char *, int, int);
+void freeinfo(int);
+
+/* main.c */
+void usage(void);
+void dmpkey(char *, void *, int);
+void main(int, char **);
+
+/* misc.c */
+char *strupr(char *);
+char *strlwr(char *);
+
+/* netbios.c */
+void Gmem(uchar **, void *, int);
+int calledname(char *, char *);
+int nbtdial(char *, char *, char *);
+void nbthdr(Pkt *);
+int nbtrpc(Pkt *);
+void xd(char *, void *, int);
+
+/* nterrstr.c */
+char *nterrstr(uint);
+
+/* pack.c */
+void *pmem(Pkt *, void *, int);
+void *ppath(Pkt *, char *);
+void *pstr(Pkt *, char *);
+void *pascii(Pkt *, char *);
+void *pl64(Pkt *, uvlong);
+void *pb32(Pkt *, uint);
+void *pl32(Pkt *, uint);
+void *pb16(Pkt *, uint);
+void *pl16(Pkt *, uint);
+void *p8(Pkt *, uint);
+void *pname(Pkt *, char *, char);
+void *pvtime(Pkt *, uvlong);
+void *pdatetime(Pkt *, long);
+void gmem(Pkt *, void *, int);
+void gstr(Pkt *, char *, int);
+void gascii(Pkt *, char *, int);
+uvlong gl64(Pkt *);
+uvlong gb48(Pkt *);
+uint gb32(Pkt *);
+uint gl32(Pkt *);
+uint gb16(Pkt *);
+uint gl16(Pkt *);
+uint g8(Pkt *);
+long gdatetime(Pkt *);
+long gvtime(Pkt *);
+void gconv(Pkt *, int, char *, int);
+
+/* raperrstr.c */
+char *raperrstr(uint);
+
+/* sid2name.c */
+void upd_names(Session *, Share *, char *, Dir *);
+
+/* trans.c */
+int RAPshareenum(Session *, Share *, Share **);
+int RAPshareinfo(Session *, Share *, char *, Shareinfo2 *);
+
+int RAPsessionenum(Session *, Share *, Sessinfo **);
+
+int RAPgroupenum(Session *, Share *, Namelist **);
+int RAPgroupusers(Session *, Share *, char *, Namelist **);
+
+int RAPuserenum(Session *, Share *, Namelist **);
+int RAPuserenum2(Session *, Share *, Namelist **);
+int RAPuserinfo(Session *, Share *, char *, Userinfo *);
+
+int RAPServerenum2(Session *, Share *, char *, int, int *, Serverinfo **);
+int RAPServerenum3(Session *, Share *, char *, int, int, Serverinfo *);
+
+int RAPFileenum2(Session *, Share *, char *, char *, Fileinfo **);
+
+/* trans2.c */
+int T2findfirst(Session *, Share *, int, char *, int *, long *, FInfo *);
+int T2findnext(Session *, Share *, int, char *, int *, long *, FInfo *, int);
+int T2queryall(Session *, Share *, char *, FInfo *);
+int T2querystandard(Session *, Share *, char *, FInfo *);
+int T2setpathinfo(Session *, Share *, char *, FInfo *);
+int T2setfilelength(Session *, Share *, int, FInfo *);
+int T2fsvolumeinfo(Session *, Share *, long *, long *, char *, int);
+int T2fssizeinfo(Session *, Share *, uvlong *, uvlong *);
+int T2getdfsreferral(Session *, Share *, char *, int *, int *, Refer *, int);
+
+/* transnt.c */
+int TNTquerysecurity(Session *, Share *, int, char **, char **);
+
+/* ping.c */
+int ping(char *, int);