summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1998-10-23 01:27:23 +0000
committerAndrew Tridgell <tridge@samba.org>1998-10-23 01:27:23 +0000
commit4eb7b5c6a81447755dfa1be27479027333ed6f26 (patch)
tree3f1791e4f060f341d86438acfea86f1df1c259d7
parent636182f18346af457f905cd784e68ae5d4f75d0e (diff)
downloadsamba-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.c8
-rw-r--r--source/smbwrapper/smbw.c20
-rw-r--r--source/smbwrapper/smbw.h2
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;