SOURCES: rpcbind-warmstart.patch - Allow the warms start code to b...
baggins
baggins at pld-linux.org
Tue May 8 15:50:57 CEST 2007
Author: baggins Date: Tue May 8 13:50:57 2007 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- Allow the warms start code to be enabled at compile time
with the --enable-warmstarts configuration flag and
set the state directory with the --with-statedir
configuration flag.
---- Files affected:
SOURCES:
rpcbind-warmstart.patch (1.2 -> 1.3)
---- Diffs:
================================================================
Index: SOURCES/rpcbind-warmstart.patch
diff -u SOURCES/rpcbind-warmstart.patch:1.2 SOURCES/rpcbind-warmstart.patch:1.3
--- SOURCES/rpcbind-warmstart.patch:1.2 Tue Apr 24 17:55:18 2007
+++ SOURCES/rpcbind-warmstart.patch Tue May 8 15:50:52 2007
@@ -1,120 +1,105 @@
-diff -ur rpcbind-0.1.4/src/rpcbind.c rpcbind-0.1.4-warmstart/src/rpcbind.c
---- rpcbind-0.1.4/src/rpcbind.c 2007-04-24 17:46:06.000000000 +0200
-+++ rpcbind-0.1.4-warmstart/src/rpcbind.c 2007-04-24 17:44:38.000000000 +0200
-@@ -125,6 +125,7 @@
- void *nc_handle; /* Net config handle */
- struct rlimit rl;
- int maxrec = RPC_MAXDATASIZE;
-+ uid_t rpc_uid = 0;
-
- parseargs(argc, argv);
-
-@@ -187,9 +188,19 @@
- (void) signal(SIGHUP, SIG_IGN);
- (void) signal(SIGUSR1, SIG_IGN);
- (void) signal(SIGUSR2, SIG_IGN);
+diff --git a/configure.in b/configure.in
+index 9a64b45..0e2f163 100644
+--- a/configure.in
++++ b/configure.in
+@@ -18,6 +21,23 @@ AC_ARG_ENABLE(debug,[ --enable-debug Turns on rpcbind debugging],
+ esac],[debug=false])
+ AM_CONDITIONAL(DEBUG, test x$debug = xtrue)
+
++AC_ARG_ENABLE(warmstarts,[ --enable-warmstarts Enables Warm Starts],
++ [case "${enableval}" in
++ yes) warmstarts=true ;;
++ no) warmstarts=no ;;
++ *) AC_MSG_ERROR(bad value ${enableval} for --enable-warmstarts) ;;
++ esac],[warmstarts=false])
++AM_CONDITIONAL(WARMSTART, test x$warmstarts = xtrue)
+
-+ if (runasdaemon) {
-+ struct passwd *p;
-+ if((p = getpwnam(RUN_AS)) == NULL) {
-+ syslog(LOG_ERR, "cannot get uid of daemon: %m");
-+ exit(1);
-+ }
-+ rpc_uid = p->pw_uid;
-+ }
++if test "$warmstarts" = "true" ; then
++ AC_ARG_WITH(statedir,
++ [ --with-statedir=/foo use state dir /foo [/tmp]],
++ statedir=$withval,
++ statedir=/tmp)
++ AC_SUBST(statedir)
++ AC_DEFINE_UNQUOTED(RPCBIND_STATEDIR, "$statedir", [This defines the location where the state files will be kept for warm starts])
++fi
++
+ AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h \
+ netinet/in.h stdlib.h string.h \
+ sys/param.h sys/socket.h \
+diff --git a/man/rpcbind.8 b/man/rpcbind.8
+index 2d59ce8..7985f0f 100644
+--- a/man/rpcbind.8
++++ b/man/rpcbind.8
+@@ -131,6 +131,14 @@ to use non-privileged ports for outgoing connections, preventing non-privileged
+ clients from using
+ .Nm
+ to connect to services from a privileged port.
++.It Fl w
++Cause
++.Nm
++to do a "warm start" by read a state file when
++.Nm
++starts up. The state file is created when
++.Nm
++terminates.
+ .El
+ .Sh NOTES
+ All RPC servers must be restarted if
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 52d3857..fd80847 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -1,5 +1,14 @@
+ INCLUDES = -I$(srcdir)/tirpc -DPORTMAP -DINET6 -DVERSION="\"$(VERSION)\"" \
+ -D_GNU_SOURCE -Wall -pipe
++if DEBUG
++INCLUDES += -DRPCBIND_DEBUG -DSVC_RUN_DEBUG -DDEBUG_RMTCALL
++INCLUDES += -DND_DEBUG -DBIND_DEBUG
++endif
++
++if WARMSTART
++INCLUDES += -DWARMSTART
++endif
+
- #ifdef WARMSTART
- if (warmstart) {
-- read_warmstart();
-+ read_warmstart(rpc_uid);
- }
- #endif
- if (debugging) {
-@@ -207,13 +218,7 @@
- }
-
- if (runasdaemon) {
-- struct passwd *p;
--
-- if((p = getpwnam(RUN_AS)) == NULL) {
-- syslog(LOG_ERR, "cannot get uid of daemon: %m");
-- exit(1);
-- }
-- if (setuid(p->pw_uid) == -1) {
-+ if (setuid(rpc_uid) == -1) {
- syslog(LOG_ERR, "setuid to daemon failed: %m");
- exit(1);
- }
-diff -ur rpcbind-0.1.4/src/rpcbind.h rpcbind-0.1.4-warmstart/src/rpcbind.h
---- rpcbind-0.1.4/src/rpcbind.h 2004-10-25 14:07:44.000000000 +0200
-+++ rpcbind-0.1.4-warmstart/src/rpcbind.h 2007-04-24 17:44:52.000000000 +0200
-@@ -130,7 +130,7 @@
- #endif
- void write_warmstart(void);
--void read_warmstart(void);
-+void read_warmstart(uid_t rpc_uid);
-
- char *addrmerge(struct netbuf *caller, char *serv_uaddr, char *clnt_uaddr, char *netid);
- void network_init(void);
-diff -ur rpcbind-0.1.4/src/warmstart.c rpcbind-0.1.4-warmstart/src/warmstart.c
---- rpcbind-0.1.4/src/warmstart.c 2004-10-25 14:07:42.000000000 +0200
-+++ rpcbind-0.1.4-warmstart/src/warmstart.c 2007-04-24 17:45:36.000000000 +0200
-@@ -54,13 +54,13 @@
+ bin_PROGRAMS = rpcbind rpcinfo
+@@ -18,10 +27,6 @@ rpcbind_LDFLAGS = -lpthread -ltirpc
+ rpcbind_LDADD = $(LIB_TIRPC)
+ AM_CPPFLAGS = -I/usr/include/tirpc -DCHECK_LOCAL -DPORTMAP \
+ -DFACILITY=LOG_MAIL -DSEVERITY=LOG_INFO
+-if DEBUG
+-INCLUDES += -DRPCBIND_DEBUG -DSVC_RUN_DEBUG -DDEBUG_RMTCALL
+-INCLUDES += -DND_DEBUG -DBIND_DEBUG
+-endif
+
+ $(rpcbind_OBJECTS) : security.o util.o check_bound.o pmap_svc.o \
+ rpcb_svc.o rpcb_svc_com.o rpcb_svc_4.o \
+diff --git a/src/warmstart.c b/src/warmstart.c
+index 4a40639..6a50c41 100644
+--- a/src/warmstart.c
++++ b/src/warmstart.c
+@@ -46,17 +46,21 @@
+ #include <syslog.h>
+ #include <unistd.h>
+
++#include "config.h"
+ #include "rpcbind.h"
+
+ /*
+ * XXX this code is unsafe and is not used. It should be made safe.
+ */
+
++#ifndef RPCBIND_STATEDIR
++#define RPCBIND_STATEDIR "/tmp"
++#endif
/* These files keep the pmap_list and rpcb_list in XDR format */
-#define RPCBFILE "/tmp/rpcbind.file"
-+#define RPCBFILE "/var/lib/rpcbind/rpcbind.file"
++#define RPCBFILE RPCBIND_STATEDIR "/rpcbind.file"
#ifdef PORTMAP
-#define PMAPFILE "/tmp/portmap.file"
-+#define PMAPFILE "/var/lib/rpcbind/portmap.file"
++#define PMAPFILE RPCBIND_STATEDIR "/portmap.file"
#endif
static bool_t write_struct __P((char *, xdrproc_t, void *));
--static bool_t read_struct __P((char *, xdrproc_t, void *));
-+static bool_t read_struct __P((char *, xdrproc_t, void *, uid_t));
-
- static bool_t
- write_struct(char *filename, xdrproc_t structproc, void *list)
-@@ -98,7 +98,7 @@
- }
-
- static bool_t
--read_struct(char *filename, xdrproc_t structproc, void *list)
-+read_struct(char *filename, xdrproc_t structproc, void *list, uid_t rpc_uid)
- {
- FILE *fp;
- XDR xdrs;
-@@ -109,7 +109,7 @@
- "rpcbind: cannot stat file = %s for reading\n", filename);
- goto error;
- }
-- if ((sbuf.st_uid != 0) || (sbuf.st_mode & S_IRWXG) ||
-+ if ((sbuf.st_uid != rpc_uid) || (sbuf.st_mode & S_IRWXG) ||
- (sbuf.st_mode & S_IRWXO)) {
- fprintf(stderr,
- "rpcbind: invalid permissions on file = %s for reading\n",
-@@ -148,7 +148,7 @@
- }
-
- void
--read_warmstart()
-+read_warmstart(uid_t rpc_uid)
- {
- rpcblist_ptr tmp_rpcbl = NULL;
- #ifdef PORTMAP
-@@ -156,11 +156,11 @@
- #endif
- int ok1, ok2 = TRUE;
-
-- ok1 = read_struct(RPCBFILE, (xdrproc_t)xdr_rpcblist_ptr, &tmp_rpcbl);
-+ ok1 = read_struct(RPCBFILE, (xdrproc_t)xdr_rpcblist_ptr, &tmp_rpcbl, rpc_uid);
- if (ok1 == FALSE)
- return;
- #ifdef PORTMAP
-- ok2 = read_struct(PMAPFILE, (xdrproc_t)xdr_pmaplist_ptr, &tmp_pmapl);
-+ ok2 = read_struct(PMAPFILE, (xdrproc_t)xdr_pmaplist_ptr, &tmp_pmapl, rpc_uid);
- #endif
- if (ok2 == FALSE) {
- xdr_free((xdrproc_t) xdr_rpcblist_ptr, (char *)&tmp_rpcbl);
================================================================
---- CVS-web:
http://cvs.pld-linux.org/SOURCES/rpcbind-warmstart.patch?r1=1.2&r2=1.3&f=u
More information about the pld-cvs-commit
mailing list