summaryrefslogtreecommitdiff
path: root/source3/smbwrapper/smbw_dir.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1998-10-06 10:24:22 +0000
committerAndrew Tridgell <tridge@samba.org>1998-10-06 10:24:22 +0000
commited75bab8e22c1cbebe0238a689f7994f3817ee8f (patch)
tree5efa137d65ae8c31dd9482110a0422bc610f98f8 /source3/smbwrapper/smbw_dir.c
parent3d21f0359590050145fd877a7ec3efc56975d3bd (diff)
downloadsamba-ed75bab8e22c1cbebe0238a689f7994f3817ee8f.tar.gz
samba-ed75bab8e22c1cbebe0238a689f7994f3817ee8f.tar.bz2
samba-ed75bab8e22c1cbebe0238a689f7994f3817ee8f.zip
added SMBW_PREFIX environment variable (allowing you to specify root
of smb filesystem) fixed "cd /smb" bug updated README with full list of environment variables. (This used to be commit 71acf338d721b106af8d80e7b3a6f318ab75da8b)
Diffstat (limited to 'source3/smbwrapper/smbw_dir.c')
-rw-r--r--source3/smbwrapper/smbw_dir.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/source3/smbwrapper/smbw_dir.c b/source3/smbwrapper/smbw_dir.c
index c21c9b4983..5223183d56 100644
--- a/source3/smbwrapper/smbw_dir.c
+++ b/source3/smbwrapper/smbw_dir.c
@@ -22,7 +22,8 @@
#include "includes.h"
#include "wrapper.h"
-extern pstring smb_cwd;
+extern pstring smbw_cwd;
+extern fstring smbw_prefix;
static struct smbw_dir *smbw_dirs;
@@ -350,9 +351,12 @@ int smbw_chdir(const char *name)
pstring path;
uint32 mode = aDIR;
char *cwd;
+ int len;
smbw_init();
+ len = strlen(smbw_prefix);
+
if (smbw_busy) return real_chdir(name);
smbw_busy++;
@@ -362,16 +366,19 @@ int smbw_chdir(const char *name)
goto failed;
}
+ DEBUG(4,("smbw_chdir(%s)\n", name));
+
/* work out what server they are after */
cwd = smbw_parse_path(name, server, share, path);
- if (strncmp(cwd,SMBW_PREFIX,strlen(SMBW_PREFIX))) {
+ /* a special case - accept cd to /smb */
+ if (strncmp(cwd, smbw_prefix, len-1) == 0 &&
+ cwd[len-1] == 0) {
+ goto success;
+ }
+
+ if (strncmp(cwd,smbw_prefix,strlen(smbw_prefix))) {
if (real_chdir(cwd) == 0) {
- DEBUG(4,("set SMBW_CWD to %s\n", cwd));
- pstrcpy(smb_cwd, cwd);
- if (setenv(SMBW_PWD_ENV, smb_cwd, 1)) {
- DEBUG(4,("setenv failed\n"));
- }
goto success;
}
errno = ENOENT;
@@ -398,16 +405,18 @@ int smbw_chdir(const char *name)
goto failed;
}
- DEBUG(4,("set SMBW_CWD2 to %s\n", cwd));
- pstrcpy(smb_cwd, cwd);
- if (setenv(SMBW_PWD_ENV, smb_cwd, 1)) {
+ success:
+
+ DEBUG(4,("set SMBW_CWD to %s\n", cwd));
+
+ pstrcpy(smbw_cwd, cwd);
+ if (setenv(SMBW_PWD_ENV, smbw_cwd, 1)) {
DEBUG(4,("setenv failed\n"));
}
/* we don't want the old directory to be busy */
real_chdir("/");
- success:
smbw_busy--;
return 0;
@@ -549,7 +558,7 @@ char *smbw_getcwd(char *buf, size_t size)
smbw_busy++;
if (!buf) {
- if (size <= 0) size = strlen(smb_cwd)+1;
+ if (size <= 0) size = strlen(smbw_cwd)+1;
buf = (char *)malloc(size);
if (!buf) {
errno = ENOMEM;
@@ -558,13 +567,13 @@ char *smbw_getcwd(char *buf, size_t size)
}
}
- if (strlen(smb_cwd) > size-1) {
+ if (strlen(smbw_cwd) > size-1) {
errno = ERANGE;
smbw_busy--;
return NULL;
}
- safe_strcpy(buf, smb_cwd, size);
+ safe_strcpy(buf, smbw_cwd, size);
smbw_busy--;
return buf;