diff options
author | Andrew Tridgell <tridge@samba.org> | 1998-10-23 01:27:23 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 1998-10-23 01:27:23 +0000 |
commit | 4eb7b5c6a81447755dfa1be27479027333ed6f26 (patch) | |
tree | 3f1791e4f060f341d86438acfea86f1df1c259d7 | |
parent | 636182f18346af457f905cd784e68ae5d4f75d0e (diff) | |
download | samba-4eb7b5c6a81447755dfa1be27479027333ed6f26.tar.gz |
fixed problems with PWD - we no longer use the PWD env variable
instead the shared variable area is used.
this fixes problems with /bin/sh under solaris
-rw-r--r-- | source/smbwrapper/smbsh.c | 8 | ||||
-rw-r--r-- | source/smbwrapper/smbw.c | 20 | ||||
-rw-r--r-- | source/smbwrapper/smbw.h | 2 |
3 files changed, 19 insertions, 11 deletions
diff --git a/source/smbwrapper/smbsh.c b/source/smbwrapper/smbsh.c index b677707741a..8c9d00bd981 100644 --- a/source/smbwrapper/smbsh.c +++ b/source/smbwrapper/smbsh.c @@ -37,7 +37,7 @@ int main(int argc, char *argv[]) { char *p, *u; char *libd = BINDIR; - pstring line; + pstring line, wd; int opt; extern char *optarg; extern int optind; @@ -91,9 +91,11 @@ int main(int argc, char *argv[]) smbw_setenv("PS1", "smbsh$ "); - sys_getwd(line); + sys_getwd(wd); - smbw_setenv("PWD", line); + slprintf(line,sizeof(line)-1,"PWD_%d", getpid()); + + smbw_setshared(line, wd); slprintf(line,sizeof(line)-1,"%s/smbwrapper.so", libd); smbw_setenv("LD_PRELOAD", line); diff --git a/source/smbwrapper/smbw.c b/source/smbwrapper/smbw.c index 23b5c9a9c7b..c09d7509f05 100644 --- a/source/smbwrapper/smbw.c +++ b/source/smbwrapper/smbw.c @@ -50,6 +50,7 @@ void smbw_init(void) extern FILE *dbf; char *p; int eno; + pstring line; if (initialised) return; initialised = 1; @@ -96,13 +97,16 @@ void smbw_init(void) DEBUG(2,("SMBW_PREFIX is %s\n", smbw_prefix)); } - if ((p=getenv(SMBW_PWD_ENV))) { - pstrcpy(smbw_cwd, p); - DEBUG(4,("Initial cwd from smbw_cwd is %s\n", smbw_cwd)); - } else { - sys_getwd(smbw_cwd); - DEBUG(4,("Initial cwd from getwd is %s\n", smbw_cwd)); + slprintf(line,sizeof(line)-1,"PWD_%d", getpid()); + + p = smbw_getshared(line); + if (!p) { + DEBUG(0,("ERROR: %s is not set\n", line)); + exit(1); } + pstrcpy(smbw_cwd, p); + DEBUG(4,("Initial cwd is %s\n", smbw_cwd)); + smbw_busy--; set_maxfiles(SMBW_MAX_OPEN); @@ -1325,6 +1329,7 @@ int smbw_fork(void) pid_t child; int p[2]; char c=0; + pstring line; struct smbw_file *file, *next_file; struct smbw_server *srv, *next_srv; @@ -1356,6 +1361,9 @@ int smbw_fork(void) smbw_srv_close(srv); } + slprintf(line,sizeof(line)-1,"PWD_%d", getpid()); + smbw_setshared(line,smbw_cwd); + /* unblock the parent */ write(p[1], &c, 1); close(p[1]); diff --git a/source/smbwrapper/smbw.h b/source/smbwrapper/smbw.h index 8de5b5776a0..7241f8b3c55 100644 --- a/source/smbwrapper/smbw.h +++ b/source/smbwrapper/smbw.h @@ -28,8 +28,6 @@ #define SMBW_FILE_MODE (S_IFREG | 0444) #define SMBW_DIR_MODE (S_IFDIR | 0555) -#define SMBW_PWD_ENV "PWD" - struct smbw_server { struct smbw_server *next, *prev; struct cli_state cli; |