s4:kdc: Implement KDC plugin hardware authentication policy
[samba.git] / source3 / modules / vfs_aixacl2.c
index a2a04768592c64dd2d6e233fcbc2febc4bc86b87..923b54fc9c20f2d859afaa009d3b37ca77490b0c 100644 (file)
@@ -179,65 +179,12 @@ static NTSTATUS aixjfs2_fget_nt_acl(vfs_handle_struct *handle,
                return NT_STATUS_ACCESS_DENIED;
        }
 
-       status = smb_fget_nt_acl_nfs4(fsp, NULL, security_info, ppdesc,
-                                     mem_ctx, pacl);
+       status = smb_fget_nt_acl_nfs4(
+               fsp, NULL, security_info, mem_ctx, ppdesc, pacl);
        TALLOC_FREE(frame);
        return status;
 }
 
-static NTSTATUS aixjfs2_get_nt_acl(vfs_handle_struct *handle,
-       const struct smb_filename *smb_fname,
-       uint32_t security_info,
-       TALLOC_CTX *mem_ctx,
-       struct security_descriptor **ppdesc)
-{
-       struct SMB4ACL_T *pacl = NULL;
-       bool    result;
-       bool    retryPosix = False;
-
-       *ppdesc = NULL;
-       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,
-                               smb_fname,
-                               security_info,
-                               mem_ctx,
-                               ppdesc);
-       }
-       if (result==False)
-               return NT_STATUS_ACCESS_DENIED;
-
-       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)
-{
-       struct SMB4ACL_T *pacl = NULL;
-       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,
-                                                  blob_description, blob);
-       }
-       /* Now way to linarlise NFS4 ACLs at the moment, but the NT ACL is pretty close in this case */
-       errno = ENOSYS;
-       return -1;
-}
-
 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)
 {
        struct SMB4ACL_T *pacl = NULL;
@@ -290,10 +237,10 @@ static SMB_ACL_T aixjfs2_get_posix_acl(const char *path, acl_type_t type, TALLOC
         return result;
 }
 
-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)
+SMB_ACL_T aixjfs2_sys_acl_get_fd(vfs_handle_struct *handle,
+                                files_struct *fsp,
+                                SMB_ACL_TYPE_T type,
+                                TALLOC_CTX *mem_ctx)
 {
         acl_type_t aixjfs2_type;
 
@@ -309,15 +256,6 @@ 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);
-}
-
-SMB_ACL_T aixjfs2_sys_acl_get_fd(vfs_handle_struct *handle,
-                                files_struct *fsp, TALLOC_CTX *mem_ctx)
-{
-        acl_type_t aixjfs2_type;
-        aixjfs2_type.u64 = ACL_AIXC;
-
        return aixjfs2_get_posix_acl(fsp->fsp_name->base_name,
                                     aixjfs2_type, mem_ctx);
 }
@@ -396,7 +334,7 @@ static bool aixjfs2_process_smbacl(vfs_handle_struct *handle,
 
                memset(jfs2_ace, 0, entryLen);
                jfs2_ace->entryLen = entryLen; /* won't store textual "who" */
-               jfs2_ace->aceType = aceprop->aceType; /* only ACCES|DENY supported by jfs2 */
+               jfs2_ace->aceType = aceprop->aceType; /* only ACCESS|DENY supported by jfs2 */
                jfs2_ace->aceFlags = aceprop->aceFlags;
                jfs2_ace->aceMask = aceprop->aceMask;
                jfs2_ace->flags = (aceprop->flags&SMB_ACE4_ID_SPECIAL) ? ACE4_ID_SPECIAL : 0;
@@ -446,7 +384,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);
@@ -461,53 +399,16 @@ NTSTATUS aixjfs2_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp, uint3
        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)
-{
-       struct acl      *acl_aixc;
-       acl_type_t      acl_type_info;
-       int     rc;
-
-       DEBUG(10, ("aixjfs2_sys_acl_set_file invoked for %s", name));
-
-       rc = aixjfs2_query_acl_support((char *)name, ACL_AIXC, &acl_type_info);
-       if (rc) {
-               DEBUG(8, ("jfs2_set_nt_acl: AIXC support not found\n"));
-               return -1;
-       }
-
-       acl_aixc = aixacl_smb_to_aixacl(type, theacl);
-       if (!acl_aixc)
-               return -1;
-
-       rc = aclx_put(
-               (char *)name,
-               SET_ACL, /* set only the ACL, not mode bits */
-               acl_type_info,
-               acl_aixc,
-               acl_aixc->acl_len,
-               0
-       );
-       if (rc) {
-               DEBUG(2, ("aclx_put failed with %s for %s\n",
-                       strerror(errno), name));
-               return -1;
-       }
-
-       return 0;
-}
-
 int aixjfs2_sys_acl_set_fd(vfs_handle_struct *handle,
                            files_struct *fsp,
+                           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_fd invoked for %s", fsp_str_dbg(fsp)));
+       DEBUG(10, ("aixjfs2_sys_acl_set_fd invoked for %s\n", fsp_str_dbg(fsp)));
 
        rc = aixjfs2_query_acl_support(fsp->fsp_name->base_name, ACL_AIXC,
                                       &acl_type_info);
@@ -516,12 +417,24 @@ int aixjfs2_sys_acl_set_fd(vfs_handle_struct *handle,
                return -1;
        }
 
-       acl_aixc = aixacl_smb_to_aixacl(SMB_ACL_TYPE_ACCESS, theacl);
+       acl_aixc = aixacl_smb_to_aixacl(type, theacl);
        if (!acl_aixc)
                return -1;
 
+       if (fsp->fsp_flags.is_pathref) {
+               /*
+                * This is no longer a handle based call.
+                */
+               return aclx_put(fsp->fsp_name->base_name,
+                               SET_ACL,
+                               acl_type_info,
+                               acl_aixc,
+                               acl_aixc->acl_len,
+                               0);
+       }
+
        rc = aclx_fput(
-               fsp->fh->fd,
+               fsp_get_io_fd(fsp),
                SET_ACL, /* set only the ACL, not mode bits */
                acl_type_info,
                acl_aixc,
@@ -537,8 +450,8 @@ int aixjfs2_sys_acl_set_fd(vfs_handle_struct *handle,
        return 0;
 }
 
-int aixjfs2_sys_acl_delete_def_file(vfs_handle_struct *handle,
-                                    const char *path)
+int aixjfs2_sys_acl_delete_def_fd(vfs_handle_struct *handle,
+                               files_struct *fsp)
 {
        /* Not available under AIXC ACL */
        /* Don't report here any error otherwise */
@@ -547,20 +460,20 @@ int aixjfs2_sys_acl_delete_def_file(vfs_handle_struct *handle,
 }
 
 static struct vfs_fn_pointers vfs_aixacl2_fns = {
+       .stat_fn = nfs4_acl_stat,
+       .fstat_fn = nfs4_acl_fstat,
+       .lstat_fn = nfs4_acl_lstat,
+       .fstatat_fn = nfs4_acl_fstatat,
        .fget_nt_acl_fn = aixjfs2_fget_nt_acl,
-       .get_nt_acl_fn = aixjfs2_get_nt_acl,
        .fset_nt_acl_fn = aixjfs2_fset_nt_acl,
-       .sys_acl_get_file_fn = aixjfs2_sys_acl_get_file,
        .sys_acl_get_fd_fn = aixjfs2_sys_acl_get_fd,
-       .sys_acl_blob_get_file_fn = aixjfs2_sys_acl_blob_get_file,
        .sys_acl_blob_get_fd_fn = aixjfs2_sys_acl_blob_get_fd,
-       .sys_acl_set_file_fn = aixjfs2_sys_acl_set_file,
        .sys_acl_set_fd_fn = aixjfs2_sys_acl_set_fd,
-       .sys_acl_delete_def_file_fn = aixjfs2_sys_acl_delete_def_file
+       .sys_acl_delete_def_fd_fn = aixjfs2_sys_acl_delete_def_fd
 };
 
-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);