summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/smbwrapper/smbw.c7
-rw-r--r--source3/smbwrapper/smbw_dir.c14
2 files changed, 12 insertions, 9 deletions
diff --git a/source3/smbwrapper/smbw.c b/source3/smbwrapper/smbw.c
index ab2b807f6c..e5359360c3 100644
--- a/source3/smbwrapper/smbw.c
+++ b/source3/smbwrapper/smbw.c
@@ -955,8 +955,11 @@ static int smbw_settime(const char *fname, time_t t)
}
if (!cli_setatr(&srv->cli, path, mode, t)) {
- errno = smbw_errno(&srv->cli);
- goto failed;
+ /* some servers always refuse directory changes */
+ if (!(mode & aDIR)) {
+ errno = smbw_errno(&srv->cli);
+ goto failed;
+ }
}
smbw_busy--;
diff --git a/source3/smbwrapper/smbw_dir.c b/source3/smbwrapper/smbw_dir.c
index 5223183d56..a932c102dc 100644
--- a/source3/smbwrapper/smbw_dir.c
+++ b/source3/smbwrapper/smbw_dir.c
@@ -374,14 +374,13 @@ int smbw_chdir(const char *name)
/* a special case - accept cd to /smb */
if (strncmp(cwd, smbw_prefix, len-1) == 0 &&
cwd[len-1] == 0) {
- goto success;
+ goto success1;
}
if (strncmp(cwd,smbw_prefix,strlen(smbw_prefix))) {
if (real_chdir(cwd) == 0) {
- goto success;
+ goto success2;
}
- errno = ENOENT;
goto failed;
}
@@ -405,7 +404,11 @@ int smbw_chdir(const char *name)
goto failed;
}
- success:
+ success1:
+ /* we don't want the old directory to be busy */
+ real_chdir("/");
+
+ success2:
DEBUG(4,("set SMBW_CWD to %s\n", cwd));
@@ -414,9 +417,6 @@ int smbw_chdir(const char *name)
DEBUG(4,("setenv failed\n"));
}
- /* we don't want the old directory to be busy */
- real_chdir("/");
-
smbw_busy--;
return 0;