4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 * Copyright (c) 2016 by Delphix. All rights reserved.
27 #ifndef _SMBSRV_NTIFS_H
28 #define _SMBSRV_NTIFS_H
31 * This file provides definitions compatible with the NT Installable
32 * File System (IFS) interface. This header file also defines the Security
33 * Descriptor module from Windows.
42 #include <smbsrv/smb_sid.h>
45 * The Volume and Directory bits are for SMB rather than NT.
46 * NT has an explicit Normal bit; this bit is implied in SMB
47 * when the Hidden, System and Directory bits are not set.
49 * File attributes and creation flags share the same 32-bit
52 #define FILE_ATTRIBUTE_READONLY 0x00000001
53 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
54 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
55 #define FILE_ATTRIBUTE_VOLUME 0x00000008
56 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
57 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
58 #define FILE_ATTRIBUTE_DEVICE 0x00000040
59 #define FILE_ATTRIBUTE_NORMAL 0x00000080
60 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
61 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
62 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
63 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
64 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
65 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
66 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
67 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
68 #define FILE_FLAG_OPEN_NO_RECALL 0x00100000
69 #define FILE_FLAG_OPEN_REPARSE_POINT 0x00200000
70 #define FILE_FLAG_POSIX_SEMANTICS 0x01000000
71 #define FILE_FLAG_BACKUP_SEMANTICS 0x02000000
72 #define FILE_FLAG_DELETE_ON_CLOSE 0x04000000
73 #define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000
74 #define FILE_FLAG_RANDOM_ACCESS 0x10000000
75 #define FILE_FLAG_NO_BUFFERING 0x20000000
76 #define FILE_FLAG_OVERLAPPED 0x40000000
77 #define FILE_FLAG_WRITE_THROUGH 0x80000000
79 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00001fb7
80 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x00001fa7
81 #define FILE_ATTRIBUTE_MASK 0x00003FFF
84 * The create/open option flags: used in NtCreateAndx and NtTransactCreate
87 * The CreateOptions specify the options to be applied when creating or
88 * opening the file, as a compatible combination of the following flags:
91 * The file being created or opened is a directory file. With this
92 * flag, the Disposition parameter must be set to one of FILE_CREATE,
93 * FILE_OPEN, or FILE_OPEN_IF. With this flag, other compatible
94 * CreateOptions flags include only the following:
95 * FILE_SYNCHRONOUS_IO_ALERT
96 * FILE_SYNCHRONOUS_IO_NONALERT
98 * FILE_OPEN_FOR_BACKUP_INTENT
99 * FILE_OPEN_BY_FILE_ID
101 * FILE_NON_DIRECTORY_FILE
102 * The file being opened must not be a directory file or this call
103 * will fail. The file object being opened can represent a data file,
104 * a logical, virtual, or physical device, or a volume.
107 * System services, FSDs, and drivers that write data to the file must
108 * actually transfer the data into the file before any requested write
109 * operation is considered complete. This flag is automatically set if
110 * the CreateOptions flag FILE_NO_INTERMEDIATE _BUFFERING is set.
112 * FILE_SEQUENTIAL_ONLY
113 * All accesses to the file will be sequential.
116 * Accesses to the file can be random, so no sequential read-ahead
117 * operations should be performed on the file by FSDs or the system.
118 * FILE_NO_INTERMEDIATE _BUFFERING The file cannot be cached or
119 * buffered in a driver's internal buffers. This flag is incompatible
120 * with the DesiredAccess FILE_APPEND_DATA flag.
122 * FILE_SYNCHRONOUS_IO_ALERT
123 * All operations on the file are performed synchronously. Any wait
124 * on behalf of the caller is subject to premature termination from
125 * alerts. This flag also causes the I/O system to maintain the file
126 * position context. If this flag is set, the DesiredAccess
127 * SYNCHRONIZE flag also must be set.
129 * FILE_SYNCHRONOUS_IO _NONALERT
130 * All operations on the file are performed synchronously. Waits in
131 * the system to synchronize I/O queuing and completion are not subject
132 * to alerts. This flag also causes the I/O system to maintain the file
133 * position context. If this flag is set, the DesiredAccess SYNCHRONIZE
134 * flag also must be set.
136 * FILE_CREATE_TREE _CONNECTION
137 * Create a tree connection for this file in order to open it over the
138 * network. This flag is irrelevant to device and intermediate drivers.
140 * FILE_COMPLETE_IF_OPLOCKED
141 * Complete this operation immediately with an alternate success code
142 * if the target file is oplocked, rather than blocking the caller's
143 * thread. If the file is oplocked, another caller already has access
144 * to the file over the network. This flag is irrelevant to device and
145 * intermediate drivers.
147 * FILE_NO_EA_KNOWLEDGE
148 * If the extended attributes on an existing file being opened indicate
149 * that the caller must understand EAs to properly interpret the file,
150 * fail this request because the caller does not understand how to deal
151 * with EAs. Device and intermediate drivers can ignore this flag.
153 * FILE_DELETE_ON_CLOSE
154 * Delete the file when the last reference to it is passed to close.
156 * FILE_OPEN_BY_FILE_ID
157 * The file name contains the name of a device and a 64-bit ID to
158 * be used to open the file. This flag is irrelevant to device and
159 * intermediate drivers.
161 * FILE_OPEN_FOR_BACKUP _INTENT
162 * The file is being opened for backup intent, hence, the system should
163 * check for certain access rights and grant the caller the appropriate
164 * accesses to the file before checking the input DesiredAccess against
165 * the file's security descriptor. This flag is irrelevant to device
166 * and intermediate drivers.
168 #define FILE_DIRECTORY_FILE 0x00000001
169 #define FILE_WRITE_THROUGH 0x00000002
170 #define FILE_SEQUENTIAL_ONLY 0x00000004
171 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
173 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
174 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
175 #define FILE_NON_DIRECTORY_FILE 0x00000040
176 #define FILE_CREATE_TREE_CONNECTION 0x00000080
178 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
179 #define FILE_NO_EA_KNOWLEDGE 0x00000200
180 /* UNUSED 0x00000400 */
181 #define FILE_RANDOM_ACCESS 0x00000800
183 #define FILE_DELETE_ON_CLOSE 0x00001000
184 #define FILE_OPEN_BY_FILE_ID 0x00002000
185 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
186 #define FILE_NO_COMPRESSION 0x00008000
188 #define FILE_RESERVE_OPFILTER 0x00100000
189 #define FILE_RESERVED0 0x00200000
190 #define FILE_RESERVED1 0x00400000
191 #define FILE_RESERVED2 0x00800000
193 #define FILE_VALID_OPTION_FLAGS 0x007fffff
194 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
195 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
196 #define FILE_VALID_SET_FLAGS 0x00000036
199 * Define the file information class values used by the NT DDK and HAL.
201 typedef enum _FILE_INFORMATION_CLASS
{
202 FileDirectoryInformation
= 1,
203 FileFullDirectoryInformation
, /* 2 */
204 FileBothDirectoryInformation
, /* 3 */
205 FileBasicInformation
, /* 4 */
206 FileStandardInformation
, /* 5 */
207 FileInternalInformation
, /* 6 */
208 FileEaInformation
, /* 7 */
209 FileAccessInformation
, /* 8 */
210 FileNameInformation
, /* 9 */
211 FileRenameInformation
, /* 10 */
212 FileLinkInformation
, /* 11 */
213 FileNamesInformation
, /* 12 */
214 FileDispositionInformation
, /* 13 */
215 FilePositionInformation
, /* 14 */
216 FileFullEaInformation
, /* 15 */
217 FileModeInformation
, /* 16 */
218 FileAlignmentInformation
, /* 17 */
219 FileAllInformation
, /* 18 */
220 FileAllocationInformation
, /* 19 */
221 FileEndOfFileInformation
, /* 20 */
222 FileAlternateNameInformation
, /* 21 */
223 FileStreamInformation
, /* 22 */
224 FilePipeInformation
, /* 23 */
225 FilePipeLocalInformation
, /* 24 */
226 FilePipeRemoteInformation
, /* 25 */
227 FileMailslotQueryInformation
, /* 26 */
228 FileMailslotSetInformation
, /* 27 */
229 FileCompressionInformation
, /* 28 */
230 FileObjectIdInformation
, /* 29 */
231 FileCompletionInformation
, /* 30 */
232 FileMoveClusterInformation
, /* 31 */
233 FileQuotaInformation
, /* 32 */
234 FileReparsePointInformation
, /* 33 */
235 FileNetworkOpenInformation
, /* 34 */
236 FileAttributeTagInformation
, /* 35 */
237 FileTrackingInformation
, /* 36 */
238 FileIdBothDirectoryInformation
, /* 37 */
239 FileIdFullDirectoryInformation
, /* 38 */
240 FileValidDataLengthInformation
, /* 39 */
241 FileShortNameInformation
, /* 40 */
242 FileInformationReserved41
, /* 41 */
243 FileInformationReserved42
, /* 42 */
244 FileInformationReserved43
, /* 43 */
245 FileSfioReserveInformation
, /* 44 */
246 FileSfioVolumeInformation
, /* 45 */
247 FileHardLinkInformation
, /* 46 */
248 FileInformationReserved47
, /* 47 */
249 FileNormalizedNameInformation
, /* 48 */
250 FileInformationReserved49
, /* 49 */
251 FileIdGlobalTxDirectoryInformation
, /* 50 */
252 FileInformationReserved51
, /* 51 */
253 FileInformationReserved52
, /* 52 */
254 FileInformationReserved53
, /* 53 */
255 FileStandardLinkInformation
, /* 54 */
256 FileMaximumInformation
257 } FILE_INFORMATION_CLASS
;
260 * Define the file system information class values.
262 typedef enum _FILE_FS_INFORMATION_CLASS
{
263 FileFsVolumeInformation
= 1,
264 FileFsLabelInformation
, /* 2 */
265 FileFsSizeInformation
, /* 3 */
266 FileFsDeviceInformation
, /* 4 */
267 FileFsAttributeInformation
, /* 5 */
268 FileFsControlInformation
, /* 6 */
269 FileFsFullSizeInformation
, /* 7 */
270 FileFsObjectIdInformation
, /* 8 */
271 FileFsDriverPathInformation
/* 9 */
272 } FILE_FS_INFORMATION_CLASS
;
275 * Discretionary Access Control List (DACL)
277 * A Discretionary Access Control List (DACL), often abbreviated to
278 * ACL, is a list of access controls which either allow or deny access
279 * for users or groups to a resource. There is a list header followed
280 * by a list of access control entries (ACE). Each ACE specifies the
281 * access allowed or denied to a single user or group (identified by
284 * There is another access control list object called a System Access
285 * Control List (SACL), which is used to control auditing, but no
286 * support is provideed for SACLs at this time.
290 * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
291 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
292 * +-------------------------------+---------------+---------------+
293 * | AclSize | Sbz1 | AclRevision |
294 * +-------------------------------+---------------+---------------+
295 * | Sbz2 | AceCount |
296 * +-------------------------------+-------------------------------+
298 * AclRevision specifies the revision level of the ACL. This value should
299 * be ACL_REVISION, unless the ACL contains an object-specific ACE, in which
300 * case this value must be ACL_REVISION_DS. All ACEs in an ACL must be at the
301 * same revision level.
305 * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
306 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
307 * +---------------+-------+-------+---------------+---------------+
308 * | AceSize | AceFlags | AceType |
309 * +---------------+-------+-------+---------------+---------------+
311 * Access mask format:
313 * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
314 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
315 * +---------------+---------------+-------------------------------+
316 * |G|G|G|G|Res'd|A| StandardRights| SpecificRights |
318 * +-+-------------+---------------+-------------------------------+
320 * typedef struct ACCESS_MASK {
321 * WORD SpecificRights;
322 * BYTE StandardRights;
323 * BYTE AccessSystemAcl : 1;
325 * BYTE GenericAll : 1;
326 * BYTE GenericExecute : 1;
327 * BYTE GenericWrite : 1;
328 * BYTE GenericRead : 1;
333 #define ACL_REVISION1 1
334 #define ACL_REVISION2 2
335 #define MIN_ACL_REVISION2 ACL_REVISION2
336 #define ACL_REVISION3 3
337 #define ACL_REVISION4 4
338 #define MAX_ACL_REVISION ACL_REVISION4
341 * Current ACE and ACL revision Levels
343 #define ACE_REVISION 1
344 #define ACL_REVISION ACL_REVISION2
345 #define ACL_REVISION_DS ACL_REVISION4
348 #define ACCESS_ALLOWED_ACE_TYPE 0
349 #define ACCESS_DENIED_ACE_TYPE 1
350 #define SYSTEM_AUDIT_ACE_TYPE 2
351 #define SYSTEM_ALARM_ACE_TYPE 3
356 * Specifies a set of ACE type-specific control flags. This member can be a
357 * combination of the following values.
359 * CONTAINER_INHERIT_ACE: Child objects that are containers, such as
360 * directories, inherit the ACE as an effective ACE. The inherited
361 * ACE is inheritable unless the NO_PROPAGATE_INHERIT_ACE bit flag
364 * INHERIT_ONLY_ACE: Indicates an inherit-only ACE which does not control
365 * access to the object to which it is attached.
366 * If this flag is not set,
367 * the ACE is an effective ACE which controls access to the object
368 * to which it is attached.
369 * Both effective and inherit-only ACEs can be inherited
370 * depending on the state of the other inheritance flags.
372 * INHERITED_ACE: Windows 2000/XP: Indicates that the ACE was inherited.
373 * The system sets this bit when it propagates an
374 * inherited ACE to a child object.
376 * NO_PROPAGATE_INHERIT_ACE: If the ACE is inherited by a child object, the
377 * system clears the OBJECT_INHERIT_ACE and CONTAINER_INHERIT_ACE
378 * flags in the inherited ACE.
379 * This prevents the ACE from being inherited by
380 * subsequent generations of objects.
382 * OBJECT_INHERIT_ACE: Noncontainer child objects inherit the ACE as an
383 * effective ACE. For child objects that are containers,
384 * the ACE is inherited as an inherit-only ACE unless the
385 * NO_PROPAGATE_INHERIT_ACE bit flag is also set.
387 #define OBJECT_INHERIT_ACE 0x01
388 #define CONTAINER_INHERIT_ACE 0x02
389 #define NO_PROPOGATE_INHERIT_ACE 0x04
390 #define INHERIT_ONLY_ACE 0x08
391 #define INHERITED_ACE 0x10
392 #define INHERIT_MASK_ACE 0x1F
396 * These flags are only used in system audit or alarm ACEs to
397 * indicate when an audit message should be generated, i.e.
398 * on successful access or on unsuccessful access.
400 #define SUCCESSFUL_ACCESS_ACE_FLAG 0x40
401 #define FAILED_ACCESS_ACE_FLAG 0x80
404 * se_bsize is the size, in bytes, of ACE as it appears on the wire.
405 * se_sln is used to sort the ACL when it's required.
407 typedef struct smb_acehdr
{
413 typedef struct smb_ace
{
421 * sl_bsize is the size of ACL in bytes as it appears on the wire.
423 typedef struct smb_acl
{
432 * ACE/ACL header size, in byte, as it appears on the wire
434 #define SMB_ACE_HDRSIZE 4
435 #define SMB_ACL_HDRSIZE 8
438 * Security Descriptor (SD)
440 * Security descriptors provide protection for objects, for example
441 * files and directories. It identifies the owner and primary group
442 * (SIDs) and contains an access control list. When a user tries to
443 * access an object their SID is compared to the permissions in the
444 * DACL to determine if access should be allowed or denied. Note that
445 * this is a simplification because there are other factors, such as
446 * default behavior and privileges to be taken into account (see also
449 * The boolean flags have the following meanings when set:
451 * SE_OWNER_DEFAULTED indicates that the SID pointed to by the Owner
452 * field was provided by a defaulting mechanism rather than explicitly
453 * provided by the original provider of the security descriptor. This
454 * may affect the treatment of the SID with respect to inheritance of
457 * SE_GROUP_DEFAULTED indicates that the SID in the Group field was
458 * provided by a defaulting mechanism rather than explicitly provided
459 * by the original provider of the security descriptor. This may
460 * affect the treatment of the SID with respect to inheritance of a
463 * SE_DACL_PRESENT indicates that the security descriptor contains a
464 * discretionary ACL. If this flag is set and the Dacl field of the
465 * SECURITY_DESCRIPTOR is null, then a null ACL is explicitly being
468 * SE_DACL_DEFAULTED indicates that the ACL pointed to by the Dacl
469 * field was provided by a defaulting mechanism rather than explicitly
470 * provided by the original provider of the security descriptor. This
471 * may affect the treatment of the ACL with respect to inheritance of
472 * an ACL. This flag is ignored if the DaclPresent flag is not set.
474 * SE_SACL_PRESENT indicates that the security descriptor contains a
475 * system ACL pointed to by the Sacl field. If this flag is set and
476 * the Sacl field of the SECURITY_DESCRIPTOR is null, then an empty
477 * (but present) ACL is being specified.
479 * SE_SACL_DEFAULTED indicates that the ACL pointed to by the Sacl
480 * field was provided by a defaulting mechanism rather than explicitly
481 * provided by the original provider of the security descriptor. This
482 * may affect the treatment of the ACL with respect to inheritance of
483 * an ACL. This flag is ignored if the SaclPresent flag is not set.
485 * SE_DACL_PROTECTED Prevents ACEs set on the DACL of the parent container
486 * (and any objects above the parent container in the directory hierarchy)
487 * from being applied to the object's DACL.
489 * SE_SACL_PROTECTED Prevents ACEs set on the SACL of the parent container
490 * (and any objects above the parent container in the directory hierarchy)
491 * from being applied to the object's SACL.
493 * Note that the SE_DACL_PRESENT flag needs to be present to set
494 * SE_DACL_PROTECTED and SE_SACL_PRESENT needs to be present to set
497 * SE_SELF_RELATIVE indicates that the security descriptor is in self-
498 * relative form. In this form, all fields of the security descriptor
499 * are contiguous in memory and all pointer fields are expressed as
500 * offsets from the beginning of the security descriptor.
502 * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
503 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
504 * +---------------------------------------------------------------+
505 * | Control |Reserved1 (SBZ)| Revision |
506 * +---------------------------------------------------------------+
508 * +---------------------------------------------------------------+
510 * +---------------------------------------------------------------+
512 * +---------------------------------------------------------------+
514 * +---------------------------------------------------------------+
518 #define SMB_OWNER_SECINFO 0x0001
519 #define SMB_GROUP_SECINFO 0x0002
520 #define SMB_DACL_SECINFO 0x0004
521 #define SMB_SACL_SECINFO 0x0008
522 #define SMB_ALL_SECINFO 0x000F
523 #define SMB_ACL_SECINFO (SMB_DACL_SECINFO | SMB_SACL_SECINFO)
525 #define SECURITY_DESCRIPTOR_REVISION 1
528 #define SE_OWNER_DEFAULTED 0x0001
529 #define SE_GROUP_DEFAULTED 0x0002
530 #define SE_DACL_PRESENT 0x0004
531 #define SE_DACL_DEFAULTED 0x0008
532 #define SE_SACL_PRESENT 0x0010
533 #define SE_SACL_DEFAULTED 0x0020
534 #define SE_DACL_AUTO_INHERIT_REQ 0x0100
535 #define SE_SACL_AUTO_INHERIT_REQ 0x0200
536 #define SE_DACL_AUTO_INHERITED 0x0400
537 #define SE_SACL_AUTO_INHERITED 0x0800
538 #define SE_DACL_PROTECTED 0x1000
539 #define SE_SACL_PROTECTED 0x2000
540 #define SE_SELF_RELATIVE 0x8000
542 #define SE_DACL_INHERITANCE_MASK 0x1500
543 #define SE_SACL_INHERITANCE_MASK 0x2A00
546 * Security descriptor structures:
548 * smb_sd_t SD in SMB pointer form
549 * smb_fssd_t SD in filesystem form
551 * Filesystems (e.g. ZFS/UFS) don't have something equivalent
552 * to SD. The items comprising a SMB SD are kept separately in
553 * filesystem. smb_fssd_t is introduced as a helper to provide
554 * the required abstraction for CIFS code.
557 typedef struct smb_sd
{
560 smb_sid_t
*sd_owner
; /* SID file owner */
561 smb_sid_t
*sd_group
; /* SID group (for POSIX) */
562 smb_acl_t
*sd_sacl
; /* ACL System (audits) */
563 smb_acl_t
*sd_dacl
; /* ACL Discretionary (perm) */
567 * SD header size as it appears on the wire
569 #define SMB_SD_HDRSIZE 20
572 * values for smb_fssd.sd_flags
574 #define SMB_FSSD_FLAGS_DIR 0x01
576 typedef struct smb_fssd
{
585 void smb_sd_init(smb_sd_t
*, uint8_t);
586 void smb_sd_term(smb_sd_t
*);
587 uint32_t smb_sd_get_secinfo(smb_sd_t
*);
588 uint32_t smb_sd_len(smb_sd_t
*, uint32_t);
589 uint32_t smb_sd_tofs(smb_sd_t
*, smb_fssd_t
*);
591 void smb_fssd_init(smb_fssd_t
*, uint32_t, uint32_t);
592 void smb_fssd_term(smb_fssd_t
*);
594 void smb_acl_sort(smb_acl_t
*);
595 void smb_acl_free(smb_acl_t
*);
596 smb_acl_t
*smb_acl_alloc(uint8_t, uint16_t, uint16_t);
597 smb_acl_t
*smb_acl_from_zfs(acl_t
*);
598 uint32_t smb_acl_to_zfs(smb_acl_t
*, uint32_t, int, acl_t
**);
599 uint16_t smb_acl_len(smb_acl_t
*);
600 boolean_t
smb_acl_isvalid(smb_acl_t
*, int);
602 void smb_fsacl_free(acl_t
*);
603 acl_t
*smb_fsacl_alloc(int, int);
609 #endif /* _SMBSRV_NTIFS_H */