--- ./source3/modules/vfs_aixacl.c_orig	2022-09-23 17:06:12 +0000
+++ ./source3/modules/vfs_aixacl.c	2022-09-23 18:17:54 +0000
@@ -53,22 +53,41 @@
 
 	memset(file_acl,0,BUFSIZ);
 
-	rc = fstatacl(fsp_get_io_fd(fsp),0,file_acl,BUFSIZ);
-	if( (rc == -1) && (errno == ENOSPC)) {
-		struct acl *new_acl = SMB_MALLOC(file_acl->acl_len + sizeof(struct acl));
-		if( new_acl == NULL) {
-			SAFE_FREE(file_acl);
-			errno = ENOMEM;
-			return NULL;
-		}
-		file_acl = new_acl;
-		rc = fstatacl(fsp_get_io_fd(fsp),0,file_acl,file_acl->acl_len + sizeof(struct acl));
-		if( rc == -1) {
-			DEBUG(0,("fstatacl returned %d with errno %d\n",rc,errno));
-			SAFE_FREE(file_acl);
-			return(NULL);
-		}
-	}
+        if (fsp->fsp_flags.is_pathref) {
+                rc = statacl(fsp->fsp_name->base_name,0,file_acl,BUFSIZ);
+                if( (rc == -1) && (errno == ENOSPC)) {
+                        struct acl *new_acl = SMB_MALLOC(file_acl->acl_len + sizeof(struct acl));
+                        if( new_acl == NULL) {
+                                SAFE_FREE(file_acl);
+                                errno = ENOMEM;
+                                return NULL;
+                        }
+                        file_acl = new_acl;
+                        rc = statacl(fsp->fsp_name->base_name,0,file_acl,file_acl->acl_len + sizeof(struct acl));
+                        if( rc == -1) {
+                                DEBUG(0,("statacl returned %d with errno %d\n",rc,errno));
+                                SAFE_FREE(file_acl);
+                                return(NULL);
+                        }
+                }
+        } else {
+	        rc = fstatacl(fsp_get_io_fd(fsp),0,file_acl,BUFSIZ);
+	        if( (rc == -1) && (errno == ENOSPC)) {
+		        struct acl *new_acl = SMB_MALLOC(file_acl->acl_len + sizeof(struct acl));
+		        if( new_acl == NULL) {
+			        SAFE_FREE(file_acl);
+			        errno = ENOMEM;
+			        return NULL;
+		        }
+		        file_acl = new_acl;
+		        rc = fstatacl(fsp_get_io_fd(fsp),0,file_acl,file_acl->acl_len + sizeof(struct acl));
+		        if( rc == -1) {
+			        DEBUG(0,("fstatacl returned %d with errno %d\n",rc,errno));
+			        SAFE_FREE(file_acl);
+			        return(NULL);
+		        }
+	        }
+        }
 
 	DEBUG(10,("Got facl and returned it\n"));
 
