]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
vfs: xattr calls give EBADF for sockets
authorVolker Lendecke <vl@samba.org>
Mon, 8 Jul 2024 17:37:01 +0000 (19:37 +0200)
committerJeremy Allison <jra@samba.org>
Fri, 12 Jul 2024 20:35:34 +0000 (20:35 +0000)
This is required for make test with disabled O_PATH

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/modules/vfs_fake_acls.c

index fefe6c5483e388ab802a02dee8d7db90fb9a88dd..69cae8ce21dd4b84876d24fa096771d9c137d713 100644 (file)
@@ -47,7 +47,7 @@ static int fake_acls_fuid(vfs_handle_struct *handle,
        uint8_t uid_buf[4];
 
        size = SMB_VFS_NEXT_FGETXATTR(handle, fsp, FAKE_UID, uid_buf, sizeof(uid_buf));
-       if (size == -1 && errno == ENOATTR) {
+       if (size == -1 && ((errno == ENOATTR) || (errno == EBADF))) {
                return 0;
        }
        if (size != 4) {
@@ -65,7 +65,7 @@ static int fake_acls_fgid(vfs_handle_struct *handle,
        uint8_t gid_buf[4];
 
        size = SMB_VFS_NEXT_FGETXATTR(handle, fsp, FAKE_GID, gid_buf, sizeof(gid_buf));
-       if (size == -1 && errno == ENOATTR) {
+       if (size == -1 && ((errno == ENOATTR) || (errno == EBADF))) {
                return 0;
        }
        if (size != 4) {
@@ -335,7 +335,7 @@ static SMB_ACL_T fake_acls_sys_acl_get_fd(struct vfs_handle_struct *handle,
                length = SMB_VFS_NEXT_FGETXATTR(handle, fsp, name, blob.data, blob.length);
                blob.length = length;
        } while (length == -1 && errno == ERANGE);
-       if (length == -1 && errno == ENOATTR) {
+       if (length == -1 && ((errno == ENOATTR) || (errno == EBADF))) {
                TALLOC_FREE(frame);
                return NULL;
        }
@@ -391,7 +391,7 @@ static int fake_acls_sys_acl_delete_def_fd(vfs_handle_struct *handle,
        }
 
        ret = SMB_VFS_NEXT_FREMOVEXATTR(handle, fsp, name);
-       if (ret == -1 && errno == ENOATTR) {
+       if (ret == -1 && ((errno == ENOATTR) || (errno == EBADF))) {
                ret = 0;
                errno = 0;
        }
@@ -628,7 +628,7 @@ static int fake_acls_fchmod(vfs_handle_struct *handle,
                                talloc_tos());
        if (the_acl == NULL) {
                TALLOC_FREE(frame);
-               if (errno == ENOATTR) {
+               if (((errno == ENOATTR) || (errno == EBADF))) {
                        /* No ACL on this file. Just passthrough. */
                        return 0;
                }