diff options
Diffstat (limited to 'package/portmap/portmap-4.0-rpc_user.patch')
-rw-r--r-- | package/portmap/portmap-4.0-rpc_user.patch | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/package/portmap/portmap-4.0-rpc_user.patch b/package/portmap/portmap-4.0-rpc_user.patch new file mode 100644 index 000000000..6ef0736d0 --- /dev/null +++ b/package/portmap/portmap-4.0-rpc_user.patch @@ -0,0 +1,59 @@ +diff -urN portmap_4/daemon.c portmap_4.new/daemon.c +--- portmap_4/daemon.c Thu Aug 3 18:07:22 2000 ++++ portmap_4.new/daemon.c Fri Aug 4 08:45:25 2000 +@@ -35,6 +35,7 @@ + static char sccsid[] = "@(#)daemon.c 5.3 (Berkeley) 12/28/90"; + #endif /* LIBC_SCCS and not lint */ + ++#include <stdlib.h> + #include <sys/types.h> + #include <fcntl.h> + #include <unistd.h> +diff -urN portmap_4/pmap_check.c portmap_4.new/pmap_check.c +--- portmap_4/pmap_check.c Thu Aug 3 18:07:22 2000 ++++ portmap_4.new/pmap_check.c Thu Aug 3 18:29:51 2000 +@@ -40,6 +40,8 @@ + #include <rpc/pmap_prot.h> + #include <syslog.h> + #include <netdb.h> ++#include <pwd.h> ++#include <sys/types.h> + #include <sys/signal.h> + #ifdef SYSV40 + #include <netinet/in.h> +@@ -149,11 +151,32 @@ + /* + * Give up root privileges so that we can never allocate a privileged + * port when forwarding an rpc request. ++ * ++ * Fix 8/3/00 Philipp Knirsch: First lookup our rpc user. If we find it, ++ * switch to that uid, otherwise simply resue the old bin user and print ++ * out a warning in syslog. + */ +- if (setuid(1) == -1) { +- syslog(LOG_ERR, "setuid(1) failed: %m"); +- exit(1); ++ ++ struct passwd *pwent; ++ ++ pwent = getpwnam("rpc"); ++ if (pwent == NULL) { ++ syslog(LOG_WARNING, "user rpc not found, reverting to user bin"); ++ if (setuid(1) == -1) { ++ syslog(LOG_ERR, "setuid(1) failed: %m"); ++ exit(1); ++ } + } ++ else { ++ if (setuid(pwent->pw_uid) == -1) { ++ syslog(LOG_WARNING, "setuid() to rpc user failed: %m"); ++ if (setuid(1) == -1) { ++ syslog(LOG_ERR, "setuid(1) failed: %m"); ++ exit(1); ++ } ++ } ++ } ++ + (void) signal(SIGINT, toggle_verboselog); + } + |