cifs.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. /*
  2. * This file is part of the UCB release of Plan 9. It is subject to the license
  3. * terms in the LICENSE file found in the top-level directory of this
  4. * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
  5. * part of the UCB release of Plan 9, including this file, may be copied,
  6. * modified, propagated, or distributed except according to the terms contained
  7. * in the LICENSE file.
  8. */
  9. /* cifs.h */
  10. enum {
  11. Proot = 1, /* LSBs of qid.path for root dir */
  12. Pinfo = 2, /* LSBs of qid.path for info files */
  13. Pshare = 4, /* LSBs of qid.path for share dirs */
  14. NBHDRLEN = 4, /* length of a netbios header */
  15. T2HDRLEN = 64, /* Transaction2 header length */
  16. NO_UID = 0xffff, /* initial UID on connect */
  17. NO_TID = 0xffff, /* initial TID on connect */
  18. MTU = 0xefff, /* our MTU */
  19. CACHETIME = 2, /* seconds read-ahead is valid for */
  20. CIFS_FNAME_MAX = 0xff, /* max file path component len */
  21. OVERHEAD = 80, /* max packet overhead when reading & writing */
  22. IDLE_TIME = 10, /* keepalive send rate in mins */
  23. NBNSTOUT = 300, /* Netbios Name Service Timeout (300ms x 3retrys) */
  24. NBRPCTOUT = 45*60*1000, /* Netbios RPC Timeout (45sec) */
  25. MAX_SHARES = 4096, /* static table of shares attached */
  26. RAP_ERR_MOREINFO= 234, /* non-error code, more info to be fetched */
  27. MAX_DFS_PATH = 512, /* MS says never more than 250 chars... */
  28. };
  29. enum {
  30. SMB_COM_CREATE_DIRECTORY = 0x00,
  31. SMB_COM_DELETE_DIRECTORY = 0x01,
  32. SMB_COM_OPEN = 0x02,
  33. SMB_COM_CREATE = 0x03,
  34. SMB_COM_CLOSE = 0x04,
  35. SMB_COM_FLUSH = 0x05,
  36. SMB_COM_DELETE = 0x06,
  37. SMB_COM_RENAME = 0x07,
  38. SMB_COM_QUERY_INFORMATION = 0x08,
  39. SMB_COM_SET_INFORMATION = 0x09,
  40. SMB_COM_READ = 0x0A,
  41. SMB_COM_WRITE = 0x0B,
  42. SMB_COM_LOCK_BYTE_RANGE = 0x0C,
  43. SMB_COM_UNLOCK_BYTE_RANGE = 0x0D,
  44. SMB_COM_CREATE_TEMPORARY = 0x0E,
  45. SMB_COM_CREATE_NEW = 0x0F,
  46. SMB_COM_CHECK_DIRECTORY = 0x10,
  47. SMB_COM_PROCESS_EXIT = 0x11,
  48. SMB_COM_SEEK = 0x12,
  49. SMB_COM_LOCK_AND_READ = 0x13,
  50. SMB_COM_WRITE_AND_UNLOCK = 0x14,
  51. SMB_COM_READ_RAW = 0x1A,
  52. SMB_COM_READ_MPX = 0x1B,
  53. SMB_COM_READ_MPX_SECONDARY = 0x1C,
  54. SMB_COM_WRITE_RAW = 0x1D,
  55. SMB_COM_WRITE_MPX = 0x1E,
  56. SMB_COM_WRITE_MPX_SECONDARY = 0x1F,
  57. SMB_COM_WRITE_COMPLETE = 0x20,
  58. SMB_COM_QUERY_SERVER = 0x21,
  59. SMB_COM_SET_INFORMATION2 = 0x22,
  60. SMB_COM_QUERY_INFORMATION2 = 0x23,
  61. SMB_COM_LOCKING_ANDX = 0x24,
  62. SMB_COM_TRANSACTION = 0x25,
  63. SMB_COM_TRANSACTION_SECONDARY = 0x26,
  64. SMB_COM_IOCTL = 0x27,
  65. SMB_COM_IOCTL_SECONDARY = 0x28,
  66. SMB_COM_COPY = 0x29,
  67. SMB_COM_MOVE = 0x2A,
  68. SMB_COM_ECHO = 0x2B,
  69. SMB_COM_WRITE_AND_CLOSE = 0x2C,
  70. SMB_COM_OPEN_ANDX = 0x2D,
  71. SMB_COM_READ_ANDX = 0x2E,
  72. SMB_COM_WRITE_ANDX = 0x2F,
  73. SMB_COM_NEW_FILE_SIZE = 0x30,
  74. SMB_COM_CLOSE_AND_TREE_DISC = 0x31,
  75. SMB_COM_TRANSACTION2 = 0x32,
  76. SMB_COM_TRANSACTION2_SECONDARY = 0x33,
  77. SMB_COM_FIND_CLOSE2 = 0x34,
  78. SMB_COM_FIND_NOTIFY_CLOSE = 0x35,
  79. SMB_COM_TREE_CONNECT = 0x70,
  80. SMB_COM_TREE_DISCONNECT = 0x71,
  81. SMB_COM_NEGOTIATE = 0x72,
  82. SMB_COM_SESSION_SETUP_ANDX = 0x73,
  83. SMB_COM_LOGOFF_ANDX = 0x74,
  84. SMB_COM_TREE_CONNECT_ANDX = 0x75,
  85. SMB_COM_QUERY_INFORMATION_DISK = 0x80,
  86. SMB_COM_SEARCH = 0x81,
  87. SMB_COM_FIND = 0x82,
  88. SMB_COM_FIND_UNIQUE = 0x83,
  89. SMB_COM_FIND_CLOSE = 0x84,
  90. SMB_COM_NT_TRANSACT = 0xA0,
  91. SMB_COM_NT_TRANSACT_SECONDARY = 0xA1,
  92. SMB_COM_NT_CREATE_ANDX = 0xA2,
  93. SMB_COM_NT_CANCEL = 0xA4,
  94. SMB_COM_NT_RENAME = 0xA5,
  95. SMB_COM_OPEN_PRINT_FILE = 0xC0,
  96. SMB_COM_WRITE_PRINT_FILE = 0xC1,
  97. SMB_COM_CLOSE_PRINT_FILE = 0xC2,
  98. SMB_COM_GET_PRINT_QUEUE = 0xC3,
  99. SMB_COM_READ_BULK = 0xD8,
  100. SMB_COM_WRITE_BULK = 0xD9,
  101. SMB_COM_WRITE_BULK_DATA = 0xDA,
  102. TRANS2_OPEN2 = 0x00,
  103. TRANS2_FIND_FIRST2 = 0x01,
  104. TRANS2_FIND_NEXT2 = 0x02,
  105. TRANS2_QUERY_FS_INFORMATION = 0x03,
  106. TRANS2_QUERY_PATH_INFORMATION = 0x05,
  107. TRANS2_SET_PATH_INFORMATION = 0x06,
  108. TRANS2_QUERY_FILE_INFORMATION = 0x07,
  109. TRANS2_SET_FILE_INFORMATION = 0x08,
  110. TRANS2_CREATE_DIRECTORY = 0x0D,
  111. TRANS2_SESSION_SETUP = 0x0E,
  112. TRANS2_GET_DFS_REFERRAL = 0x10,
  113. NT_TRANSACT_CREATE = 0x01,
  114. NT_TRANSACT_IOCTL = 0x02,
  115. NT_TRANSACT_SET_SECURITY_DESC = 0x03,
  116. NT_TRANSACT_NOTIFY_CHANGE = 0x04,
  117. NT_TRANSACT_RENAME = 0x05,
  118. NT_TRANSACT_QUERY_SECURITY_DESC = 0x06
  119. };
  120. enum { /* CIFS flags */
  121. FL_CASELESS_NAMES = 1<<3,
  122. FL_CANNONICAL_NAMES = 1<<4,
  123. FL2_KNOWS_LONG_NAMES = 1<<0,
  124. FL2_PACKET_SIGNATURES = 1<<2,
  125. FL2_HAS_LONG_NAMES = 1<<6,
  126. FL2_EXTENDED_SECURITY = 1<<11,
  127. FL2_DFS = 1<<12,
  128. FL2_PAGEING_IO = 1<<13, /* allow read of exec only files */
  129. FL2_NT_ERRCODES = 1<<14,
  130. FL2_UNICODE = 1<<15,
  131. };
  132. enum { /* Capabilities Negoiated */
  133. CAP_RAW_MODE = 1,
  134. CAP_MPX_MODE = 1<<1,
  135. CAP_UNICODE = 1<<2,
  136. CAP_LARGE_FILES = 1<<3, /* 64 bit files */
  137. CAP_NT_SMBS = 1<<4,
  138. CAP_RPC_REMOTE_APIS = 1<<5,
  139. CAP_STATUS32 = 1<<6,
  140. CAP_L2_OPLOCKS = 1<<7,
  141. CAP_LOCK_READ = 1<<8,
  142. CAP_NT_FIND = 1<<9,
  143. CAP_DFS = 1<<12,
  144. CAP_INFO_PASSTHRU = 1<<13,
  145. CAP_LARGE_READX = 1<<14,
  146. CAP_LARGE_WRITEX = 1<<15,
  147. CAP_UNIX = 1<<23,
  148. CAP_BULK_TRANSFER = 1<<29,
  149. CAP_COMPRESSED = 1<<30,
  150. CAP_EX_SECURE = 1<<31
  151. };
  152. enum { /* string prefixes */
  153. STR_DIALECT = 2,
  154. STR_PATH = 3,
  155. STR_ASCII = 4,
  156. };
  157. enum { /* optional support bits in treeconnect */
  158. SMB_SUPPROT_SEARCH_BITS = 1,
  159. SMB_SHARE_IS_IN_DFS = 2,
  160. };
  161. enum { /* DFS referal header flags */
  162. DFS_HEADER_ROOT = 1, /* Server type, returns root targets */
  163. DFS_HEADER_STORAGE = 2, /* server has storage, no more referals */
  164. DFS_HEADER_FAILBACK = 4, /* target failback enabled */
  165. };
  166. enum { /* DFS referal entry flags */
  167. DFS_SERVER_ROOT = 1, /* Server type, returns root targets */
  168. DFS_REFERAL_LIST = 0x200, /* reply is a list (v3 only) */
  169. DFS_REFERAL_SET = 0x400, /* target is a member of a set */
  170. };
  171. enum { /* share types */
  172. STYPE_DISKTREE = 0,
  173. STYPE_PRINTQ = 1,
  174. STYPE_DEVICE = 2,
  175. STYPE_IPC = 3,
  176. STYPE_SPECIAL = 4,
  177. STYPE_TEMP = 5,
  178. };
  179. enum { /* Security */
  180. SECMODE_USER = 0x01, /* i.e. not share level security */
  181. SECMODE_PW_ENCRYPT = 0x02,
  182. SECMODE_SIGN_ENABLED = 0x04,
  183. SECMODE_SIGN_REQUIRED = 0x08,
  184. };
  185. enum { /* file access rights */
  186. DELETE = 0x00010000,
  187. SYNCHRONIZE = 0x00100000,
  188. READ_CONTROL = 0x00020000,
  189. GENERIC_ALL = 0x10000000,
  190. GENERIC_EXECUTE = 0x20000000,
  191. GENERIC_WRITE = 0x40000000,
  192. GENERIC_READ = 0x80000000,
  193. ATTR_READONLY = 0x0001,
  194. ATTR_HIDDEN = 0x0002,
  195. ATTR_SYSTEM = 0x0004,
  196. ATTR_VOLUME = 0x0008,
  197. ATTR_DIRECTORY = 0x0010,
  198. ATTR_ARCHIVE = 0x0020,
  199. ATTR_DEVICE = 0x0040,
  200. ATTR_NORMAL = 0x0080,
  201. ATTR_TEMPORARY = 0x0100,
  202. ATTR_SPARSE = 0x0200,
  203. ATTR_REPARSE = 0x0400,
  204. ATTR_COMPRESSED = 0x0800,
  205. ATTR_OFFLINE = 0x100, /* offline storage */
  206. ATTR_NOT_CONTENT_INDEXED= 0x2000,
  207. ATTR_ENCRYPTED = 0x4000,
  208. ATTR_POSIX_SEMANTICS = 0x01000000,
  209. ATTR_BACKUP_SEMANTICS = 0x02000000,
  210. ATTR_DELETE_ON_CLOSE = 0x04000000,
  211. ATTR_SEQUENTIAL_SCAN = 0x08000000,
  212. ATTR_RANDOM_ACCESS = 0x10000000,
  213. ATTR_NO_BUFFERING = 0x20000000,
  214. ATTR_WRITE_THROUGH = 0x80000000,
  215. /* ShareAccess flags */
  216. FILE_NO_SHARE = 0,
  217. FILE_SHARE_READ = 1,
  218. FILE_SHARE_WRITE = 2,
  219. FILE_SHARE_DELETE = 4,
  220. FILE_SHARE_ALL = 7,
  221. /* CreateDisposition flags */
  222. FILE_SUPERSEDE = 0,
  223. FILE_OPEN = 1,
  224. FILE_CREATE = 2,
  225. FILE_OPEN_IF = 3,
  226. FILE_OVERWRITE = 4,
  227. FILE_OVERWRITE_IF = 5,
  228. /* CreateOptions */
  229. FILE_DIRECTORY_FILE = 0x00000001,
  230. FILE_WRITE_THROUGH = 0x00000002,
  231. FILE_SEQUENTIAL_ONLY = 0x00000004,
  232. FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008,
  233. FILE_SYNCHRONOUS_IO_ALERT = 0x00000010,
  234. FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020,
  235. FILE_NON_DIRECTORY_FILE = 0x00000040,
  236. FILE_CREATE_TREE_CONNECTION = 0x00000080,
  237. FILE_COMPLETE_IF_OPLOCKED = 0x00000100,
  238. FILE_NO_EA_KNOWLEDGE = 0x00000200,
  239. FILE_OPEN_FOR_RECOVERY = 0x00000400,
  240. FILE_EIGHT_DOT_THREE_ONLY = 0x00000400, /* samba source says so... */
  241. FILE_RANDOM_ACCESS = 0x00000800,
  242. FILE_DELETE_ON_CLOSE = 0x00001000,
  243. FILE_OPEN_BY_FILE_ID = 0x00002000,
  244. FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000,
  245. FILE_NO_COMPRESSION = 0x00008000,
  246. /* open/create result codes */
  247. FILE_WAS_OPENED = 1,
  248. FILE_WAS_CREATED = 2,
  249. FILE_WAS_OVERWRITTEN = 3,
  250. /* ImpersonationLevel flags */
  251. SECURITY_ANONYMOUS = 0,
  252. SECURITY_IDENTIFICATION = 1,
  253. SECURITY_IMPERSONATION = 2,
  254. SECURITY_DELEGATION = 3,
  255. /* SecurityFlags */
  256. SECURITY_CONTEXT_TRACKING = 1,
  257. SECURITY_EFFECTIVE_ONLY = 2,
  258. /* security descriptor bitmask */
  259. QUERY_OWNER_SECURITY_INFORMATION = 1,
  260. QUERY_GROUP_SECURITY_INFORMATION = 2,
  261. QUERY_DACL_SECURITY_INFORMATION = 4,
  262. QUERY_SACL_SECURITY_INFORMATION = 8,
  263. };
  264. enum { /* PathInfo/FileInfo infolevels */
  265. SMB_INFO_STANDARD = 0x1,
  266. SMB_INFO_IS_NAME_VALID = 0x6,
  267. SMB_QUERY_FILE_BASIC_INFO = 0x101,
  268. SMB_QUERY_FILE_STANDARD_INFO = 0x102,
  269. SMB_QUERY_FILE_NAME_INFO = 0x104,
  270. SMB_QUERY_FILE_ALLOCATION_INFO = 0x105,
  271. SMB_QUERY_FILE_END_OF_FILE_INFO = 0x106,
  272. SMB_QUERY_FILE_ALL_INFO = 0x107,
  273. SMB_QUERY_ALT_NAME_INFO = 0x108,
  274. SMB_QUERY_FILE_STREAM_INFO = 0x109,
  275. SMB_QUERY_FILE_COMPRESSION_INFO = 0x10b,
  276. SMB_QUERY_FILE_UNIX_BASIC = 0x200,
  277. SMB_QUERY_FILE_UNIX_LINK = 0x201,
  278. SMB_SET_FILE_BASIC_INFO = 0x101,
  279. SMB_SET_FILE_DISPOSITION_INFO = 0x102,
  280. SMB_SET_FILE_ALLOCATION_INFO = 0x103,
  281. SMB_SET_FILE_END_OF_FILE_INFO = 0x104,
  282. SMB_SET_FILE_UNIX_BASIC = 0x200,
  283. SMB_SET_FILE_UNIX_LINK = 0x201,
  284. SMB_SET_FILE_UNIX_HLINK = 0x203,
  285. SMB_SET_FILE_BASIC_INFO2 = 0x3ec,
  286. SMB_SET_FILE_RENAME_INFORMATION = 0x3f2,
  287. SMB_SET_FILE_ALLOCATION_INFO2 = 0x3fb,
  288. SMB_SET_FILE_END_OF_FILE_INFO2 = 0x3fc,
  289. /* Find File infolevels */
  290. SMB_FIND_FILE_DIRECTORY_INFO = 0x101,
  291. SMB_FIND_FILE_FULL_DIRECTORY_INFO= 0x102,
  292. SMB_FIND_FILE_NAMES_INFO = 0x103,
  293. SMB_FIND_FILE_BOTH_DIRECTORY_INFO= 0x104,
  294. SMB_FIND_FILE_UNIX = 0x202,
  295. /* Trans2 FindFirst & FindNext */
  296. CIFS_SEARCH_CLOSE_ALWAYS = 0x0001,
  297. CIFS_SEARCH_CLOSE_AT_END = 0x0002,
  298. CIFS_SEARCH_RETURN_RESUME = 0x0004,
  299. CIFS_SEARCH_CONTINUE_FROM_LAST = 0x0008,
  300. CIFS_SEARCH_BACKUP_SEARCH = 0x0010,
  301. /* Trans2 FsInfo */
  302. SMB_INFO_ALLOCATION = 0x1,
  303. SMB_INFO_VOLUME = 0x2,
  304. SMB_QUERY_FS_VOLUME_INFO = 0x102,
  305. SMB_QUERY_FS_SIZE_INFO = 0x103,
  306. SMB_QUERY_FS_DEVICE_INFO = 0x104,
  307. SMB_QUERY_FS_ATTRIBUTE_INFO = 0x105,
  308. SMB_QUERY_CIFS_UNIX_INFO = 0x200,
  309. };
  310. enum { /* things to search for in server lookups */
  311. LOCAL_AUTHORATIVE_ONLY = 0x40000000,
  312. LIST_DOMAINS_ONLY = 0x80000000,
  313. ALL_LEARNT_IN_DOMAIN = 0xFFFFFFFF
  314. };
  315. typedef struct {
  316. char *user; /* username */
  317. char *windom; /* remote server's domain name */
  318. char *resp[2]; /* ASCII/Unicode or LM/NTLM keys */
  319. int len[2]; /* length of above */
  320. unsigned char *mackey[2]; /* Message Authentication key */
  321. } Auth;
  322. typedef struct {
  323. int fd; /* File descriptor for I/O */
  324. int nbt; /* am using cifs over netbios */
  325. int trn; /* TRN (unique RPC) ID */
  326. int uid; /* user (authentication) ID */
  327. int seq; /* sequence number */
  328. int seqrun; /* sequence numbering active */
  329. int caps; /* server capabilities */
  330. int support; /* support bits */
  331. int flags; /* SMB flags */
  332. int flags2; /* SMB flags 2 */
  333. int nocache; /* disable write behind caching in server */
  334. int pid; /* process ID */
  335. int mid; /* multiplex ID */
  336. int mtu; /* max size of packet */
  337. int tz; /* Timezone, mins from UTC */
  338. int isguest; /* logged in as guest */
  339. int secmode; /* security mode */
  340. int macidx; /* which MAC is in use, -1 is none */
  341. unsigned char chal[0xff +1]; /* server's challange for authentication */
  342. int challen; /* length of challange */
  343. int32_t slip; /* time difference between the server and us */
  344. uint64_t lastfind; /* nsec when last find peformed */
  345. QLock seqlock; /* sequence number increment */
  346. QLock rpclock; /* actual remote procedure call */
  347. char *cname; /* remote hosts called name (for info) */
  348. char *remos; /* remote hosts OS (for info) */
  349. Auth *auth; /* authentication info */
  350. } Session;
  351. typedef struct {
  352. Session *s;
  353. int tid; /* tree ID received from server */
  354. int seq; /* sequence number expected in reply */
  355. unsigned char *seqbase; /* cifs: pos of sequence number in packet */
  356. unsigned char *wordbase; /* cifs: base of words section of data */
  357. unsigned char *bytebase; /* cifs: base of bytes section of data */
  358. unsigned char *tbase; /* transactions: start of trans packet */
  359. unsigned char *tsetup; /* transactions: start of setup section */
  360. unsigned char *tparam; /* transactions: start of params section */
  361. unsigned char *tdata; /* transactions: start of data section */
  362. unsigned char *eop; /* received end of packet */
  363. unsigned char *pos; /* current pos in packet */
  364. unsigned char *buf; /* packet buffer, must be last entry in struct */
  365. } Pkt;
  366. typedef struct {
  367. char *name;
  368. int tid; /* not part of the protocol, housekeeping */
  369. int options; /* not part of the protocol, housekeeping */
  370. } Share;
  371. typedef struct {
  372. int32_t created; /* last access time */
  373. int32_t accessed; /* last access time */
  374. int32_t written; /* last written time */
  375. int32_t changed; /* change time */
  376. uint64_t size; /* file size */
  377. int32_t attribs; /* attributes */
  378. char name[CIFS_FNAME_MAX +1]; /* name */
  379. } FInfo;
  380. typedef struct {
  381. char *wrkstn;
  382. char *user;
  383. int32_t sesstime;
  384. int32_t idletime;
  385. } Sessinfo;
  386. typedef struct {
  387. char *name;
  388. } Namelist;
  389. typedef struct {
  390. char *user;
  391. char *comment;
  392. char *user_comment;
  393. char *fullname;
  394. } Userinfo;
  395. typedef struct {
  396. char *name;
  397. int type;
  398. char *comment;
  399. int perms;
  400. int maxusrs;
  401. int activeusrs;
  402. char *path;
  403. char *passwd;
  404. } Shareinfo2;
  405. typedef struct {
  406. char *name;
  407. int major;
  408. int minor;
  409. int type;
  410. char *comment;
  411. } Serverinfo;
  412. typedef struct {
  413. int type; /* o=unknown, 1=CIFS, 2=netware 3=domain */
  414. int flags; /* 1 == strip off consumed chars before resubmitting */
  415. int ttl; /* time to live of this info in secs */
  416. int prox; /* lower value is preferred */
  417. char *path; /* new path */
  418. char *addr; /* new server */
  419. } Refer;
  420. typedef struct {
  421. char *node;
  422. char *user;
  423. char *langroup;
  424. int major;
  425. int minor;
  426. char *pridom;
  427. char *otherdoms;
  428. } Wrkstainfo;
  429. typedef struct {
  430. int ident;
  431. int perms;
  432. int locks;
  433. char *path;
  434. char *user;
  435. } Fileinfo;
  436. extern int Active;
  437. extern int Checkcase;
  438. extern int Dfstout;
  439. extern char *Debug;
  440. extern char *Host;
  441. extern Session *Sess;
  442. extern Share Ipc;
  443. extern Share Shares[MAX_SHARES];
  444. extern int Nshares;
  445. /* main.c */
  446. Qid mkqid(char *, int, int32_t, int, int32_t);
  447. /* auth.c */
  448. Auth *getauth(char *, char *, char *, int, unsigned char *, int);
  449. void autherr(void);
  450. int macsign(Pkt *, int);
  451. /* cifs.c */
  452. Session *cifsdial(char *, char *, char *);
  453. void cifsclose(Session *);
  454. Pkt *cifshdr(Session *, Share *, int);
  455. void pbytes(Pkt *);
  456. int cifsrpc(Pkt *);
  457. int CIFSnegotiate(Session *, int32_t *, char *, int, char *, int);
  458. int CIFSsession(Session *);
  459. int CIFStreeconnect(Session *, char *, char *, Share *);
  460. int CIFSlogoff(Session *);
  461. int CIFStreedisconnect(Session *, Share *);
  462. int CIFSdeletefile(Session *, Share *, char *);
  463. int CIFSdeletedirectory(Session *, Share *, char *);
  464. int CIFScreatedirectory(Session *, Share *, char *);
  465. int CIFSrename(Session *, Share *, char *, char *);
  466. int CIFS_NT_opencreate(Session *, Share *, char *, int, int, int, int, int, int, int *, FInfo *);
  467. int CIFS_SMB_opencreate(Session *, Share *, char *, int, int, int, int *);
  468. int64_t CIFSwrite(Session *, Share *, int, uint64_t, void *, int64_t);
  469. int64_t CIFSread(Session *, Share *, int, uint64_t, void *, int64_t, int64_t);
  470. int CIFSflush(Session *, Share *, int);
  471. int CIFSclose(Session *, Share *, int);
  472. int CIFSfindclose2(Session *, Share *, int);
  473. int CIFSecho(Session *);
  474. int CIFSsetinfo(Session *, Share *, char *, FInfo *);
  475. void goff(Pkt *, unsigned char *, char *, int);
  476. /* dfs.c */
  477. char *mapfile(char *);
  478. int mapshare(char *, Share **);
  479. int redirect(Session *, Share *s, char *);
  480. int dfscacheinfo(Fmt *);
  481. char *trimshare(char *);
  482. /* doserrstr.c */
  483. char *doserrstr(uint);
  484. /* fs.c */
  485. int shareinfo(Fmt *);
  486. int conninfo(Fmt *);
  487. int sessioninfo(Fmt *);
  488. int userinfo(Fmt *);
  489. int groupinfo(Fmt *);
  490. int domaininfo(Fmt *);
  491. int workstationinfo(Fmt *);
  492. int dfsrootinfo(Fmt *);
  493. int openfileinfo(Fmt *);
  494. int dfsrootinfo(Fmt *);
  495. int filetableinfo(Fmt *); /* is in main.c due to C scope */
  496. /* info.c */
  497. int walkinfo(char *);
  498. int numinfo(void);
  499. int dirgeninfo(int, Dir *);
  500. int makeinfo(int);
  501. int readinfo(int, char *, int, int);
  502. void freeinfo(int);
  503. /* main.c */
  504. void usage(void);
  505. void dmpkey(char *, void *, int);
  506. void main(int, char **);
  507. /* misc.c */
  508. char *strupr(char *);
  509. char *strlwr(char *);
  510. /* netbios.c */
  511. void Gmem(unsigned char **, void *, int);
  512. int calledname(char *, char *);
  513. int nbtdial(char *, char *, char *);
  514. void nbthdr(Pkt *);
  515. int nbtrpc(Pkt *);
  516. void xd(char *, void *, int);
  517. /* nterrstr.c */
  518. char *nterrstr(uint);
  519. /* pack.c */
  520. void *pmem(Pkt *, void *, int);
  521. void *ppath(Pkt *, char *);
  522. void *pstr(Pkt *, char *);
  523. void *pascii(Pkt *, char *);
  524. void *pl64(Pkt *, uint64_t);
  525. void *pb32(Pkt *, uint);
  526. void *pl32(Pkt *, uint);
  527. void *pb16(Pkt *, uint);
  528. void *pl16(Pkt *, uint);
  529. void *p8(Pkt *, uint);
  530. void *pname(Pkt *, char *, char);
  531. void *pvtime(Pkt *, uint64_t);
  532. void *pdatetime(Pkt *, int32_t);
  533. void gmem(Pkt *, void *, int);
  534. void gstr(Pkt *, char *, int);
  535. void gascii(Pkt *, char *, int);
  536. uint64_t gl64(Pkt *);
  537. uint64_t gb48(Pkt *);
  538. uint gb32(Pkt *);
  539. uint gl32(Pkt *);
  540. uint gb16(Pkt *);
  541. uint gl16(Pkt *);
  542. uint g8(Pkt *);
  543. int32_t gdatetime(Pkt *);
  544. int32_t gvtime(Pkt *);
  545. void gconv(Pkt *, int, char *, int);
  546. /* raperrstr.c */
  547. char *raperrstr(uint);
  548. /* sid2name.c */
  549. void upd_names(Session *, Share *, char *, Dir *);
  550. /* trans.c */
  551. int RAPshareenum(Session *, Share *, Share **);
  552. int RAPshareinfo(Session *, Share *, char *, Shareinfo2 *);
  553. int RAPsessionenum(Session *, Share *, Sessinfo **);
  554. int RAPgroupenum(Session *, Share *, Namelist **);
  555. int RAPgroupusers(Session *, Share *, char *, Namelist **);
  556. int RAPuserenum(Session *, Share *, Namelist **);
  557. int RAPuserenum2(Session *, Share *, Namelist **);
  558. int RAPuserinfo(Session *, Share *, char *, Userinfo *);
  559. int RAPServerenum2(Session *, Share *, char *, int, int *, Serverinfo **);
  560. int RAPServerenum3(Session *, Share *, char *, int, int, Serverinfo *);
  561. int RAPFileenum2(Session *, Share *, char *, char *, Fileinfo **);
  562. /* trans2.c */
  563. int T2findfirst(Session *, Share *, int, char *, int *, int32_t *, FInfo *);
  564. int T2findnext(Session *, Share *, int, char *, int *, int32_t *, FInfo *, int);
  565. int T2queryall(Session *, Share *, char *, FInfo *);
  566. int T2querystandard(Session *, Share *, char *, FInfo *);
  567. int T2setpathinfo(Session *, Share *, char *, FInfo *);
  568. int T2setfilelength(Session *, Share *, int, FInfo *);
  569. int T2fsvolumeinfo(Session *, Share *, int32_t *, int32_t *, char *, int);
  570. int T2fssizeinfo(Session *, Share *, uint64_t *, uint64_t *);
  571. int T2getdfsreferral(Session *, Share *, char *, int *, int *, Refer *, int);
  572. /* transnt.c */
  573. int TNTquerysecurity(Session *, Share *, int, char **, char **);
  574. /* ping.c */
  575. int ping(char *, int);