diff --git a/rpcbind-0.2.0-nofork.patch b/rpcbind-0.2.0-nofork.patch new file mode 100644 index 0000000..4aaa88f --- /dev/null +++ b/rpcbind-0.2.0-nofork.patch @@ -0,0 +1,72 @@ +commit eb36cf198795b09c1ba796044fc99fa40c5a2b33 +Author: Lennart Poettering +Date: Tue Jul 13 15:52:18 2010 -0400 + + rpcbind: add no-fork mode + + Signed-off-by: Lennart Poettering + Signed-off-by: Steve Dickson + +diff --git a/man/rpcbind.8 b/man/rpcbind.8 +index 32806d4..c5b8fb7 100644 +--- a/man/rpcbind.8 ++++ b/man/rpcbind.8 +@@ -82,6 +82,8 @@ during operation, and will abort on certain errors if + is also specified. + With this option, the name-to-address translation consistency + checks are shown in detail. ++.It Fl f ++Do not fork and become a background process. + .It Fl h + Specify specific IP addresses to bind to for UDP requests. + This option +diff --git a/src/rpcbind.c b/src/rpcbind.c +index c8f0d9f..63023e1 100644 +--- a/src/rpcbind.c ++++ b/src/rpcbind.c +@@ -77,6 +77,7 @@ + + int debugging = 0; /* Tell me what's going on */ + int doabort = 0; /* When debugging, do an abort on errors */ ++int dofork = 1; /* fork? */ + + rpcblist_ptr list_rbl; /* A list of version 3/4 rpcbind services */ + +@@ -213,8 +214,8 @@ main(int argc, char *argv[]) + printf("\n"); + } + #endif +- } else { +- if (daemon(0, 0)) ++ } else if (dofork) { ++ if (daemon(0, 0)) + err(1, "fork failed"); + } + +@@ -740,7 +741,7 @@ parseargs(int argc, char *argv[]) + { + int c; + oldstyle_local = 1; +- while ((c = getopt(argc, argv, "adh:ilsw")) != -1) { ++ while ((c = getopt(argc, argv, "adh:ilswf")) != -1) { + switch (c) { + case 'a': + doabort = 1; /* when debugging, do an abort on */ +@@ -767,13 +768,16 @@ parseargs(int argc, char *argv[]) + case 's': + runasdaemon = 1; + break; ++ case 'f': ++ dofork = 0; ++ break; + #ifdef WARMSTART + case 'w': + warmstart = 1; + break; + #endif + default: /* error */ +- fprintf(stderr, "usage: rpcbind [-adhilsw]\n"); ++ fprintf(stderr, "usage: rpcbind [-adhilswf]\n"); + exit (1); + } + } diff --git a/rpcbind.init b/rpcbind.init index fcf62d2..31f4397 100755 --- a/rpcbind.init +++ b/rpcbind.init @@ -12,7 +12,6 @@ # config: /etc/sysconfig/rpcbind - # This is an interactive program, we need the current locale [ -f /etc/profile.d/lang.sh ] && . /etc/profile.d/lang.sh # We can't Japanese on normal console at boot time, so force LANG=C. @@ -25,23 +24,29 @@ fi # Source function library. . /etc/init.d/functions +# Source networking configuration. +[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network prog="rpcbind" [ -f /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog RETVAL=0 +uid=`id | cut -d\( -f1 | cut -d= -f2` start() { - # Get config. - if [ -f /etc/sysconfig/network ]; then - . /etc/sysconfig/network - else - exit 6 - fi # Check that networking is up. [ "$NETWORKING" = "yes" ] || exit 6 + [ -f /sbin/$prog ] || exit 5 + # Make sure the rpcbind is not already running. + if status $prog > /dev/null ; then + exit 0 + fi + + # Only root can start the service + [ $uid -ne 0 ] && exit 4 + echo -n $"Starting $prog: " daemon $prog $RPCBIND_ARGS $1 RETVAL=$? @@ -74,19 +79,22 @@ case "$1" in status) status $prog ;; - restart|reload) - stop - start + restart | reload| force-reload) + $0 stop + $0 start + RETVAL=$? ;; - condrestart) + condrestart | try-restart) if [ -f /var/lock/subsys/$prog ]; then - stop - start -w + $0 stop + $0 start -w + RETVAL=$? fi ;; *) - echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}" - exit 1 + echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|try-restart}" + RETVAL=2 + ;; esac -exit $? +exit $RETVAL diff --git a/rpcbind.spec b/rpcbind.spec index 861ffea..db199fb 100644 --- a/rpcbind.spec +++ b/rpcbind.spec @@ -2,7 +2,7 @@ Name: rpcbind Version: 0.2.0 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Universal Addresses to RPC Program Number Mapper Group: System Environment/Daemons License: GPL @@ -14,6 +14,7 @@ Source1: rpcbind.init Patch100: rpcbind-0.2.0-usage-fix.patch Patch101: rpcbind-0.2.0-soreuseaddr-listner.patch +Patch102: rpcbind-0.2.0-nofork.patch Requires: glibc-common setup Conflicts: man-pages < 2.43-12 @@ -37,6 +38,7 @@ RPC calls on a server on that machine. %setup -q %patch100 -p1 %patch101 -p1 +%patch102 -p1 %build %ifarch s390 s390x @@ -122,6 +124,10 @@ fi %dir %attr(700,rpc,rpc) /var/lib/rpcbind %changelog +* Tue Jul 13 2010 Steve Dickson - 0.2.0-6 +- Made initscript LSB compliant (bz 614193) +- Added no fork patch + * Tue Jul 6 2010 Steve Dickson - 0.2.0-5 - Set SO_REUSEADDR on listening sockets (bz 597356)