1671dfc47SDavid du Colombier /* cifs.h */ 2671dfc47SDavid du Colombier 3671dfc47SDavid du Colombier enum { 4671dfc47SDavid du Colombier Proot = 1, /* LSBs of qid.path for root dir */ 5671dfc47SDavid du Colombier Pinfo = 2, /* LSBs of qid.path for info files */ 6671dfc47SDavid du Colombier Pshare = 4, /* LSBs of qid.path for share dirs */ 7671dfc47SDavid du Colombier NBHDRLEN = 4, /* length of a netbios header */ 8671dfc47SDavid du Colombier T2HDRLEN = 64, /* Transaction2 header length */ 9671dfc47SDavid du Colombier NO_UID = 0xffff, /* initial UID on connect */ 10671dfc47SDavid du Colombier NO_TID = 0xffff, /* initial TID on connect */ 11671dfc47SDavid du Colombier MTU = 0xefff, /* our MTU */ 12671dfc47SDavid du Colombier CACHETIME = 2, /* seconds read-ahead is valid for */ 13671dfc47SDavid du Colombier CIFS_FNAME_MAX = 0xff, /* max file path component len */ 14671dfc47SDavid du Colombier OVERHEAD = 80, /* max packet overhead when reading & writing */ 15671dfc47SDavid du Colombier IDLE_TIME = 10, /* keepalive send rate in mins */ 16671dfc47SDavid du Colombier NBNSTOUT = 300, /* Netbios Name Service Timeout (300ms x 3retrys) */ 17671dfc47SDavid du Colombier NBRPCTOUT = 45*60*1000, /* Netbios RPC Timeout (45sec) */ 18671dfc47SDavid du Colombier MAX_SHARES = 4096, /* static table of shares attached */ 19671dfc47SDavid du Colombier RAP_ERR_MOREINFO= 234, /* non-error code, more info to be fetched */ 20671dfc47SDavid du Colombier MAX_DFS_PATH = 512, /* MS says never more than 250 chars... */ 21671dfc47SDavid du Colombier }; 22671dfc47SDavid du Colombier 23671dfc47SDavid du Colombier enum { 24671dfc47SDavid du Colombier SMB_COM_CREATE_DIRECTORY = 0x00, 25671dfc47SDavid du Colombier SMB_COM_DELETE_DIRECTORY = 0x01, 26671dfc47SDavid du Colombier SMB_COM_OPEN = 0x02, 27671dfc47SDavid du Colombier SMB_COM_CREATE = 0x03, 28671dfc47SDavid du Colombier SMB_COM_CLOSE = 0x04, 29671dfc47SDavid du Colombier SMB_COM_FLUSH = 0x05, 30671dfc47SDavid du Colombier SMB_COM_DELETE = 0x06, 31671dfc47SDavid du Colombier SMB_COM_RENAME = 0x07, 32671dfc47SDavid du Colombier SMB_COM_QUERY_INFORMATION = 0x08, 33671dfc47SDavid du Colombier SMB_COM_SET_INFORMATION = 0x09, 34671dfc47SDavid du Colombier SMB_COM_READ = 0x0A, 35671dfc47SDavid du Colombier SMB_COM_WRITE = 0x0B, 36671dfc47SDavid du Colombier SMB_COM_LOCK_BYTE_RANGE = 0x0C, 37671dfc47SDavid du Colombier SMB_COM_UNLOCK_BYTE_RANGE = 0x0D, 38671dfc47SDavid du Colombier SMB_COM_CREATE_TEMPORARY = 0x0E, 39671dfc47SDavid du Colombier SMB_COM_CREATE_NEW = 0x0F, 40671dfc47SDavid du Colombier SMB_COM_CHECK_DIRECTORY = 0x10, 41671dfc47SDavid du Colombier SMB_COM_PROCESS_EXIT = 0x11, 42671dfc47SDavid du Colombier SMB_COM_SEEK = 0x12, 43671dfc47SDavid du Colombier SMB_COM_LOCK_AND_READ = 0x13, 44671dfc47SDavid du Colombier SMB_COM_WRITE_AND_UNLOCK = 0x14, 45671dfc47SDavid du Colombier SMB_COM_READ_RAW = 0x1A, 46671dfc47SDavid du Colombier SMB_COM_READ_MPX = 0x1B, 47671dfc47SDavid du Colombier SMB_COM_READ_MPX_SECONDARY = 0x1C, 48671dfc47SDavid du Colombier SMB_COM_WRITE_RAW = 0x1D, 49671dfc47SDavid du Colombier SMB_COM_WRITE_MPX = 0x1E, 50671dfc47SDavid du Colombier SMB_COM_WRITE_MPX_SECONDARY = 0x1F, 51671dfc47SDavid du Colombier SMB_COM_WRITE_COMPLETE = 0x20, 52671dfc47SDavid du Colombier SMB_COM_QUERY_SERVER = 0x21, 53671dfc47SDavid du Colombier SMB_COM_SET_INFORMATION2 = 0x22, 54671dfc47SDavid du Colombier SMB_COM_QUERY_INFORMATION2 = 0x23, 55671dfc47SDavid du Colombier SMB_COM_LOCKING_ANDX = 0x24, 56671dfc47SDavid du Colombier SMB_COM_TRANSACTION = 0x25, 57671dfc47SDavid du Colombier SMB_COM_TRANSACTION_SECONDARY = 0x26, 58671dfc47SDavid du Colombier SMB_COM_IOCTL = 0x27, 59671dfc47SDavid du Colombier SMB_COM_IOCTL_SECONDARY = 0x28, 60671dfc47SDavid du Colombier SMB_COM_COPY = 0x29, 61671dfc47SDavid du Colombier SMB_COM_MOVE = 0x2A, 62671dfc47SDavid du Colombier SMB_COM_ECHO = 0x2B, 63671dfc47SDavid du Colombier SMB_COM_WRITE_AND_CLOSE = 0x2C, 64671dfc47SDavid du Colombier SMB_COM_OPEN_ANDX = 0x2D, 65671dfc47SDavid du Colombier SMB_COM_READ_ANDX = 0x2E, 66671dfc47SDavid du Colombier SMB_COM_WRITE_ANDX = 0x2F, 67671dfc47SDavid du Colombier SMB_COM_NEW_FILE_SIZE = 0x30, 68671dfc47SDavid du Colombier SMB_COM_CLOSE_AND_TREE_DISC = 0x31, 69671dfc47SDavid du Colombier SMB_COM_TRANSACTION2 = 0x32, 70671dfc47SDavid du Colombier SMB_COM_TRANSACTION2_SECONDARY = 0x33, 71671dfc47SDavid du Colombier SMB_COM_FIND_CLOSE2 = 0x34, 72671dfc47SDavid du Colombier SMB_COM_FIND_NOTIFY_CLOSE = 0x35, 73671dfc47SDavid du Colombier SMB_COM_TREE_CONNECT = 0x70, 74671dfc47SDavid du Colombier SMB_COM_TREE_DISCONNECT = 0x71, 75671dfc47SDavid du Colombier SMB_COM_NEGOTIATE = 0x72, 76671dfc47SDavid du Colombier SMB_COM_SESSION_SETUP_ANDX = 0x73, 77671dfc47SDavid du Colombier SMB_COM_LOGOFF_ANDX = 0x74, 78671dfc47SDavid du Colombier SMB_COM_TREE_CONNECT_ANDX = 0x75, 79671dfc47SDavid du Colombier SMB_COM_QUERY_INFORMATION_DISK = 0x80, 80671dfc47SDavid du Colombier SMB_COM_SEARCH = 0x81, 81671dfc47SDavid du Colombier SMB_COM_FIND = 0x82, 82671dfc47SDavid du Colombier SMB_COM_FIND_UNIQUE = 0x83, 83671dfc47SDavid du Colombier SMB_COM_FIND_CLOSE = 0x84, 84671dfc47SDavid du Colombier SMB_COM_NT_TRANSACT = 0xA0, 85671dfc47SDavid du Colombier SMB_COM_NT_TRANSACT_SECONDARY = 0xA1, 86671dfc47SDavid du Colombier SMB_COM_NT_CREATE_ANDX = 0xA2, 87671dfc47SDavid du Colombier SMB_COM_NT_CANCEL = 0xA4, 88671dfc47SDavid du Colombier SMB_COM_NT_RENAME = 0xA5, 89671dfc47SDavid du Colombier SMB_COM_OPEN_PRINT_FILE = 0xC0, 90671dfc47SDavid du Colombier SMB_COM_WRITE_PRINT_FILE = 0xC1, 91671dfc47SDavid du Colombier SMB_COM_CLOSE_PRINT_FILE = 0xC2, 92671dfc47SDavid du Colombier SMB_COM_GET_PRINT_QUEUE = 0xC3, 93671dfc47SDavid du Colombier SMB_COM_READ_BULK = 0xD8, 94671dfc47SDavid du Colombier SMB_COM_WRITE_BULK = 0xD9, 95671dfc47SDavid du Colombier SMB_COM_WRITE_BULK_DATA = 0xDA, 96671dfc47SDavid du Colombier 97671dfc47SDavid du Colombier TRANS2_OPEN2 = 0x00, 98671dfc47SDavid du Colombier TRANS2_FIND_FIRST2 = 0x01, 99671dfc47SDavid du Colombier TRANS2_FIND_NEXT2 = 0x02, 100671dfc47SDavid du Colombier TRANS2_QUERY_FS_INFORMATION = 0x03, 101671dfc47SDavid du Colombier TRANS2_QUERY_PATH_INFORMATION = 0x05, 102671dfc47SDavid du Colombier TRANS2_SET_PATH_INFORMATION = 0x06, 103671dfc47SDavid du Colombier TRANS2_QUERY_FILE_INFORMATION = 0x07, 104671dfc47SDavid du Colombier TRANS2_SET_FILE_INFORMATION = 0x08, 105671dfc47SDavid du Colombier TRANS2_CREATE_DIRECTORY = 0x0D, 106671dfc47SDavid du Colombier TRANS2_SESSION_SETUP = 0x0E, 107671dfc47SDavid du Colombier TRANS2_GET_DFS_REFERRAL = 0x10, 108671dfc47SDavid du Colombier 109671dfc47SDavid du Colombier NT_TRANSACT_CREATE = 0x01, 110671dfc47SDavid du Colombier NT_TRANSACT_IOCTL = 0x02, 111671dfc47SDavid du Colombier NT_TRANSACT_SET_SECURITY_DESC = 0x03, 112671dfc47SDavid du Colombier NT_TRANSACT_NOTIFY_CHANGE = 0x04, 113671dfc47SDavid du Colombier NT_TRANSACT_RENAME = 0x05, 114671dfc47SDavid du Colombier NT_TRANSACT_QUERY_SECURITY_DESC = 0x06 115671dfc47SDavid du Colombier }; 116671dfc47SDavid du Colombier 117671dfc47SDavid du Colombier enum { /* CIFS flags */ 118671dfc47SDavid du Colombier FL_CASELESS_NAMES = 1<<3, 119671dfc47SDavid du Colombier FL_CANNONICAL_NAMES = 1<<4, 120671dfc47SDavid du Colombier 121671dfc47SDavid du Colombier FL2_KNOWS_LONG_NAMES = 1<<0, 122671dfc47SDavid du Colombier FL2_PACKET_SIGNATURES = 1<<2, 123671dfc47SDavid du Colombier FL2_HAS_LONG_NAMES = 1<<6, 124671dfc47SDavid du Colombier FL2_EXTENDED_SECURITY = 1<<11, 125671dfc47SDavid du Colombier FL2_DFS = 1<<12, 126671dfc47SDavid du Colombier FL2_PAGEING_IO = 1<<13, /* allow read of exec only files */ 127671dfc47SDavid du Colombier FL2_NT_ERRCODES = 1<<14, 128671dfc47SDavid du Colombier FL2_UNICODE = 1<<15, 129671dfc47SDavid du Colombier }; 130671dfc47SDavid du Colombier 131671dfc47SDavid du Colombier enum { /* Capabilities Negoiated */ 132671dfc47SDavid du Colombier CAP_RAW_MODE = 1, 133671dfc47SDavid du Colombier CAP_MPX_MODE = 1<<1, 134671dfc47SDavid du Colombier CAP_UNICODE = 1<<2, 135671dfc47SDavid du Colombier CAP_LARGE_FILES = 1<<3, /* 64 bit files */ 136671dfc47SDavid du Colombier CAP_NT_SMBS = 1<<4, 137671dfc47SDavid du Colombier CAP_RPC_REMOTE_APIS = 1<<5, 138671dfc47SDavid du Colombier CAP_STATUS32 = 1<<6, 139671dfc47SDavid du Colombier CAP_L2_OPLOCKS = 1<<7, 140671dfc47SDavid du Colombier CAP_LOCK_READ = 1<<8, 141671dfc47SDavid du Colombier CAP_NT_FIND = 1<<9, 142671dfc47SDavid du Colombier CAP_DFS = 1<<12, 143671dfc47SDavid du Colombier CAP_INFO_PASSTHRU = 1<<13, 144671dfc47SDavid du Colombier CAP_LARGE_READX = 1<<14, 145671dfc47SDavid du Colombier CAP_LARGE_WRITEX = 1<<15, 146671dfc47SDavid du Colombier CAP_UNIX = 1<<23, 147671dfc47SDavid du Colombier CAP_BULK_TRANSFER = 1<<29, 148671dfc47SDavid du Colombier CAP_COMPRESSED = 1<<30, 149671dfc47SDavid du Colombier CAP_EX_SECURE = 1<<31 150671dfc47SDavid du Colombier }; 151671dfc47SDavid du Colombier 152671dfc47SDavid du Colombier enum { /* string prefixes */ 153671dfc47SDavid du Colombier STR_DIALECT = 2, 154671dfc47SDavid du Colombier STR_PATH = 3, 155671dfc47SDavid du Colombier STR_ASCII = 4, 156671dfc47SDavid du Colombier }; 157671dfc47SDavid du Colombier 158671dfc47SDavid du Colombier enum { /* optional support bits in treeconnect */ 159671dfc47SDavid du Colombier SMB_SUPPROT_SEARCH_BITS = 1, 160671dfc47SDavid du Colombier SMB_SHARE_IS_IN_DFS = 2, 161671dfc47SDavid du Colombier }; 162671dfc47SDavid du Colombier 163671dfc47SDavid du Colombier enum { /* DFS referal header flags */ 164671dfc47SDavid du Colombier DFS_HEADER_ROOT = 1, /* Server type, returns root targets */ 165671dfc47SDavid du Colombier DFS_HEADER_STORAGE = 2, /* server has storage, no more referals */ 166671dfc47SDavid du Colombier DFS_HEADER_FAILBACK = 4, /* target failback enabled */ 167671dfc47SDavid du Colombier }; 168671dfc47SDavid du Colombier 169671dfc47SDavid du Colombier enum { /* DFS referal entry flags */ 170671dfc47SDavid du Colombier DFS_SERVER_ROOT = 1, /* Server type, returns root targets */ 171671dfc47SDavid du Colombier DFS_REFERAL_LIST = 0x200, /* reply is a list (v3 only) */ 172671dfc47SDavid du Colombier DFS_REFERAL_SET = 0x400, /* target is a member of a set */ 173671dfc47SDavid du Colombier }; 174671dfc47SDavid du Colombier 175671dfc47SDavid du Colombier enum { /* share types */ 176671dfc47SDavid du Colombier STYPE_DISKTREE = 0, 177671dfc47SDavid du Colombier STYPE_PRINTQ = 1, 178671dfc47SDavid du Colombier STYPE_DEVICE = 2, 179671dfc47SDavid du Colombier STYPE_IPC = 3, 180671dfc47SDavid du Colombier STYPE_SPECIAL = 4, 181671dfc47SDavid du Colombier STYPE_TEMP = 5, 182671dfc47SDavid du Colombier }; 183671dfc47SDavid du Colombier 184671dfc47SDavid du Colombier enum { /* Security */ 185671dfc47SDavid du Colombier SECMODE_USER = 0x01, /* i.e. not share level security */ 186671dfc47SDavid du Colombier SECMODE_PW_ENCRYPT = 0x02, 187671dfc47SDavid du Colombier SECMODE_SIGN_ENABLED = 0x04, 188671dfc47SDavid du Colombier SECMODE_SIGN_REQUIRED = 0x08, 189671dfc47SDavid du Colombier }; 190671dfc47SDavid du Colombier 191671dfc47SDavid du Colombier enum { /* file access rights */ 192671dfc47SDavid du Colombier DELETE = 0x00010000, 193671dfc47SDavid du Colombier SYNCHRONIZE = 0x00100000, 194671dfc47SDavid du Colombier 195671dfc47SDavid du Colombier READ_CONTROL = 0x00020000, 196671dfc47SDavid du Colombier GENERIC_ALL = 0x10000000, 197671dfc47SDavid du Colombier GENERIC_EXECUTE = 0x20000000, 198671dfc47SDavid du Colombier GENERIC_WRITE = 0x40000000, 199671dfc47SDavid du Colombier GENERIC_READ = 0x80000000, 200671dfc47SDavid du Colombier 201671dfc47SDavid du Colombier ATTR_READONLY = 0x0001, 202671dfc47SDavid du Colombier ATTR_HIDDEN = 0x0002, 203671dfc47SDavid du Colombier ATTR_SYSTEM = 0x0004, 204671dfc47SDavid du Colombier ATTR_VOLUME = 0x0008, 205671dfc47SDavid du Colombier ATTR_DIRECTORY = 0x0010, 206671dfc47SDavid du Colombier ATTR_ARCHIVE = 0x0020, 207671dfc47SDavid du Colombier ATTR_DEVICE = 0x0040, 208671dfc47SDavid du Colombier ATTR_NORMAL = 0x0080, 209671dfc47SDavid du Colombier ATTR_TEMPORARY = 0x0100, 210671dfc47SDavid du Colombier ATTR_SPARSE = 0x0200, 211671dfc47SDavid du Colombier ATTR_REPARSE = 0x0400, 212671dfc47SDavid du Colombier ATTR_COMPRESSED = 0x0800, 213671dfc47SDavid du Colombier ATTR_OFFLINE = 0x100, /* offline storage */ 214671dfc47SDavid du Colombier ATTR_NOT_CONTENT_INDEXED= 0x2000, 215671dfc47SDavid du Colombier ATTR_ENCRYPTED = 0x4000, 216671dfc47SDavid du Colombier ATTR_POSIX_SEMANTICS = 0x01000000, 217671dfc47SDavid du Colombier ATTR_BACKUP_SEMANTICS = 0x02000000, 218671dfc47SDavid du Colombier ATTR_DELETE_ON_CLOSE = 0x04000000, 219671dfc47SDavid du Colombier ATTR_SEQUENTIAL_SCAN = 0x08000000, 220671dfc47SDavid du Colombier ATTR_RANDOM_ACCESS = 0x10000000, 221671dfc47SDavid du Colombier ATTR_NO_BUFFERING = 0x20000000, 222671dfc47SDavid du Colombier ATTR_WRITE_THROUGH = 0x80000000, 223671dfc47SDavid du Colombier 224671dfc47SDavid du Colombier /* ShareAccess flags */ 225671dfc47SDavid du Colombier FILE_NO_SHARE = 0, 226671dfc47SDavid du Colombier FILE_SHARE_READ = 1, 227671dfc47SDavid du Colombier FILE_SHARE_WRITE = 2, 228671dfc47SDavid du Colombier FILE_SHARE_DELETE = 4, 229671dfc47SDavid du Colombier FILE_SHARE_ALL = 7, 230671dfc47SDavid du Colombier 231671dfc47SDavid du Colombier /* CreateDisposition flags */ 232671dfc47SDavid du Colombier FILE_SUPERSEDE = 0, 233671dfc47SDavid du Colombier FILE_OPEN = 1, 234671dfc47SDavid du Colombier FILE_CREATE = 2, 235671dfc47SDavid du Colombier FILE_OPEN_IF = 3, 236671dfc47SDavid du Colombier FILE_OVERWRITE = 4, 237671dfc47SDavid du Colombier FILE_OVERWRITE_IF = 5, 238671dfc47SDavid du Colombier 239671dfc47SDavid du Colombier /* CreateOptions */ 240671dfc47SDavid du Colombier FILE_DIRECTORY_FILE = 0x00000001, 241671dfc47SDavid du Colombier FILE_WRITE_THROUGH = 0x00000002, 242671dfc47SDavid du Colombier FILE_SEQUENTIAL_ONLY = 0x00000004, 243671dfc47SDavid du Colombier FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008, 244671dfc47SDavid du Colombier FILE_SYNCHRONOUS_IO_ALERT = 0x00000010, 245671dfc47SDavid du Colombier FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020, 246671dfc47SDavid du Colombier FILE_NON_DIRECTORY_FILE = 0x00000040, 247671dfc47SDavid du Colombier FILE_CREATE_TREE_CONNECTION = 0x00000080, 248671dfc47SDavid du Colombier FILE_COMPLETE_IF_OPLOCKED = 0x00000100, 249671dfc47SDavid du Colombier FILE_NO_EA_KNOWLEDGE = 0x00000200, 250671dfc47SDavid du Colombier FILE_OPEN_FOR_RECOVERY = 0x00000400, 251671dfc47SDavid du Colombier FILE_EIGHT_DOT_THREE_ONLY = 0x00000400, /* samba source says so... */ 252671dfc47SDavid du Colombier FILE_RANDOM_ACCESS = 0x00000800, 253671dfc47SDavid du Colombier FILE_DELETE_ON_CLOSE = 0x00001000, 254671dfc47SDavid du Colombier FILE_OPEN_BY_FILE_ID = 0x00002000, 255671dfc47SDavid du Colombier FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000, 256671dfc47SDavid du Colombier FILE_NO_COMPRESSION = 0x00008000, 257671dfc47SDavid du Colombier 258671dfc47SDavid du Colombier /* open/create result codes */ 259671dfc47SDavid du Colombier FILE_WAS_OPENED = 1, 260671dfc47SDavid du Colombier FILE_WAS_CREATED = 2, 261671dfc47SDavid du Colombier FILE_WAS_OVERWRITTEN = 3, 262671dfc47SDavid du Colombier 263671dfc47SDavid du Colombier /* ImpersonationLevel flags */ 264671dfc47SDavid du Colombier SECURITY_ANONYMOUS = 0, 265671dfc47SDavid du Colombier SECURITY_IDENTIFICATION = 1, 266671dfc47SDavid du Colombier SECURITY_IMPERSONATION = 2, 267671dfc47SDavid du Colombier SECURITY_DELEGATION = 3, 268671dfc47SDavid du Colombier 269671dfc47SDavid du Colombier /* SecurityFlags */ 270671dfc47SDavid du Colombier SECURITY_CONTEXT_TRACKING = 1, 271671dfc47SDavid du Colombier SECURITY_EFFECTIVE_ONLY = 2, 272671dfc47SDavid du Colombier 273671dfc47SDavid du Colombier /* security descriptor bitmask */ 274671dfc47SDavid du Colombier QUERY_OWNER_SECURITY_INFORMATION = 1, 275671dfc47SDavid du Colombier QUERY_GROUP_SECURITY_INFORMATION = 2, 276671dfc47SDavid du Colombier QUERY_DACL_SECURITY_INFORMATION = 4, 277671dfc47SDavid du Colombier QUERY_SACL_SECURITY_INFORMATION = 8, 278671dfc47SDavid du Colombier 279671dfc47SDavid du Colombier }; 280671dfc47SDavid du Colombier 281671dfc47SDavid du Colombier enum { /* PathInfo/FileInfo infolevels */ 282671dfc47SDavid du Colombier SMB_INFO_STANDARD = 0x1, 283671dfc47SDavid du Colombier SMB_INFO_IS_NAME_VALID = 0x6, 284671dfc47SDavid du Colombier SMB_QUERY_FILE_BASIC_INFO = 0x101, 285671dfc47SDavid du Colombier SMB_QUERY_FILE_STANDARD_INFO = 0x102, 286671dfc47SDavid du Colombier SMB_QUERY_FILE_NAME_INFO = 0x104, 287671dfc47SDavid du Colombier SMB_QUERY_FILE_ALLOCATION_INFO = 0x105, 288671dfc47SDavid du Colombier SMB_QUERY_FILE_END_OF_FILE_INFO = 0x106, 289671dfc47SDavid du Colombier SMB_QUERY_FILE_ALL_INFO = 0x107, 290671dfc47SDavid du Colombier SMB_QUERY_ALT_NAME_INFO = 0x108, 291671dfc47SDavid du Colombier SMB_QUERY_FILE_STREAM_INFO = 0x109, 292671dfc47SDavid du Colombier SMB_QUERY_FILE_COMPRESSION_INFO = 0x10b, 293671dfc47SDavid du Colombier SMB_QUERY_FILE_UNIX_BASIC = 0x200, 294671dfc47SDavid du Colombier SMB_QUERY_FILE_UNIX_LINK = 0x201, 295671dfc47SDavid du Colombier 296671dfc47SDavid du Colombier SMB_SET_FILE_BASIC_INFO = 0x101, 297671dfc47SDavid du Colombier SMB_SET_FILE_DISPOSITION_INFO = 0x102, 298671dfc47SDavid du Colombier SMB_SET_FILE_ALLOCATION_INFO = 0x103, 299671dfc47SDavid du Colombier SMB_SET_FILE_END_OF_FILE_INFO = 0x104, 300671dfc47SDavid du Colombier SMB_SET_FILE_UNIX_BASIC = 0x200, 301671dfc47SDavid du Colombier SMB_SET_FILE_UNIX_LINK = 0x201, 302671dfc47SDavid du Colombier SMB_SET_FILE_UNIX_HLINK = 0x203, 303671dfc47SDavid du Colombier SMB_SET_FILE_BASIC_INFO2 = 0x3ec, 304671dfc47SDavid du Colombier SMB_SET_FILE_RENAME_INFORMATION = 0x3f2, 305671dfc47SDavid du Colombier SMB_SET_FILE_ALLOCATION_INFO2 = 0x3fb, 306671dfc47SDavid du Colombier SMB_SET_FILE_END_OF_FILE_INFO2 = 0x3fc, 307671dfc47SDavid du Colombier 308671dfc47SDavid du Colombier /* Find File infolevels */ 309671dfc47SDavid du Colombier SMB_FIND_FILE_DIRECTORY_INFO = 0x101, 310671dfc47SDavid du Colombier SMB_FIND_FILE_FULL_DIRECTORY_INFO= 0x102, 311671dfc47SDavid du Colombier SMB_FIND_FILE_NAMES_INFO = 0x103, 312671dfc47SDavid du Colombier SMB_FIND_FILE_BOTH_DIRECTORY_INFO= 0x104, 313671dfc47SDavid du Colombier SMB_FIND_FILE_UNIX = 0x202, 314671dfc47SDavid du Colombier 315671dfc47SDavid du Colombier /* Trans2 FindFirst & FindNext */ 316671dfc47SDavid du Colombier CIFS_SEARCH_CLOSE_ALWAYS = 0x0001, 317671dfc47SDavid du Colombier CIFS_SEARCH_CLOSE_AT_END = 0x0002, 318671dfc47SDavid du Colombier CIFS_SEARCH_RETURN_RESUME = 0x0004, 319671dfc47SDavid du Colombier CIFS_SEARCH_CONTINUE_FROM_LAST = 0x0008, 320671dfc47SDavid du Colombier CIFS_SEARCH_BACKUP_SEARCH = 0x0010, 321671dfc47SDavid du Colombier 322671dfc47SDavid du Colombier /* Trans2 FsInfo */ 323671dfc47SDavid du Colombier SMB_INFO_ALLOCATION = 0x1, 324671dfc47SDavid du Colombier SMB_INFO_VOLUME = 0x2, 325671dfc47SDavid du Colombier SMB_QUERY_FS_VOLUME_INFO = 0x102, 326671dfc47SDavid du Colombier SMB_QUERY_FS_SIZE_INFO = 0x103, 327671dfc47SDavid du Colombier SMB_QUERY_FS_DEVICE_INFO = 0x104, 328671dfc47SDavid du Colombier SMB_QUERY_FS_ATTRIBUTE_INFO = 0x105, 329671dfc47SDavid du Colombier SMB_QUERY_CIFS_UNIX_INFO = 0x200, 330671dfc47SDavid du Colombier }; 331671dfc47SDavid du Colombier 332671dfc47SDavid du Colombier enum { /* things to search for in server lookups */ 333671dfc47SDavid du Colombier LOCAL_AUTHORATIVE_ONLY = 0x40000000, 334671dfc47SDavid du Colombier LIST_DOMAINS_ONLY = 0x80000000, 335671dfc47SDavid du Colombier ALL_LEARNT_IN_DOMAIN = 0xFFFFFFFF 336671dfc47SDavid du Colombier }; 337671dfc47SDavid du Colombier 338671dfc47SDavid du Colombier typedef struct { 339671dfc47SDavid du Colombier char *user; /* username */ 340671dfc47SDavid du Colombier char *windom; /* remote server's domain name */ 341671dfc47SDavid du Colombier char *resp[2]; /* ASCII/Unicode or LM/NTLM keys */ 342671dfc47SDavid du Colombier int len[2]; /* length of above */ 343671dfc47SDavid du Colombier uchar *mackey[2]; /* Message Authentication key */ 344671dfc47SDavid du Colombier } Auth; 345671dfc47SDavid du Colombier 346671dfc47SDavid du Colombier typedef struct { 347671dfc47SDavid du Colombier int fd; /* File descriptor for I/O */ 348671dfc47SDavid du Colombier int nbt; /* am using cifs over netbios */ 349671dfc47SDavid du Colombier int trn; /* TRN (unique RPC) ID */ 350671dfc47SDavid du Colombier int uid; /* user (authentication) ID */ 351671dfc47SDavid du Colombier int seq; /* sequence number */ 352671dfc47SDavid du Colombier int seqrun; /* sequence numbering active */ 353671dfc47SDavid du Colombier int caps; /* server capabilities */ 354671dfc47SDavid du Colombier int support; /* support bits */ 355671dfc47SDavid du Colombier int flags; /* SMB flags */ 356671dfc47SDavid du Colombier int flags2; /* SMB flags 2 */ 357671dfc47SDavid du Colombier int nocache; /* disable write behind caching in server */ 358671dfc47SDavid du Colombier int pid; /* process ID */ 359671dfc47SDavid du Colombier int mid; /* multiplex ID */ 360671dfc47SDavid du Colombier int mtu; /* max size of packet */ 361671dfc47SDavid du Colombier int tz; /* Timezone, mins from UTC */ 362671dfc47SDavid du Colombier int isguest; /* logged in as guest */ 363671dfc47SDavid du Colombier int secmode; /* security mode */ 364671dfc47SDavid du Colombier int macidx; /* which MAC is in use, -1 is none */ 365671dfc47SDavid du Colombier uchar chal[0xff +1]; /* server's challange for authentication */ 366671dfc47SDavid du Colombier int challen; /* length of challange */ 367671dfc47SDavid du Colombier long slip; /* time difference between the server and us */ 368671dfc47SDavid du Colombier uvlong lastfind; /* nsec when last find peformed */ 369671dfc47SDavid du Colombier QLock seqlock; /* sequence number increment */ 370671dfc47SDavid du Colombier QLock rpclock; /* actual remote procedure call */ 371671dfc47SDavid du Colombier char *cname; /* remote hosts called name (for info) */ 372671dfc47SDavid du Colombier char *remos; /* remote hosts OS (for info) */ 373671dfc47SDavid du Colombier Auth *auth; /* authentication info */ 374671dfc47SDavid du Colombier } Session; 375671dfc47SDavid du Colombier 376671dfc47SDavid du Colombier typedef struct { 377671dfc47SDavid du Colombier Session *s; 378671dfc47SDavid du Colombier 379671dfc47SDavid du Colombier int tid; /* tree ID received from server */ 380671dfc47SDavid du Colombier int seq; /* sequence number expected in reply */ 381671dfc47SDavid du Colombier 382671dfc47SDavid du Colombier uchar *seqbase; /* cifs: pos of sequence number in packet */ 383671dfc47SDavid du Colombier uchar *wordbase; /* cifs: base of words section of data */ 384671dfc47SDavid du Colombier uchar *bytebase; /* cifs: base of bytes section of data */ 385671dfc47SDavid du Colombier uchar *tbase; /* transactions: start of trans packet */ 386671dfc47SDavid du Colombier uchar *tsetup; /* transactions: start of setup section */ 387671dfc47SDavid du Colombier uchar *tparam; /* transactions: start of params section */ 388671dfc47SDavid du Colombier uchar *tdata; /* transactions: start of data section */ 389671dfc47SDavid du Colombier 390671dfc47SDavid du Colombier uchar *eop; /* received end of packet */ 391671dfc47SDavid du Colombier uchar *pos; /* current pos in packet */ 392671dfc47SDavid du Colombier uchar *buf; /* packet buffer, must be last entry in struct */ 393671dfc47SDavid du Colombier } Pkt; 394671dfc47SDavid du Colombier 395671dfc47SDavid du Colombier typedef struct { 396671dfc47SDavid du Colombier char *name; 397671dfc47SDavid du Colombier int tid; /* not part of the protocol, housekeeping */ 398671dfc47SDavid du Colombier int options; /* not part of the protocol, housekeeping */ 399671dfc47SDavid du Colombier } Share; 400671dfc47SDavid du Colombier 401671dfc47SDavid du Colombier typedef struct { 402671dfc47SDavid du Colombier long created; /* last access time */ 403671dfc47SDavid du Colombier long accessed; /* last access time */ 404671dfc47SDavid du Colombier long written; /* last written time */ 405671dfc47SDavid du Colombier long changed; /* change time */ 406671dfc47SDavid du Colombier uvlong size; /* file size */ 407671dfc47SDavid du Colombier long attribs; /* attributes */ 408671dfc47SDavid du Colombier char name[CIFS_FNAME_MAX +1]; /* name */ 409671dfc47SDavid du Colombier } FInfo; 410671dfc47SDavid du Colombier 411671dfc47SDavid du Colombier typedef struct { 412671dfc47SDavid du Colombier char *wrkstn; 413671dfc47SDavid du Colombier char *user; 414671dfc47SDavid du Colombier long sesstime; 415671dfc47SDavid du Colombier long idletime; 416671dfc47SDavid du Colombier } Sessinfo; 417671dfc47SDavid du Colombier 418671dfc47SDavid du Colombier typedef struct { 419671dfc47SDavid du Colombier char *name; 420671dfc47SDavid du Colombier } Namelist; 421671dfc47SDavid du Colombier 422671dfc47SDavid du Colombier typedef struct { 423671dfc47SDavid du Colombier char *user; 424671dfc47SDavid du Colombier char *comment; 425671dfc47SDavid du Colombier char *user_comment; 426671dfc47SDavid du Colombier char *fullname; 427671dfc47SDavid du Colombier } Userinfo; 428671dfc47SDavid du Colombier 429671dfc47SDavid du Colombier typedef struct { 430671dfc47SDavid du Colombier char *name; 431671dfc47SDavid du Colombier int type; 432671dfc47SDavid du Colombier char *comment; 433671dfc47SDavid du Colombier int perms; 434671dfc47SDavid du Colombier int maxusrs; 435671dfc47SDavid du Colombier int activeusrs; 436671dfc47SDavid du Colombier char *path; 437671dfc47SDavid du Colombier char *passwd; 438671dfc47SDavid du Colombier } Shareinfo2; 439671dfc47SDavid du Colombier 440671dfc47SDavid du Colombier typedef struct { 441671dfc47SDavid du Colombier char *name; 442671dfc47SDavid du Colombier int major; 443671dfc47SDavid du Colombier int minor; 444671dfc47SDavid du Colombier int type; 445671dfc47SDavid du Colombier char *comment; 446671dfc47SDavid du Colombier } Serverinfo; 447671dfc47SDavid du Colombier 448671dfc47SDavid du Colombier typedef struct { 449671dfc47SDavid du Colombier int type; /* o=unknown, 1=CIFS, 2=netware 3=domain */ 450671dfc47SDavid du Colombier int flags; /* 1 == strip off consumed chars before resubmitting */ 451671dfc47SDavid du Colombier int ttl; /* time to live of this info in secs */ 452671dfc47SDavid du Colombier int prox; /* lower value is preferred */ 453671dfc47SDavid du Colombier char *path; /* new path */ 454671dfc47SDavid du Colombier char *addr; /* new server */ 455671dfc47SDavid du Colombier } Refer; 456671dfc47SDavid du Colombier 457671dfc47SDavid du Colombier typedef struct { 458671dfc47SDavid du Colombier char *node; 459671dfc47SDavid du Colombier char *user; 460671dfc47SDavid du Colombier char *langroup; 461671dfc47SDavid du Colombier int major; 462671dfc47SDavid du Colombier int minor; 463671dfc47SDavid du Colombier char *pridom; 464671dfc47SDavid du Colombier char *otherdoms; 465671dfc47SDavid du Colombier } Wrkstainfo; 466671dfc47SDavid du Colombier 467671dfc47SDavid du Colombier typedef struct { 468671dfc47SDavid du Colombier int ident; 469671dfc47SDavid du Colombier int perms; 470671dfc47SDavid du Colombier int locks; 471671dfc47SDavid du Colombier char *path; 472671dfc47SDavid du Colombier char *user; 473671dfc47SDavid du Colombier } Fileinfo; 474671dfc47SDavid du Colombier 475*976d3a68SDavid du Colombier extern int Active; 476*976d3a68SDavid du Colombier extern int Checkcase; 477671dfc47SDavid du Colombier extern int Dfstout; 478671dfc47SDavid du Colombier extern char *Debug; 479*976d3a68SDavid du Colombier extern char *Host; 480671dfc47SDavid du Colombier extern Session *Sess; 481*976d3a68SDavid du Colombier extern Share Ipc; 482671dfc47SDavid du Colombier 483*976d3a68SDavid du Colombier extern Share Shares[MAX_SHARES]; 484*976d3a68SDavid du Colombier extern int Nshares; 485671dfc47SDavid du Colombier 486671dfc47SDavid du Colombier /* main.c */ 487671dfc47SDavid du Colombier Qid mkqid(char *, int, long, int, long); 488671dfc47SDavid du Colombier 489671dfc47SDavid du Colombier /* auth.c */ 490671dfc47SDavid du Colombier Auth *getauth(char *, char *, char *, int, uchar *, int); 491671dfc47SDavid du Colombier void autherr(void); 492671dfc47SDavid du Colombier int macsign(Pkt *, int); 493671dfc47SDavid du Colombier 494671dfc47SDavid du Colombier /* cifs.c */ 495671dfc47SDavid du Colombier Session *cifsdial(char *, char *, char *); 496671dfc47SDavid du Colombier void cifsclose(Session *); 497671dfc47SDavid du Colombier Pkt *cifshdr(Session *, Share *, int); 498671dfc47SDavid du Colombier void pbytes(Pkt *); 499671dfc47SDavid du Colombier int cifsrpc(Pkt *); 500671dfc47SDavid du Colombier int CIFSnegotiate(Session *, long *, char *, int, char *, int); 501671dfc47SDavid du Colombier int CIFSsession(Session *); 502671dfc47SDavid du Colombier int CIFStreeconnect(Session *, char *, char *, Share *); 503671dfc47SDavid du Colombier int CIFSlogoff(Session *); 504671dfc47SDavid du Colombier int CIFStreedisconnect(Session *, Share *); 505671dfc47SDavid du Colombier int CIFSdeletefile(Session *, Share *, char *); 506671dfc47SDavid du Colombier int CIFSdeletedirectory(Session *, Share *, char *); 507671dfc47SDavid du Colombier int CIFScreatedirectory(Session *, Share *, char *); 508671dfc47SDavid du Colombier int CIFSrename(Session *, Share *, char *, char *); 509671dfc47SDavid du Colombier int CIFS_NT_opencreate(Session *, Share *, char *, int, int, int, int, int, int, int *, FInfo *); 510671dfc47SDavid du Colombier int CIFS_SMB_opencreate(Session *, Share *, char *, int, int, int, int *); 511671dfc47SDavid du Colombier vlong CIFSwrite(Session *, Share *, int, uvlong, void *, vlong); 512671dfc47SDavid du Colombier vlong CIFSread(Session *, Share *, int, uvlong, void *, vlong, vlong); 513671dfc47SDavid du Colombier int CIFSflush(Session *, Share *, int); 514671dfc47SDavid du Colombier int CIFSclose(Session *, Share *, int); 515671dfc47SDavid du Colombier int CIFSfindclose2(Session *, Share *, int); 516671dfc47SDavid du Colombier int CIFSecho(Session *); 517671dfc47SDavid du Colombier int CIFSsetinfo(Session *, Share *, char *, FInfo *); 518671dfc47SDavid du Colombier void goff(Pkt *, uchar *, char *, int); 519671dfc47SDavid du Colombier 520671dfc47SDavid du Colombier /* dfs.c */ 521671dfc47SDavid du Colombier char *mapfile(char *); 522671dfc47SDavid du Colombier int mapshare(char *, Share **); 523671dfc47SDavid du Colombier int redirect(Session *, Share *s, char *); 524671dfc47SDavid du Colombier int dfscacheinfo(Fmt *); 525*976d3a68SDavid du Colombier char *trimshare(char *); 526671dfc47SDavid du Colombier 527671dfc47SDavid du Colombier /* doserrstr.c */ 528671dfc47SDavid du Colombier char *doserrstr(uint); 529671dfc47SDavid du Colombier 530671dfc47SDavid du Colombier /* fs.c */ 531671dfc47SDavid du Colombier int shareinfo(Fmt *); 532671dfc47SDavid du Colombier int conninfo(Fmt *); 533671dfc47SDavid du Colombier int sessioninfo(Fmt *); 534671dfc47SDavid du Colombier int userinfo(Fmt *); 535671dfc47SDavid du Colombier int groupinfo(Fmt *); 536671dfc47SDavid du Colombier int domaininfo(Fmt *); 537671dfc47SDavid du Colombier int workstationinfo(Fmt *); 538671dfc47SDavid du Colombier int dfsrootinfo(Fmt *); 539671dfc47SDavid du Colombier int openfileinfo(Fmt *); 540671dfc47SDavid du Colombier int dfsrootinfo(Fmt *); 541671dfc47SDavid du Colombier int filetableinfo(Fmt *); /* is in main.c due to C scope */ 542671dfc47SDavid du Colombier 543671dfc47SDavid du Colombier /* info.c */ 544671dfc47SDavid du Colombier int walkinfo(char *); 545671dfc47SDavid du Colombier int numinfo(void); 546671dfc47SDavid du Colombier int dirgeninfo(int, Dir *); 547671dfc47SDavid du Colombier int makeinfo(int); 548671dfc47SDavid du Colombier int readinfo(int, char *, int, int); 549671dfc47SDavid du Colombier void freeinfo(int); 550671dfc47SDavid du Colombier 551671dfc47SDavid du Colombier /* main.c */ 552671dfc47SDavid du Colombier void usage(void); 553671dfc47SDavid du Colombier void dmpkey(char *, void *, int); 554671dfc47SDavid du Colombier void main(int, char **); 555671dfc47SDavid du Colombier 556671dfc47SDavid du Colombier /* misc.c */ 557671dfc47SDavid du Colombier char *strupr(char *); 558671dfc47SDavid du Colombier char *strlwr(char *); 559671dfc47SDavid du Colombier 560671dfc47SDavid du Colombier /* netbios.c */ 561671dfc47SDavid du Colombier void Gmem(uchar **, void *, int); 562671dfc47SDavid du Colombier int calledname(char *, char *); 563671dfc47SDavid du Colombier int nbtdial(char *, char *, char *); 564671dfc47SDavid du Colombier void nbthdr(Pkt *); 565671dfc47SDavid du Colombier int nbtrpc(Pkt *); 566671dfc47SDavid du Colombier void xd(char *, void *, int); 567671dfc47SDavid du Colombier 568671dfc47SDavid du Colombier /* nterrstr.c */ 569671dfc47SDavid du Colombier char *nterrstr(uint); 570671dfc47SDavid du Colombier 571671dfc47SDavid du Colombier /* pack.c */ 572671dfc47SDavid du Colombier void *pmem(Pkt *, void *, int); 573671dfc47SDavid du Colombier void *ppath(Pkt *, char *); 574671dfc47SDavid du Colombier void *pstr(Pkt *, char *); 575671dfc47SDavid du Colombier void *pascii(Pkt *, char *); 576671dfc47SDavid du Colombier void *pl64(Pkt *, uvlong); 577671dfc47SDavid du Colombier void *pb32(Pkt *, uint); 578671dfc47SDavid du Colombier void *pl32(Pkt *, uint); 579671dfc47SDavid du Colombier void *pb16(Pkt *, uint); 580671dfc47SDavid du Colombier void *pl16(Pkt *, uint); 581671dfc47SDavid du Colombier void *p8(Pkt *, uint); 582671dfc47SDavid du Colombier void *pname(Pkt *, char *, char); 583671dfc47SDavid du Colombier void *pvtime(Pkt *, uvlong); 584671dfc47SDavid du Colombier void *pdatetime(Pkt *, long); 585671dfc47SDavid du Colombier void gmem(Pkt *, void *, int); 586671dfc47SDavid du Colombier void gstr(Pkt *, char *, int); 587671dfc47SDavid du Colombier void gascii(Pkt *, char *, int); 588671dfc47SDavid du Colombier uvlong gl64(Pkt *); 589671dfc47SDavid du Colombier uvlong gb48(Pkt *); 590671dfc47SDavid du Colombier uint gb32(Pkt *); 591671dfc47SDavid du Colombier uint gl32(Pkt *); 592671dfc47SDavid du Colombier uint gb16(Pkt *); 593671dfc47SDavid du Colombier uint gl16(Pkt *); 594671dfc47SDavid du Colombier uint g8(Pkt *); 595671dfc47SDavid du Colombier long gdatetime(Pkt *); 596671dfc47SDavid du Colombier long gvtime(Pkt *); 597671dfc47SDavid du Colombier void gconv(Pkt *, int, char *, int); 598671dfc47SDavid du Colombier 599671dfc47SDavid du Colombier /* raperrstr.c */ 600671dfc47SDavid du Colombier char *raperrstr(uint); 601671dfc47SDavid du Colombier 602671dfc47SDavid du Colombier /* sid2name.c */ 603671dfc47SDavid du Colombier void upd_names(Session *, Share *, char *, Dir *); 604671dfc47SDavid du Colombier 605671dfc47SDavid du Colombier /* trans.c */ 606671dfc47SDavid du Colombier int RAPshareenum(Session *, Share *, Share **); 607671dfc47SDavid du Colombier int RAPshareinfo(Session *, Share *, char *, Shareinfo2 *); 608671dfc47SDavid du Colombier 609671dfc47SDavid du Colombier int RAPsessionenum(Session *, Share *, Sessinfo **); 610671dfc47SDavid du Colombier 611671dfc47SDavid du Colombier int RAPgroupenum(Session *, Share *, Namelist **); 612671dfc47SDavid du Colombier int RAPgroupusers(Session *, Share *, char *, Namelist **); 613671dfc47SDavid du Colombier 614671dfc47SDavid du Colombier int RAPuserenum(Session *, Share *, Namelist **); 615671dfc47SDavid du Colombier int RAPuserenum2(Session *, Share *, Namelist **); 616671dfc47SDavid du Colombier int RAPuserinfo(Session *, Share *, char *, Userinfo *); 617671dfc47SDavid du Colombier 618671dfc47SDavid du Colombier int RAPServerenum2(Session *, Share *, char *, int, int *, Serverinfo **); 619671dfc47SDavid du Colombier int RAPServerenum3(Session *, Share *, char *, int, int, Serverinfo *); 620671dfc47SDavid du Colombier 621671dfc47SDavid du Colombier int RAPFileenum2(Session *, Share *, char *, char *, Fileinfo **); 622671dfc47SDavid du Colombier 623671dfc47SDavid du Colombier /* trans2.c */ 624671dfc47SDavid du Colombier int T2findfirst(Session *, Share *, int, char *, int *, long *, FInfo *); 625671dfc47SDavid du Colombier int T2findnext(Session *, Share *, int, char *, int *, long *, FInfo *, int); 626671dfc47SDavid du Colombier int T2queryall(Session *, Share *, char *, FInfo *); 627671dfc47SDavid du Colombier int T2querystandard(Session *, Share *, char *, FInfo *); 628671dfc47SDavid du Colombier int T2setpathinfo(Session *, Share *, char *, FInfo *); 629671dfc47SDavid du Colombier int T2setfilelength(Session *, Share *, int, FInfo *); 630671dfc47SDavid du Colombier int T2fsvolumeinfo(Session *, Share *, long *, long *, char *, int); 631671dfc47SDavid du Colombier int T2fssizeinfo(Session *, Share *, uvlong *, uvlong *); 632671dfc47SDavid du Colombier int T2getdfsreferral(Session *, Share *, char *, int *, int *, Refer *, int); 633671dfc47SDavid du Colombier 634671dfc47SDavid du Colombier /* transnt.c */ 635671dfc47SDavid du Colombier int TNTquerysecurity(Session *, Share *, int, char **, char **); 636671dfc47SDavid du Colombier 637671dfc47SDavid du Colombier /* ping.c */ 638671dfc47SDavid du Colombier int ping(char *, int); 639