1/* 2 Unix SMB/CIFS implementation. 3 Portable SMB ACL interface 4 Copyright (C) Jeremy Allison 2000 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19*/ 20 21#ifndef _SMB_ACLS_H 22#define _SMB_ACLS_H 23#if defined(HAVE_POSIX_ACLS) 24 25/* This is an identity mapping (just remove the SMB_). */ 26 27#define SMB_ACL_TAG_T acl_tag_t 28#define SMB_ACL_TYPE_T acl_type_t 29#define SMB_ACL_PERMSET_T acl_permset_t 30#define SMB_ACL_PERM_T acl_perm_t 31#define SMB_ACL_READ ACL_READ 32#define SMB_ACL_WRITE ACL_WRITE 33#define SMB_ACL_EXECUTE ACL_EXECUTE 34 35/* Types of ACLs. */ 36#define SMB_ACL_USER ACL_USER 37#define SMB_ACL_USER_OBJ ACL_USER_OBJ 38#define SMB_ACL_GROUP ACL_GROUP 39#define SMB_ACL_GROUP_OBJ ACL_GROUP_OBJ 40#define SMB_ACL_OTHER ACL_OTHER 41#define SMB_ACL_MASK ACL_MASK 42 43#define SMB_ACL_T acl_t 44 45#define SMB_ACL_ENTRY_T acl_entry_t 46 47#define SMB_ACL_FIRST_ENTRY ACL_FIRST_ENTRY 48#define SMB_ACL_NEXT_ENTRY ACL_NEXT_ENTRY 49 50#define SMB_ACL_TYPE_ACCESS ACL_TYPE_ACCESS 51#define SMB_ACL_TYPE_DEFAULT ACL_TYPE_DEFAULT 52 53#elif defined(HAVE_TRU64_ACLS) 54 55/* This is for DEC/Compaq Tru64 UNIX */ 56 57#define SMB_ACL_TAG_T acl_tag_t 58#define SMB_ACL_TYPE_T acl_type_t 59#define SMB_ACL_PERMSET_T acl_permset_t 60#define SMB_ACL_PERM_T acl_perm_t 61#define SMB_ACL_READ ACL_READ 62#define SMB_ACL_WRITE ACL_WRITE 63#define SMB_ACL_EXECUTE ACL_EXECUTE 64 65/* Types of ACLs. */ 66#define SMB_ACL_USER ACL_USER 67#define SMB_ACL_USER_OBJ ACL_USER_OBJ 68#define SMB_ACL_GROUP ACL_GROUP 69#define SMB_ACL_GROUP_OBJ ACL_GROUP_OBJ 70#define SMB_ACL_OTHER ACL_OTHER 71#define SMB_ACL_MASK ACL_MASK 72 73#define SMB_ACL_T acl_t 74 75#define SMB_ACL_ENTRY_T acl_entry_t 76 77#define SMB_ACL_FIRST_ENTRY 0 78#define SMB_ACL_NEXT_ENTRY 1 79 80#define SMB_ACL_TYPE_ACCESS ACL_TYPE_ACCESS 81#define SMB_ACL_TYPE_DEFAULT ACL_TYPE_DEFAULT 82 83#elif defined(HAVE_UNIXWARE_ACLS) || defined(HAVE_SOLARIS_ACLS) 84/* 85 * Donated by Michael Davidson <md@sco.COM> for UnixWare / OpenUNIX. 86 * Modified by Toomas Soome <tsoome@ut.ee> for Solaris. 87 */ 88 89/* SVR4.2 ES/MP ACLs */ 90typedef int SMB_ACL_TAG_T; 91typedef int SMB_ACL_TYPE_T; 92typedef ushort *SMB_ACL_PERMSET_T; 93typedef ushort SMB_ACL_PERM_T; 94#define SMB_ACL_READ 4 95#define SMB_ACL_WRITE 2 96#define SMB_ACL_EXECUTE 1 97 98/* Types of ACLs. */ 99#define SMB_ACL_USER USER 100#define SMB_ACL_USER_OBJ USER_OBJ 101#define SMB_ACL_GROUP GROUP 102#define SMB_ACL_GROUP_OBJ GROUP_OBJ 103#define SMB_ACL_OTHER OTHER_OBJ 104#define SMB_ACL_MASK CLASS_OBJ 105 106typedef struct SMB_ACL_T { 107 int size; 108 int count; 109 int next; 110 struct acl acl[1]; 111} *SMB_ACL_T; 112 113typedef struct acl *SMB_ACL_ENTRY_T; 114 115#define SMB_ACL_FIRST_ENTRY 0 116#define SMB_ACL_NEXT_ENTRY 1 117 118#define SMB_ACL_TYPE_ACCESS 0 119#define SMB_ACL_TYPE_DEFAULT 1 120 121#elif defined(HAVE_HPUX_ACLS) 122 123/* 124 * Based on the Solaris & UnixWare code. 125 */ 126 127#undef GROUP 128#include <sys/aclv.h> 129 130/* SVR4.2 ES/MP ACLs */ 131typedef int SMB_ACL_TAG_T; 132typedef int SMB_ACL_TYPE_T; 133typedef ushort *SMB_ACL_PERMSET_T; 134typedef ushort SMB_ACL_PERM_T; 135#define SMB_ACL_READ 4 136#define SMB_ACL_WRITE 2 137#define SMB_ACL_EXECUTE 1 138 139/* Types of ACLs. */ 140#define SMB_ACL_USER USER 141#define SMB_ACL_USER_OBJ USER_OBJ 142#define SMB_ACL_GROUP GROUP 143#define SMB_ACL_GROUP_OBJ GROUP_OBJ 144#define SMB_ACL_OTHER OTHER_OBJ 145#define SMB_ACL_MASK CLASS_OBJ 146 147typedef struct SMB_ACL_T { 148 int size; 149 int count; 150 int next; 151 struct acl acl[1]; 152} *SMB_ACL_T; 153 154typedef struct acl *SMB_ACL_ENTRY_T; 155 156#define SMB_ACL_FIRST_ENTRY 0 157#define SMB_ACL_NEXT_ENTRY 1 158 159#define SMB_ACL_TYPE_ACCESS 0 160#define SMB_ACL_TYPE_DEFAULT 1 161 162#elif defined(HAVE_IRIX_ACLS) 163 164#define SMB_ACL_TAG_T acl_tag_t 165#define SMB_ACL_TYPE_T acl_type_t 166#define SMB_ACL_PERMSET_T acl_permset_t 167#define SMB_ACL_PERM_T acl_perm_t 168#define SMB_ACL_READ ACL_READ 169#define SMB_ACL_WRITE ACL_WRITE 170#define SMB_ACL_EXECUTE ACL_EXECUTE 171 172/* Types of ACLs. */ 173#define SMB_ACL_USER ACL_USER 174#define SMB_ACL_USER_OBJ ACL_USER_OBJ 175#define SMB_ACL_GROUP ACL_GROUP 176#define SMB_ACL_GROUP_OBJ ACL_GROUP_OBJ 177#define SMB_ACL_OTHER ACL_OTHER_OBJ 178#define SMB_ACL_MASK ACL_MASK 179 180typedef struct SMB_ACL_T { 181 int next; 182 BOOL freeaclp; 183 struct acl *aclp; 184} *SMB_ACL_T; 185 186#define SMB_ACL_ENTRY_T acl_entry_t 187 188#define SMB_ACL_FIRST_ENTRY 0 189#define SMB_ACL_NEXT_ENTRY 1 190 191#define SMB_ACL_TYPE_ACCESS ACL_TYPE_ACCESS 192#define SMB_ACL_TYPE_DEFAULT ACL_TYPE_DEFAULT 193 194#elif defined(HAVE_AIX_ACLS) 195 196/* Donated by Medha Date, mdate@austin.ibm.com, for IBM */ 197 198#include <acl.h> 199 200typedef uint *SMB_ACL_PERMSET_T; 201 202struct acl_entry_link{ 203 struct acl_entry_link *prevp; 204 struct new_acl_entry *entryp; 205 struct acl_entry_link *nextp; 206 int count; 207}; 208 209struct new_acl_entry{ 210 unsigned short ace_len; 211 unsigned short ace_type; 212 unsigned int ace_access; 213 struct ace_id ace_id[1]; 214}; 215 216#define SMB_ACL_ENTRY_T struct new_acl_entry* 217#define SMB_ACL_T struct acl_entry_link* 218 219#define SMB_ACL_TAG_T unsigned short 220#define SMB_ACL_TYPE_T int 221#define SMB_ACL_PERM_T uint 222#define SMB_ACL_READ S_IRUSR 223#define SMB_ACL_WRITE S_IWUSR 224#define SMB_ACL_EXECUTE S_IXUSR 225 226/* Types of ACLs. */ 227#define SMB_ACL_USER ACEID_USER 228#define SMB_ACL_USER_OBJ 3 229#define SMB_ACL_GROUP ACEID_GROUP 230#define SMB_ACL_GROUP_OBJ 4 231#define SMB_ACL_OTHER 5 232#define SMB_ACL_MASK 6 233 234 235#define SMB_ACL_FIRST_ENTRY 1 236#define SMB_ACL_NEXT_ENTRY 2 237 238#define SMB_ACL_TYPE_ACCESS 0 239#define SMB_ACL_TYPE_DEFAULT 1 240 241#else /* No ACLs. */ 242 243/* No ACLS - fake it. */ 244#define SMB_ACL_TAG_T int 245#define SMB_ACL_TYPE_T int 246#define SMB_ACL_PERMSET_T mode_t 247#define SMB_ACL_PERM_T mode_t 248#define SMB_ACL_READ S_IRUSR 249#define SMB_ACL_WRITE S_IWUSR 250#define SMB_ACL_EXECUTE S_IXUSR 251 252/* Types of ACLs. */ 253#define SMB_ACL_USER 0 254#define SMB_ACL_USER_OBJ 1 255#define SMB_ACL_GROUP 2 256#define SMB_ACL_GROUP_OBJ 3 257#define SMB_ACL_OTHER 4 258#define SMB_ACL_MASK 5 259 260typedef struct SMB_ACL_T { 261 int dummy; 262} *SMB_ACL_T; 263 264typedef struct SMB_ACL_ENTRY_T { 265 int dummy; 266} *SMB_ACL_ENTRY_T; 267 268#define SMB_ACL_FIRST_ENTRY 0 269#define SMB_ACL_NEXT_ENTRY 1 270 271#define SMB_ACL_TYPE_ACCESS 0 272#define SMB_ACL_TYPE_DEFAULT 1 273 274#endif /* No ACLs. */ 275#endif /* _SMB_ACLS_H */ 276