1 /*
   2  * Copyright (c) 2000-2001 Boris Popov
   3  * All rights reserved.
   4  *
   5  * Now many of these defines are from samba4 code, by Andrew Tridgell.
   6  * (Permission given to Conrad Minshall at CIFS plugfest Aug 13 2003.)
   7  * (Note the main decision was whether to use defines found in MS includes
   8  * and web pages, versus Samba, and the deciding factor is which developers
   9  * are more likely to be looking at this code base.)
  10  *
  11  * Redistribution and use in source and binary forms, with or without
  12  * modification, are permitted provided that the following conditions
  13  * are met:
  14  * 1. Redistributions of source code must retain the above copyright
  15  *    notice, this list of conditions and the following disclaimer.
  16  * 2. Redistributions in binary form must reproduce the above copyright
  17  *    notice, this list of conditions and the following disclaimer in the
  18  *    documentation and/or other materials provided with the distribution.
  19  * 3. All advertising materials mentioning features or use of this software
  20  *    must display the following acknowledgement:
  21  *    This product includes software developed by Boris Popov.
  22  * 4. Neither the name of the author nor the names of any co-contributors
  23  *    may be used to endorse or promote products derived from this software
  24  *    without specific prior written permission.
  25  *
  26  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  27  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  30  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  32  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  33  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36  * SUCH DAMAGE.
  37  *
  38  * $Id: smb.h,v 1.36.90.1 2005/05/27 02:35:29 lindak Exp $
  39  */
  40 
  41 /*
  42  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  43  * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
  44  */
  45 
  46 #ifndef _NETSMB_SMB_H_
  47 #define _NETSMB_SMB_H_
  48 
  49 /*
  50  * Common definitions and structures for SMB/CIFS protocol
  51  * This file should be purely SMB protocol definition stuff.
  52  * (Please don't make it a catch-all:)
  53  */
  54 
  55 #include <smb/doserror.h>
  56 #include <smb/lmerr.h>
  57 #include <smb/nterror.h>
  58 #include <smb/ntstatus.h>
  59 
  60 /*
  61  * SMB dialects that we have to deal with.
  62  */
  63 enum smb_dialects {
  64         SMB_DIALECT_NONE,
  65         SMB_DIALECT_CORE,               /* PC NETWORK PROGRAM 1.0, PCLAN1.0 */
  66         SMB_DIALECT_COREPLUS,           /* MICROSOFT NETWORKS 1.03 */
  67         SMB_DIALECT_LANMAN1_0,          /* MICROSOFT NETWORKS 3.0, LANMAN1.0 */
  68         SMB_DIALECT_LANMAN2_0,          /* LM1.2X002, DOS LM1.2X002, Samba */
  69         SMB_DIALECT_LANMAN2_1,          /* DOS LANMAN2.1, LANMAN2.1 */
  70         SMB_DIALECT_NTLM0_12,           /* NT LM 0.12, etc. */
  71         SMB_DIALECT_SMB2_FF             /* SMB1 negotiate to SMB2 */
  72 };
  73 
  74 /*
  75  * Formats of data/string buffers
  76  */
  77 #define SMB_DT_DATA             1
  78 #define SMB_DT_DIALECT          2
  79 #define SMB_DT_PATHNAME         3
  80 #define SMB_DT_ASCII            4
  81 #define SMB_DT_VARIABLE         5
  82 
  83 /*
  84  * SMB header
  85  */
  86 
  87 #define SMB_SIGNATURE           "\xFFSMB"
  88 #define SMB_SIGLEN              4
  89 #define SMB_HDRCMD(p)           (*((uchar_t *)(p) + SMB_SIGLEN))
  90 #define SMB_HDRMID(p)           (*(ushort_t *)((uchar_t *)(p) + 30))
  91 #define SMB_HDR_OFF_MID         30
  92 #define SMB_HDRLEN              32
  93 
  94 #define SMB_HDR_V1      0xFF
  95 #define SMB_HDR_V2      0xFE
  96 #define SMB_HDR_V3E     0xFD    /* SMB3 encrypted */
  97 
  98 /*
  99  * bits in the smb_flags field
 100  */
 101 #define SMB_FLAGS_SUPPORT_LOCKREAD      0x01
 102 #define SMB_FLAGS_CLIENT_BUF_AVAIL      0x02
 103 #define SMB_FLAGS_CASELESS              0x08
 104 #define SMB_FLAGS_CANONICAL_PATHNAMES   0x10
 105 #define SMB_FLAGS_REQUEST_OPLOCK        0x20
 106 #define SMB_FLAGS_REQUEST_BATCH_OPLOCK  0x40
 107 #define SMB_FLAGS_SERVER_RESP           0x80
 108 
 109 /*
 110  * bits in the smb_flags2 field
 111  */
 112 #define SMB_FLAGS2_KNOWS_LONG_NAMES     0x0001
 113 #define SMB_FLAGS2_KNOWS_EAS            0x0002  /* client know about EAs */
 114 #define SMB_FLAGS2_SECURITY_SIGNATURE   0x0004  /* check SMB integrity */
 115 #define SMB_FLAGS2_IS_LONG_NAME         0x0040  /* any path name is long name */
 116 #define SMB_FLAGS2_EXT_SEC              0x0800  /* client aware of Extended */
 117                                                 /* Security negotiation */
 118 #define SMB_FLAGS2_DFS                  0x1000  /* resolve paths in DFS */
 119 #define SMB_FLAGS2_PAGING_IO            0x2000  /* for exec */
 120 #define SMB_FLAGS2_ERR_STATUS           0x4000  /* 1 - status.status */
 121 #define SMB_FLAGS2_UNICODE              0x8000  /* use Unicode for strings */
 122 
 123 #define SMB_UID_UNKNOWN         0xffff
 124 #define SMB_TID_UNKNOWN         0xffff
 125 #define SMB_FID_UNUSED          0xffff
 126 
 127 /*
 128  * Security mode bits
 129  */
 130 #define SMB_SM_USER             0x01    /* server in the user security mode */
 131 #define SMB_SM_ENCRYPT          0x02    /* use challenge/responce */
 132 #define SMB_SM_SIGS             0x04
 133 #define SMB_SM_SIGS_REQUIRE     0x08
 134 
 135 /*
 136  * Action bits in session setup reply
 137  */
 138 #define SMB_ACT_GUEST           0x01
 139 
 140 /*
 141  * NTLM capabilities
 142  */
 143 #define SMB_CAP_RAW_MODE                0x0001
 144 #define SMB_CAP_MPX_MODE                0x0002
 145 #define SMB_CAP_UNICODE                 0x0004
 146 #define SMB_CAP_LARGE_FILES             0x0008  /* 64 bit offsets supported */
 147 #define SMB_CAP_NT_SMBS                 0x0010
 148 #define SMB_CAP_RPC_REMOTE_APIS         0x0020
 149 #define SMB_CAP_STATUS32                0x0040
 150 #define SMB_CAP_LEVEL_II_OPLOCKS        0x0080
 151 #define SMB_CAP_LOCK_AND_READ           0x0100
 152 #define SMB_CAP_NT_FIND                 0x0200
 153 #define SMB_CAP_DFS                     0x1000
 154 #define SMB_CAP_INFOLEVEL_PASSTHRU      0x2000
 155 #define SMB_CAP_LARGE_READX             0x4000
 156 #define SMB_CAP_LARGE_WRITEX            0x8000
 157 #define SMB_CAP_UNIX                    0x00800000
 158 #define SMB_CAP_BULK_TRANSFER           0x20000000
 159 #define SMB_CAP_COMPRESSED_DATA         0x40000000
 160 #define SMB_CAP_EXT_SECURITY            0x80000000
 161 
 162 /* SMB_COM_TREE_CONNECT_ANDX  flags. See [MS-SMB] for a complete description. */
 163 #define TREE_CONNECT_ANDX_DISCONNECT_TID                0x0001
 164 #define TREE_CONNECT_ANDX_EXTENDED_SIGNATURES   0x0004
 165 #define TREE_CONNECT_ANDX_EXTENDED_RESPONSE             0x0008
 166 
 167 /*
 168  * SMB_COM_TREE_CONNECT_ANDX  optional support flags. See [MS-SMB] for a
 169  * complete description.
 170  */
 171 #define SMB_SUPPORT_SEARCH_BITS         0x0001  /* supports SearchAttributes */
 172 #define SMB_SHARE_IS_IN_DFS             0x0002  /* share is managed by DFS */
 173 #define SMB_CSC_MASK                    0x000C  /* Offline-caching bits. */
 174 #define SMB_UNIQUE_FILE_NAME            0x0010  /* Long file names only */
 175 #define SMB_EXTENDED_SIGNATURES         0x0020  /* Signing key protection. */
 176 /* See [MS-SMB] for a complete description of SMB_CSC_MASK bits. */
 177 #define SMB_CSC_CACHE_MANUAL_REINT      0x0000
 178 #define SMB_CSC_CACHE_AUTO_REINT        0x0004
 179 #define SMB_CSC_CACHE_VDO               0x0008
 180 
 181 /*
 182  * File attributes
 183  */
 184 #define SMB_FA_RDONLY           0x01
 185 #define SMB_FA_HIDDEN           0x02
 186 #define SMB_FA_SYSTEM           0x04
 187 #define SMB_FA_VOLUME           0x08
 188 #define SMB_FA_DIR              0x10
 189 #define SMB_FA_ARCHIVE          0x20
 190 
 191 /*
 192  * Extended file attributes
 193  */
 194 #define SMB_EFA_RDONLY                  0x00000001
 195 #define SMB_EFA_HIDDEN                  0x00000002
 196 #define SMB_EFA_SYSTEM                  0x00000004
 197 #define SMB_EFA_VOLUME                  0x00000008
 198 #define SMB_EFA_DIRECTORY               0x00000010
 199 #define SMB_EFA_ARCHIVE                 0x00000020
 200 #define SMB_EFA_DEVICE                  0x00000040
 201 #define SMB_EFA_NORMAL                  0x00000080
 202 #define SMB_EFA_TEMPORARY               0x00000100
 203 #define SMB_EFA_SPARSE                  0x00000200
 204 #define SMB_EFA_REPARSE_POINT           0x00000400
 205 #define SMB_EFA_COMPRESSED              0x00000800
 206 #define SMB_EFA_OFFLINE                 0x00001000
 207 #define SMB_EFA_NONINDEXED              0x00002000
 208 #define SMB_EFA_ENCRYPTED               0x00004000
 209 #define SMB_EFA_POSIX_SEMANTICS         0x01000000
 210 #define SMB_EFA_BACKUP_SEMANTICS        0x02000000
 211 #define SMB_EFA_DELETE_ON_CLOSE         0x04000000
 212 #define SMB_EFA_SEQUENTIAL_SCAN         0x08000000
 213 #define SMB_EFA_RANDOM_ACCESS           0x10000000
 214 #define SMB_EFA_NO_BUFFERING            0x20000000
 215 #define SMB_EFA_WRITE_THROUGH           0x80000000
 216 
 217 /*
 218  * Access Mode Encoding
 219  */
 220 #define SMB_AM_OPENREAD         0x0000
 221 #define SMB_AM_OPENWRITE        0x0001
 222 #define SMB_AM_OPENRW           0x0002
 223 #define SMB_AM_OPENEXEC         0x0003
 224 #define SMB_AM_OPENMODE         0x0003  /* mask for access mode bits */
 225 #define SMB_SM_COMPAT           0x0000
 226 #define SMB_SM_EXCLUSIVE        0x0010
 227 #define SMB_SM_DENYWRITE        0x0020
 228 #define SMB_SM_DENYREADEXEC     0x0030
 229 #define SMB_SM_DENYNONE         0x0040
 230 
 231 /* NT_CREATE_ANDX flags */
 232 #define NTCREATEX_FLAGS_REQUEST_OPLOCK          0x02
 233 #define NTCREATEX_FLAGS_REQUEST_BATCH_OPLOCK    0x04
 234 #define NTCREATEX_FLAGS_OPEN_DIRECTORY          0x08
 235 #define NTCREATEX_FLAGS_EXTENDED                0x10
 236 
 237 /* NT_CREATE_ANDX share_access (share mode) */
 238 #define NTCREATEX_SHARE_ACCESS_NONE             0
 239 #define NTCREATEX_SHARE_ACCESS_READ             1
 240 #define NTCREATEX_SHARE_ACCESS_WRITE            2
 241 #define NTCREATEX_SHARE_ACCESS_DELETE           4
 242 #define NTCREATEX_SHARE_ACCESS_ALL              7
 243 
 244 /* NT_CREATE_ANDX open_disposition */
 245 #define NTCREATEX_DISP_SUPERSEDE        0 /* if file exists supersede it */
 246 #define NTCREATEX_DISP_OPEN             1 /* exists ? open it : fail */
 247 #define NTCREATEX_DISP_CREATE           2 /* exists ? fail : create it */
 248 #define NTCREATEX_DISP_OPEN_IF          3 /* exists ? open it : create it */
 249 #define NTCREATEX_DISP_OVERWRITE        4 /* exists ? overwrite : fail */
 250 #define NTCREATEX_DISP_OVERWRITE_IF     5 /* exists ? overwrite : create */
 251 
 252 /* NT_CREATE_ANDX create_options */
 253 #define NTCREATEX_OPTIONS_DIRECTORY             0x0001
 254 #define NTCREATEX_OPTIONS_WRITE_THROUGH         0x0002
 255 #define NTCREATEX_OPTIONS_SEQUENTIAL_ONLY       0x0004
 256 #define NTCREATEX_OPTIONS_SYNC_ALERT            0x0010
 257 #define NTCREATEX_OPTIONS_ASYNC_ALERT           0x0020
 258 #define NTCREATEX_OPTIONS_NON_DIRECTORY_FILE    0x0040
 259 #define NTCREATEX_OPTIONS_NO_EA_KNOWLEDGE       0x0200
 260 #define NTCREATEX_OPTIONS_EIGHT_DOT_THREE_ONLY  0x0400
 261 #define NTCREATEX_OPTIONS_RANDOM_ACCESS         0x0800
 262 #define NTCREATEX_OPTIONS_DELETE_ON_CLOSE       0x1000
 263 #define NTCREATEX_OPTIONS_OPEN_BY_FILE_ID       0x2000
 264 
 265 /* NT_CREATE_ANDX "impersonation" */
 266 #define NTCREATEX_IMPERSONATION_ANONYMOUS               0
 267 #define NTCREATEX_IMPERSONATION_IDENTIFICATION          1
 268 #define NTCREATEX_IMPERSONATION_IMPERSONATION           2
 269 #define NTCREATEX_IMPERSONATION_DELEGATION              3
 270 
 271 /* NT_CREATE_ANDX security flags */
 272 #define NTCREATEX_SECURITY_DYNAMIC      1
 273 #define NTCREATEX_SECURITY_ALL          2
 274 
 275 /* NT_CREATE_ANDX create_action in reply */
 276 #define NTCREATEX_ACTION_EXISTED        1
 277 #define NTCREATEX_ACTION_CREATED        2
 278 #define NTCREATEX_ACTION_TRUNCATED      3
 279 
 280 /* SMB_TRANS2_FIND_FIRST2/SMB_TRANS2_FIND_NEXT2 flags */
 281 #define FIND2_CLOSE_AFTER_REQUEST       0x0001
 282 #define FIND2_CLOSE_ON_EOS              0x0002
 283 #define FIND2_RETURN_RESUME_KEYS        0x0004
 284 #define FIND2_CONTINUE_SEARCH           0x0008
 285 #define FIND2_BACKUP_INTENT             0x0010
 286 
 287 /*
 288  * SMB commands
 289  */
 290 #define SMB_COM_CREATE_DIRECTORY        0x00
 291 #define SMB_COM_DELETE_DIRECTORY        0x01
 292 #define SMB_COM_OPEN                    0x02
 293 #define SMB_COM_CREATE                  0x03
 294 #define SMB_COM_CLOSE                   0x04
 295 #define SMB_COM_FLUSH                   0x05
 296 #define SMB_COM_DELETE                  0x06
 297 #define SMB_COM_RENAME                  0x07
 298 #define SMB_COM_QUERY_INFORMATION       0x08
 299 #define SMB_COM_SET_INFORMATION         0x09
 300 #define SMB_COM_READ                    0x0A
 301 #define SMB_COM_WRITE                   0x0B
 302 #define SMB_COM_LOCK_BYTE_RANGE         0x0C
 303 #define SMB_COM_UNLOCK_BYTE_RANGE       0x0D
 304 #define SMB_COM_CREATE_TEMPORARY        0x0E
 305 #define SMB_COM_CREATE_NEW              0x0F
 306 #define SMB_COM_CHECK_DIRECTORY         0x10
 307 #define SMB_COM_PROCESS_EXIT            0x11
 308 #define SMB_COM_SEEK                    0x12
 309 #define SMB_COM_LOCK_AND_READ           0x13
 310 #define SMB_COM_WRITE_AND_UNLOCK        0x14
 311 #define SMB_COM_READ_RAW                0x1A
 312 #define SMB_COM_READ_MPX                0x1B
 313 #define SMB_COM_READ_MPX_SECONDARY      0x1C
 314 #define SMB_COM_WRITE_RAW               0x1D
 315 #define SMB_COM_WRITE_MPX               0x1E
 316 #define SMB_COM_WRITE_COMPLETE          0x20
 317 #define SMB_COM_SET_INFORMATION2        0x22
 318 #define SMB_COM_QUERY_INFORMATION2      0x23
 319 #define SMB_COM_LOCKING_ANDX            0x24
 320 #define SMB_COM_TRANSACTION             0x25
 321 #define SMB_COM_TRANSACTION_SECONDARY   0x26
 322 #define SMB_COM_IOCTL                   0x27
 323 #define SMB_COM_IOCTL_SECONDARY         0x28
 324 #define SMB_COM_COPY                    0x29
 325 #define SMB_COM_MOVE                    0x2A
 326 #define SMB_COM_ECHO                    0x2B
 327 #define SMB_COM_WRITE_AND_CLOSE         0x2C
 328 #define SMB_COM_OPEN_ANDX               0x2D
 329 #define SMB_COM_READ_ANDX               0x2E
 330 #define SMB_COM_WRITE_ANDX              0x2F
 331 #define SMB_COM_CLOSE_AND_TREE_DISC     0x31
 332 #define SMB_COM_TRANSACTION2            0x32
 333 #define SMB_COM_TRANSACTION2_SECONDARY  0x33
 334 #define SMB_COM_FIND_CLOSE2             0x34
 335 #define SMB_COM_FIND_NOTIFY_CLOSE       0x35
 336 #define SMB_COM_TREE_CONNECT            0x70
 337 #define SMB_COM_TREE_DISCONNECT         0x71
 338 #define SMB_COM_NEGOTIATE               0x72
 339 #define SMB_COM_SESSION_SETUP_ANDX      0x73
 340 #define SMB_COM_LOGOFF_ANDX             0x74
 341 #define SMB_COM_TREE_CONNECT_ANDX       0x75
 342 #define SMB_COM_QUERY_INFORMATION_DISK  0x80
 343 #define SMB_COM_SEARCH                  0x81
 344 #define SMB_COM_FIND                    0x82
 345 #define SMB_COM_FIND_UNIQUE             0x83
 346 #define SMB_COM_NT_TRANSACT             0xA0
 347 #define SMB_COM_NT_TRANSACT_SECONDARY   0xA1
 348 #define SMB_COM_NT_CREATE_ANDX          0xA2
 349 #define SMB_COM_NT_CANCEL               0xA4
 350 #define SMB_COM_OPEN_PRINT_FILE         0xC0
 351 #define SMB_COM_WRITE_PRINT_FILE        0xC1
 352 #define SMB_COM_CLOSE_PRINT_FILE        0xC2
 353 #define SMB_COM_GET_PRINT_QUEUE         0xC3
 354 #define SMB_COM_READ_BULK               0xD8
 355 #define SMB_COM_WRITE_BULK              0xD9
 356 #define SMB_COM_WRITE_BULK_DATA         0xDA
 357 
 358 /*
 359  * SMB_COM_TRANSACTION2 subcommands
 360  */
 361 #define SMB_TRANS2_OPEN2                        0x00
 362 #define SMB_TRANS2_FIND_FIRST2                  0x01
 363 #define SMB_TRANS2_FIND_NEXT2                   0x02
 364 #define SMB_TRANS2_QUERY_FS_INFORMATION         0x03
 365 #define SMB_TRANS2_SETFSINFO                    0x04
 366 #define SMB_TRANS2_QUERY_PATH_INFORMATION       0x05
 367 #define SMB_TRANS2_SET_PATH_INFORMATION         0x06
 368 #define SMB_TRANS2_QUERY_FILE_INFORMATION       0x07
 369 #define SMB_TRANS2_SET_FILE_INFORMATION         0x08
 370 #define SMB_TRANS2_FSCTL                        0x09
 371 #define SMB_TRANS2_IOCTL2                       0x0A
 372 #define SMB_TRANS2_FIND_NOTIFY_FIRST            0x0B
 373 #define SMB_TRANS2_FIND_NOTIFY_NEXT             0x0C
 374 #define SMB_TRANS2_CREATE_DIRECTORY             0x0D
 375 #define SMB_TRANS2_SESSION_SETUP                0x0E
 376 #define SMB_TRANS2_GET_DFS_REFERRAL             0x10
 377 #define SMB_TRANS2_REPORT_DFS_INCONSISTENCY     0x11
 378 
 379 /*
 380  * SMB_COM_NT_TRANSACT subcommands
 381  */
 382 #define NT_TRANSACT_CREATE              0x01
 383 #define NT_TRANSACT_IOCTL               0x02
 384 #define NT_TRANSACT_SET_SECURITY_DESC   0x03
 385 #define NT_TRANSACT_NOTIFY_CHANGE       0x04
 386 #define NT_TRANSACT_RENAME              0x05
 387 #define NT_TRANSACT_QUERY_SECURITY_DESC 0x06
 388 #define NT_TRANSACT_GET_USER_QUOTA      0x07
 389 #define NT_TRANSACT_SET_USER_QUOTA      0x08
 390 
 391 /*
 392  * SMB_TRANS2_QUERY_FS_INFORMATION levels
 393  */
 394 #define SMB_QFS_ALLOCATION                      1
 395 #define SMB_QFS_VOLUME                          2
 396 #define SMB_QFS_LABEL_INFO                      0x101
 397 #define SMB_QFS_VOLUME_INFO                     0x102
 398 #define SMB_QFS_SIZE_INFO                       0x103
 399 #define SMB_QFS_DEVICE_INFO                     0x104
 400 #define SMB_QFS_ATTRIBUTE_INFO                  0x105
 401 #define SMB_QFS_UNIX_INFO                       0x200
 402 #define SMB_QFS_POSIX_WHOAMI                    0x202
 403 #define SMB_QFS_MAC_FS_INFO                     0x301
 404 #define SMB_QFS_VOLUME_INFORMATION              1001
 405 #define SMB_QFS_SIZE_INFORMATION                1003
 406 #define SMB_QFS_DEVICE_INFORMATION              1004
 407 #define SMB_QFS_ATTRIBUTE_INFORMATION           1005
 408 #define SMB_QFS_QUOTA_INFORMATION               1006
 409 #define SMB_QFS_FULL_SIZE_INFORMATION           1007
 410 #define SMB_QFS_OBJECTID_INFORMATION            1008
 411 
 412 /*
 413  * NT Notify Change Compeletion Filter
 414  * NT Notify Actions
 415  * (We don't use these.)
 416  */
 417 
 418 /*
 419  * SMB_QFS_ATTRIBUTE_INFO bits.
 420  * The following info found in msdn
 421  * (http://msdn.microsoft.com/library/default.asp?
 422  * url=/library/en-us/wmisdk/wmi/win32_cdromdrive.asp)
 423  * Naming is mostly as in samba, to help Those Who Google.
 424  */
 425 #define FILE_CASE_SENSITIVE_SEARCH      0x00000001
 426 #define FILE_CASE_PRESERVED_NAMES       0x00000002
 427 #define FILE_UNICODE_ON_DISK            0x00000004
 428 #define FILE_PERSISTENT_ACLS            0x00000008
 429 #define FILE_FILE_COMPRESSION           0x00000010
 430 #define FILE_VOLUME_QUOTAS              0x00000020
 431 #define FILE_SUPPORTS_SPARSE_FILES      0x00000040
 432 #define FILE_SUPPORTS_REPARSE_POINTS    0x00000080
 433 #define FILE_SUPPORTS_REMOTE_STORAGE    0x00000100
 434 #define FILE_SUPPORTS_LONG_NAMES        0x00004000
 435 #define FILE_VOLUME_IS_COMPRESSED       0x00008000
 436 #define FILE_SUPPORTS_OBJECT_IDS        0x00010000
 437 #define FILE_SUPPORTS_ENCRYPTION        0x00020000
 438 #define FILE_NAMED_STREAMS              0x00040000
 439 #define FILE_READ_ONLY_VOLUME           0x00080000
 440 
 441 /*
 442  * SMB_TRANS2_QUERY_PATH levels
 443  */
 444 #define SMB_QFILEINFO_STANDARD                  1
 445 #define SMB_QFILEINFO_EA_SIZE                   2
 446 #define SMB_QFILEINFO_EAS_FROM_LIST             3
 447 #define SMB_QFILEINFO_ALL_EAS                   4
 448 #define SMB_QFILEINFO_IS_NAME_VALID             6       /* QPATHINFO only? */
 449 #define SMB_QFILEINFO_BASIC_INFO                0x101
 450 #define SMB_QFILEINFO_STANDARD_INFO             0x102
 451 #define SMB_QFILEINFO_EA_INFO                   0x103
 452 #define SMB_QFILEINFO_NAME_INFO                 0x104
 453 #define SMB_QFILEINFO_ALLOCATION_INFO           0x105
 454 #define SMB_QFILEINFO_END_OF_FILE_INFO          0x106
 455 #define SMB_QFILEINFO_ALL_INFO                  0x107
 456 #define SMB_QFILEINFO_ALT_NAME_INFO             0x108
 457 #define SMB_QFILEINFO_STREAM_INFO               0x109
 458 #define SMB_QFILEINFO_COMPRESSION_INFO          0x10b
 459 #define SMB_QFILEINFO_UNIX_BASIC                0x200
 460 #define SMB_QFILEINFO_UNIX_LINK                 0x201
 461 #define SMB_QFILEINFO_POSIX_ACL                 0x204
 462 #define SMB_QFILEINFO_UNIX_INFO2                0x20B
 463 #define SMB_QFILEINFO_MAC_DT_GET_APPL           0x306
 464 #define SMB_QFILEINFO_MAC_DT_GET_ICON           0x307
 465 #define SMB_QFILEINFO_MAC_DT_GET_ICON_INFO      0x308
 466 #define SMB_QFILEINFO_MAC_SPOTLIGHT             0x310
 467 #define SMB_QFILEINFO_BASIC_INFORMATION         1004
 468 #define SMB_QFILEINFO_STANDARD_INFORMATION      1005
 469 #define SMB_QFILEINFO_INTERNAL_INFORMATION      1006
 470 #define SMB_QFILEINFO_EA_INFORMATION            1007
 471 #define SMB_QFILEINFO_ACCESS_INFORMATION        1008
 472 #define SMB_QFILEINFO_NAME_INFORMATION          1009
 473 #define SMB_QFILEINFO_POSITION_INFORMATION      1014
 474 #define SMB_QFILEINFO_MODE_INFORMATION          1016
 475 #define SMB_QFILEINFO_ALIGNMENT_INFORMATION     1017
 476 #define SMB_QFILEINFO_ALL_INFORMATION           1018
 477 #define SMB_QFILEINFO_ALT_NAME_INFORMATION      1021
 478 #define SMB_QFILEINFO_STREAM_INFORMATION        1022
 479 #define SMB_QFILEINFO_COMPRESSION_INFORMATION   1028
 480 #define SMB_QFILEINFO_NETWORK_OPEN_INFORMATION  1034
 481 #define SMB_QFILEINFO_ATTRIBUTE_TAG_INFORMATION 1035
 482 
 483 /*
 484  * SMB_TRANS2_FIND_FIRST2 information levels
 485  */
 486 #define SMB_FIND_STANDARD               1
 487 #define SMB_FIND_EA_SIZE                2
 488 #define SMB_FIND_EAS_FROM_LIST          3
 489 #define SMB_FIND_DIRECTORY_INFO         0x101
 490 #define SMB_FIND_FULL_DIRECTORY_INFO    0x102
 491 #define SMB_FIND_NAME_INFO              0x103
 492 #define SMB_FIND_BOTH_DIRECTORY_INFO    0x104
 493 #define SMB_FIND_UNIX_INFO              0x200
 494 /* Transact 2 Find First levels */
 495 #define SMB_FIND_FILE_UNIX              0x202
 496 #define SMB_FIND_FILE_UNIX_INFO2        0x20B /* UNIX File Info2 */
 497 
 498 /*
 499  * Selectors for NT_TRANSACT_QUERY_SECURITY_DESC and
 500  * NT_TRANSACT_SET_SECURITY_DESC.  Details found in the MSDN
 501  * library by searching on security_information.
 502  * Note the protected/unprotected bits did not exist in NT.
 503  */
 504 
 505 #define OWNER_SECURITY_INFORMATION              0x00000001
 506 #define GROUP_SECURITY_INFORMATION              0x00000002
 507 #define DACL_SECURITY_INFORMATION               0x00000004
 508 #define SACL_SECURITY_INFORMATION               0x00000008
 509 #define UNPROTECTED_SACL_SECURITY_INFORMATION   0x10000000
 510 #define UNPROTECTED_DACL_SECURITY_INFORMATION   0x20000000
 511 #define PROTECTED_SACL_SECURITY_INFORMATION     0x40000000
 512 #define PROTECTED_DACL_SECURITY_INFORMATION     0x80000000
 513 
 514 /*
 515  * security descriptor header
 516  * it is followed by the optional SIDs and ACLs
 517  * note this is "raw", ie little-endian
 518  */
 519 struct ntsecdesc {
 520         uint8_t         sd_revision;    /* 0x01 observed between W2K */
 521         uint8_t         sd_pad1;
 522         uint16_t        sd_flags;
 523         uint32_t        sd_owneroff;    /* offset to owner SID */
 524         uint32_t        sd_groupoff;    /* offset to group SID */
 525         uint32_t        sd_sacloff;     /* offset to system/audit ACL */
 526         uint32_t        sd_dacloff;     /* offset to discretionary ACL */
 527 }; /* XXX: __attribute__((__packed__)); */
 528 typedef struct ntsecdesc ntsecdesc_t;
 529 
 530 #define wset_sdrevision(s) ((s)->sd_revision = 0x01)
 531 #define sdflags(s) (letohs((s)->sd_flags))
 532 #define wset_sdflags(s, f) ((s)->sd_flags = letohs(f))
 533 #define sdowner(s) \
 534         ((struct ntsid *)((s)->sd_owneroff ? \
 535         (char *)(s) + letohl((s)->sd_owneroff) : \
 536         NULL))
 537 #define wset_sdowneroff(s, o) ((s)->sd_owneroff = htolel(o))
 538 #define sdgroup(s) \
 539         ((struct ntsid *)((s)->sd_groupoff ? \
 540         (char *)(s) + letohl((s)->sd_groupoff) : \
 541         NULL))
 542 #define wset_sdgroupoff(s, o) ((s)->sd_groupoff = htolel(o))
 543 #define sdsacl(s) \
 544         ((struct ntacl *)((s)->sd_sacloff ? \
 545         (char *)(s) + letohl((s)->sd_sacloff) : \
 546         NULL))
 547 #define wset_sdsacloff(s, o) ((s)->sd_sacloff = htolel(o))
 548 #define sddacl(s) \
 549         ((struct ntacl *)((s)->sd_dacloff ? \
 550         (char *)(s) + letohl((s)->sd_dacloff) : \
 551         NULL))
 552 #define wset_sddacloff(s, o) ((s)->sd_dacloff = htolel(o))
 553 
 554 /*
 555  * sd_flags bits
 556  */
 557 #define SD_OWNER_DEFAULTED              0x0001
 558 #define SD_GROUP_DEFAULTED              0x0002
 559 #define SD_DACL_PRESENT                 0x0004
 560 #define SD_DACL_DEFAULTED               0x0008
 561 #define SD_SACL_PRESENT                 0x0010
 562 #define SD_SACL_DEFAULTED               0x0020
 563 #define SD_DACL_TRUSTED                 0x0040
 564 #define SD_SERVER_SECURITY              0x0080
 565 #define SD_DACL_AUTO_INHERIT_REQ        0x0100
 566 #define SD_SACL_AUTO_INHERIT_REQ        0x0200
 567 #define SD_DACL_AUTO_INHERITED          0x0400
 568 #define SD_SACL_AUTO_INHERITED          0x0800
 569 #define SD_DACL_PROTECTED               0x1000
 570 #define SD_SACL_PROTECTED               0x2000
 571 #define SD_RM_CONTROL_VALID             0x4000
 572 #define SD_SELF_RELATIVE                0x8000
 573 
 574 /*
 575  * access control list header
 576  * it is followed by the ACEs
 577  * note this is "raw", ie little-endian
 578  */
 579 struct ntacl {
 580         uint8_t acl_revision;   /* 0x02 observed with W2K */
 581         uint8_t acl_pad1;
 582         uint16_t        acl_len; /* bytes; includes this header */
 583         uint16_t        acl_acecount;
 584         uint16_t        acl_pad2;
 585 }; /* XXX: __attribute__((__packed__)); */
 586 typedef struct ntacl ntacl_t;
 587 
 588 #define wset_aclrevision(a) ((a)->acl_revision = 0x02)
 589 #define acllen(a) (letohs((a)->acl_len))
 590 #define wset_acllen(a, l) ((a)->acl_len = htoles(l))
 591 #define aclacecount(a) (letohs((a)->acl_acecount))
 592 #define wset_aclacecount(a, c) ((a)->acl_acecount = htoles(c))
 593 #define aclace(a) ((struct ntace *)((char *)(a) + sizeof (struct ntacl)))
 594 
 595 /*
 596  * access control entry header
 597  * it is followed by type-specific ace data,
 598  * which for the simple types is just a SID
 599  * note this is "raw", ie little-endian
 600  */
 601 struct ntace {
 602         uint8_t ace_type;
 603         uint8_t ace_flags;
 604         uint16_t        ace_len; /* bytes; includes this header */
 605         uint32_t        ace_rights; /* generic, standard, specific, etc */
 606 }; /* XXX: __attribute__((__packed__)); */
 607 
 608 #define acetype(a) ((a)->ace_type)
 609 #define wset_acetype(a, t) ((a)->ace_type = (t))
 610 #define aceflags(a) ((a)->ace_flags)
 611 #define wset_aceflags(a, f) ((a)->ace_flags = (f))
 612 #define acelen(a) (letohs((a)->ace_len))
 613 #define wset_acelen(a, l) ((a)->ace_len = htoles(l))
 614 #define acerights(a) (letohl((a)->ace_rights))
 615 #define wset_acerights(a, r) ((a)->ace_rights = htolel(r))
 616 #define aceace(a) ((struct ntace *)((char *)(a) + acelen(a)))
 617 #define acesid(a) ((struct ntsid *)((char *)(a) + sizeof (struct ntace)))
 618 
 619 /*
 620  * ace_rights
 621  * (Samba bit names are used here, with permission, as the shorter Windows
 622  * names are more likely to cause namespace collisions)
 623  */
 624 #define SA_RIGHT_FILE_READ_DATA         0x00000001
 625 #define SA_RIGHT_FILE_WRITE_DATA        0x00000002
 626 #define SA_RIGHT_FILE_APPEND_DATA       0x00000004
 627 #define SA_RIGHT_FILE_READ_EA           0x00000008
 628 #define SA_RIGHT_FILE_WRITE_EA          0x00000010
 629 #define SA_RIGHT_FILE_EXECUTE           0x00000020
 630 #define SA_RIGHT_FILE_DELETE_CHILD      0x00000040
 631 #define SA_RIGHT_FILE_READ_ATTRIBUTES   0x00000080
 632 #define SA_RIGHT_FILE_WRITE_ATTRIBUTES  0x00000100
 633 #define SA_RIGHT_FILE_ALL_ACCESS        0x000001FF
 634 
 635 #define STD_RIGHT_DELETE_ACCESS         0x00010000
 636 #define STD_RIGHT_READ_CONTROL_ACCESS   0x00020000
 637 #define STD_RIGHT_WRITE_DAC_ACCESS      0x00040000
 638 #define STD_RIGHT_WRITE_OWNER_ACCESS    0x00080000
 639 #define STD_RIGHT_SYNCHRONIZE_ACCESS    0x00100000
 640 #define STD_RIGHT_ALL_ACCESS            0x001F0000
 641 
 642 #define SEC_RIGHT_SYSTEM_SECURITY       0x01000000
 643 /*
 644  * Don't use MAXIMUM_ALLOWED as Samba (2.2.3 at least) will
 645  * return NT_STATUS_INVALID_LOCK_SEQUENCE
 646  */
 647 #define SEC_RIGHT_MAXIMUM_ALLOWED       0x02000000
 648 
 649 #define GENERIC_RIGHT_ALL_ACCESS        0x10000000
 650 #define GENERIC_RIGHT_EXECUTE_ACCESS    0x20000000
 651 #define GENERIC_RIGHT_WRITE_ACCESS      0x40000000
 652 #define GENERIC_RIGHT_READ_ACCESS       0x80000000
 653 
 654 /*
 655  * these mappings are from Windows sample code but are likely incomplete
 656  *
 657  * GENERIC_RIGHT_READ_ACCESS :
 658  *      STD_RIGHT_SYNCHRONIZE_ACCESS |
 659  *      STD_RIGHT_READ_CONTROL_ACCESS |
 660  *      SA_RIGHT_FILE_READ_ATTRIBUTES |
 661  *      SA_RIGHT_FILE_READ_EA |
 662  *      SA_RIGHT_FILE_READ_DATA
 663  * GENERIC_RIGHT_WRITE_ACCESS :
 664  *      STD_RIGHT_SYNCHRONIZE_ACCESS |
 665  *      STD_RIGHT_READ_CONTROL_ACCESS |
 666  *      SA_RIGHT_FILE_WRITE_ATTRIBUTES |
 667  *      SA_RIGHT_FILE_WRITE_EA |
 668  *      SA_RIGHT_FILE_APPEND_DATA |
 669  *      SA_RIGHT_FILE_WRITE_DATA
 670  * GENERIC_RIGHT_EXECUTE_ACCESS :
 671  *      STD_RIGHT_SYNCHRONIZE_ACCESS |
 672  *      STD_RIGHT_READ_CONTROL_ACCESS |
 673  *      SA_RIGHT_FILE_READ_ATTRIBUTES |
 674  *      SA_RIGHT_FILE_EXECUTE
 675  * GENERIC_RIGHT_ALL_ACCESS :
 676  *      STD_RIGHT_SYNCHRONIZE_ACCESS |
 677  *      STD_RIGHT_WRITE_OWNER_ACCESS |
 678  *      STD_RIGHT_WRITE_DAC_ACCESS |
 679  *      STD_RIGHT_READ_CONTROL_ACCESS |
 680  *      STD_RIGHT_DELETE_ACCESS |
 681  *      SA_RIGHT_FILE_ALL_ACCESS
 682  */
 683 
 684 /*
 685  * security identifier header
 686  * it is followed by sid_numauth sub-authorities,
 687  * which are 32 bits each.
 688  * note the subauths are little-endian on the wire, but
 689  * need to be big-endian for memberd/DS
 690  */
 691 #define SIDAUTHSIZE 6
 692 struct ntsid {
 693         uint8_t sid_revision;
 694         uint8_t sid_subauthcount;
 695         uint8_t sid_authority[SIDAUTHSIZE]; /* ie not little endian */
 696 }; /* XXX: __attribute__((__packed__)); */
 697 typedef struct ntsid ntsid_t;
 698 
 699 #define sidsubauthcount(s) (s->sid_subauthcount)
 700 #define sidlen(s) (sizeof (struct ntsid) + 4 * (s)->sid_subauthcount)
 701 #define MAXSIDLEN (sizeof (struct ntsid) + 4 * KAUTH_NTSID_MAX_AUTHORITIES)
 702 #define sidsub(s) ((uint32_t *)((char *)(s) + sizeof (struct ntsid)))
 703 
 704 /*
 705  * MS' defined values for ace_type
 706  */
 707 #define ACCESS_ALLOWED_ACE_TYPE                 0x0
 708 #define ACCESS_DENIED_ACE_TYPE                  0x1
 709 #define SYSTEM_AUDIT_ACE_TYPE                   0x2
 710 #define SYSTEM_ALARM_ACE_TYPE                   0x3
 711 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE        0x4
 712 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE          0x5
 713 #define ACCESS_DENIED_OBJECT_ACE_TYPE           0x6
 714 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE            0x7
 715 #define SYSTEM_ALARM_OBJECT_ACE_TYPE            0x8
 716 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE        0x9
 717 #define ACCESS_DENIED_CALLBACK_ACE_TYPE         0xA
 718 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE 0xB
 719 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE  0xC
 720 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE          0xD
 721 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE          0xE
 722 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE   0xF
 723 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE   0x10
 724 
 725 /*
 726  * MS' defined values for ace_flags
 727  */
 728 #define OBJECT_INHERIT_ACE_FLAG                 0x01
 729 #define CONTAINER_INHERIT_ACE_FLAG              0x02
 730 #define NO_PROPAGATE_INHERIT_ACE_FLAG           0x04
 731 #define INHERIT_ONLY_ACE_FLAG                   0x08
 732 #define INHERITED_ACE_FLAG                      0x10
 733 #define UNDEF_ACE_FLAG                          0x20 /* MS doesn't define it */
 734 #define VALID_INHERIT_ACE_FLAGS                 0x1F
 735 #define SUCCESSFUL_ACCESS_ACE_FLAG              0x40
 736 #define FAILED_ACCESS_ACE_FLAG                  0x80
 737 
 738 /*
 739  * Set PATH/FILE information levels
 740  */
 741 #define SMB_SFILEINFO_STANDARD                  1
 742 #define SMB_SFILEINFO_EA_SET                    2
 743 #define SMB_SFILEINFO_BASIC_INFO                0x101
 744 #define SMB_SFILEINFO_DISPOSITION_INFO          0x102
 745 #define SMB_SFILEINFO_ALLOCATION_INFO           0x103
 746 #define SMB_SFILEINFO_END_OF_FILE_INFO          0x104
 747 #define SMB_SFILEINFO_UNIX_BASIC                0x200
 748 #define SMB_SFILEINFO_UNIX_LINK                 0x201
 749 #define SMB_SFILEINFO_UNIX_HLINK                0x203
 750 #define SMB_SFILEINFO_POSIX_ACL                 0x204
 751 #define SMB_SFILEINFO_POSIX_UNLINK              0x20A
 752 #define SMB_SFILEINFO_UNIX_INFO2                0x20B
 753 #define SMB_SFILEINFO_DIRECTORY_INFORMATION     1001
 754 #define SMB_SFILEINFO_FULL_DIRECTORY_INFORMATION        1002
 755 #define SMB_SFILEINFO_BOTH_DIRECTORY_INFORMATION        1003
 756 #define SMB_SFILEINFO_BASIC_INFORMATION         1004
 757 #define SMB_SFILEINFO_STANDARD_INFORMATION      1005
 758 #define SMB_SFILEINFO_INTERNAL_INFORMATION      1006
 759 #define SMB_SFILEINFO_EA_INFORMATION            1007
 760 #define SMB_SFILEINFO_ACCESS_INFORMATION        1008
 761 #define SMB_SFILEINFO_NAME_INFORMATION          1009
 762 #define SMB_SFILEINFO_RENAME_INFORMATION        1010
 763 #define SMB_SFILEINFO_LINK_INFORMATION          1011
 764 #define SMB_SFILEINFO_NAMES_INFORMATION         1012
 765 #define SMB_SFILEINFO_DISPOSITION_INFORMATION   1013
 766 #define SMB_SFILEINFO_POSITION_INFORMATION      1014
 767 #define SMB_SFILEINFO_1015                      1015 /* ? */
 768 #define SMB_SFILEINFO_MODE_INFORMATION          1016
 769 #define SMB_SFILEINFO_ALIGNMENT_INFORMATION     1017
 770 #define SMB_SFILEINFO_ALL_INFORMATION           1018
 771 #define SMB_SFILEINFO_ALLOCATION_INFORMATION    1019
 772 #define SMB_SFILEINFO_END_OF_FILE_INFORMATION   1020
 773 #define SMB_SFILEINFO_ALT_NAME_INFORMATION      1021
 774 #define SMB_SFILEINFO_STREAM_INFORMATION        1022
 775 #define SMB_SFILEINFO_PIPE_INFORMATION          1023
 776 #define SMB_SFILEINFO_PIPE_LOCAL_INFORMATION    1024
 777 #define SMB_SFILEINFO_PIPE_REMOTE_INFORMATION   1025
 778 #define SMB_SFILEINFO_MAILSLOT_QUERY_INFORMATION        1026
 779 #define SMB_SFILEINFO_MAILSLOT_SET_INFORMATION          1027
 780 #define SMB_SFILEINFO_COMPRESSION_INFORMATION           1028
 781 #define SMB_SFILEINFO_OBJECT_ID_INFORMATION             1029
 782 #define SMB_SFILEINFO_COMPLETION_INFORMATION            1030
 783 #define SMB_SFILEINFO_MOVE_CLUSTER_INFORMATION          1031
 784 #define SMB_SFILEINFO_QUOTA_INFORMATION         1032
 785 #define SMB_SFILEINFO_REPARSE_POINT_INFORMATION 1033
 786 #define SMB_SFILEINFO_NETWORK_OPEN_INFORMATION  1034
 787 #define SMB_SFILEINFO_ATTRIBUTE_TAG_INFORMATION 1035
 788 #define SMB_SFILEINFO_TRACKING_INFORMATION      1036
 789 #define SMB_SFILEINFO_MAXIMUM_INFORMATION       1037
 790 
 791 /*
 792  * LOCKING_ANDX LockType flags
 793  */
 794 #define SMB_LOCKING_ANDX_SHARED_LOCK    0x01
 795 #define SMB_LOCKING_ANDX_OPLOCK_RELEASE 0x02
 796 #define SMB_LOCKING_ANDX_CHANGE_LOCKTYPE 0x04
 797 #define SMB_LOCKING_ANDX_CANCEL_LOCK    0x08
 798 #define SMB_LOCKING_ANDX_LARGE_FILES    0x10
 799 
 800 
 801 /*
 802  * size of the GUID returned in an extended security negotiate response
 803  */
 804 #define SMB_GUIDLEN     16
 805 
 806 typedef uint16_t        smbfh;
 807 
 808 /*
 809  * NTLMv2 blob header structure.
 810  */
 811 struct ntlmv2_blobhdr {
 812         uint32_t        header;
 813         uint32_t        reserved;
 814         uint64_t        timestamp;
 815         uint64_t        client_nonce;
 816         uint32_t        unknown1;
 817 };
 818 typedef struct ntlmv2_blobhdr ntlmv2_blobhdr_t;
 819 
 820 /*
 821  * NTLMv2 name header structure, for names in a blob.
 822  */
 823 struct ntlmv2_namehdr {
 824         uint16_t        type;
 825         uint16_t        len;
 826 };
 827 typedef struct ntlmv2_namehdr ntlmv2_namehdr_t;
 828 
 829 #define NAMETYPE_EOL            0x0000  /* end of list of names */
 830 #define NAMETYPE_MACHINE_NB     0x0001  /* NetBIOS machine name */
 831 #define NAMETYPE_DOMAIN_NB      0x0002  /* NetBIOS domain name */
 832 #define NAMETYPE_MACHINE_DNS    0x0003  /* DNS machine name */
 833 #define NAMETYPE_DOMAIN_DNS     0x0004  /* DNS Active Directory domain name */
 834 
 835 /*
 836  * Named pipe commands.
 837  */
 838 #define TRANS_CALL_NAMED_PIPE           0x54    /* open/write/read/close pipe */
 839 #define TRANS_WAIT_NAMED_PIPE           0x53    /* wait for pipe to be !busy */
 840 #define TRANS_PEEK_NAMED_PIPE           0x23    /* read but don't remove data */
 841 #define TRANS_Q_NAMED_PIPE_HAND_STATE   0x21    /* query pipe handle modes */
 842 #define TRANS_SET_NAMED_PIPE_HAND_STATE 0x01    /* set pipe handle modes */
 843 #define TRANS_Q_NAMED_PIPE_INFO         0x22    /* query pipe attributes */
 844 #define TRANS_TRANSACT_NAMED_PIPE       0x26    /* r/w operation on pipe */
 845 #define TRANS_READ_NAMED_PIPE           0x11    /* read pipe in "raw" mode */
 846                                                 /* (non message mode) */
 847 #define TRANS_WRITE_NAMED_PIPE          0x31    /* write pipe "raw" mode */
 848                                                 /* (non message mode) */
 849 
 850 /*
 851  * Share types, visible via NetShareEnum
 852  */
 853 #define STYPE_DISKTREE                  0x00000000
 854 #define STYPE_PRINTQ                    0x00000001
 855 #define STYPE_DEVICE                    0x00000002
 856 #define STYPE_IPC                       0x00000003
 857 #define STYPE_UNKNOWN                   0x00000004
 858 #define STYPE_MASK                      0x0000000F
 859 #define STYPE_TEMPORARY                 0x40000000
 860 #define STYPE_HIDDEN                    0x80000000
 861 
 862 /*
 863  * Characters that are not allowed in an SMB file name component.
 864  * From MSDN: Naming Files, Paths, ...
 865  *      < (less than)
 866  *      > (greater than)
 867  *      : (colon)
 868  *      " (double quote)
 869  *      / (forward slash)
 870  *      \ (backslash)
 871  *      | (vertical bar or pipe)
 872  *      ? (question mark)
 873  *      * (asterisk)
 874  */
 875 #define SMB_FILENAME_INVALID_CHARS      "<>:\"/\\|?*"
 876 
 877 #endif /* _NETSMB_SMB_H_ */