diff options
Diffstat (limited to 'source3/smbd/vfs.c')
-rw-r--r-- | source3/smbd/vfs.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index 5425c55198..42ff8b19cd 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -662,7 +662,8 @@ SMB_OFF_T vfs_transfer_file(files_struct *in, files_struct *out, SMB_OFF_T n) char *vfs_readdirname(connection_struct *conn, void *p, SMB_STRUCT_STAT *sbuf) { SMB_STRUCT_DIRENT *ptr= NULL; - char *dname; + char *dname = NULL; + NTSTATUS result; if (!p) return(NULL); @@ -671,7 +672,16 @@ char *vfs_readdirname(connection_struct *conn, void *p, SMB_STRUCT_STAT *sbuf) if (!ptr) return(NULL); - dname = ptr->d_name; + dname = talloc_strdup(talloc_tos(), ptr->d_name); + if (dname == NULL) { + errno = ENOMEM; + return NULL; + } + result = SMB_VFS_TRANSLATE_NAME(conn, &dname); + if (!NT_STATUS_IS_OK(result)) { + TALLOC_FREE(dname); + return NULL; + } #ifdef NEXT2 if (telldir(p) < 0) @@ -1495,6 +1505,13 @@ void smb_vfs_call_strict_unlock(struct vfs_handle_struct *handle, handle->fns->strict_unlock(handle, fsp, plock); } +NTSTATUS smb_vfs_call_translate_name(struct vfs_handle_struct *handle, + char **mapped_name) +{ + VFS_FIND(translate_name); + return handle->fns->translate_name(handle, mapped_name); +} + NTSTATUS smb_vfs_call_fget_nt_acl(struct vfs_handle_struct *handle, struct files_struct *fsp, uint32 security_info, |