diff options
author | Volker Lendecke <vl@samba.org> | 2009-04-15 13:01:09 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2009-04-20 14:05:13 +0200 |
commit | b5b6ecb58aeba196c28370cde21a0826f81d8da6 (patch) | |
tree | 5687d2877f764391f899d9bc0508fcf9d6deb1df | |
parent | 5cbd7556c23c4dddc96f19b6977d57b8e3f551d7 (diff) | |
download | samba-b5b6ecb58aeba196c28370cde21a0826f81d8da6.tar.gz samba-b5b6ecb58aeba196c28370cde21a0826f81d8da6.tar.bz2 samba-b5b6ecb58aeba196c28370cde21a0826f81d8da6.zip |
Do not use the file system GET_REAL_FILENAME for mangled names
-rw-r--r-- | source3/smbd/filename.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index 80722a7cd0..e35f23ef37 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -33,6 +33,9 @@ static NTSTATUS build_stream_path(TALLOC_CTX *mem_ctx, const char *streamname, SMB_STRUCT_STAT *pst, char **path); +static int get_real_filename_mangled(connection_struct *conn, const char *path, + const char *name, TALLOC_CTX *mem_ctx, + char **found_name); /**************************************************************************** Mangle the 2nd name and check if it is then equal to the first name. @@ -447,7 +450,7 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx, */ if (name_has_wildcard || - (SMB_VFS_GET_REAL_FILENAME( + (get_real_filename_mangled( conn, dirpath, start, talloc_tos(), &found_name) == -1)) { char *unmangled; @@ -789,15 +792,12 @@ static bool fname_equal(const char *name1, const char *name2, If the name looks like a mangled name then try via the mangling functions ****************************************************************************/ -int get_real_filename(connection_struct *conn, const char *path, - const char *name, TALLOC_CTX *mem_ctx, - char **found_name) +static int get_real_filename_mangled(connection_struct *conn, const char *path, + const char *name, 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); @@ -838,8 +838,24 @@ int get_real_filename(connection_struct *conn, const char *path, /* Name is now unmangled. */ name = unmangled_name; } + return get_real_filename(conn, path, name, mem_ctx, + found_name); } + return SMB_VFS_GET_REAL_FILENAME(conn, path, name, mem_ctx, + found_name); +} + +int get_real_filename(connection_struct *conn, const char *path, + const char *name, TALLOC_CTX *mem_ctx, + char **found_name) +{ + struct smb_Dir *cur_dir; + const char *dname; + bool mangled; + char *unmangled_name = NULL; + long curpos; + /* open the directory */ if (!(cur_dir = OpenDir(talloc_tos(), conn, path, NULL, 0))) { DEBUG(3,("scan dir didn't open dir [%s]\n",path)); |