return status;
}
+static int um_readlinkat(vfs_handle_struct *handle,
+ files_struct *dirfsp,
+ const struct smb_filename *smb_fname,
+ char *buf,
+ size_t bufsiz)
+{
+ int status;
+ struct smb_filename *client_fname = NULL;
+
+ DEBUG(10, ("Entering um_readlinkat\n"));
+
+ if (!is_in_media_files(smb_fname->base_name)) {
+ return SMB_VFS_NEXT_READLINKAT(handle,
+ dirfsp,
+ smb_fname,
+ buf,
+ bufsiz);
+ }
+
+ status = alloc_get_client_smb_fname(handle, talloc_tos(),
+ smb_fname, &client_fname);
+ if (status != 0) {
+ goto err;
+ }
+
+ status = SMB_VFS_NEXT_READLINKAT(handle,
+ dirfsp,
+ client_fname,
+ buf,
+ bufsiz);
+
+err:
+ TALLOC_FREE(client_fname);
+ return status;
+}
+
static int um_linkat(vfs_handle_struct *handle,
files_struct *srcfsp,
const struct smb_filename *old_smb_fname,
.ntimes_fn = um_ntimes,
.symlink_fn = um_symlink,
.readlink_fn = um_readlink,
+ .readlinkat_fn = um_readlinkat,
.linkat_fn = um_linkat,
.mknodat_fn = um_mknodat,
.realpath_fn = um_realpath,