summaryrefslogtreecommitdiff
path: root/source3/smbd/vfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/smbd/vfs.c')
-rw-r--r--source3/smbd/vfs.c13
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));