vfs_fruit: pass handle to ad_fset()
[metze/samba-autobuild/.git] / source3 / modules / vfs_aixacl2.c
index d7487d8f47f953f03ab091087b8fd8ea957540bf..e094be1cdb95bbf4feed3b4b4c4394546dee34f1 100644 (file)
@@ -94,7 +94,7 @@ static AIXJFS2_ACL_T *aixjfs2_getacl_alloc(const char *fname, acl_type_t *type)
 }
 
 static bool aixjfs2_get_nfs4_acl(TALLOC_CTX *mem_ctx, const char *name,
-       SMB4ACL_T **ppacl, bool *pretryPosix)
+       struct SMB4ACL_T **ppacl, bool *pretryPosix)
 {
        int32_t i;
        
@@ -154,12 +154,12 @@ static bool aixjfs2_get_nfs4_acl(TALLOC_CTX *mem_ctx, const char *name,
 }
 
 static NTSTATUS aixjfs2_fget_nt_acl(vfs_handle_struct *handle,
-       files_struct *fsp, uint32 security_info,
+       files_struct *fsp, uint32_t security_info,
        TALLOC_CTX *mem_ctx,
        struct security_descriptor **ppdesc)
 {
        NTSTATUS status;
-       SMB4ACL_T *pacl = NULL;
+       struct SMB4ACL_T *pacl = NULL;
        bool    result;
        bool    retryPosix = False;
        TALLOC_CTX *frame = talloc_stackframe();
@@ -179,48 +179,63 @@ static NTSTATUS aixjfs2_fget_nt_acl(vfs_handle_struct *handle,
                return NT_STATUS_ACCESS_DENIED;
        }
 
-       status = smb_fget_nt_acl_nfs4(fsp, security_info, ppdesc,
+       status = smb_fget_nt_acl_nfs4(fsp, NULL, security_info, ppdesc,
                                      mem_ctx, pacl);
        TALLOC_FREE(frame);
        return status;
 }
 
 static NTSTATUS aixjfs2_get_nt_acl(vfs_handle_struct *handle,
-       const char *name,
-       uint32 security_info,
+       const struct smb_filename *smb_fname,
+       uint32_t security_info,
        TALLOC_CTX *mem_ctx,
        struct security_descriptor **ppdesc)
 {
-       SMB4ACL_T *pacl = NULL;
+       struct SMB4ACL_T *pacl = NULL;
        bool    result;
        bool    retryPosix = False;
 
        *ppdesc = NULL;
-       result = aixjfs2_get_nfs4_acl(mem_ctx, name, &pacl, &retryPosix);
+       result = aixjfs2_get_nfs4_acl(mem_ctx,
+                       smb_fname->base_name,
+                       &pacl,
+                       &retryPosix);
        if (retryPosix)
        {
                DEBUG(10, ("retrying with posix acl...\n"));
-               return posix_get_nt_acl(handle->conn, name, security_info,
-                                       mem_ctx, ppdesc);
+               return posix_get_nt_acl(handle->conn,
+                               smb_fname,
+                               security_info,
+                               mem_ctx,
+                               ppdesc);
        }
        if (result==False)
                return NT_STATUS_ACCESS_DENIED;
 
-       return smb_get_nt_acl_nfs4(handle->conn, name, security_info,
-                                  mem_ctx, ppdesc,
-                                  pacl);
+       return smb_get_nt_acl_nfs4(handle->conn,
+                               smb_fname,
+                               NULL,
+                               security_info,
+                               mem_ctx,
+                               ppdesc,
+                               pacl);
 }
 
-static int aixjfs2_sys_acl_blob_get_file(vfs_handle_struct *handle, const char *path_p, TALLOC_CTX *mem_ctx, char **blob_description, DATA_BLOB *blob)
+static int aixjfs2_sys_acl_blob_get_file(vfs_handle_struct *handle,
+                       const struct smb_filename *smb_fname,
+                       TALLOC_CTX *mem_ctx,
+                       char **blob_description,
+                       DATA_BLOB *blob)
 {
-       SMB4ACL_T *pacl = NULL;
+       struct SMB4ACL_T *pacl = NULL;
+       const char *path_p = smb_fname->base_name;
        bool    result;
        bool    retryPosix = False;
 
        result = aixjfs2_get_nfs4_acl(mem_ctx, path_p, &pacl, &retryPosix);
        if (retryPosix)
        {
-               return posix_sys_acl_blob_get_file(handle, path_p, mem_ctx,
+               return posix_sys_acl_blob_get_file(handle, smb_fname, mem_ctx,
                                                   blob_description, blob);
        }
        /* Now way to linarlise NFS4 ACLs at the moment, but the NT ACL is pretty close in this case */
@@ -230,7 +245,7 @@ static int aixjfs2_sys_acl_blob_get_file(vfs_handle_struct *handle, const char *
 
 static int aixjfs2_sys_acl_blob_get_fd(vfs_handle_struct *handle, files_struct *fsp, TALLOC_CTX *mem_ctx, char **blob_description, DATA_BLOB *blob)
 {
-       SMB4ACL_T *pacl = NULL;
+       struct SMB4ACL_T *pacl = NULL;
        bool    result;
        bool    retryPosix = False;
 
@@ -281,9 +296,9 @@ static SMB_ACL_T aixjfs2_get_posix_acl(const char *path, acl_type_t type, TALLOC
 }
 
 SMB_ACL_T aixjfs2_sys_acl_get_file(vfs_handle_struct *handle,
-                                    const char *path_p,
-                                  SMB_ACL_TYPE_T type,
-                                  TALLOC_CTX *mem_ctx)
+                               const struct smb_filename *smb_fname,
+                               SMB_ACL_TYPE_T type,
+                               TALLOC_CTX *mem_ctx)
 {
         acl_type_t aixjfs2_type;
 
@@ -299,7 +314,8 @@ SMB_ACL_T aixjfs2_sys_acl_get_file(vfs_handle_struct *handle,
                 smb_panic("exiting");
         }
 
-        return aixjfs2_get_posix_acl(path_p, aixjfs2_type, mem_ctx);
+        return aixjfs2_get_posix_acl(smb_fname->base_name,
+                       aixjfs2_type, mem_ctx);
 }
 
 SMB_ACL_T aixjfs2_sys_acl_get_fd(vfs_handle_struct *handle,
@@ -321,9 +337,9 @@ static int aixjfs2_query_acl_support(
        acl_type_t *pacl_type_info
 )
 {
-       acl_types_list_t        acl_type_list;
-       size_t  acl_type_list_len = sizeof(acl_types_list_t);
-       uint32_t        i;
+       acl_types_list_t acl_type_list;
+       size_t acl_type_list_len = sizeof(acl_types_list_t);
+       uint32_t i;
 
        memset(&acl_type_list, 0, sizeof(acl_type_list));
 
@@ -345,14 +361,16 @@ static int aixjfs2_query_acl_support(
        return 1; /* haven't found that ACL type. */
 }
 
-static bool aixjfs2_process_smbacl(vfs_handle_struct *handle, files_struct *fsp, SMB4ACL_T *smbacl)
+static bool aixjfs2_process_smbacl(vfs_handle_struct *handle,
+                                  files_struct *fsp,
+                                  struct SMB4ACL_T *smbacl)
 {
-       SMB4ACE_T       *smbace;
+       struct SMB4ACE_T *smbace;
        TALLOC_CTX      *mem_ctx;
        nfs4_acl_int_t  *jfs2acl;
-       int32_t entryLen;
-       uint32  aclLen, naces;
-       int     rc;
+       int32_t         entryLen;
+       uint32_t        aclLen, naces;
+       int             rc;
        acl_type_t      acltype;
 
        DEBUG(10, ("jfs2_process_smbacl invoked on %s\n", fsp_str_dbg(fsp)));
@@ -420,7 +438,7 @@ static bool aixjfs2_process_smbacl(vfs_handle_struct *handle, files_struct *fsp,
        return True;
 }
 
-static NTSTATUS aixjfs2_set_nt_acl_common(vfs_handle_struct *handle, files_struct *fsp, uint32 security_info_sent, const struct security_descriptor *psd)
+static NTSTATUS aixjfs2_set_nt_acl_common(vfs_handle_struct *handle, files_struct *fsp, uint32_t security_info_sent, const struct security_descriptor *psd)
 {
        acl_type_t      acl_type_info;
        NTSTATUS        result = NT_STATUS_ACCESS_DENIED;
@@ -434,7 +452,7 @@ static NTSTATUS aixjfs2_set_nt_acl_common(vfs_handle_struct *handle, files_struc
        if (rc==0)
        {
                result = smb_set_nt_acl_nfs4(handle,
-                       fsp, security_info_sent, psd,
+                       fsp, NULL, security_info_sent, psd,
                        aixjfs2_process_smbacl);
        } else if (rc==1) { /* assume POSIX ACL - by default... */
                result = set_nt_acl(fsp, security_info_sent, psd);
@@ -444,23 +462,25 @@ static NTSTATUS aixjfs2_set_nt_acl_common(vfs_handle_struct *handle, files_struc
        return result;
 }
 
-NTSTATUS aixjfs2_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, uint32 security_info_sent, const struct security_descriptor *psd)
+NTSTATUS aixjfs2_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, uint32_t security_info_sent, const struct security_descriptor *psd)
 {
        return aixjfs2_set_nt_acl_common(handle, fsp, security_info_sent, psd);
 }
 
 int aixjfs2_sys_acl_set_file(vfs_handle_struct *handle,
-                             const char *name,
-                             SMB_ACL_TYPE_T type,
-                             SMB_ACL_T theacl)
+                               const struct smb_filename *smb_fname,
+                               SMB_ACL_TYPE_T type,
+                               SMB_ACL_T theacl)
 {
        struct acl      *acl_aixc;
        acl_type_t      acl_type_info;
        int     rc;
 
-       DEBUG(10, ("aixjfs2_sys_acl_set_file invoked for %s", name));
+       DEBUG(10, ("aixjfs2_sys_acl_set_file invoked for %s",
+                  smb_fname->base_name));
 
-       rc = aixjfs2_query_acl_support((char *)name, ACL_AIXC, &acl_type_info);
+       rc = aixjfs2_query_acl_support((char *)smb_fname->base_name,
+                       ACL_AIXC, &acl_type_info);
        if (rc) {
                DEBUG(8, ("jfs2_set_nt_acl: AIXC support not found\n"));
                return -1;
@@ -471,7 +491,7 @@ int aixjfs2_sys_acl_set_file(vfs_handle_struct *handle,
                return -1;
 
        rc = aclx_put(
-               (char *)name,
+               (char *)smb_fname->base_name,
                SET_ACL, /* set only the ACL, not mode bits */
                acl_type_info,
                acl_aixc,
@@ -480,7 +500,7 @@ int aixjfs2_sys_acl_set_file(vfs_handle_struct *handle,
        );
        if (rc) {
                DEBUG(2, ("aclx_put failed with %s for %s\n",
-                       strerror(errno), name));
+                       strerror(errno), smb_fname->base_name));
                return -1;
        }
 
@@ -526,7 +546,7 @@ int aixjfs2_sys_acl_set_fd(vfs_handle_struct *handle,
 }
 
 int aixjfs2_sys_acl_delete_def_file(vfs_handle_struct *handle,
-                                    const char *path)
+                               const struct smb_filename *smb_fname)
 {
        /* Not available under AIXC ACL */
        /* Don't report here any error otherwise */
@@ -547,8 +567,8 @@ static struct vfs_fn_pointers vfs_aixacl2_fns = {
        .sys_acl_delete_def_file_fn = aixjfs2_sys_acl_delete_def_file
 };
 
-NTSTATUS vfs_aixacl2_init(void);
-NTSTATUS vfs_aixacl2_init(void)
+static_decl_vfs;
+NTSTATUS vfs_aixacl2_init(TALLOC_CTX *ctx)
 {
         return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, AIXACL2_MODULE_NAME,
                                &vfs_aixacl2_fns);