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