diff options
Diffstat (limited to 'source3/smbd/vfs.c')
-rw-r--r-- | source3/smbd/vfs.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index 7d194404f4..fe99ee29e9 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -801,14 +801,27 @@ int vfs_ChDir(connection_struct *conn, const char *path) { int ret; + 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)); ret = SMB_VFS_CHDIR(conn,path); if (ret == 0) { + /* Global cache. */ + SAFE_FREE(LastDir); + LastDir = SMB_STRDUP(path); + + /* conn cache. */ TALLOC_FREE(conn->cwd); conn->cwd = vfs_GetWd(conn, conn); DEBUG(4,("vfs_ChDir got %s\n",conn->cwd)); |