diff options
Diffstat (limited to 'source3/smbd/vfs.c')
-rw-r--r-- | source3/smbd/vfs.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index 7df51cff95..d4e9f02a69 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -707,7 +707,26 @@ const char *vfs_readdirname(connection_struct *conn, void *p, int vfs_ChDir(connection_struct *conn, const char *path) { - return SMB_VFS_CHDIR(conn,path); + int res; + + if (!LastDir) { + LastDir = SMB_STRDUP(""); + } + + if (strcsequal(path,".")) + return(0); + + if (*path == '/' && strcsequal(LastDir,path)) + return(0); + + DEBUG(4,("vfs_ChDir to %s\n",path)); + + res = SMB_VFS_CHDIR(conn,path); + if (!res) { + SAFE_FREE(LastDir); + LastDir = SMB_STRDUP(path); + } + return(res); } /******************************************************************* |