1 /* 2 * fs/cifs/cifsacl.h 3 * 4 * Copyright (c) International Business Machines Corp., 2007 5 * Author(s): Steve French (sfrench@us.ibm.com) 6 * 7 * This library is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU Lesser General Public License as published 9 * by the Free Software Foundation; either version 2.1 of the License, or 10 * (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 15 * the GNU Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public License 18 * along with this library; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21 22 #ifndef _CIFSACL_H 23 #define _CIFSACL_H 24 25 26 #define NUM_AUTHS 6 /* number of authority fields */ 27 #define NUM_SUBAUTHS 5 /* number of sub authority fields */ 28 #define NUM_WK_SIDS 7 /* number of well known sids */ 29 #define SIDNAMELENGTH 20 /* long enough for the ones we care about */ 30 #define DEFSECDESCLEN 192 /* sec desc len contaiting a dacl with three aces */ 31 32 #define READ_BIT 0x4 33 #define WRITE_BIT 0x2 34 #define EXEC_BIT 0x1 35 36 #define UBITSHIFT 6 37 #define GBITSHIFT 3 38 39 #define ACCESS_ALLOWED 0 40 #define ACCESS_DENIED 1 41 42 struct cifs_ntsd { 43 __le16 revision; /* revision level */ 44 __le16 type; 45 __le32 osidoffset; 46 __le32 gsidoffset; 47 __le32 sacloffset; 48 __le32 dacloffset; 49 } __attribute__((packed)); 50 51 struct cifs_sid { 52 __u8 revision; /* revision level */ 53 __u8 num_subauth; 54 __u8 authority[6]; 55 __le32 sub_auth[5]; /* sub_auth[num_subauth] */ 56 } __attribute__((packed)); 57 58 struct cifs_acl { 59 __le16 revision; /* revision level */ 60 __le16 size; 61 __le32 num_aces; 62 } __attribute__((packed)); 63 64 struct cifs_ace { 65 __u8 type; 66 __u8 flags; 67 __le16 size; 68 __le32 access_req; 69 struct cifs_sid sid; /* ie UUID of user or group who gets these perms */ 70 } __attribute__((packed)); 71 72 struct cifs_wksid { 73 struct cifs_sid cifssid; 74 char sidname[SIDNAMELENGTH]; 75 } __attribute__((packed)); 76 77 extern int match_sid(struct cifs_sid *); 78 extern int compare_sids(const struct cifs_sid *, const struct cifs_sid *); 79 80 #endif /* _CIFSACL_H */ 81