diff options
author | Andrew Tridgell <tridge@samba.org> | 1998-10-06 10:24:22 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 1998-10-06 10:24:22 +0000 |
commit | ed75bab8e22c1cbebe0238a689f7994f3817ee8f (patch) | |
tree | 5efa137d65ae8c31dd9482110a0422bc610f98f8 /source3/smbwrapper/smbw.c | |
parent | 3d21f0359590050145fd877a7ec3efc56975d3bd (diff) | |
download | samba-ed75bab8e22c1cbebe0238a689f7994f3817ee8f.tar.gz samba-ed75bab8e22c1cbebe0238a689f7994f3817ee8f.tar.xz 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.c')
-rw-r--r-- | source3/smbwrapper/smbw.c | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/source3/smbwrapper/smbw.c b/source3/smbwrapper/smbw.c index 93bbc078eaf..d6b377a0b50 100644 --- a/source3/smbwrapper/smbw.c +++ b/source3/smbwrapper/smbw.c @@ -22,7 +22,7 @@ #include "includes.h" #include "wrapper.h" -pstring smb_cwd; +pstring smbw_cwd; static struct smbw_file *smbw_files; static struct smbw_server *smbw_srvs; @@ -31,6 +31,8 @@ struct bitmap *smbw_file_bmap; extern pstring global_myname; extern int DEBUGLEVEL; +fstring smbw_prefix = SMBW_PREFIX; + int smbw_busy=0; /***************************************************** @@ -77,12 +79,18 @@ void smbw_init(void) DEBUGLEVEL = atoi(p); } + if ((p=getenv("SMBW_PREFIX"))) { + slprintf(smbw_prefix,sizeof(fstring)-1, "/%s/", p); + string_sub(smbw_prefix,"//", "/"); + DEBUG(2,("SMBW_PREFIX is %s\n", smbw_prefix)); + } + if ((p=getenv(SMBW_PWD_ENV))) { - pstrcpy(smb_cwd, p); - DEBUG(4,("Initial cwd from smb_cwd is %s\n", smb_cwd)); + pstrcpy(smbw_cwd, p); + DEBUG(4,("Initial cwd from smbw_cwd is %s\n", smbw_cwd)); } else { - sys_getwd(smb_cwd); - DEBUG(4,("Initial cwd from getwd is %s\n", smb_cwd)); + sys_getwd(smbw_cwd); + DEBUG(4,("Initial cwd from getwd is %s\n", smbw_cwd)); } smbw_busy--; @@ -207,21 +215,21 @@ char *smbw_parse_path(const char *fname, char *server, char *share, char *path) { static pstring s; char *p, *p2; - int len = strlen(SMBW_PREFIX)-1; + int len = strlen(smbw_prefix)-1; *server = *share = *path = 0; if (fname[0] == '/') { pstrcpy(s, fname); } else { - slprintf(s,sizeof(s)-1, "%s/%s", smb_cwd, fname); + slprintf(s,sizeof(s)-1, "%s/%s", smbw_cwd, fname); } clean_fname(s); DEBUG(5,("cleaned %s (fname=%s cwd=%s)\n", - s, fname, smb_cwd)); + s, fname, smbw_cwd)); - if (strncmp(s,SMBW_PREFIX,len) || + if (strncmp(s,smbw_prefix,len) || (s[len] != '/' && s[len] != 0)) return s; p = s + len; @@ -278,7 +286,7 @@ char *smbw_parse_path(const char *fname, char *server, char *share, char *path) ok: DEBUG(5,("parsed path name=%s cwd=%s [%s] [%s] [%s]\n", - fname, smb_cwd, + fname, smbw_cwd, server, share, path)); return s; @@ -293,22 +301,24 @@ int smbw_path(const char *path) fstring server, share; pstring s; char *cwd; - int l=strlen(SMBW_PREFIX)-1; + int len; + + smbw_init(); + + len = strlen(smbw_prefix)-1; - if (path[0] == '/' && strncmp(path,SMBW_PREFIX,l)) { + if (path[0] == '/' && strncmp(path,smbw_prefix,len)) { return 0; } if (smbw_busy) return 0; - smbw_init(); - DEBUG(3,("smbw_path(%s)\n", path)); cwd = smbw_parse_path(path, server, share, s); - if (strncmp(cwd,SMBW_PREFIX,l) == 0 && - (cwd[l] == '/' || cwd[l] == 0)) { + if (strncmp(cwd,smbw_prefix,len) == 0 && + (cwd[len] == '/' || cwd[len] == 0)) { return 1; } |