Dominique Leuenberger 2015-12-03 12:29:14 +00:00 committed by Git OBS Bridge
commit fd5139c215
4 changed files with 128 additions and 1 deletions

35
0002-revert-auth.patch Normal file
View File

@ -0,0 +1,35 @@
commit 86036582c001e99075f4d74cb3829df39f2a9ddf
Author: Frank Hirtz <fhirtz@redhat.com>
Date: Tue Oct 23 11:38:20 2012 -0400
rpcbind is "swallowing" broadcast RPC replies
If xp_auth is NULL, the transport routines will not send
the reply. This patch fixes that problem.
Signed-off-by: Steve Dickson <steved@redhat.com>
diff --git a/src/rpcb_svc_com.c b/src/rpcb_svc_com.c
index 5bb9a44..f6bd6bd 100644
--- a/src/rpcb_svc_com.c
+++ b/src/rpcb_svc_com.c
@@ -1227,6 +1227,8 @@ send_svcsyserr(SVCXPRT *xprt, struct finfo *fi)
return;
}
+extern SVCAUTH svc_auth_none;
+
static void
handle_reply(int fd, SVCXPRT *xprt)
{
@@ -1293,7 +1295,10 @@ handle_reply(int fd, SVCXPRT *xprt)
a.rmt_localvers = fi->versnum;
xprt_set_caller(xprt, fi);
+ xprt->xp_auth = &svc_auth_none;
svc_sendreply(xprt, (xdrproc_t) xdr_rmtcall_result, (char *) &a);
+ SVCAUTH_DESTROY(xprt->xp_auth);
+ xprt->xp_auth = NULL;
done:
if (buffer)
free(buffer);

76
099-poll.patch Normal file
View File

@ -0,0 +1,76 @@
diff --git a/src/rpcb_svc_com.c b/src/rpcb_svc_com.c
index ff9ce6b..d675eda 100644
--- a/src/rpcb_svc_com.c
+++ b/src/rpcb_svc_com.c
@@ -1097,35 +1097,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 +1126,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 +1135,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);
}
}
}

View File

@ -1,3 +1,15 @@
-------------------------------------------------------------------
Tue Nov 17 14:20:28 CET 2015 - kukuk@suse.de
- Add 0002-revert-auth.patch: revert old patch no longer working
with libtirpc 1.0.1
(http://sourceforge.net/p/libtirpc/mailman/message/34585439/)
-------------------------------------------------------------------
Tue Jul 14 16:52:03 CEST 2015 - kukuk@suse.de
- Add 099-poll.patch: use libtirpc with poll() implementation
------------------------------------------------------------------- -------------------------------------------------------------------
Thu Apr 30 09:36:21 CEST 2015 - kukuk@suse.de Thu Apr 30 09:36:21 CEST 2015 - kukuk@suse.de

View File

@ -28,7 +28,7 @@ Source2: sysconfig.rpcbind
Source3: rpcbind.xml Source3: rpcbind.xml
Source4: pmap_set.c Source4: pmap_set.c
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: libtirpc-devel BuildRequires: libtirpc-devel >= 1.0.1
BuildRequires: libtool BuildRequires: libtool
BuildRequires: pkgconfig BuildRequires: pkgconfig
BuildRequires: tcpd-devel BuildRequires: tcpd-devel
@ -36,11 +36,13 @@ BuildRequires: pkgconfig(libsystemd-daemon)
PreReq: %fillup_prereq PreReq: %fillup_prereq
Requires(pre): /usr/sbin/useradd Requires(pre): /usr/sbin/useradd
Patch1: 0001-systemd-unit-files.patch Patch1: 0001-systemd-unit-files.patch
Patch2: 0002-revert-auth.patch
Patch8: 0008-First-part-of-init_transport-refactoring.patch Patch8: 0008-First-part-of-init_transport-refactoring.patch
Patch9: 0009-init_transport-move-the-registration-code-into-a-sep.patch Patch9: 0009-init_transport-move-the-registration-code-into-a-sep.patch
Patch10: 0010-Fix-the-behavior-when-specifying-the-h-option.patch Patch10: 0010-Fix-the-behavior-when-specifying-the-h-option.patch
Patch11: 0011-Clean-up-the-way-we-handle-the-h-option-in-init_tran.patch Patch11: 0011-Clean-up-the-way-we-handle-the-h-option-in-init_tran.patch
Patch14: 0014-When-using-systemd-redirect-syslog-calls-to-the-syst.patch Patch14: 0014-When-using-systemd-redirect-syslog-calls-to-the-syst.patch
Patch99: 099-poll.patch
%define statefile /var/lib/portmap.state %define statefile /var/lib/portmap.state
%{?systemd_requires} %{?systemd_requires}
@ -57,11 +59,13 @@ regards to portmap.
%setup -q %setup -q
cp %{SOURCE4} . cp %{SOURCE4} .
%patch1 -p1 %patch1 -p1
%patch2 -p1 -R
#%patch8 -p1 #%patch8 -p1
#%patch9 -p1 #%patch9 -p1
#%patch10 -p1 #%patch10 -p1
#%patch11 -p1 #%patch11 -p1
#%patch14 -p1 #%patch14 -p1
%patch99 -p1
%build %build
autoreconf -fiv autoreconf -fiv