test: Intercept open in vfs_error_inject
authorVolker Lendecke <vl@samba.org>
Wed, 19 Feb 2020 13:44:11 +0000 (14:44 +0100)
committerKarolin Seeger <kseeger@samba.org>
Tue, 25 Feb 2020 19:32:28 +0000 (19:32 +0000)
Bug: https://bugzilla.samba.org/show_bug.cgi?id=14285
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
(cherry picked from commit 305204a241b74c599f4f6a064cac6608afd9c893)

source3/modules/vfs_error_inject.c

index c8c3ea4701ffca30882d202421c7fc73629ee09c..c7a99370b2a5ce3ccb08fe99283551fa75645034 100644 (file)
@@ -29,6 +29,7 @@ struct unix_error_map {
 } unix_error_map_array[] = {
        {       "ESTALE",       ESTALE  },
        {       "EBADF",        EBADF   },
+       {       "EINTR",        EINTR   },
 };
 
 static int find_unix_error_from_string(const char *err_str)
@@ -106,9 +107,25 @@ static ssize_t vfs_error_inject_pwrite(vfs_handle_struct *handle,
        return SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
 }
 
+static int vfs_error_inject_open(
+       struct vfs_handle_struct *handle,
+       struct smb_filename *smb_fname,
+       files_struct *fsp,
+       int flags,
+       mode_t mode)
+{
+       int error = inject_unix_error("open", handle);
+       if (error != 0) {
+               errno = error;
+               return -1;
+       }
+       return SMB_VFS_NEXT_OPEN(handle, smb_fname, fsp, flags, mode);
+}
+
 static struct vfs_fn_pointers vfs_error_inject_fns = {
        .chdir_fn = vfs_error_inject_chdir,
        .pwrite_fn = vfs_error_inject_pwrite,
+       .open_fn = vfs_error_inject_open,
 };
 
 static_decl_vfs;