diff options
author | christos <christos> | 1998-09-03 16:36:09 +0000 |
---|---|---|
committer | christos <christos> | 1998-09-03 16:36:09 +0000 |
commit | 6f0d3db478095949781ed05d1883921e74fc436c (patch) | |
tree | d924907e6fb1da422325748c217f90ff1b27159c | |
parent | c1036cc8585c0f844a668275306585866b88d572 (diff) | |
download | pkgsrc-6f0d3db478095949781ed05d1883921e74fc436c.tar.gz |
- use getcwd instead of getwd
- increase the buffer size appropriatetely for holding cwd to avoid overflow
- don't core-dump if $HOME is not set
- dynamically allocate command space to avoid overflow
-rw-r--r-- | net/icb/patches/patch-ad | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/net/icb/patches/patch-ad b/net/icb/patches/patch-ad new file mode 100644 index 00000000000..66ab550f0f3 --- /dev/null +++ b/net/icb/patches/patch-ad @@ -0,0 +1,76 @@ +*** icb/serverlist.c.orig Fri Feb 24 16:20:29 1995 +--- icb/serverlist.c Thu Sep 3 10:37:50 1998 +*************** +*** 1,4 **** +--- 1,5 ---- + #include <stdio.h> ++ #include <pwd.h> + #include <sys/types.h> + #include <sys/stat.h> + #include "icb.h" +*************** +*** 14,28 **** + FILE *openserverfile() + { + struct stat statbuf; +! char *personalsl; +! char command[256]; +! char pwd[256]; + FILE *ret; + + #ifdef sgi + #undef SYSV + #endif +! #ifndef SYSV + getwd(pwd); + #else /* SYSV */ + getcwd(pwd, MAXPATHLEN+1); +--- 15,28 ---- + FILE *openserverfile() + { + struct stat statbuf; +! char *personalsl, *home; +! char pwd[MAXPATHLEN+1]; + FILE *ret; + + #ifdef sgi + #undef SYSV + #endif +! #if !defined(SYSV) && !(defined(BSD) && BSD >= 199306) + getwd(pwd); + #else /* SYSV */ + getcwd(pwd, MAXPATHLEN+1); +*************** +*** 30,40 **** + #ifdef sgi + #define SYSV + #endif +! chdir(getenv("HOME")); + if (!stat(PERSONALSL,&statbuf)) + { +! sprintf(command,"/bin/cat %s %s\n", PERSONALSL, SERVERLIST); + ret= popen(command,"r"); + } + else + ret= fopen(SERVERLIST,"r"); +--- 30,49 ---- + #ifdef sgi + #define SYSV + #endif +! if ((home = getenv("HOME")) == NULL) { +! struct passwd *pw; +! if ((pw = getpwuid(getuid())) == NULL) +! home = "."; +! home = pw->pw_dir; +! } +! chdir(home); + if (!stat(PERSONALSL,&statbuf)) + { +! char *command = malloc(strlen("/bin/cat \n") + +! strlen(PERSONALSL) + strlen(SERVERLIST) + 1); +! sprintf(command, "/bin/cat %s %s\n", PERSONALSL, SERVERLIST); + ret= popen(command,"r"); ++ free(command); + } + else + ret= fopen(SERVERLIST,"r"); |