13db3f65cSamw /* 23db3f65cSamw * CDDL HEADER START 33db3f65cSamw * 43db3f65cSamw * The contents of this file are subject to the terms of the 53db3f65cSamw * Common Development and Distribution License (the "License"). 63db3f65cSamw * You may not use this file except in compliance with the License. 73db3f65cSamw * 83db3f65cSamw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 93db3f65cSamw * or http://www.opensolaris.org/os/licensing. 103db3f65cSamw * See the License for the specific language governing permissions 113db3f65cSamw * and limitations under the License. 123db3f65cSamw * 133db3f65cSamw * When distributing Covered Code, include this CDDL HEADER in each 143db3f65cSamw * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 153db3f65cSamw * If applicable, add the following below this CDDL HEADER, with the 163db3f65cSamw * fields enclosed by brackets "[]" replaced with your own identifying 173db3f65cSamw * information: Portions Copyright [yyyy] [name of copyright owner] 183db3f65cSamw * 193db3f65cSamw * CDDL HEADER END 203db3f65cSamw */ 21148c5f43SAlan Wright 223db3f65cSamw /* 23148c5f43SAlan Wright * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 24*8d94f651SGordon Ross * Copyright 2018 Nexenta Systems, Inc. All rights reserved. 2548bbca81SDaniel Hoffman * Copyright (c) 2016 by Delphix. All rights reserved. 263db3f65cSamw */ 273db3f65cSamw 283db3f65cSamw #ifndef _SMB_SHARE_H 293db3f65cSamw #define _SMB_SHARE_H 303db3f65cSamw 313db3f65cSamw #include <sys/param.h> 323299f39fSGordon Ross #include <smb/lmerr.h> 333299f39fSGordon Ross #include <smb/wintypes.h> 343db3f65cSamw #include <smbsrv/string.h> 359fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/smb_inet.h> 363db3f65cSamw #include <smbsrv/hash_table.h> 371160dcf7SMatt Barden #include <smbsrv/smbinfo.h> 383db3f65cSamw 39b819cea2SGordon Ross #if !defined(_KERNEL) && !defined(_FAKE_KERNEL) 403db3f65cSamw #include <libshare.h> 413db3f65cSamw #endif 423db3f65cSamw 433db3f65cSamw #ifdef __cplusplus 443db3f65cSamw extern "C" { 453db3f65cSamw #endif 463db3f65cSamw 47148c5f43SAlan Wright #define SMB_CVOL "/var/smb/cvol" 48148c5f43SAlan Wright #define SMB_SYSROOT SMB_CVOL "/windows" 49148c5f43SAlan Wright #define SMB_SYSTEM32 SMB_SYSROOT "/system32" 50148c5f43SAlan Wright #define SMB_VSS SMB_SYSTEM32 "/vss" 51148c5f43SAlan Wright 5268b2bbf2SGordon Ross /* Exported named pipes are in... */ 5368b2bbf2SGordon Ross #define SMB_PIPE_DIR "/var/smb/pipe" 5468b2bbf2SGordon Ross 553db3f65cSamw /* 5629bd2886SAlan Wright * Share Properties: 5729bd2886SAlan Wright * 5829bd2886SAlan Wright * name Advertised name of the share 5929bd2886SAlan Wright * 6029bd2886SAlan Wright * ad-container Active directory container in which the share 6129bd2886SAlan Wright * will be published 6229bd2886SAlan Wright * 63e3f2c991SKeyur Desai * abe Determines whether Access Based Enumeration is applied 64e3f2c991SKeyur Desai * to a share 65e3f2c991SKeyur Desai * 6629bd2886SAlan Wright * csc Client-side caching (CSC) options applied to this share 6729bd2886SAlan Wright * disabled The client MUST NOT cache any files 6829bd2886SAlan Wright * manual The client should not automatically cache every file 6929bd2886SAlan Wright * that it opens 7029bd2886SAlan Wright * auto The client may cache every file that it opens 7129bd2886SAlan Wright * vdo The client may cache every file that it opens 728d7e4166Sjose borrego * and satisfy file requests from its local cache. 7329bd2886SAlan Wright * 7429bd2886SAlan Wright * catia CATIA character substitution 7529bd2886SAlan Wright * 7629bd2886SAlan Wright * guestok Determines whether guest access is allowed 7729bd2886SAlan Wright * 78ca5fb90aSGordon Ross * quotas SMB quotas presented & supported (T/F) 79ca5fb90aSGordon Ross * 801160dcf7SMatt Barden * encrypt Controls SMB3 encryption per-share. 811160dcf7SMatt Barden * disabled Server does not tell the client to encrypt requests. 821160dcf7SMatt Barden * enabled Server asks, but does not require, that the client 831160dcf7SMatt Barden * encrypt its requests. 841160dcf7SMatt Barden * required Server denies unencrypted share access. 851160dcf7SMatt Barden * 861160dcf7SMatt Barden * next three properties use access-list a la NFS 8729bd2886SAlan Wright * 8829bd2886SAlan Wright * ro list of hosts that will have read-only access 8929bd2886SAlan Wright * rw list of hosts that will have read/write access 9029bd2886SAlan Wright * none list of hosts that won't be allowed access 913db3f65cSamw */ 928d7e4166Sjose borrego #define SHOPT_AD_CONTAINER "ad-container" 93e3f2c991SKeyur Desai #define SHOPT_ABE "abe" 9429bd2886SAlan Wright #define SHOPT_NAME "name" 95*8d94f651SGordon Ross #define SHOPT_CA "ca" 9629bd2886SAlan Wright #define SHOPT_CSC "csc" 9729bd2886SAlan Wright #define SHOPT_CATIA "catia" 9829bd2886SAlan Wright #define SHOPT_GUEST "guestok" 9929bd2886SAlan Wright #define SHOPT_RO "ro" 10029bd2886SAlan Wright #define SHOPT_RW "rw" 10129bd2886SAlan Wright #define SHOPT_NONE "none" 1029fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SHOPT_DFSROOT "dfsroot" 103148c5f43SAlan Wright #define SHOPT_DESCRIPTION "description" 104ca5fb90aSGordon Ross #define SHOPT_QUOTAS "quotas" 10594047d49SGordon Ross #define SHOPT_FSO "fso" /* Force Shared Oplocks */ 1061160dcf7SMatt Barden #define SHOPT_ENCRYPT "encrypt" 107ca5fb90aSGordon Ross #define SHOPT_AUTOHOME "Autohome" 1083db3f65cSamw 1093db3f65cSamw #define SMB_DEFAULT_SHARE_GROUP "smb" 1103db3f65cSamw #define SMB_PROTOCOL_NAME "smb" 1113db3f65cSamw 1123db3f65cSamw /* 1133db3f65cSamw * RAP protocol share related commands only understand 1143db3f65cSamw * share names in OEM format and there is a 13 char size 1153db3f65cSamw * limitation 1163db3f65cSamw */ 1173db3f65cSamw #define SMB_SHARE_OEMNAME_MAX 13 118fe1c642dSBill Krier #define SMB_SHARE_NTNAME_MAX 81 1193db3f65cSamw #define SMB_SHARE_CMNT_MAX (64 * MTS_MB_CHAR_MAX) 1203db3f65cSamw 1213db3f65cSamw /* 1223db3f65cSamw * struct SHARE_INFO_1 { 1233db3f65cSamw * char shi1_netname[13] 1243db3f65cSamw * char shi1_pad; 1253db3f65cSamw * unsigned short shi1_type 1263db3f65cSamw * char *shi1_remark; 1273db3f65cSamw * } 1283db3f65cSamw */ 1293db3f65cSamw #define SHARE_INFO_1_SIZE (SMB_SHARE_OEMNAME_MAX + 1 + 2 + 4) 1303db3f65cSamw 1313db3f65cSamw /* 1323db3f65cSamw * Share flags: 1333db3f65cSamw * 1349fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * There are two types of flags: 1359fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 1369fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * - flags that represent a share property 1379fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * - other flags set at runtime 1389fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 1399fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Property flags: 1409fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 1418d7e4166Sjose borrego * SMB_SHRF_CSC_DISABLED Client-side caching is disabled for this share 1428d7e4166Sjose borrego * SMB_SHRF_CSC_MANUAL Manual client-side caching is allowed 1438d7e4166Sjose borrego * SMB_SHRF_CSC_AUTO Automatic client-side caching (CSC) is allowed 1448d7e4166Sjose borrego * SMB_SHRF_CSC_VDO Automatic CSC and local cache lookup is allowed 145b89a8333Snatalie li - Sun Microsystems - Irvine United States * SMB_SHRF_ACC_OPEN No restrictions set 146b89a8333Snatalie li - Sun Microsystems - Irvine United States * SMB_SHRF_ACC_NONE "none" property set 147b89a8333Snatalie li - Sun Microsystems - Irvine United States * SMB_SHRF_ACC_RO "ro" (readonly) property set 148b89a8333Snatalie li - Sun Microsystems - Irvine United States * SMB_SHRF_ACC_RW "rw" (read/write) property set 149b89a8333Snatalie li - Sun Microsystems - Irvine United States * SMB_SHRF_ACC_ALL All of the access bits 1508b2cc8acSafshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_CATIA CATIA character translation on/off 15129bd2886SAlan Wright * SMB_SHRF_GUEST_OK Guest access on/off 152e3f2c991SKeyur Desai * SMB_SHRF_ABE Access Based Enumeration on/off 1539fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_DFSROOT Share is a standalone DFS root 1549fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 1559fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Runtime flags: 1569fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 1579fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_TRANS Transient share 1589fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_PERM Permanent share 1599fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_AUTOHOME Autohome share. 1609fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_ADMIN Admin share 1613db3f65cSamw * 1623db3f65cSamw * All autohome shares are transient but not all transient shares are autohome. 1633db3f65cSamw * IPC$ and drive letter shares (e.g. d$, e$, etc) are transient but 1643db3f65cSamw * not autohome. 1653db3f65cSamw */ 1668d7e4166Sjose borrego 1679fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 1689fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Property flags 1699fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 1709fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_DFSROOT 0x0001 1719fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_CATIA 0x0002 1729fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_GUEST_OK 0x0004 1739fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_ABE 0x0008 1749fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 1758d7e4166Sjose borrego #define SMB_SHRF_CSC_DISABLED 0x0010 1768d7e4166Sjose borrego #define SMB_SHRF_CSC_MANUAL 0x0020 1778d7e4166Sjose borrego #define SMB_SHRF_CSC_AUTO 0x0040 1788d7e4166Sjose borrego #define SMB_SHRF_CSC_VDO 0x0080 1799fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_CSC_MASK 0x00F0 1803db3f65cSamw 181b89a8333Snatalie li - Sun Microsystems - Irvine United States #define SMB_SHRF_ACC_OPEN 0x0000 182b89a8333Snatalie li - Sun Microsystems - Irvine United States #define SMB_SHRF_ACC_NONE 0x0100 183b89a8333Snatalie li - Sun Microsystems - Irvine United States #define SMB_SHRF_ACC_RO 0x0200 184b89a8333Snatalie li - Sun Microsystems - Irvine United States #define SMB_SHRF_ACC_RW 0x0400 185b89a8333Snatalie li - Sun Microsystems - Irvine United States #define SMB_SHRF_ACC_ALL 0x0F00 186b89a8333Snatalie li - Sun Microsystems - Irvine United States 18794047d49SGordon Ross #define SMB_SHRF_QUOTAS 0x1000 /* Enable SMB Quotas */ 18894047d49SGordon Ross #define SMB_SHRF_FSO 0x2000 /* Force Shared Oplocks */ 189*8d94f651SGordon Ross #define SMB_SHRF_CA 0x4000 /* Continuous Availability */ 190ca5fb90aSGordon Ross 1919fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 1929fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Runtime flags 1939fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 1949fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_ADMIN 0x01000000 1959fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_TRANS 0x10000000 1969fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_PERM 0x20000000 1979fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_AUTOHOME 0x40000000 198*8d94f651SGordon Ross #define SMB_SHRF_REMOVED 0x80000000 /* unshared */ 199b89a8333Snatalie li - Sun Microsystems - Irvine United States 200cb174861Sjoyce mcintosh #define SMB_SHARE_PRINT "print$" 201cb174861Sjoyce mcintosh #define SMB_SHARE_PRINT_LEN 6 2023db3f65cSamw /* 2033db3f65cSamw * refcnt is currently only used for autohome. autohome needs a refcnt 20448bbca81SDaniel Hoffman * because a user can map their autohome share from more than one client 2053db3f65cSamw * at the same time and the share should only be removed when the last 2063db3f65cSamw * one is disconnected 2073db3f65cSamw */ 2083db3f65cSamw typedef struct smb_share { 2093db3f65cSamw char shr_name[MAXNAMELEN]; 2103db3f65cSamw char shr_path[MAXPATHLEN]; 2113db3f65cSamw char shr_cmnt[SMB_SHARE_CMNT_MAX]; 2123db3f65cSamw char shr_container[MAXPATHLEN]; 2133db3f65cSamw uint32_t shr_flags; 2143db3f65cSamw uint32_t shr_type; 2153db3f65cSamw uint32_t shr_refcnt; 216b89a8333Snatalie li - Sun Microsystems - Irvine United States uint32_t shr_access_value; /* host return access value */ 217fe1c642dSBill Krier uid_t shr_uid; /* autohome only */ 218fe1c642dSBill Krier gid_t shr_gid; /* autohome only */ 219b89a8333Snatalie li - Sun Microsystems - Irvine United States char shr_access_none[MAXPATHLEN]; 220b89a8333Snatalie li - Sun Microsystems - Irvine United States char shr_access_ro[MAXPATHLEN]; 221b89a8333Snatalie li - Sun Microsystems - Irvine United States char shr_access_rw[MAXPATHLEN]; 2221160dcf7SMatt Barden smb_cfg_val_t shr_encrypt; 2233db3f65cSamw } smb_share_t; 2243db3f65cSamw 2253db3f65cSamw typedef struct smb_shriter { 2263db3f65cSamw smb_share_t si_share; 2273db3f65cSamw HT_ITERATOR si_hashiter; 228c8ec8eeaSjose borrego boolean_t si_first; 2293db3f65cSamw } smb_shriter_t; 2303db3f65cSamw 2313db3f65cSamw #define LMSHARES_PER_REQUEST 10 2323db3f65cSamw typedef struct smb_shrlist { 233c8ec8eeaSjose borrego int sl_cnt; 234c8ec8eeaSjose borrego smb_share_t sl_shares[LMSHARES_PER_REQUEST]; 2353db3f65cSamw } smb_shrlist_t; 2363db3f65cSamw 237148c5f43SAlan Wright typedef struct smb_shr_execinfo { 238148c5f43SAlan Wright char *e_sharename; 23929bd2886SAlan Wright char *e_winname; 24029bd2886SAlan Wright char *e_userdom; 24129bd2886SAlan Wright smb_inaddr_t e_srv_ipaddr; 24229bd2886SAlan Wright smb_inaddr_t e_cli_ipaddr; 24329bd2886SAlan Wright char *e_cli_netbiosname; 24429bd2886SAlan Wright uid_t e_uid; 245148c5f43SAlan Wright int e_type; 246148c5f43SAlan Wright } smb_shr_execinfo_t; 24729bd2886SAlan Wright 2483db3f65cSamw /* 2493db3f65cSamw * LanMan share API (for both SMB kernel module and GUI/CLI sub-system) 2503db3f65cSamw * 2513db3f65cSamw * NOTE: If any error is encounted by either the door server or client, 2523db3f65cSamw * NERR_InternalError will be returned by most functions, smb_share_count 2533db3f65cSamw * will return -1. 2543db3f65cSamw */ 2553db3f65cSamw 256b819cea2SGordon Ross #if !defined(_KERNEL) && !defined(_FAKE_KERNEL) 2573db3f65cSamw 2583db3f65cSamw /* 259c8ec8eeaSjose borrego * CIFS share management functions exported by libmlsvc 2603db3f65cSamw */ 2613db3f65cSamw int smb_shr_start(void); 2623db3f65cSamw void smb_shr_stop(void); 263fd9ee8b5Sjoyce mcintosh void *smb_shr_load(void *); 264c720f3a7SJoyce McIntosh void smb_shr_load_execinfo(void); 265c720f3a7SJoyce McIntosh void smb_shr_unload(void); 266c8ec8eeaSjose borrego void smb_shr_iterinit(smb_shriter_t *); 267c8ec8eeaSjose borrego smb_share_t *smb_shr_iterate(smb_shriter_t *); 268c8ec8eeaSjose borrego void smb_shr_list(int, smb_shrlist_t *); 2693db3f65cSamw int smb_shr_count(void); 270b89a8333Snatalie li - Sun Microsystems - Irvine United States uint32_t smb_shr_add(smb_share_t *); 271b89a8333Snatalie li - Sun Microsystems - Irvine United States uint32_t smb_shr_remove(char *); 272c8ec8eeaSjose borrego uint32_t smb_shr_rename(char *, char *); 273c8ec8eeaSjose borrego uint32_t smb_shr_get(char *, smb_share_t *); 274b89a8333Snatalie li - Sun Microsystems - Irvine United States uint32_t smb_shr_modify(smb_share_t *); 275c8ec8eeaSjose borrego uint32_t smb_shr_get_realpath(const char *, char *, int); 276148c5f43SAlan Wright uint32_t smb_shr_hostaccess(smb_inaddr_t *, char *, char *, char *, uint32_t); 277148c5f43SAlan Wright int smb_shr_exec(smb_shr_execinfo_t *); 2783db3f65cSamw 279c8ec8eeaSjose borrego boolean_t smb_shr_exists(char *); 280c8ec8eeaSjose borrego int smb_shr_is_special(char *); 281c8ec8eeaSjose borrego boolean_t smb_shr_is_restricted(char *); 282c8ec8eeaSjose borrego boolean_t smb_shr_is_admin(char *); 283c5866007SKeyur Desai char smb_shr_drive_letter(const char *); 2843db3f65cSamw 28589dc44ceSjose borrego sa_handle_t smb_shr_sa_enter(void); 28689dc44ceSjose borrego void smb_shr_sa_exit(void); 28789dc44ceSjose borrego void smb_shr_sa_csc_option(const char *, smb_share_t *); 28829bd2886SAlan Wright char *smb_shr_sa_csc_name(const smb_share_t *); 2899fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_shr_sa_setflag(const char *, smb_share_t *, uint32_t); 29089dc44ceSjose borrego 2913db3f65cSamw /* 2923db3f65cSamw * CIFS share management API exported for other processes 2933db3f65cSamw */ 294c8ec8eeaSjose borrego uint32_t smb_share_list(int, smb_shrlist_t *); 2953db3f65cSamw int smb_share_count(void); 296c8ec8eeaSjose borrego uint32_t smb_share_delete(char *); 297c8ec8eeaSjose borrego uint32_t smb_share_rename(char *, char *); 298c8ec8eeaSjose borrego uint32_t smb_share_create(smb_share_t *); 299b89a8333Snatalie li - Sun Microsystems - Irvine United States uint32_t smb_share_modify(smb_share_t *); 3003db3f65cSamw 301b819cea2SGordon Ross #endif /* _KERNEL */ 3023db3f65cSamw 3033db3f65cSamw #ifdef __cplusplus 3043db3f65cSamw } 3053db3f65cSamw #endif 3063db3f65cSamw 3073db3f65cSamw #endif /* _SMB_SHARE_H */ 308