[packages/rpcbind] - added 0.2.4-rc1 update patch

baggins baggins at pld-linux.org
Sun Sep 4 11:47:17 CEST 2016


commit 8a22ccb43c4a75d5cc4a2abfd98f9f668373a1c6
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Sun Sep 4 11:46:46 2016 +0200

    - added 0.2.4-rc1 update patch

 rpcbind-0.2.4-rc1.patch | 193 ++++++++++++++++++++++++++++++++++++++++++++++++
 rpcbind.spec            |   4 +-
 2 files changed, 196 insertions(+), 1 deletion(-)
---
diff --git a/rpcbind.spec b/rpcbind.spec
index cbb3c96..07d1079 100644
--- a/rpcbind.spec
+++ b/rpcbind.spec
@@ -16,11 +16,12 @@ Patch1:		%{name}-syslog.patch
 Patch2:		%{name}-sunrpc.patch
 Patch3:		%{name}-nss.h.patch
 Patch6:		%{name}-tcp-addrs.patch
+Patch100:	%{name}-0.2.4-rc1.patch
 # http://nfsv4.bullopensource.org/doc/tirpc_rpcbind.php
 URL:		http://sourceforge.net/projects/rpcbind/
 BuildRequires:	autoconf >= 2.50
 BuildRequires:	automake
-BuildRequires:	libtirpc-devel >= 1:0.1.10
+BuildRequires:	libtirpc-devel >= 1:1.0.1
 BuildRequires:	libtool
 BuildRequires:	libwrap-devel
 BuildRequires:	pkgconfig
@@ -53,6 +54,7 @@ wywołania RPC na serwerze na tej maszynie.
 
 %prep
 %setup -q
+%patch100 -p1
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
diff --git a/rpcbind-0.2.4-rc1.patch b/rpcbind-0.2.4-rc1.patch
new file mode 100644
index 0000000..be4b115
--- /dev/null
+++ b/rpcbind-0.2.4-rc1.patch
@@ -0,0 +1,193 @@
+diff --git a/src/rpcb_svc_com.c b/src/rpcb_svc_com.c
+index ff9ce6b..148fe42 100644
+--- a/src/rpcb_svc_com.c
++++ b/src/rpcb_svc_com.c
+@@ -536,10 +536,6 @@ create_rmtcall_fd(struct netconfig *nconf)
+ 		rmttail->next = rmt;
+ 		rmttail = rmt;
+ 	}
+-	/* XXX not threadsafe */
+-	if (fd > svc_maxfd)
+-		svc_maxfd = fd;
+-	FD_SET(fd, &svc_fdset);
+ 	return (fd);
+ }
+ 
+@@ -1056,9 +1052,6 @@ free_slot_by_index(int index)
+ 	fi = &FINFO[index];
+ 	if (fi->flag & FINFO_ACTIVE) {
+ 		netbuffree(fi->caller_addr);
+-		/* XXX may be too big, but can't access xprt array here */
+-		if (fi->forward_fd >= svc_maxfd)
+-			svc_maxfd--;
+ 		free(fi->uaddr);
+ 		fi->flag &= ~FINFO_ACTIVE;
+ 		rpcb_rmtcalls--;
+@@ -1097,35 +1090,28 @@ netbuffree(struct netbuf *ap)
+ }
+ 
+ 
+-#define	MASKVAL	(POLLIN | POLLPRI | POLLRDNORM | POLLRDBAND)
+-extern bool_t __svc_clean_idle(fd_set *, int, bool_t);
+-
+ void
+ my_svc_run()
+ {
+-	size_t nfds;
+-	struct pollfd pollfds[FD_SETSIZE];
+ 	int poll_ret, check_ret;
+ 	int n;
+-#ifdef SVC_RUN_DEBUG
+-	int i;
+-#endif
+-	register struct pollfd	*p;
+-	fd_set cleanfds;
+ 
+ 	for (;;) {
+-		p = pollfds;
+-		for (n = 0; n <= svc_maxfd; n++) {
+-			if (FD_ISSET(n, &svc_fdset)) {
+-				p->fd = n;
+-				p->events = MASKVAL;
+-				p++;
+-			}
+-		}
+-		nfds = p - pollfds;
+-		poll_ret = 0;
++	        struct pollfd my_pollfd[svc_max_pollfd];
++		int i;
++
++		if (svc_max_pollfd == 0 && svc_pollfd == NULL)
++		  return;
+ 
+-		switch (poll_ret = poll(pollfds, nfds, 30 * 1000)) {
++
++		for (i = 0; i < svc_max_pollfd; ++i)
++		  {
++		    my_pollfd[i].fd = svc_pollfd[i].fd;
++		    my_pollfd[i].events = svc_pollfd[i].events;
++		    my_pollfd[i].revents = 0;
++		  }
++
++		switch (poll_ret = poll(my_pollfd, svc_max_pollfd, 30 * 1000)) {
+ 		case -1:
+ 			/*
+ 			 * We ignore all errors, continuing with the assumption
+@@ -1133,8 +1119,6 @@ my_svc_run()
+ 			 * other outside event) and not caused by poll().
+ 			 */
+ 		case 0:
+-			cleanfds = svc_fdset;
+-			__svc_clean_idle(&cleanfds, 30, FALSE);
+ 			continue;
+ 		default:
+ 			/*
+@@ -1144,10 +1128,10 @@ my_svc_run()
+ 			 * don't call svc_getreq_poll.  Otherwise, there
+ 			 * must be another so we must call svc_getreq_poll.
+ 			 */
+-			if ((check_ret = check_rmtcalls(pollfds, nfds)) ==
++			if ((check_ret = check_rmtcalls(my_pollfd, svc_max_pollfd)) ==
+ 			    poll_ret)
+ 				continue;
+-			svc_getreq_poll(pollfds, poll_ret-check_ret);
++			svc_getreq_poll(my_pollfd, poll_ret-check_ret);
+ 		}
+ 	}
+ }
+@@ -1183,12 +1167,33 @@ check_rmtcalls(struct pollfd *pfds, int nfds)
+ 	return (ncallbacks_found);
+ }
+ 
++/*
++ * This is really a helper function defined in libtirpc, 
++ * but unfortunately, it hasn't been exported yet.
++ */
++static struct netbuf *
++__rpc_set_netbuf(struct netbuf *nb, const void *ptr, size_t len)
++{
++	if (nb->len != len) {
++		if (nb->len)
++			mem_free(nb->buf, nb->len);
++		nb->buf = mem_alloc(len);
++		if (nb->buf == NULL)
++			return NULL;
++
++		nb->maxlen = nb->len = len;
++	}
++	memcpy(nb->buf, ptr, len);
++	return nb;
++}
++
+ static void
+ xprt_set_caller(SVCXPRT *xprt, struct finfo *fi)
+ {
++	const struct netbuf *caller = fi->caller_addr;
+ 	u_int32_t *xidp;
+ 
+-	*(svc_getrpccaller(xprt)) = *(fi->caller_addr);
++	__rpc_set_netbuf(svc_getrpccaller(xprt), caller->buf, caller->len);
+ 	xidp = __rpcb_get_dg_xidp(xprt);
+ 	*xidp = fi->caller_xid;
+ }
+@@ -1274,10 +1279,17 @@ handle_reply(int fd, SVCXPRT *xprt)
+ 	a.rmt_localvers = fi->versnum;
+ 
+ 	xprt_set_caller(xprt, fi);
++#if defined(SVC_XP_AUTH)
++	SVC_XP_AUTH(xprt) = svc_auth_none;
++#else 
+ 	xprt->xp_auth = &svc_auth_none;
++#endif
+ 	svc_sendreply(xprt, (xdrproc_t) xdr_rmtcall_result, (char *) &a);
++#if !defined(SVC_XP_AUTH)
+ 	SVCAUTH_DESTROY(xprt->xp_auth);
+ 	xprt->xp_auth = NULL;
++#endif
++
+ done:
+ 	if (buffer)
+ 		free(buffer);
+diff --git a/src/rpcbind.c b/src/rpcbind.c
+index 045daa1..c4265cd 100644
+--- a/src/rpcbind.c
++++ b/src/rpcbind.c
+@@ -87,6 +87,7 @@ static inline void __nss_configure_lookup(const char *db, const char *s) {}
+ int debugging = 0;	/* Tell me what's going on */
+ int doabort = 0;	/* When debugging, do an abort on errors */
+ int dofork = 1;		/* fork? */
++int createdsocket = 0;  /* Did I create the socket or systemd did it for me? */
+ 
+ rpcblist_ptr list_rbl;	/* A list of version 3/4 rpcbind services */
+ 
+@@ -445,6 +446,7 @@ init_transport(struct netconfig *nconf)
+ 		memset(&sun, 0, sizeof sun);
+ 		sun.sun_family = AF_LOCAL;
+ 		unlink(_PATH_RPCBINDSOCK);
++		createdsocket = 1; /* We are now in the process of creating the unix socket */
+ 		strcpy(sun.sun_path, _PATH_RPCBINDSOCK);
+ 		addrlen = SUN_LEN(&sun);
+ 		sa = (struct sockaddr *)&sun;
+@@ -846,7 +848,8 @@ static void
+ terminate(int dummy /*__unused*/)
+ {
+ 	close(rpcbindlockfd);
+-	unlink(_PATH_RPCBINDSOCK);
++	if(createdsocket)
++		unlink(_PATH_RPCBINDSOCK);
+ 	unlink(RPCBINDDLOCK);
+ #ifdef WARMSTART
+ 	write_warmstart();	/* Dump yourself */
+diff --git a/src/security.c b/src/security.c
+index 0c9453f..c54ce26 100644
+--- a/src/security.c
++++ b/src/security.c
+@@ -17,6 +17,8 @@
+ #include <syslog.h>
+ #include <netdb.h>
+ 
++#include "xlog.h"
++
+ /*
+  * XXX for special case checks in check_callit.
+  */
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/rpcbind.git/commitdiff/8a22ccb43c4a75d5cc4a2abfd98f9f668373a1c6



More information about the pld-cvs-commit mailing list