Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:11.4
linux_pcnfsd2
linux_pcnfsd2.dif
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File linux_pcnfsd2.dif of Package linux_pcnfsd2
Index: Makefile.linux =================================================================== --- Makefile.linux.orig +++ Makefile.linux @@ -40,13 +40,14 @@ HDRS= pcnfsd.h common.h LINTFLAGS= -hbax # uncomment as appropriate for debugging -CFLAGS = -DOSVER_BSD386 +CFLAGS = -O2 -fexpensive-optimizations -pipe -DOSVER_BSD386 $(RPM_OPT_FLAGS) #CFLAGS = -g -DDEBUG -DOSVER_BSD386 -LIBS= #-lrpc -LFLAGS = +LIBS = #-lrpc +LIBCRYPT = -lcrypt +LFLAGS = linux/rpc.pcnfsd: $(LINUX_OBJS) $(HDRS) - $(CC) -o $@ $(CFLAGS) $(LFLAGS) $(LINUX_OBJS) $(LIBS) + $(CC) -o $@ $(CFLAGS) $(LFLAGS) $(LINUX_OBJS) $(LIBS) $(LIBCRYPT) linux/pcnfsd_svc.o: $(HDRS) pcnfsd_svc.c $(CC) -c $(CFLAGS) -o $@ pcnfsd_svc.c Index: common.h =================================================================== --- common.h.orig +++ common.h @@ -67,7 +67,7 @@ **--------------------------------------------------------------------- **/ -/* #define SHADOW_SUPPORT */ +#define SHADOW_SUPPORT /* **--------------------------------------------------------------------- Index: pcnfsd_misc.c =================================================================== --- pcnfsd_misc.c.orig +++ pcnfsd_misc.c @@ -18,10 +18,15 @@ #include "pcnfsd.h" #include <stdio.h> +#include <unistd.h> +#include <stdlib.h> #include <pwd.h> +#include <time.h> #include <sys/file.h> #include <signal.h> #include <sys/time.h> +#include <sys/types.h> +#include <wait.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <netdb.h> @@ -29,6 +34,7 @@ #include <string.h> #include <memory.h> #include <ctype.h> +#include <paths.h> #ifdef ISC_2_0 #include <sys/fcntl.h> @@ -48,7 +54,7 @@ extern char *getusershell(); /* **--------------------------------------------------------------------- -** Other #define's +** Other #define's **--------------------------------------------------------------------- */ @@ -68,7 +74,7 @@ int uidrhi[NUMUIDS]; */ /* **--------------------------------------------------------------------- -** Support procedures +** Support procedures **--------------------------------------------------------------------- */ @@ -114,8 +120,13 @@ char *r; int suspicious (s) char *s; { - if(strpbrk(s, ";|&<>`'#!?*()[]^/") != NULL) - return 1; + /* Linux rpc.pcnfsd patch developed by Mark Zielinski of RSI. + Http://www.repsec.com */ + + if (strspn(s, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_=:+1234567890@%,.") + != strlen(s)) + return 1; + return 0; } @@ -124,7 +135,7 @@ scramble(s1, s2) char *s1; char *s2; { - while (*s1) + while (*s1) { *s2++ = (*s1 ^ zchar) & 0x7f; s1++; @@ -212,6 +223,7 @@ long expday; #endif #ifdef SHADOW_SUPPORT +#if 0 /* **-------------------------------------------------------------- ** Check the existence of SHADOW. If it is there, then we are @@ -231,7 +243,7 @@ long expday; (shadowfile && (sp = getspnam(usrnam)) == (struct spwd *)NULL)) return ((struct passwd *)NULL); - if (shadowfile) + if (shadowfile) { /* * New - check password expiry situation @@ -271,10 +283,22 @@ long expday; } pswd = sp->sp_pwdp; (void) endspent(); - } + } else pswd = p->pw_passwd; +#endif + p = getpwnam(usrnam); + if (p == (struct passwd *)NULL) + return ((struct passwd *)NULL); + endpwent(); + sp = getspnam(p->pw_name); + endspent(); + + if (sp) + pswd = sp->sp_pwdp; + else + pswd = p->pw_passwd; #else p = getpwnam(usrnam); if (p == (struct passwd *)NULL) @@ -283,12 +307,12 @@ long expday; #endif #ifdef ISC_2_0 - /* + /* **----------------------------------------------------------- ** We may have an 'x' in which case look in /etc/shadow .. **----------------------------------------------------------- */ - if (((strlen(pswd)) == 1) && pswd[0] == 'x') + if (((strlen(pswd)) == 1) && pswd[0] == 'x') { struct spwd *shadow = getspnam(usrnam); @@ -340,7 +364,7 @@ long expday; /* **--------------------------------------------------------------------- -** Print support procedures +** Print support procedures **--------------------------------------------------------------------- */ @@ -440,7 +464,7 @@ run_ps630(f, opts) /* **--------------------------------------------------------------------- -** WTMP update support +** WTMP update support **--------------------------------------------------------------------- */ @@ -480,7 +504,8 @@ extern char *getcallername(); #else SVR4 #include <utmp.h> -#define WTMP_PATH "/usr/adm/wtmp" +#define WTMP_PATH _PATH_WTMP + void wlogin(name) @@ -509,7 +534,7 @@ extern char *getcallername(); /* **--------------------------------------------------------------------- -** Run-process-as-user procedures +** Run-process-as-user procedures **--------------------------------------------------------------------- */ @@ -644,8 +669,14 @@ su_popen(user, cmd, maxtime) } dup2(1, 2); /* let's get stderr as well */ - (void) setgid(cached_gid); - (void) setuid(cached_uid); + if (-1 == setgid(cached_gid)) { + perror ("setgid"); + exit(1); + } + if (-1 == setuid(cached_uid)) { + perror ("setuid"); + exit(1); + } (void) execl("/bin/sh", "sh", "-c", cmd, (char *) NULL); _exit(255); @@ -737,7 +768,7 @@ char *arg2; wtmp_enabled = 0;; continue; } -#endif +#endif if(!mystrcasecmp(kw, "printer")) { arg1 = strtok(NULL, " \t"); arg2 = (arg1 == NULL ? NULL : strtok(NULL, "")); Index: pcnfsd_print.c =================================================================== --- pcnfsd_print.c.orig +++ pcnfsd_print.c @@ -17,6 +17,7 @@ */ #include "pcnfsd.h" #include <stdlib.h> +#include <unistd.h> #include <stdio.h> #include <pwd.h> #include <ctype.h> @@ -96,7 +97,7 @@ struct stat statbuf; char pathname[MAXPATHLEN]; char new_pathname[MAXPATHLEN]; char sp_name[MAXPATHLEN] = SPOOLDIR; -char tempstr[256]; +static char tempstr[256]; char delims[] = " \t\r\n:()"; pr_list printers = NULL; @@ -219,8 +220,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 +234,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, @@ -395,7 +406,7 @@ int failed = 0; */ if(!xcmd) { #ifdef BSD_STYLE_PRINT -#ifdef BSD386 +#if defined ( BSD386 ) || defined ( linux ) sprintf(cmdbuf, "/usr/bin/lpr -P%s -C%s -J%s %s", pr, system, user, new_pathname); #else @@ -1487,7 +1498,7 @@ struct { char default_cmd[] = "lp $FILE"; #endif SVR4_STYLE_PRINT #ifdef BSD_STYLE_PRINT -#ifdef BSD386 +#if defined ( BSD386 ) || defined ( linux ) char default_cmd[] = "/usr/bin/lpr $FILE"; #else char default_cmd[] = "/usr/ucb/lpr $FILE"; Index: pcnfsd_svc.c =================================================================== --- pcnfsd_svc.c.orig +++ pcnfsd_svc.c @@ -10,10 +10,12 @@ #include "common.h" #include <stdio.h> +#include <unistd.h> #include <rpc/rpc.h> #include <signal.h> #include <sys/socket.h> #include <sys/ioctl.h> +#include <fcntl.h> /* The following changes for Ultrix 4.2 were suggested by various users */ #ifndef ULTRIX
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor