lib/param: Rename "socket address" to "nbt client socket address" to clarify role
[kai/samba.git] / source3 / include / smb_acls.h
index 2bde6caeda1539918227ace5179016f7e8be7a9d..16bb61f6706ff37bd6ccf4751adcd3254e855588 100644 (file)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #ifndef _SMB_ACLS_H
 #define _SMB_ACLS_H
-#if defined(HAVE_POSIX_ACLS)
 
-/* This is an identity mapping (just remove the SMB_). */
+struct vfs_handle_struct;
+struct files_struct;
 
-#define SMB_ACL_TAG_T               acl_tag_t
-#define SMB_ACL_TYPE_T                         acl_type_t
-#define SMB_ACL_PERMSET_T           acl_permset_t
-#define SMB_ACL_PERM_T                         acl_perm_t
-#define SMB_ACL_READ                ACL_READ
-#define SMB_ACL_WRITE               ACL_WRITE
-#define SMB_ACL_EXECUTE             ACL_EXECUTE
-
-/* Types of ACLs. */
-#define SMB_ACL_USER                ACL_USER
-#define SMB_ACL_USER_OBJ            ACL_USER_OBJ
-#define SMB_ACL_GROUP               ACL_GROUP
-#define SMB_ACL_GROUP_OBJ           ACL_GROUP_OBJ
-#define SMB_ACL_OTHER               ACL_OTHER
-#define SMB_ACL_MASK                ACL_MASK
-
-#define SMB_ACL_T                                      acl_t
-
-#define SMB_ACL_ENTRY_T                                acl_entry_t
-
-#define SMB_ACL_FIRST_ENTRY         ACL_FIRST_ENTRY
-#define SMB_ACL_NEXT_ENTRY          ACL_NEXT_ENTRY
-
-#define SMB_ACL_TYPE_ACCESS         ACL_TYPE_ACCESS
-#define SMB_ACL_TYPE_DEFAULT        ACL_TYPE_DEFAULT
-
-#elif defined(HAVE_TRU64_ACLS)
-
-/* This is for DEC/Compaq Tru64 UNIX */
-
-#define SMB_ACL_TAG_T               acl_tag_t
-#define SMB_ACL_TYPE_T                         acl_type_t
-#define SMB_ACL_PERMSET_T           acl_permset_t
-#define SMB_ACL_PERM_T                         acl_perm_t
-#define SMB_ACL_READ                ACL_READ
-#define SMB_ACL_WRITE               ACL_WRITE
-#define SMB_ACL_EXECUTE             ACL_EXECUTE
-
-/* Types of ACLs. */
-#define SMB_ACL_USER                ACL_USER
-#define SMB_ACL_USER_OBJ            ACL_USER_OBJ
-#define SMB_ACL_GROUP               ACL_GROUP
-#define SMB_ACL_GROUP_OBJ           ACL_GROUP_OBJ
-#define SMB_ACL_OTHER               ACL_OTHER
-#define SMB_ACL_MASK                ACL_MASK
-
-#define SMB_ACL_T                                      acl_t
-
-#define SMB_ACL_ENTRY_T                                acl_entry_t
-
-#define SMB_ACL_FIRST_ENTRY         0
-#define SMB_ACL_NEXT_ENTRY          1
-
-#define SMB_ACL_TYPE_ACCESS         ACL_TYPE_ACCESS
-#define SMB_ACL_TYPE_DEFAULT        ACL_TYPE_DEFAULT
-
-#elif defined(HAVE_UNIXWARE_ACLS) || defined(HAVE_SOLARIS_ACLS)
-/*
- * Donated by Michael Davidson <md@sco.COM> for UnixWare / OpenUNIX.
- * Modified by Toomas Soome <tsoome@ut.ee> for Solaris.
- */
-
-/* SVR4.2 ES/MP ACLs */
-typedef int                    SMB_ACL_TAG_T;
 typedef int                    SMB_ACL_TYPE_T;
-typedef ushort         *SMB_ACL_PERMSET_T;
-typedef ushort         SMB_ACL_PERM_T;
+typedef mode_t                 *SMB_ACL_PERMSET_T;
+typedef mode_t                 SMB_ACL_PERM_T;
 #define SMB_ACL_READ                           4
 #define SMB_ACL_WRITE                          2
 #define SMB_ACL_EXECUTE                                1
 
 /* Types of ACLs. */
-#define SMB_ACL_USER                           USER
-#define SMB_ACL_USER_OBJ                       USER_OBJ
-#define SMB_ACL_GROUP                          GROUP
-#define SMB_ACL_GROUP_OBJ                      GROUP_OBJ
-#define SMB_ACL_OTHER                          OTHER_OBJ
-#define SMB_ACL_MASK                           CLASS_OBJ
-
-typedef struct SMB_ACL_T {
-       int     size;
-       int     count;
-       int     next;
-       struct acl      acl[1];
-} *SMB_ACL_T;
-
-typedef struct acl                                     *SMB_ACL_ENTRY_T;
-
-#define SMB_ACL_FIRST_ENTRY                    0
-#define SMB_ACL_NEXT_ENTRY                     1
-
-#define SMB_ACL_TYPE_ACCESS                    0
-#define SMB_ACL_TYPE_DEFAULT           1
-
-#elif defined(HAVE_HPUX_ACLS)
-
-/*
- * Based on the Solaris & UnixWare code.
- */
-
-#undef GROUP
-#include <sys/aclv.h>
+enum smb_acl_tag_t {
+       SMB_ACL_TAG_INVALID=0,
+       SMB_ACL_USER=1,
+       SMB_ACL_USER_OBJ,
+       SMB_ACL_GROUP,
+       SMB_ACL_GROUP_OBJ,
+       SMB_ACL_OTHER,
+       SMB_ACL_MASK
+};
 
-/* SVR4.2 ES/MP ACLs */
-typedef int                    SMB_ACL_TAG_T;
-typedef int                    SMB_ACL_TYPE_T;
-typedef ushort         *SMB_ACL_PERMSET_T;
-typedef ushort         SMB_ACL_PERM_T;
-#define SMB_ACL_READ                           4
-#define SMB_ACL_WRITE                          2
-#define SMB_ACL_EXECUTE                                1
+typedef enum smb_acl_tag_t SMB_ACL_TAG_T;
 
-/* Types of ACLs. */
-#define SMB_ACL_USER                           USER
-#define SMB_ACL_USER_OBJ                       USER_OBJ
-#define SMB_ACL_GROUP                          GROUP
-#define SMB_ACL_GROUP_OBJ                      GROUP_OBJ
-#define SMB_ACL_OTHER                          OTHER_OBJ
-#define SMB_ACL_MASK                           CLASS_OBJ
+struct smb_acl_entry {
+       enum smb_acl_tag_t a_type;
+       SMB_ACL_PERM_T a_perm;
+       uid_t uid;
+       gid_t gid;
+};
 
-typedef struct SMB_ACL_T {
+typedef struct smb_acl_t {
        int     size;
        int     count;
        int     next;
-       struct acl      acl[1];
+       struct smb_acl_entry acl[1];
 } *SMB_ACL_T;
 
-typedef struct acl                                     *SMB_ACL_ENTRY_T;
+typedef struct smb_acl_entry   *SMB_ACL_ENTRY_T;
 
 #define SMB_ACL_FIRST_ENTRY                    0
 #define SMB_ACL_NEXT_ENTRY                     1
@@ -159,117 +65,34 @@ typedef struct acl                                        *SMB_ACL_ENTRY_T;
 #define SMB_ACL_TYPE_ACCESS                    0
 #define SMB_ACL_TYPE_DEFAULT           1
 
-#elif defined(HAVE_IRIX_ACLS)
-
-#define SMB_ACL_TAG_T               acl_tag_t
-#define SMB_ACL_TYPE_T             acl_type_t
-#define SMB_ACL_PERMSET_T           acl_permset_t
-#define SMB_ACL_PERM_T             acl_perm_t
-#define SMB_ACL_READ                ACL_READ
-#define SMB_ACL_WRITE               ACL_WRITE
-#define SMB_ACL_EXECUTE             ACL_EXECUTE
-
-/* Types of ACLs. */
-#define SMB_ACL_USER                ACL_USER
-#define SMB_ACL_USER_OBJ            ACL_USER_OBJ
-#define SMB_ACL_GROUP               ACL_GROUP
-#define SMB_ACL_GROUP_OBJ           ACL_GROUP_OBJ
-#define SMB_ACL_OTHER               ACL_OTHER_OBJ
-#define SMB_ACL_MASK                ACL_MASK
-
-typedef struct SMB_ACL_T {
-   int next;
-   BOOL freeaclp;
-   struct acl  *aclp;
-} *SMB_ACL_T;
-
-#define SMB_ACL_ENTRY_T                    acl_entry_t
-
-#define SMB_ACL_FIRST_ENTRY         0
-#define SMB_ACL_NEXT_ENTRY          1
-
-#define SMB_ACL_TYPE_ACCESS         ACL_TYPE_ACCESS
-#define SMB_ACL_TYPE_DEFAULT        ACL_TYPE_DEFAULT
-
-#elif defined(HAVE_AIX_ACLS)
-
-/* Donated by Medha Date, mdate@austin.ibm.com, for IBM */
-
-#include <acl.h>
-
-typedef uint                        *SMB_ACL_PERMSET_T;
-struct acl_entry_link{
-       struct acl_entry_link *prevp;
-       struct new_acl_entry *entryp;
-       struct acl_entry_link *nextp;
-       int count;
-};
-
-struct new_acl_entry{
-       unsigned short  ace_len;
-       unsigned short  ace_type;
-       unsigned int    ace_access;
-       struct ace_id ace_id[1];
-};
-
-#define SMB_ACL_ENTRY_T             struct new_acl_entry*
-#define SMB_ACL_T                   struct acl_entry_link*
-#define SMB_ACL_TAG_T               unsigned short
-#define SMB_ACL_TYPE_T              int
-#define SMB_ACL_PERM_T              uint
-#define SMB_ACL_READ                S_IRUSR
-#define SMB_ACL_WRITE               S_IWUSR
-#define SMB_ACL_EXECUTE             S_IXUSR
-
-/* Types of ACLs. */
-#define SMB_ACL_USER                ACEID_USER
-#define SMB_ACL_USER_OBJ            3
-#define SMB_ACL_GROUP               ACEID_GROUP
-#define SMB_ACL_GROUP_OBJ           4
-#define SMB_ACL_OTHER               5
-#define SMB_ACL_MASK                6
-
-
-#define SMB_ACL_FIRST_ENTRY         1
-#define SMB_ACL_NEXT_ENTRY          2
-
-#define SMB_ACL_TYPE_ACCESS         0
-#define SMB_ACL_TYPE_DEFAULT        1
-
-#else /* No ACLs. */
-
-/* No ACLS - fake it. */
-#define SMB_ACL_TAG_T                          int
-#define SMB_ACL_TYPE_T              int
-#define SMB_ACL_PERMSET_T                      mode_t
-#define SMB_ACL_PERM_T                         mode_t
-#define SMB_ACL_READ                           S_IRUSR
-#define SMB_ACL_WRITE                          S_IWUSR
-#define SMB_ACL_EXECUTE                                S_IXUSR
-
-/* Types of ACLs. */
-#define SMB_ACL_USER                           0
-#define SMB_ACL_USER_OBJ                       1
-#define SMB_ACL_GROUP                          2
-#define SMB_ACL_GROUP_OBJ                      3
-#define SMB_ACL_OTHER                          4
-#define SMB_ACL_MASK                           5
-
-typedef struct SMB_ACL_T {
-       int dummy;
-} *SMB_ACL_T;
-
-typedef struct SMB_ACL_ENTRY_T {
-       int dummy;
-} *SMB_ACL_ENTRY_T;
-
-#define SMB_ACL_FIRST_ENTRY                    0
-#define SMB_ACL_NEXT_ENTRY                     1
-
-#define SMB_ACL_TYPE_ACCESS                    0
-#define SMB_ACL_TYPE_DEFAULT           1
+/* The following definitions come from lib/sysacls.c  */
+
+int sys_acl_get_entry(SMB_ACL_T acl_d, int entry_id, SMB_ACL_ENTRY_T *entry_p);
+int sys_acl_get_tag_type(SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *type_p);
+int sys_acl_get_permset(SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p);
+void *sys_acl_get_qualifier(SMB_ACL_ENTRY_T entry_d);
+int sys_acl_clear_perms(SMB_ACL_PERMSET_T permset_d);
+int sys_acl_add_perm(SMB_ACL_PERMSET_T permset_d, SMB_ACL_PERM_T perm);
+int sys_acl_get_perm(SMB_ACL_PERMSET_T permset_d, SMB_ACL_PERM_T perm);
+char *sys_acl_to_text(const struct smb_acl_t *acl_d, ssize_t *len_p);
+SMB_ACL_T sys_acl_init(int count);
+int sys_acl_create_entry(SMB_ACL_T *acl_p, SMB_ACL_ENTRY_T *entry_p);
+int sys_acl_set_tag_type(SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T tag_type);
+int sys_acl_set_qualifier(SMB_ACL_ENTRY_T entry_d, void *qual_p);
+int sys_acl_set_permset(SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T permset_d);
+int sys_acl_free_text(char *text);
+int sys_acl_free_acl(SMB_ACL_T acl_d) ;
+int sys_acl_free_qualifier(void *qual, SMB_ACL_TAG_T tagtype);
+int sys_acl_valid(SMB_ACL_T acl_d);
+SMB_ACL_T sys_acl_get_file(struct vfs_handle_struct *handle,
+                          const char *path_p, SMB_ACL_TYPE_T type);
+SMB_ACL_T sys_acl_get_fd(struct vfs_handle_struct *handle, struct files_struct *fsp);
+int sys_acl_set_file(struct vfs_handle_struct *handle,
+                    const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
+int sys_acl_set_fd(struct vfs_handle_struct *handle, struct files_struct *fsp,
+                  SMB_ACL_T acl_d);
+int sys_acl_delete_def_file(struct vfs_handle_struct *handle,
+                           const char *path);
+int no_acl_syscall_error(int err);
 
-#endif /* No ACLs. */
 #endif /* _SMB_ACLS_H */