diff options
-rw-r--r-- | source3/smbd/filename.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index 774ab27a74..0d5529b6b0 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -791,16 +791,14 @@ static bool fname_equal(const char *name1, const char *name2, static int get_real_filename_full_scan(connection_struct *conn, const char *path, const char *name, + bool mangled, TALLOC_CTX *mem_ctx, char **found_name) { struct smb_Dir *cur_dir; const char *dname; - bool mangled; char *unmangled_name = NULL; long curpos; - mangled = mangle_is_mangled(name, conn->params); - /* handle null paths */ if ((path == NULL) || (*path == 0)) { path = "."; @@ -897,6 +895,14 @@ int get_real_filename(connection_struct *conn, const char *path, char **found_name) { int ret; + bool mangled; + + mangled = mangle_is_mangled(name, conn->params); + + if (mangled) { + return get_real_filename_full_scan(conn, path, name, mangled, + mem_ctx, found_name); + } /* Try the vfs first to take advantage of case-insensitive stat. */ ret = SMB_VFS_GET_REAL_FILENAME(conn, path, name, mem_ctx, found_name); @@ -910,9 +916,8 @@ int get_real_filename(connection_struct *conn, const char *path, return ret; } - ret = get_real_filename_full_scan(conn, path, name, mem_ctx, - found_name); - return ret; + return get_real_filename_full_scan(conn, path, name, mangled, mem_ctx, + found_name); } static NTSTATUS build_stream_path(TALLOC_CTX *mem_ctx, |