Print this page
NEX-14666 Need to provide SMB 2.1 Client
NEX-17187 panic in smbfs_acl_store
NEX-17231 smbfs create xattr files finds wrong file
NEX-17224 smbfs lookup EINVAL should be ENOENT
NEX-17260 SMB1 client fails to list directory after NEX-14666
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
and: (cleanup)
NEX-16824 SMB client connection setup rework
NEX-17232 SMB client reconnect failures
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
and: (improve debug)

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/netsmb/smb.h
          +++ new/usr/src/uts/common/netsmb/smb.h
↓ open down ↓ 32 lines elided ↑ open up ↑
  33   33   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34   34   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35   35   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36   36   * SUCH DAMAGE.
  37   37   *
  38   38   * $Id: smb.h,v 1.36.90.1 2005/05/27 02:35:29 lindak Exp $
  39   39   */
  40   40  
  41   41  /*
  42   42   * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
       43 + * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
  43   44   */
  44   45  
  45   46  #ifndef _NETSMB_SMB_H_
  46   47  #define _NETSMB_SMB_H_
  47   48  
  48   49  /*
  49   50   * Common definitions and structures for SMB/CIFS protocol
  50   51   * This file should be purely SMB protocol definition stuff.
  51   52   * (Please don't make it a catch-all:)
  52   53   */
↓ open down ↓ 6 lines elided ↑ open up ↑
  59   60  /*
  60   61   * SMB dialects that we have to deal with.
  61   62   */
  62   63  enum smb_dialects {
  63   64          SMB_DIALECT_NONE,
  64   65          SMB_DIALECT_CORE,               /* PC NETWORK PROGRAM 1.0, PCLAN1.0 */
  65   66          SMB_DIALECT_COREPLUS,           /* MICROSOFT NETWORKS 1.03 */
  66   67          SMB_DIALECT_LANMAN1_0,          /* MICROSOFT NETWORKS 3.0, LANMAN1.0 */
  67   68          SMB_DIALECT_LANMAN2_0,          /* LM1.2X002, DOS LM1.2X002, Samba */
  68   69          SMB_DIALECT_LANMAN2_1,          /* DOS LANMAN2.1, LANMAN2.1 */
  69      -        SMB_DIALECT_NTLM0_12            /* NT LM 0.12, Windows for Workgroups */
  70      -                                        /* 3.1a, * NT LANMAN 1.0 */
       70 +        SMB_DIALECT_NTLM0_12,           /* NT LM 0.12, etc. */
       71 +        SMB_DIALECT_SMB2_FF             /* SMB1 negotiate to SMB2 */
  71   72  };
  72   73  
  73   74  /*
  74   75   * Formats of data/string buffers
  75   76   */
  76   77  #define SMB_DT_DATA             1
  77   78  #define SMB_DT_DIALECT          2
  78   79  #define SMB_DT_PATHNAME         3
  79   80  #define SMB_DT_ASCII            4
  80   81  #define SMB_DT_VARIABLE         5
  81   82  
  82   83  /*
  83   84   * SMB header
  84   85   */
       86 +
  85   87  #define SMB_SIGNATURE           "\xFFSMB"
  86   88  #define SMB_SIGLEN              4
  87   89  #define SMB_HDRCMD(p)           (*((uchar_t *)(p) + SMB_SIGLEN))
  88   90  #define SMB_HDRMID(p)           (*(ushort_t *)((uchar_t *)(p) + 30))
       91 +#define SMB_HDR_OFF_MID         30
  89   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 +
  90   98  /*
  91   99   * bits in the smb_flags field
  92  100   */
  93  101  #define SMB_FLAGS_SUPPORT_LOCKREAD      0x01
  94  102  #define SMB_FLAGS_CLIENT_BUF_AVAIL      0x02
  95  103  #define SMB_FLAGS_CASELESS              0x08
  96  104  #define SMB_FLAGS_CANONICAL_PATHNAMES   0x10
  97  105  #define SMB_FLAGS_REQUEST_OPLOCK        0x20
  98  106  #define SMB_FLAGS_REQUEST_BATCH_OPLOCK  0x40
  99  107  #define SMB_FLAGS_SERVER_RESP           0x80
↓ open down ↓ 44 lines elided ↑ open up ↑
 144  152  #define SMB_CAP_NT_FIND                 0x0200
 145  153  #define SMB_CAP_DFS                     0x1000
 146  154  #define SMB_CAP_INFOLEVEL_PASSTHRU      0x2000
 147  155  #define SMB_CAP_LARGE_READX             0x4000
 148  156  #define SMB_CAP_LARGE_WRITEX            0x8000
 149  157  #define SMB_CAP_UNIX                    0x00800000
 150  158  #define SMB_CAP_BULK_TRANSFER           0x20000000
 151  159  #define SMB_CAP_COMPRESSED_DATA         0x40000000
 152  160  #define SMB_CAP_EXT_SECURITY            0x80000000
 153  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 +
 154  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 +/*
 155  182   * File attributes
 156  183   */
 157  184  #define SMB_FA_RDONLY           0x01
 158  185  #define SMB_FA_HIDDEN           0x02
 159  186  #define SMB_FA_SYSTEM           0x04
 160  187  #define SMB_FA_VOLUME           0x08
 161  188  #define SMB_FA_DIR              0x10
 162  189  #define SMB_FA_ARCHIVE          0x20
 163  190  
 164  191  /*
↓ open down ↓ 200 lines elided ↑ open up ↑
 365  392   * SMB_TRANS2_QUERY_FS_INFORMATION levels
 366  393   */
 367  394  #define SMB_QFS_ALLOCATION                      1
 368  395  #define SMB_QFS_VOLUME                          2
 369  396  #define SMB_QFS_LABEL_INFO                      0x101
 370  397  #define SMB_QFS_VOLUME_INFO                     0x102
 371  398  #define SMB_QFS_SIZE_INFO                       0x103
 372  399  #define SMB_QFS_DEVICE_INFO                     0x104
 373  400  #define SMB_QFS_ATTRIBUTE_INFO                  0x105
 374  401  #define SMB_QFS_UNIX_INFO                       0x200
      402 +#define SMB_QFS_POSIX_WHOAMI                    0x202
 375  403  #define SMB_QFS_MAC_FS_INFO                     0x301
 376  404  #define SMB_QFS_VOLUME_INFORMATION              1001
 377  405  #define SMB_QFS_SIZE_INFORMATION                1003
 378  406  #define SMB_QFS_DEVICE_INFORMATION              1004
 379  407  #define SMB_QFS_ATTRIBUTE_INFORMATION           1005
 380  408  #define SMB_QFS_QUOTA_INFORMATION               1006
 381  409  #define SMB_QFS_FULL_SIZE_INFORMATION           1007
 382  410  #define SMB_QFS_OBJECTID_INFORMATION            1008
 383  411  
      412 +/*
      413 + * NT Notify Change Compeletion Filter
      414 + * NT Notify Actions
      415 + * (We don't use these.)
      416 + */
 384  417  
 385  418  /*
 386  419   * SMB_QFS_ATTRIBUTE_INFO bits.
 387  420   * The following info found in msdn
 388  421   * (http://msdn.microsoft.com/library/default.asp?
 389  422   * url=/library/en-us/wmisdk/wmi/win32_cdromdrive.asp)
 390  423   * Naming is mostly as in samba, to help Those Who Google.
 391  424   */
 392  425  #define FILE_CASE_SENSITIVE_SEARCH      0x00000001
 393  426  #define FILE_CASE_PRESERVED_NAMES       0x00000002
↓ open down ↓ 2 lines elided ↑ open up ↑
 396  429  #define FILE_FILE_COMPRESSION           0x00000010
 397  430  #define FILE_VOLUME_QUOTAS              0x00000020
 398  431  #define FILE_SUPPORTS_SPARSE_FILES      0x00000040
 399  432  #define FILE_SUPPORTS_REPARSE_POINTS    0x00000080
 400  433  #define FILE_SUPPORTS_REMOTE_STORAGE    0x00000100
 401  434  #define FILE_SUPPORTS_LONG_NAMES        0x00004000
 402  435  #define FILE_VOLUME_IS_COMPRESSED       0x00008000
 403  436  #define FILE_SUPPORTS_OBJECT_IDS        0x00010000
 404  437  #define FILE_SUPPORTS_ENCRYPTION        0x00020000
 405  438  #define FILE_NAMED_STREAMS              0x00040000
      439 +#define FILE_READ_ONLY_VOLUME           0x00080000
 406  440  
 407  441  /*
 408  442   * SMB_TRANS2_QUERY_PATH levels
 409  443   */
 410  444  #define SMB_QFILEINFO_STANDARD                  1
 411  445  #define SMB_QFILEINFO_EA_SIZE                   2
 412  446  #define SMB_QFILEINFO_EAS_FROM_LIST             3
 413  447  #define SMB_QFILEINFO_ALL_EAS                   4
 414  448  #define SMB_QFILEINFO_IS_NAME_VALID             6       /* QPATHINFO only? */
 415  449  #define SMB_QFILEINFO_BASIC_INFO                0x101
↓ open down ↓ 1 lines elided ↑ open up ↑
 417  451  #define SMB_QFILEINFO_EA_INFO                   0x103
 418  452  #define SMB_QFILEINFO_NAME_INFO                 0x104
 419  453  #define SMB_QFILEINFO_ALLOCATION_INFO           0x105
 420  454  #define SMB_QFILEINFO_END_OF_FILE_INFO          0x106
 421  455  #define SMB_QFILEINFO_ALL_INFO                  0x107
 422  456  #define SMB_QFILEINFO_ALT_NAME_INFO             0x108
 423  457  #define SMB_QFILEINFO_STREAM_INFO               0x109
 424  458  #define SMB_QFILEINFO_COMPRESSION_INFO          0x10b
 425  459  #define SMB_QFILEINFO_UNIX_BASIC                0x200
 426  460  #define SMB_QFILEINFO_UNIX_LINK                 0x201
      461 +#define SMB_QFILEINFO_POSIX_ACL                 0x204
      462 +#define SMB_QFILEINFO_UNIX_INFO2                0x20B
 427  463  #define SMB_QFILEINFO_MAC_DT_GET_APPL           0x306
 428  464  #define SMB_QFILEINFO_MAC_DT_GET_ICON           0x307
 429  465  #define SMB_QFILEINFO_MAC_DT_GET_ICON_INFO      0x308
      466 +#define SMB_QFILEINFO_MAC_SPOTLIGHT             0x310
 430  467  #define SMB_QFILEINFO_BASIC_INFORMATION         1004
 431  468  #define SMB_QFILEINFO_STANDARD_INFORMATION      1005
 432  469  #define SMB_QFILEINFO_INTERNAL_INFORMATION      1006
 433  470  #define SMB_QFILEINFO_EA_INFORMATION            1007
 434  471  #define SMB_QFILEINFO_ACCESS_INFORMATION        1008
 435  472  #define SMB_QFILEINFO_NAME_INFORMATION          1009
 436  473  #define SMB_QFILEINFO_POSITION_INFORMATION      1014
 437  474  #define SMB_QFILEINFO_MODE_INFORMATION          1016
 438  475  #define SMB_QFILEINFO_ALIGNMENT_INFORMATION     1017
 439  476  #define SMB_QFILEINFO_ALL_INFORMATION           1018
↓ open down ↓ 7 lines elided ↑ open up ↑
 447  484   * SMB_TRANS2_FIND_FIRST2 information levels
 448  485   */
 449  486  #define SMB_FIND_STANDARD               1
 450  487  #define SMB_FIND_EA_SIZE                2
 451  488  #define SMB_FIND_EAS_FROM_LIST          3
 452  489  #define SMB_FIND_DIRECTORY_INFO         0x101
 453  490  #define SMB_FIND_FULL_DIRECTORY_INFO    0x102
 454  491  #define SMB_FIND_NAME_INFO              0x103
 455  492  #define SMB_FIND_BOTH_DIRECTORY_INFO    0x104
 456  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 */
 457  497  
 458  498  /*
 459  499   * Selectors for NT_TRANSACT_QUERY_SECURITY_DESC and
 460  500   * NT_TRANSACT_SET_SECURITY_DESC.  Details found in the MSDN
 461  501   * library by searching on security_information.
 462  502   * Note the protected/unprotected bits did not exist in NT.
 463  503   */
 464  504  
 465  505  #define OWNER_SECURITY_INFORMATION              0x00000001
 466  506  #define GROUP_SECURITY_INFORMATION              0x00000002
↓ open down ↓ 233 lines elided ↑ open up ↑
 700  740   */
 701  741  #define SMB_SFILEINFO_STANDARD                  1
 702  742  #define SMB_SFILEINFO_EA_SET                    2
 703  743  #define SMB_SFILEINFO_BASIC_INFO                0x101
 704  744  #define SMB_SFILEINFO_DISPOSITION_INFO          0x102
 705  745  #define SMB_SFILEINFO_ALLOCATION_INFO           0x103
 706  746  #define SMB_SFILEINFO_END_OF_FILE_INFO          0x104
 707  747  #define SMB_SFILEINFO_UNIX_BASIC                0x200
 708  748  #define SMB_SFILEINFO_UNIX_LINK                 0x201
 709  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
 710  753  #define SMB_SFILEINFO_DIRECTORY_INFORMATION     1001
 711  754  #define SMB_SFILEINFO_FULL_DIRECTORY_INFORMATION        1002
 712  755  #define SMB_SFILEINFO_BOTH_DIRECTORY_INFORMATION        1003
 713  756  #define SMB_SFILEINFO_BASIC_INFORMATION         1004
 714  757  #define SMB_SFILEINFO_STANDARD_INFORMATION      1005
 715  758  #define SMB_SFILEINFO_INTERNAL_INFORMATION      1006
 716  759  #define SMB_SFILEINFO_EA_INFORMATION            1007
 717  760  #define SMB_SFILEINFO_ACCESS_INFORMATION        1008
 718  761  #define SMB_SFILEINFO_NAME_INFORMATION          1009
 719  762  #define SMB_SFILEINFO_RENAME_INFORMATION        1010
↓ open down ↓ 89 lines elided ↑ open up ↑
 809  852   */
 810  853  #define STYPE_DISKTREE                  0x00000000
 811  854  #define STYPE_PRINTQ                    0x00000001
 812  855  #define STYPE_DEVICE                    0x00000002
 813  856  #define STYPE_IPC                       0x00000003
 814  857  #define STYPE_UNKNOWN                   0x00000004
 815  858  #define STYPE_MASK                      0x0000000F
 816  859  #define STYPE_TEMPORARY                 0x40000000
 817  860  #define STYPE_HIDDEN                    0x80000000
 818  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 +
 819  877  #endif /* _NETSMB_SMB_H_ */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX