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. 2494047d49SGordon Ross * Copyright 2017 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> 37*1160dcf7SMatt 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 * 80*1160dcf7SMatt Barden * encrypt Controls SMB3 encryption per-share. 81*1160dcf7SMatt Barden * disabled Server does not tell the client to encrypt requests. 82*1160dcf7SMatt Barden * enabled Server asks, but does not require, that the client 83*1160dcf7SMatt Barden * encrypt its requests. 84*1160dcf7SMatt Barden * required Server denies unencrypted share access. 85*1160dcf7SMatt Barden * 86*1160dcf7SMatt 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" 9529bd2886SAlan Wright #define SHOPT_CSC "csc" 9629bd2886SAlan Wright #define SHOPT_CATIA "catia" 9729bd2886SAlan Wright #define SHOPT_GUEST "guestok" 9829bd2886SAlan Wright #define SHOPT_RO "ro" 9929bd2886SAlan Wright #define SHOPT_RW "rw" 10029bd2886SAlan Wright #define SHOPT_NONE "none" 1019fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SHOPT_DFSROOT "dfsroot" 102148c5f43SAlan Wright #define SHOPT_DESCRIPTION "description" 103ca5fb90aSGordon Ross #define SHOPT_QUOTAS "quotas" 10494047d49SGordon Ross #define SHOPT_FSO "fso" /* Force Shared Oplocks */ 105*1160dcf7SMatt Barden #define SHOPT_ENCRYPT "encrypt" 106ca5fb90aSGordon Ross #define SHOPT_AUTOHOME "Autohome" 1073db3f65cSamw 1083db3f65cSamw #define SMB_DEFAULT_SHARE_GROUP "smb" 1093db3f65cSamw #define SMB_PROTOCOL_NAME "smb" 1103db3f65cSamw 1113db3f65cSamw /* 1123db3f65cSamw * RAP protocol share related commands only understand 1133db3f65cSamw * share names in OEM format and there is a 13 char size 1143db3f65cSamw * limitation 1153db3f65cSamw */ 1163db3f65cSamw #define SMB_SHARE_OEMNAME_MAX 13 117fe1c642dSBill Krier #define SMB_SHARE_NTNAME_MAX 81 1183db3f65cSamw #define SMB_SHARE_CMNT_MAX (64 * MTS_MB_CHAR_MAX) 1193db3f65cSamw 1203db3f65cSamw /* 1213db3f65cSamw * struct SHARE_INFO_1 { 1223db3f65cSamw * char shi1_netname[13] 1233db3f65cSamw * char shi1_pad; 1243db3f65cSamw * unsigned short shi1_type 1253db3f65cSamw * char *shi1_remark; 1263db3f65cSamw * } 1273db3f65cSamw */ 1283db3f65cSamw #define SHARE_INFO_1_SIZE (SMB_SHARE_OEMNAME_MAX + 1 + 2 + 4) 1293db3f65cSamw 1303db3f65cSamw /* 1313db3f65cSamw * Share flags: 1323db3f65cSamw * 1339fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * There are two types of flags: 1349fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 1359fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * - flags that represent a share property 1369fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * - other flags set at runtime 1379fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 1389fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Property flags: 1399fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 1408d7e4166Sjose borrego * SMB_SHRF_CSC_DISABLED Client-side caching is disabled for this share 1418d7e4166Sjose borrego * SMB_SHRF_CSC_MANUAL Manual client-side caching is allowed 1428d7e4166Sjose borrego * SMB_SHRF_CSC_AUTO Automatic client-side caching (CSC) is allowed 1438d7e4166Sjose borrego * SMB_SHRF_CSC_VDO Automatic CSC and local cache lookup is allowed 144b89a8333Snatalie li - Sun Microsystems - Irvine United States * SMB_SHRF_ACC_OPEN No restrictions set 145b89a8333Snatalie li - Sun Microsystems - Irvine United States * SMB_SHRF_ACC_NONE "none" property set 146b89a8333Snatalie li - Sun Microsystems - Irvine United States * SMB_SHRF_ACC_RO "ro" (readonly) property set 147b89a8333Snatalie li - Sun Microsystems - Irvine United States * SMB_SHRF_ACC_RW "rw" (read/write) property set 148b89a8333Snatalie li - Sun Microsystems - Irvine United States * SMB_SHRF_ACC_ALL All of the access bits 1498b2cc8acSafshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_CATIA CATIA character translation on/off 15029bd2886SAlan Wright * SMB_SHRF_GUEST_OK Guest access on/off 151e3f2c991SKeyur Desai * SMB_SHRF_ABE Access Based Enumeration on/off 1529fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_DFSROOT Share is a standalone DFS root 1539fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 1549fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Runtime flags: 1559fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 1569fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_TRANS Transient share 1579fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_PERM Permanent share 1589fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_AUTOHOME Autohome share. 1599fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * SMB_SHRF_ADMIN Admin share 1603db3f65cSamw * 1613db3f65cSamw * All autohome shares are transient but not all transient shares are autohome. 1623db3f65cSamw * IPC$ and drive letter shares (e.g. d$, e$, etc) are transient but 1633db3f65cSamw * not autohome. 1643db3f65cSamw */ 1658d7e4166Sjose borrego 1669fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 1679fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Property flags 1689fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 1699fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_DFSROOT 0x0001 1709fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_CATIA 0x0002 1719fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_GUEST_OK 0x0004 1729fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_ABE 0x0008 1739fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 1748d7e4166Sjose borrego #define SMB_SHRF_CSC_DISABLED 0x0010 1758d7e4166Sjose borrego #define SMB_SHRF_CSC_MANUAL 0x0020 1768d7e4166Sjose borrego #define SMB_SHRF_CSC_AUTO 0x0040 1778d7e4166Sjose borrego #define SMB_SHRF_CSC_VDO 0x0080 1789fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_CSC_MASK 0x00F0 1793db3f65cSamw 180b89a8333Snatalie li - Sun Microsystems - Irvine United States #define SMB_SHRF_ACC_OPEN 0x0000 181b89a8333Snatalie li - Sun Microsystems - Irvine United States #define SMB_SHRF_ACC_NONE 0x0100 182b89a8333Snatalie li - Sun Microsystems - Irvine United States #define SMB_SHRF_ACC_RO 0x0200 183b89a8333Snatalie li - Sun Microsystems - Irvine United States #define SMB_SHRF_ACC_RW 0x0400 184b89a8333Snatalie li - Sun Microsystems - Irvine United States #define SMB_SHRF_ACC_ALL 0x0F00 185b89a8333Snatalie li - Sun Microsystems - Irvine United States 18694047d49SGordon Ross #define SMB_SHRF_QUOTAS 0x1000 /* Enable SMB Quotas */ 18794047d49SGordon Ross #define SMB_SHRF_FSO 0x2000 /* Force Shared Oplocks */ 188ca5fb90aSGordon Ross 1899fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 1909fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Runtime flags 1919fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 1929fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_ADMIN 0x01000000 1939fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_TRANS 0x10000000 1949fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_PERM 0x20000000 1959fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #define SMB_SHRF_AUTOHOME 0x40000000 196b89a8333Snatalie li - Sun Microsystems - Irvine United States 197cb174861Sjoyce mcintosh #define SMB_SHARE_PRINT "print$" 198cb174861Sjoyce mcintosh #define SMB_SHARE_PRINT_LEN 6 1993db3f65cSamw /* 2003db3f65cSamw * refcnt is currently only used for autohome. autohome needs a refcnt 20148bbca81SDaniel Hoffman * because a user can map their autohome share from more than one client 2023db3f65cSamw * at the same time and the share should only be removed when the last 2033db3f65cSamw * one is disconnected 2043db3f65cSamw */ 2053db3f65cSamw typedef struct smb_share { 2063db3f65cSamw char shr_name[MAXNAMELEN]; 2073db3f65cSamw char shr_path[MAXPATHLEN]; 2083db3f65cSamw char shr_cmnt[SMB_SHARE_CMNT_MAX]; 2093db3f65cSamw char shr_container[MAXPATHLEN]; 2103db3f65cSamw uint32_t shr_flags; 2113db3f65cSamw uint32_t shr_type; 2123db3f65cSamw uint32_t shr_refcnt; 213b89a8333Snatalie li - Sun Microsystems - Irvine United States uint32_t shr_access_value; /* host return access value */ 214fe1c642dSBill Krier uid_t shr_uid; /* autohome only */ 215fe1c642dSBill Krier gid_t shr_gid; /* autohome only */ 216b89a8333Snatalie li - Sun Microsystems - Irvine United States char shr_access_none[MAXPATHLEN]; 217b89a8333Snatalie li - Sun Microsystems - Irvine United States char shr_access_ro[MAXPATHLEN]; 218b89a8333Snatalie li - Sun Microsystems - Irvine United States char shr_access_rw[MAXPATHLEN]; 219*1160dcf7SMatt Barden smb_cfg_val_t shr_encrypt; 2203db3f65cSamw } smb_share_t; 2213db3f65cSamw 2223db3f65cSamw typedef struct smb_shriter { 2233db3f65cSamw smb_share_t si_share; 2243db3f65cSamw HT_ITERATOR si_hashiter; 225c8ec8eeaSjose borrego boolean_t si_first; 2263db3f65cSamw } smb_shriter_t; 2273db3f65cSamw 2283db3f65cSamw #define LMSHARES_PER_REQUEST 10 2293db3f65cSamw typedef struct smb_shrlist { 230c8ec8eeaSjose borrego int sl_cnt; 231c8ec8eeaSjose borrego smb_share_t sl_shares[LMSHARES_PER_REQUEST]; 2323db3f65cSamw } smb_shrlist_t; 2333db3f65cSamw 234148c5f43SAlan Wright typedef struct smb_shr_execinfo { 235148c5f43SAlan Wright char *e_sharename; 23629bd2886SAlan Wright char *e_winname; 23729bd2886SAlan Wright char *e_userdom; 23829bd2886SAlan Wright smb_inaddr_t e_srv_ipaddr; 23929bd2886SAlan Wright smb_inaddr_t e_cli_ipaddr; 24029bd2886SAlan Wright char *e_cli_netbiosname; 24129bd2886SAlan Wright uid_t e_uid; 242148c5f43SAlan Wright int e_type; 243148c5f43SAlan Wright } smb_shr_execinfo_t; 24429bd2886SAlan Wright 2453db3f65cSamw /* 2463db3f65cSamw * LanMan share API (for both SMB kernel module and GUI/CLI sub-system) 2473db3f65cSamw * 2483db3f65cSamw * NOTE: If any error is encounted by either the door server or client, 2493db3f65cSamw * NERR_InternalError will be returned by most functions, smb_share_count 2503db3f65cSamw * will return -1. 2513db3f65cSamw */ 2523db3f65cSamw 253b819cea2SGordon Ross #if !defined(_KERNEL) && !defined(_FAKE_KERNEL) 2543db3f65cSamw 2553db3f65cSamw /* 256c8ec8eeaSjose borrego * CIFS share management functions exported by libmlsvc 2573db3f65cSamw */ 2583db3f65cSamw int smb_shr_start(void); 2593db3f65cSamw void smb_shr_stop(void); 260fd9ee8b5Sjoyce mcintosh void *smb_shr_load(void *); 261c720f3a7SJoyce McIntosh void smb_shr_load_execinfo(void); 262c720f3a7SJoyce McIntosh void smb_shr_unload(void); 263c8ec8eeaSjose borrego void smb_shr_iterinit(smb_shriter_t *); 264c8ec8eeaSjose borrego smb_share_t *smb_shr_iterate(smb_shriter_t *); 265c8ec8eeaSjose borrego void smb_shr_list(int, smb_shrlist_t *); 2663db3f65cSamw int smb_shr_count(void); 267b89a8333Snatalie li - Sun Microsystems - Irvine United States uint32_t smb_shr_add(smb_share_t *); 268b89a8333Snatalie li - Sun Microsystems - Irvine United States uint32_t smb_shr_remove(char *); 269c8ec8eeaSjose borrego uint32_t smb_shr_rename(char *, char *); 270c8ec8eeaSjose borrego uint32_t smb_shr_get(char *, smb_share_t *); 271b89a8333Snatalie li - Sun Microsystems - Irvine United States uint32_t smb_shr_modify(smb_share_t *); 272c8ec8eeaSjose borrego uint32_t smb_shr_get_realpath(const char *, char *, int); 273148c5f43SAlan Wright uint32_t smb_shr_hostaccess(smb_inaddr_t *, char *, char *, char *, uint32_t); 274148c5f43SAlan Wright int smb_shr_exec(smb_shr_execinfo_t *); 2753db3f65cSamw 276c8ec8eeaSjose borrego boolean_t smb_shr_exists(char *); 277c8ec8eeaSjose borrego int smb_shr_is_special(char *); 278c8ec8eeaSjose borrego boolean_t smb_shr_is_restricted(char *); 279c8ec8eeaSjose borrego boolean_t smb_shr_is_admin(char *); 280c5866007SKeyur Desai char smb_shr_drive_letter(const char *); 2813db3f65cSamw 28289dc44ceSjose borrego sa_handle_t smb_shr_sa_enter(void); 28389dc44ceSjose borrego void smb_shr_sa_exit(void); 28489dc44ceSjose borrego void smb_shr_sa_csc_option(const char *, smb_share_t *); 28529bd2886SAlan Wright char *smb_shr_sa_csc_name(const smb_share_t *); 2869fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void smb_shr_sa_setflag(const char *, smb_share_t *, uint32_t); 28789dc44ceSjose borrego 2883db3f65cSamw /* 2893db3f65cSamw * CIFS share management API exported for other processes 2903db3f65cSamw */ 291c8ec8eeaSjose borrego uint32_t smb_share_list(int, smb_shrlist_t *); 2923db3f65cSamw int smb_share_count(void); 293c8ec8eeaSjose borrego uint32_t smb_share_delete(char *); 294c8ec8eeaSjose borrego uint32_t smb_share_rename(char *, char *); 295c8ec8eeaSjose borrego uint32_t smb_share_create(smb_share_t *); 296b89a8333Snatalie li - Sun Microsystems - Irvine United States uint32_t smb_share_modify(smb_share_t *); 2973db3f65cSamw 298b819cea2SGordon Ross #endif /* _KERNEL */ 2993db3f65cSamw 3003db3f65cSamw #ifdef __cplusplus 3013db3f65cSamw } 3023db3f65cSamw #endif 3033db3f65cSamw 3043db3f65cSamw #endif /* _SMB_SHARE_H */ 305