17052Samw /* 27052Samw * CDDL HEADER START 37052Samw * 47052Samw * The contents of this file are subject to the terms of the 57052Samw * Common Development and Distribution License (the "License"). 67052Samw * You may not use this file except in compliance with the License. 77052Samw * 87052Samw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97052Samw * or http://www.opensolaris.org/os/licensing. 107052Samw * See the License for the specific language governing permissions 117052Samw * and limitations under the License. 127052Samw * 137052Samw * When distributing Covered Code, include this CDDL HEADER in each 147052Samw * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157052Samw * If applicable, add the following below this CDDL HEADER, with the 167052Samw * fields enclosed by brackets "[]" replaced with your own identifying 177052Samw * information: Portions Copyright [yyyy] [name of copyright owner] 187052Samw * 197052Samw * CDDL HEADER END 207052Samw */ 2112508Samw@Sun.COM 227052Samw /* 2312508Samw@Sun.COM * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 247052Samw */ 257052Samw 267052Samw #ifndef _SMB_SHARE_H 277052Samw #define _SMB_SHARE_H 287052Samw 297052Samw #include <sys/param.h> 307052Samw #include <smbsrv/string.h> 3111963SAfshin.Ardakani@Sun.COM #include <smbsrv/smb_inet.h> 327052Samw #include <smbsrv/hash_table.h> 337052Samw #include <smbsrv/wintypes.h> 3412508Samw@Sun.COM #include <smb/lmerr.h> 357052Samw 367052Samw #ifndef _KERNEL 377052Samw #include <libshare.h> 387052Samw #endif 397052Samw 407052Samw #ifdef __cplusplus 417052Samw extern "C" { 427052Samw #endif 437052Samw 4412508Samw@Sun.COM #define SMB_CVOL "/var/smb/cvol" 4512508Samw@Sun.COM #define SMB_SYSROOT SMB_CVOL "/windows" 4612508Samw@Sun.COM #define SMB_SYSTEM32 SMB_SYSROOT "/system32" 4712508Samw@Sun.COM #define SMB_VSS SMB_SYSTEM32 "/vss" 4812508Samw@Sun.COM 497052Samw /* 509832Samw@Sun.COM * Share Properties: 519832Samw@Sun.COM * 529832Samw@Sun.COM * name Advertised name of the share 539832Samw@Sun.COM * 549832Samw@Sun.COM * ad-container Active directory container in which the share 559832Samw@Sun.COM * will be published 569832Samw@Sun.COM * 5710504SKeyur.Desai@Sun.COM * abe Determines whether Access Based Enumeration is applied 5810504SKeyur.Desai@Sun.COM * to a share 5910504SKeyur.Desai@Sun.COM * 609832Samw@Sun.COM * csc Client-side caching (CSC) options applied to this share 619832Samw@Sun.COM * disabled The client MUST NOT cache any files 629832Samw@Sun.COM * manual The client should not automatically cache every file 639832Samw@Sun.COM * that it opens 649832Samw@Sun.COM * auto The client may cache every file that it opens 659832Samw@Sun.COM * vdo The client may cache every file that it opens 669832Samw@Sun.COM * and satisfy file requests from its local cache. 679832Samw@Sun.COM * 689832Samw@Sun.COM * catia CATIA character substitution 699832Samw@Sun.COM * 709832Samw@Sun.COM * guestok Determines whether guest access is allowed 719832Samw@Sun.COM * 729832Samw@Sun.COM * next three properties use access-list a al NFS 739832Samw@Sun.COM * 749832Samw@Sun.COM * ro list of hosts that will have read-only access 759832Samw@Sun.COM * rw list of hosts that will have read/write access 769832Samw@Sun.COM * none list of hosts that won't be allowed access 777052Samw */ 788334SJose.Borrego@Sun.COM #define SHOPT_AD_CONTAINER "ad-container" 7910504SKeyur.Desai@Sun.COM #define SHOPT_ABE "abe" 809832Samw@Sun.COM #define SHOPT_NAME "name" 819832Samw@Sun.COM #define SHOPT_CSC "csc" 829832Samw@Sun.COM #define SHOPT_CATIA "catia" 839832Samw@Sun.COM #define SHOPT_GUEST "guestok" 849832Samw@Sun.COM #define SHOPT_RO "ro" 859832Samw@Sun.COM #define SHOPT_RW "rw" 869832Samw@Sun.COM #define SHOPT_NONE "none" 8711963SAfshin.Ardakani@Sun.COM #define SHOPT_DFSROOT "dfsroot" 8812508Samw@Sun.COM #define SHOPT_DESCRIPTION "description" 897052Samw 907052Samw #define SMB_DEFAULT_SHARE_GROUP "smb" 917052Samw #define SMB_PROTOCOL_NAME "smb" 927052Samw 937052Samw /* 947052Samw * RAP protocol share related commands only understand 957052Samw * share names in OEM format and there is a 13 char size 967052Samw * limitation 977052Samw */ 987052Samw #define SMB_SHARE_OEMNAME_MAX 13 9911337SWilliam.Krier@Sun.COM #define SMB_SHARE_NTNAME_MAX 81 1007052Samw #define SMB_SHARE_CMNT_MAX (64 * MTS_MB_CHAR_MAX) 1017052Samw 1027052Samw /* 1037052Samw * struct SHARE_INFO_1 { 1047052Samw * char shi1_netname[13] 1057052Samw * char shi1_pad; 1067052Samw * unsigned short shi1_type 1077052Samw * char *shi1_remark; 1087052Samw * } 1097052Samw */ 1107052Samw #define SHARE_INFO_1_SIZE (SMB_SHARE_OEMNAME_MAX + 1 + 2 + 4) 1117052Samw 1127052Samw /* 1137052Samw * Share flags: 1147052Samw * 11511963SAfshin.Ardakani@Sun.COM * There are two types of flags: 11611963SAfshin.Ardakani@Sun.COM * 11711963SAfshin.Ardakani@Sun.COM * - flags that represent a share property 11811963SAfshin.Ardakani@Sun.COM * - other flags set at runtime 11911963SAfshin.Ardakani@Sun.COM * 12011963SAfshin.Ardakani@Sun.COM * Property flags: 12111963SAfshin.Ardakani@Sun.COM * 1228334SJose.Borrego@Sun.COM * SMB_SHRF_CSC_DISABLED Client-side caching is disabled for this share 1238334SJose.Borrego@Sun.COM * SMB_SHRF_CSC_MANUAL Manual client-side caching is allowed 1248334SJose.Borrego@Sun.COM * SMB_SHRF_CSC_AUTO Automatic client-side caching (CSC) is allowed 1258334SJose.Borrego@Sun.COM * SMB_SHRF_CSC_VDO Automatic CSC and local cache lookup is allowed 1267961SNatalie.Li@Sun.COM * SMB_SHRF_ACC_OPEN No restrictions set 1277961SNatalie.Li@Sun.COM * SMB_SHRF_ACC_NONE "none" property set 1287961SNatalie.Li@Sun.COM * SMB_SHRF_ACC_RO "ro" (readonly) property set 1297961SNatalie.Li@Sun.COM * SMB_SHRF_ACC_RW "rw" (read/write) property set 1307961SNatalie.Li@Sun.COM * SMB_SHRF_ACC_ALL All of the access bits 1319231SAfshin.Ardakani@Sun.COM * SMB_SHRF_CATIA CATIA character translation on/off 1329832Samw@Sun.COM * SMB_SHRF_GUEST_OK Guest access on/off 13310504SKeyur.Desai@Sun.COM * SMB_SHRF_ABE Access Based Enumeration on/off 13411963SAfshin.Ardakani@Sun.COM * SMB_SHRF_DFSROOT Share is a standalone DFS root 13511963SAfshin.Ardakani@Sun.COM * 13611963SAfshin.Ardakani@Sun.COM * Runtime flags: 13711963SAfshin.Ardakani@Sun.COM * 13811963SAfshin.Ardakani@Sun.COM * SMB_SHRF_TRANS Transient share 13911963SAfshin.Ardakani@Sun.COM * SMB_SHRF_PERM Permanent share 14011963SAfshin.Ardakani@Sun.COM * SMB_SHRF_AUTOHOME Autohome share. 14111963SAfshin.Ardakani@Sun.COM * SMB_SHRF_ADMIN Admin share 1427052Samw * 1437052Samw * All autohome shares are transient but not all transient shares are autohome. 1447052Samw * IPC$ and drive letter shares (e.g. d$, e$, etc) are transient but 1457052Samw * not autohome. 1467052Samw */ 1478334SJose.Borrego@Sun.COM 14811963SAfshin.Ardakani@Sun.COM /* 14911963SAfshin.Ardakani@Sun.COM * Property flags 15011963SAfshin.Ardakani@Sun.COM */ 15111963SAfshin.Ardakani@Sun.COM #define SMB_SHRF_DFSROOT 0x0001 15211963SAfshin.Ardakani@Sun.COM #define SMB_SHRF_CATIA 0x0002 15311963SAfshin.Ardakani@Sun.COM #define SMB_SHRF_GUEST_OK 0x0004 15411963SAfshin.Ardakani@Sun.COM #define SMB_SHRF_ABE 0x0008 15511963SAfshin.Ardakani@Sun.COM 1568334SJose.Borrego@Sun.COM #define SMB_SHRF_CSC_DISABLED 0x0010 1578334SJose.Borrego@Sun.COM #define SMB_SHRF_CSC_MANUAL 0x0020 1588334SJose.Borrego@Sun.COM #define SMB_SHRF_CSC_AUTO 0x0040 1598334SJose.Borrego@Sun.COM #define SMB_SHRF_CSC_VDO 0x0080 16011963SAfshin.Ardakani@Sun.COM #define SMB_SHRF_CSC_MASK 0x00F0 1617052Samw 1627961SNatalie.Li@Sun.COM #define SMB_SHRF_ACC_OPEN 0x0000 1637961SNatalie.Li@Sun.COM #define SMB_SHRF_ACC_NONE 0x0100 1647961SNatalie.Li@Sun.COM #define SMB_SHRF_ACC_RO 0x0200 1657961SNatalie.Li@Sun.COM #define SMB_SHRF_ACC_RW 0x0400 1667961SNatalie.Li@Sun.COM #define SMB_SHRF_ACC_ALL 0x0F00 1677961SNatalie.Li@Sun.COM 16811963SAfshin.Ardakani@Sun.COM /* 16911963SAfshin.Ardakani@Sun.COM * Runtime flags 17011963SAfshin.Ardakani@Sun.COM */ 17111963SAfshin.Ardakani@Sun.COM #define SMB_SHRF_ADMIN 0x01000000 17211963SAfshin.Ardakani@Sun.COM #define SMB_SHRF_TRANS 0x10000000 17311963SAfshin.Ardakani@Sun.COM #define SMB_SHRF_PERM 0x20000000 17411963SAfshin.Ardakani@Sun.COM #define SMB_SHRF_AUTOHOME 0x40000000 1757961SNatalie.Li@Sun.COM 17612890SJoyce.McIntosh@Sun.COM #define SMB_SHARE_PRINT "print$" 17712890SJoyce.McIntosh@Sun.COM #define SMB_SHARE_PRINT_LEN 6 1787052Samw /* 1797052Samw * refcnt is currently only used for autohome. autohome needs a refcnt 1807052Samw * because a user can map his autohome share from more than one client 1817052Samw * at the same time and the share should only be removed when the last 1827052Samw * one is disconnected 1837052Samw */ 1847052Samw typedef struct smb_share { 1857052Samw char shr_name[MAXNAMELEN]; 1867052Samw char shr_path[MAXPATHLEN]; 1877052Samw char shr_cmnt[SMB_SHARE_CMNT_MAX]; 1887052Samw char shr_container[MAXPATHLEN]; 1897052Samw uint32_t shr_flags; 1907052Samw uint32_t shr_type; 1917052Samw uint32_t shr_refcnt; 1927961SNatalie.Li@Sun.COM uint32_t shr_access_value; /* host return access value */ 19311337SWilliam.Krier@Sun.COM uid_t shr_uid; /* autohome only */ 19411337SWilliam.Krier@Sun.COM gid_t shr_gid; /* autohome only */ 1957961SNatalie.Li@Sun.COM char shr_access_none[MAXPATHLEN]; 1967961SNatalie.Li@Sun.COM char shr_access_ro[MAXPATHLEN]; 1977961SNatalie.Li@Sun.COM char shr_access_rw[MAXPATHLEN]; 1987052Samw } smb_share_t; 1997052Samw 2007052Samw typedef struct smb_shriter { 2017052Samw smb_share_t si_share; 2027052Samw HT_ITERATOR si_hashiter; 2037348SJose.Borrego@Sun.COM boolean_t si_first; 2047052Samw } smb_shriter_t; 2057052Samw 2067052Samw #define LMSHARES_PER_REQUEST 10 2077052Samw typedef struct smb_shrlist { 2087348SJose.Borrego@Sun.COM int sl_cnt; 2097348SJose.Borrego@Sun.COM smb_share_t sl_shares[LMSHARES_PER_REQUEST]; 2107052Samw } smb_shrlist_t; 2117052Samw 21212508Samw@Sun.COM typedef struct smb_shr_execinfo { 21312508Samw@Sun.COM char *e_sharename; 2149832Samw@Sun.COM char *e_winname; 2159832Samw@Sun.COM char *e_userdom; 2169832Samw@Sun.COM smb_inaddr_t e_srv_ipaddr; 2179832Samw@Sun.COM smb_inaddr_t e_cli_ipaddr; 2189832Samw@Sun.COM char *e_cli_netbiosname; 2199832Samw@Sun.COM uid_t e_uid; 22012508Samw@Sun.COM int e_type; 22112508Samw@Sun.COM } smb_shr_execinfo_t; 2229832Samw@Sun.COM 2237052Samw /* 2247052Samw * LanMan share API (for both SMB kernel module and GUI/CLI sub-system) 2257052Samw * 2267052Samw * NOTE: If any error is encounted by either the door server or client, 2277052Samw * NERR_InternalError will be returned by most functions, smb_share_count 2287052Samw * will return -1. 2297052Samw */ 2307052Samw 2317052Samw #ifndef _KERNEL 2327052Samw 2337052Samw /* 2347348SJose.Borrego@Sun.COM * CIFS share management functions exported by libmlsvc 2357052Samw */ 2367052Samw int smb_shr_start(void); 2377052Samw void smb_shr_stop(void); 238*13082SJoyce.McIntosh@Sun.COM void *smb_shr_load(void *); 2397348SJose.Borrego@Sun.COM void smb_shr_iterinit(smb_shriter_t *); 2407348SJose.Borrego@Sun.COM smb_share_t *smb_shr_iterate(smb_shriter_t *); 2417348SJose.Borrego@Sun.COM void smb_shr_list(int, smb_shrlist_t *); 2427052Samw int smb_shr_count(void); 2437961SNatalie.Li@Sun.COM uint32_t smb_shr_add(smb_share_t *); 2447961SNatalie.Li@Sun.COM uint32_t smb_shr_remove(char *); 2457348SJose.Borrego@Sun.COM uint32_t smb_shr_rename(char *, char *); 2467348SJose.Borrego@Sun.COM uint32_t smb_shr_get(char *, smb_share_t *); 2477961SNatalie.Li@Sun.COM uint32_t smb_shr_modify(smb_share_t *); 2487348SJose.Borrego@Sun.COM uint32_t smb_shr_get_realpath(const char *, char *, int); 24912508Samw@Sun.COM uint32_t smb_shr_hostaccess(smb_inaddr_t *, char *, char *, char *, uint32_t); 25012508Samw@Sun.COM int smb_shr_exec(smb_shr_execinfo_t *); 2517052Samw 2527348SJose.Borrego@Sun.COM boolean_t smb_shr_exists(char *); 2537348SJose.Borrego@Sun.COM int smb_shr_is_special(char *); 2547348SJose.Borrego@Sun.COM boolean_t smb_shr_is_restricted(char *); 2557348SJose.Borrego@Sun.COM boolean_t smb_shr_is_admin(char *); 25612065SKeyur.Desai@Sun.COM char smb_shr_drive_letter(const char *); 2577052Samw 2588474SJose.Borrego@Sun.COM sa_handle_t smb_shr_sa_enter(void); 2598474SJose.Borrego@Sun.COM void smb_shr_sa_exit(void); 2608474SJose.Borrego@Sun.COM void smb_shr_sa_csc_option(const char *, smb_share_t *); 2619832Samw@Sun.COM char *smb_shr_sa_csc_name(const smb_share_t *); 26211963SAfshin.Ardakani@Sun.COM void smb_shr_sa_setflag(const char *, smb_share_t *, uint32_t); 2638474SJose.Borrego@Sun.COM 2647052Samw /* 2657052Samw * CIFS share management API exported for other processes 2667052Samw */ 2677348SJose.Borrego@Sun.COM uint32_t smb_share_list(int, smb_shrlist_t *); 2687052Samw int smb_share_count(void); 2697348SJose.Borrego@Sun.COM uint32_t smb_share_delete(char *); 2707348SJose.Borrego@Sun.COM uint32_t smb_share_rename(char *, char *); 2717348SJose.Borrego@Sun.COM uint32_t smb_share_create(smb_share_t *); 2727961SNatalie.Li@Sun.COM uint32_t smb_share_modify(smb_share_t *); 2737052Samw 2747052Samw #endif 2757052Samw 2767052Samw #ifdef __cplusplus 2777052Samw } 2787052Samw #endif 2797052Samw 2807052Samw #endif /* _SMB_SHARE_H */ 281