lib/param: Rename "socket address" to "nbt client socket address" to clarify role
[kai/samba.git] / source3 / include / smb_acls.h
index 4469432e361aa276761add18c208d535c0dbf553..16bb61f6706ff37bd6ccf4751adcd3254e855588 100644 (file)
@@ -1,12 +1,11 @@
 /* 
-   Unix SMB/Netbios implementation.
-   Version 2.2.x
+   Unix SMB/CIFS implementation.
    Portable SMB ACL interface
    Copyright (C) Jeremy Allison 2000
    
    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
 
-#include "includes.h"
+struct vfs_handle_struct;
+struct files_struct;
 
-#if defined(HAVE_POSIX_ACLS)
-
-/* This is an identity mapping (just remove the SMB_). */
-
-#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_UNIXWARE_ACLS)
-
-/*
- * Donated by Michael Davidson <md@sco.COM> for UnixWare.
- * As this is generic SVR4.x code, it may also work 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;
-#define SMB_ACL_READ                           S_IRUSR
-#define SMB_ACL_WRITE                          S_IWUSR
-#define SMB_ACL_EXECUTE                                S_IXUSR
+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 {
+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
+};
+
+typedef enum smb_acl_tag_t SMB_ACL_TAG_T;
+
+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 {
        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
@@ -93,78 +65,34 @@ typedef struct acl                                  *SMB_ACL_ENTRY_T;
 #define SMB_ACL_TYPE_ACCESS                    0
 #define SMB_ACL_TYPE_DEFAULT           1
 
-#elif defined(HAVE_SOLARIS_ACLS)
-
-/*
- * Code donated by Toomas Soome <tsoome@ut.ee>.
- * Based on the implementation by Michael Davidson <md@sco.COM> for UnixWare.
- */
-
-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
-
-/* 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_IRIX_ACLS)
-
-#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 */