0008.patch2
f37bbf8e10bc30432cad73b2fe6b3b883d3591f6d1a1b1207ad1abc1d6f12489
--- pcnfsd_print.c Wed Apr 6 02:48:20 1994
+++ pcnfsd_print2.c Mon Aug 17 14:22:46 1998
@@ -219,8 +219,11 @@ char *sys;
char *pr;
char**sp;
{
-int dir_mode = 0777;
-int rc;
+
+ /* Linux rpc.pcnfsd patch developed by Mark Zielinski of RSI.
+ Http://www.repsec.com */
+
+ int dir_mode = 0777, rc, oldumask;
*sp = &pathname[0];
pathname[0] = '\0';
@@ -230,12 +233,19 @@ int rc;
/* get pathname of current directory and return to client */
- (void)sprintf(pathname,"%s/%s",sp_name, sys);
+ oldumask = umask(0);
+ (void)sprintf(pathname,"%s/%s",sp_name, sys);
+ (void)mkdir(sp_name, dir_mode); /* ignore the return code */
+ rc = mkdir(pathname, dir_mode); /* DON'T ignore this return code */
+ umask(oldumask);
+
+ (void)snprintf(pathname, (sizeof(pathname)-1), "%s/%s",sp_name,
+ sys);
+
(void)mkdir(sp_name, dir_mode); /* ignore the return code */
- (void)chmod(sp_name, dir_mode);
rc = mkdir(pathname, dir_mode); /* DON'T ignore this return code */
+
if((rc < 0 && errno != EEXIST) ||
- (chmod(pathname, dir_mode) != 0) ||
(stat(pathname, &statbuf) != 0) ||
!(statbuf.st_mode & S_IFDIR)) {
(void)sprintf(tempstr,