Not yet used. Eventually will replace SMB_VFS_SYS_ACL_DELETE_DEF_FILE().
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Noel Power <noel.power@suse.com>
return -1;
}
+static int skel_sys_acl_delete_def_fd(vfs_handle_struct *handle,
+ struct files_struct *fsp)
+{
+ errno = ENOSYS;
+ return -1;
+}
+
static ssize_t skel_getxattr(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *name,
.sys_acl_blob_get_fd_fn = skel_sys_acl_blob_get_fd,
.sys_acl_set_fd_fn = skel_sys_acl_set_fd,
.sys_acl_delete_def_file_fn = skel_sys_acl_delete_def_file,
+ .sys_acl_delete_def_fd_fn = skel_sys_acl_delete_def_fd,
/* EA operations. */
.getxattr_fn = skel_getxattr,
return SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FILE(handle, smb_fname);
}
+static int skel_sys_acl_delete_def_fd(vfs_handle_struct *handle,
+ struct files_struct *fsp)
+{
+ return SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FD(handle, fsp);
+}
+
static ssize_t skel_getxattr(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *name,
.sys_acl_blob_get_fd_fn = skel_sys_acl_blob_get_fd,
.sys_acl_set_fd_fn = skel_sys_acl_set_fd,
.sys_acl_delete_def_file_fn = skel_sys_acl_delete_def_file,
+ .sys_acl_delete_def_fd_fn = skel_sys_acl_delete_def_fd,
/* EA operations. */
.getxattr_fn = skel_getxattr,
* Version 45 - ADD SMB_VFS_FSTREAMINFO
* Version 45 - Add SMB_VFS_FREADDIR_ATTR
* Version 45 - Remove SMB_VFS_READDIR_ATTR
+ * Version 45 - Add SMB_VFS_SYS_ACL_DELETE_DEF_FD
*/
#define SMB_VFS_INTERFACE_VERSION 45
SMB_ACL_T theacl);
int (*sys_acl_delete_def_file_fn)(struct vfs_handle_struct *handle,
const struct smb_filename *smb_fname);
+ int (*sys_acl_delete_def_fd_fn)(struct vfs_handle_struct *handle,
+ struct files_struct *fsp);
/* EA operations. */
ssize_t (*getxattr_fn)(struct vfs_handle_struct *handle,
SMB_ACL_T theacl);
int smb_vfs_call_sys_acl_delete_def_file(struct vfs_handle_struct *handle,
const struct smb_filename *smb_fname);
+int smb_vfs_call_sys_acl_delete_def_fd(struct vfs_handle_struct *handle,
+ struct files_struct *fsp);
ssize_t smb_vfs_call_getxattr(struct vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *name,
SMB_ACL_T theacl);
int vfs_not_implemented_sys_acl_delete_def_file(vfs_handle_struct *handle,
const struct smb_filename *smb_fname);
+int vfs_not_implemented_sys_acl_delete_def_fd(vfs_handle_struct *handle,
+ files_struct *fsp);
ssize_t vfs_not_implemented_getxattr(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *name,
#define SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FILE(handle, smb_fname) \
smb_vfs_call_sys_acl_delete_def_file((handle)->next, (smb_fname))
+#define SMB_VFS_SYS_ACL_DELETE_DEF_FD(fsp) \
+ smb_vfs_call_sys_acl_delete_def_fd((fsp)->conn->vfs_handles, (fsp))
+#define SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FD(handle, fsp) \
+ smb_vfs_call_sys_acl_delete_def_fd((handle)->next, (fsp))
+
#define SMB_VFS_GETXATTR(conn,smb_fname,name,value,size) \
smb_vfs_call_getxattr((conn)->vfs_handles,(smb_fname),(name),(value),(size))
#define SMB_VFS_NEXT_GETXATTR(handle,smb_fname,name,value,size) \
return sys_acl_delete_def_file(handle, smb_fname);
}
+static int vfswrap_sys_acl_delete_def_fd(vfs_handle_struct *handle,
+ files_struct *fsp)
+{
+ /* Placeholder until we have sys_acl_delete_def_fd(). */
+#ifdef ENOTSUP
+ errno = ENOTSUP;
+#else
+ errno = ENOSYS;
+#endif
+ return -1;
+}
+
/****************************************************************
Extended attribute operations.
*****************************************************************/
.sys_acl_blob_get_fd_fn = posix_sys_acl_blob_get_fd,
.sys_acl_set_fd_fn = vfswrap_sys_acl_set_fd,
.sys_acl_delete_def_file_fn = vfswrap_sys_acl_delete_def_file,
+ .sys_acl_delete_def_fd_fn = vfswrap_sys_acl_delete_def_fd,
/* EA operations. */
.getxattr_fn = vfswrap_getxattr,
SMB_VFS_OP_SYS_ACL_BLOB_GET_FD,
SMB_VFS_OP_SYS_ACL_SET_FD,
SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE,
+ SMB_VFS_OP_SYS_ACL_DELETE_DEF_FD,
/* EA operations. */
SMB_VFS_OP_GETXATTR,
{ SMB_VFS_OP_SYS_ACL_BLOB_GET_FD, "sys_acl_blob_get_fd" },
{ SMB_VFS_OP_SYS_ACL_SET_FD, "sys_acl_set_fd" },
{ SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE, "sys_acl_delete_def_file" },
+ { SMB_VFS_OP_SYS_ACL_DELETE_DEF_FD, "sys_acl_delete_def_fd" },
{ SMB_VFS_OP_GETXATTR, "getxattr" },
{ SMB_VFS_OP_GETXATTRAT_SEND, "getxattrat_send" },
{ SMB_VFS_OP_GETXATTRAT_RECV, "getxattrat_recv" },
return result;
}
+static int smb_full_audit_sys_acl_delete_def_fd(vfs_handle_struct *handle,
+ struct files_struct *fsp)
+{
+ int result;
+
+ result = SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FD(handle, fsp);
+
+ do_log(SMB_VFS_OP_SYS_ACL_DELETE_DEF_FD,
+ (result >= 0),
+ handle,
+ "%s",
+ fsp_str_do_log(fsp));
+
+ return result;
+}
+
static ssize_t smb_full_audit_getxattr(struct vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *name, void *value, size_t size)
.sys_acl_blob_get_fd_fn = smb_full_audit_sys_acl_blob_get_fd,
.sys_acl_set_fd_fn = smb_full_audit_sys_acl_set_fd,
.sys_acl_delete_def_file_fn = smb_full_audit_sys_acl_delete_def_file,
+ .sys_acl_delete_def_fd_fn = smb_full_audit_sys_acl_delete_def_fd,
.getxattr_fn = smb_full_audit_getxattr,
.getxattrat_send_fn = smb_full_audit_getxattrat_send,
.getxattrat_recv_fn = smb_full_audit_getxattrat_recv,
return -1;
}
+int vfs_not_implemented_sys_acl_delete_def_fd(vfs_handle_struct *handle,
+ struct files_struct *fsp)
+{
+ errno = ENOSYS;
+ return -1;
+}
+
ssize_t vfs_not_implemented_getxattr(vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *name,
.sys_acl_blob_get_fd_fn = vfs_not_implemented_sys_acl_blob_get_fd,
.sys_acl_set_fd_fn = vfs_not_implemented_sys_acl_set_fd,
.sys_acl_delete_def_file_fn = vfs_not_implemented_sys_acl_delete_def_file,
+ .sys_acl_delete_def_fd_fn = vfs_not_implemented_sys_acl_delete_def_fd,
/* EA operations. */
.getxattr_fn = vfs_not_implemented_getxattr,
return result;
}
+static int smb_time_audit_sys_acl_delete_def_fd(vfs_handle_struct *handle,
+ files_struct *fsp)
+{
+ int result;
+ struct timespec ts1,ts2;
+ double timediff;
+
+ clock_gettime_mono(&ts1);
+ result = SMB_VFS_NEXT_SYS_ACL_DELETE_DEF_FD(handle, fsp);
+ clock_gettime_mono(&ts2);
+ timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
+
+ if (timediff > audit_timeout) {
+ smb_time_audit_log_fsp("sys_acl_delete_def_fd", timediff, fsp);
+ }
+
+ return result;
+}
+
static ssize_t smb_time_audit_getxattr(struct vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *name,
.sys_acl_blob_get_fd_fn = smb_time_audit_sys_acl_blob_get_fd,
.sys_acl_set_fd_fn = smb_time_audit_sys_acl_set_fd,
.sys_acl_delete_def_file_fn = smb_time_audit_sys_acl_delete_def_file,
+ .sys_acl_delete_def_fd_fn = smb_time_audit_sys_acl_delete_def_fd,
.getxattr_fn = smb_time_audit_getxattr,
.getxattrat_send_fn = smb_time_audit_getxattrat_send,
.getxattrat_recv_fn = smb_time_audit_getxattrat_recv,
return handle->fns->sys_acl_delete_def_file_fn(handle, smb_fname);
}
+int smb_vfs_call_sys_acl_delete_def_fd(struct vfs_handle_struct *handle,
+ struct files_struct *fsp)
+{
+ VFS_FIND(sys_acl_delete_def_fd);
+ return handle->fns->sys_acl_delete_def_fd_fn(handle, fsp);
+}
+
ssize_t smb_vfs_call_getxattr(struct vfs_handle_struct *handle,
const struct smb_filename *smb_fname,
const char *name,