--- 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,