forked from pool/libtirpc
This commit is contained in:
parent
d9fb4e2773
commit
2588dcf82a
@ -1,23 +0,0 @@
|
||||
commit 3f947c093f828629c2fc5624aa3ad8c7465f76d1
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Thu Oct 25 10:55:57 2007 -0400
|
||||
|
||||
Added " || defined(__arm__)" to xdr_float.c which allows libtirpc
|
||||
to build on ARM processors.
|
||||
|
||||
Author-by: Lennert Buytenhek <buytenh@wantstofly.org>
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/src/xdr_float.c b/src/xdr_float.c
|
||||
index 375e535..d8b22e6 100644
|
||||
--- a/src/xdr_float.c
|
||||
+++ b/src/xdr_float.c
|
||||
@@ -59,7 +59,7 @@
|
||||
defined(__mips__) || defined(__ns32k__) || defined(__alpha__) || \
|
||||
defined(__arm32__) || defined(__ppc__) || defined(__ia64__) || \
|
||||
defined(__arm26__) || defined(__sparc64__) || defined(__amd64__) || \
|
||||
- defined(__powerpc__) || defined(__s390__)
|
||||
+ defined(__powerpc__) || defined(__s390__) || defined(__arm__)
|
||||
#include <bits/endian.h>
|
||||
#define IEEEFP
|
||||
#endif
|
@ -1,29 +0,0 @@
|
||||
commit 83cb8b02f87fe6fd7bbd903e4825f7cb38e59ec4
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Fri May 4 12:19:27 2007 -0400
|
||||
|
||||
A couple ntohs() were needed in bindresvport_sa()
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/src/bindresvport.c b/src/bindresvport.c
|
||||
index bc75d29..6aac03c 100644
|
||||
--- a/src/bindresvport.c
|
||||
+++ b/src/bindresvport.c
|
||||
@@ -101,14 +101,14 @@ bindresvport_sa(sd, sa)
|
||||
case AF_INET:
|
||||
sin = (struct sockaddr_in *)sa;
|
||||
salen = sizeof(struct sockaddr_in);
|
||||
- port = sin->sin_port;
|
||||
+ port = ntohs(sin->sin_port);
|
||||
portp = &sin->sin_port;
|
||||
break;
|
||||
#ifdef INET6
|
||||
case AF_INET6:
|
||||
sin6 = (struct sockaddr_in6 *)sa;
|
||||
salen = sizeof(struct sockaddr_in6);
|
||||
- port = sin6->sin6_port;
|
||||
+ port = ntohs(sin6->sin6_port);
|
||||
portp = &sin6->sin6_port;
|
||||
break;
|
||||
#endif
|
@ -1,64 +0,0 @@
|
||||
commit c254b435007ebd4ed471737198975d5ccf4e7949
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Thu Apr 26 17:20:21 2007 -0400
|
||||
|
||||
Added a optimization to bindresvport that allows more
|
||||
ports to be tried.
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/src/bindresvport.c b/src/bindresvport.c
|
||||
index b197efa..bc75d29 100644
|
||||
--- a/src/bindresvport.c
|
||||
+++ b/src/bindresvport.c
|
||||
@@ -62,6 +62,7 @@ bindresvport(sd, sin)
|
||||
#ifdef __linux__
|
||||
|
||||
#define STARTPORT 600
|
||||
+#define LOWPORT 512
|
||||
#define ENDPORT (IPPORT_RESERVED - 1)
|
||||
#define NPORTS (ENDPORT - STARTPORT + 1)
|
||||
|
||||
@@ -76,10 +77,13 @@ bindresvport_sa(sd, sa)
|
||||
#ifdef INET6
|
||||
struct sockaddr_in6 *sin6;
|
||||
#endif
|
||||
- u_int16_t port;
|
||||
u_int16_t *portp;
|
||||
+ static u_int16_t port;
|
||||
+ static short startport = STARTPORT;
|
||||
socklen_t salen;
|
||||
- int i;
|
||||
+ int nports = ENDPORT - startport + 1;
|
||||
+ int endport = ENDPORT;
|
||||
+ int i;
|
||||
|
||||
if (sa == NULL) {
|
||||
salen = sizeof(myaddr);
|
||||
@@ -119,13 +123,22 @@ bindresvport_sa(sd, sa)
|
||||
}
|
||||
res = -1;
|
||||
errno = EADDRINUSE;
|
||||
- for (i = 0; i < NPORTS && res < 0 && errno == EADDRINUSE; i++) {
|
||||
+ again:
|
||||
+ for (i = 0; i < nports; ++i) {
|
||||
*portp = htons(port++);
|
||||
- if (port > ENDPORT) {
|
||||
- port = STARTPORT;
|
||||
- }
|
||||
+ if (port > endport)
|
||||
+ port = startport;
|
||||
res = bind(sd, sa, salen);
|
||||
+ if (res >= 0 || errno != EADDRINUSE)
|
||||
+ break;
|
||||
}
|
||||
+ if (i == nports && startport != LOWPORT) {
|
||||
+ startport = LOWPORT;
|
||||
+ endport = STARTPORT - 1;
|
||||
+ nports = STARTPORT - LOWPORT;
|
||||
+ port = LOWPORT + port % (STARTPORT - LOWPORT);
|
||||
+ goto again;
|
||||
+ }
|
||||
return (res);
|
||||
}
|
||||
#else
|
@ -1,35 +0,0 @@
|
||||
commit 3cf1a3ce1a409e647f9b8ca4497c26e6d066f293
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Thu Jan 24 15:01:22 2008 -0500
|
||||
|
||||
Protect from buffer overflow in the GSS code.
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff -up libtirpc-0.1.7/src/svc_auth_gss.c.orig libtirpc-0.1.7/src/svc_auth_gss.c
|
||||
--- libtirpc-0.1.7/src/svc_auth_gss.c.orig 2008-01-24 14:41:21.000000000 -0500
|
||||
+++ libtirpc-0.1.7/src/svc_auth_gss.c 2008-01-24 14:59:31.000000000 -0500
|
||||
@@ -294,6 +294,15 @@ svcauth_gss_validate(struct svc_rpc_gss_
|
||||
memset(rpchdr, 0, sizeof(rpchdr));
|
||||
|
||||
/* XXX - Reconstruct RPC header for signing (from xdr_callmsg). */
|
||||
+ oa = &msg->rm_call.cb_cred;
|
||||
+ if (oa->oa_length > MAX_AUTH_BYTES)
|
||||
+ return (FALSE);
|
||||
+
|
||||
+ /* 8 XDR units from the IXDR macro calls. */
|
||||
+ if (sizeof(rpchdr) < (8 * BYTES_PER_XDR_UNIT +
|
||||
+ RNDUP(oa->oa_length)))
|
||||
+ return (FALSE);
|
||||
+
|
||||
buf = (int32_t *)rpchdr;
|
||||
IXDR_PUT_LONG(buf, msg->rm_xid);
|
||||
IXDR_PUT_ENUM(buf, msg->rm_direction);
|
||||
@@ -301,7 +310,6 @@ svcauth_gss_validate(struct svc_rpc_gss_
|
||||
IXDR_PUT_LONG(buf, msg->rm_call.cb_prog);
|
||||
IXDR_PUT_LONG(buf, msg->rm_call.cb_vers);
|
||||
IXDR_PUT_LONG(buf, msg->rm_call.cb_proc);
|
||||
- oa = &msg->rm_call.cb_cred;
|
||||
IXDR_PUT_ENUM(buf, oa->oa_flavor);
|
||||
IXDR_PUT_LONG(buf, oa->oa_length);
|
||||
if (oa->oa_length) {
|
@ -1,39 +0,0 @@
|
||||
commit 419d35db75ab8bd8f79c424f529a6c2f7c4f5fa7
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Fri May 4 09:27:00 2007 -0400
|
||||
|
||||
Fixed mutex locking problem in clnt_raw.c. One should grab the
|
||||
clntraw_lock before accessing at clntraw_private, not after.
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
Index: libtirpc-0.1.7/src/clnt_raw.c
|
||||
===================================================================
|
||||
--- libtirpc-0.1.7.orig/src/clnt_raw.c
|
||||
+++ libtirpc-0.1.7/src/clnt_raw.c
|
||||
@@ -82,12 +82,13 @@ clnt_raw_create(prog, vers)
|
||||
rpcprog_t prog;
|
||||
rpcvers_t vers;
|
||||
{
|
||||
- struct clntraw_private *clp = clntraw_private;
|
||||
+ struct clntraw_private *clp;
|
||||
struct rpc_msg call_msg;
|
||||
- XDR *xdrs = &clp->xdr_stream;
|
||||
- CLIENT *client = &clp->client_object;
|
||||
+ XDR *xdrs;
|
||||
+ CLIENT *client;
|
||||
|
||||
mutex_lock(&clntraw_lock);
|
||||
+ clp = clntraw_private;
|
||||
if (clp == NULL) {
|
||||
clp = (struct clntraw_private *)calloc(1, sizeof (*clp));
|
||||
if (clp == NULL) {
|
||||
@@ -100,6 +101,8 @@ clnt_raw_create(prog, vers)
|
||||
clp->_raw_buf = __rpc_rawcombuf;
|
||||
clntraw_private = clp;
|
||||
}
|
||||
+ xdrs = &clp->xdr_stream;
|
||||
+ client = &clp->client_object;
|
||||
/*
|
||||
* pre-serialize the static part of the call msg and stash it away
|
||||
*/
|
@ -1,98 +0,0 @@
|
||||
commit 40ab0c28e995786d5844bd490a31b788ecabf546
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Fri May 4 14:26:56 2007 -0400
|
||||
|
||||
Added IP_RECVERR processing with to clnt_dg_call() so
|
||||
application will see errors instead of timing out
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/src/clnt_dg.c b/src/clnt_dg.c
|
||||
index 151b449..0e35742 100644
|
||||
--- a/src/clnt_dg.c
|
||||
+++ b/src/clnt_dg.c
|
||||
@@ -55,6 +55,13 @@
|
||||
#include <err.h>
|
||||
#include "rpc_com.h"
|
||||
|
||||
+#ifdef IP_RECVERR
|
||||
+#include <asm/types.h>
|
||||
+#include <linux/errqueue.h>
|
||||
+#include <sys/uio.h>
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
#define MAX_DEFAULT_FDS 20000
|
||||
|
||||
static struct clnt_ops *clnt_dg_ops(void);
|
||||
@@ -246,6 +253,12 @@ clnt_dg_create(fd, svcaddr, program, version, sendsz, recvsz)
|
||||
#if 0
|
||||
(void)bindresvport_sa(fd, (struct sockaddr *)svcaddr->buf);
|
||||
#endif
|
||||
+#ifdef IP_RECVERR
|
||||
+ {
|
||||
+ int on = 1;
|
||||
+ setsockopt(fd, SOL_IP, IP_RECVERR, &on, sizeof(on));
|
||||
+ }
|
||||
+#endif
|
||||
ioctl(fd, FIONBIO, (char *)(void *)&one);
|
||||
/*
|
||||
* By default, closeit is always FALSE. It is users responsibility
|
||||
@@ -352,7 +365,7 @@ call_again:
|
||||
xid++;
|
||||
*(u_int32_t *)(void *)(cu->cu_outbuf) = htonl(xid);
|
||||
|
||||
- if ((! XDR_PUTINT32(xdrs, &proc)) ||
|
||||
+ if ((! XDR_PUTINT32(xdrs, (int32_t *)&proc)) ||
|
||||
(! AUTH_MARSHALL(cl->cl_auth, xdrs)) ||
|
||||
(! (*xargs)(xdrs, argsp))) {
|
||||
cu->cu_error.re_status = RPC_CANTENCODEARGS;
|
||||
@@ -404,6 +417,48 @@ get_reply:
|
||||
}
|
||||
break;
|
||||
}
|
||||
+#ifdef IP_RECVERR
|
||||
+ if (fd.revents & POLLERR)
|
||||
+ {
|
||||
+ struct msghdr msg;
|
||||
+ struct cmsghdr *cmsg;
|
||||
+ struct sock_extended_err *e;
|
||||
+ struct sockaddr_in err_addr;
|
||||
+ struct sockaddr_in *sin = (struct sockaddr_in *)&cu->cu_raddr;
|
||||
+ struct iovec iov;
|
||||
+ char *cbuf = (char *) alloca (outlen + 256);
|
||||
+ int ret;
|
||||
+
|
||||
+ iov.iov_base = cbuf + 256;
|
||||
+ iov.iov_len = outlen;
|
||||
+ msg.msg_name = (void *) &err_addr;
|
||||
+ msg.msg_namelen = sizeof (err_addr);
|
||||
+ msg.msg_iov = &iov;
|
||||
+ msg.msg_iovlen = 1;
|
||||
+ msg.msg_flags = 0;
|
||||
+ msg.msg_control = cbuf;
|
||||
+ msg.msg_controllen = 256;
|
||||
+ ret = recvmsg (cu->cu_fd, &msg, MSG_ERRQUEUE);
|
||||
+ if (ret >= 0
|
||||
+ && memcmp (cbuf + 256, cu->cu_outbuf, ret) == 0
|
||||
+ && (msg.msg_flags & MSG_ERRQUEUE)
|
||||
+ && ((msg.msg_namelen == 0
|
||||
+ && ret >= 12)
|
||||
+ || (msg.msg_namelen == sizeof (err_addr)
|
||||
+ && err_addr.sin_family == AF_INET
|
||||
+ && memcmp (&err_addr.sin_addr, &sin->sin_addr,
|
||||
+ sizeof (err_addr.sin_addr)) == 0
|
||||
+ && err_addr.sin_port == sin->sin_port)))
|
||||
+ for (cmsg = CMSG_FIRSTHDR (&msg); cmsg;
|
||||
+ cmsg = CMSG_NXTHDR (&msg, cmsg))
|
||||
+ if (cmsg->cmsg_level == SOL_IP && cmsg->cmsg_type == IP_RECVERR)
|
||||
+ {
|
||||
+ e = (struct sock_extended_err *) CMSG_DATA(cmsg);
|
||||
+ cu->cu_error.re_errno = e->ee_errno;
|
||||
+ return (cu->cu_error.re_status = RPC_CANTRECV);
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
/* We have some data now */
|
||||
do {
|
@ -1,28 +0,0 @@
|
||||
diff -up libtirpc-0.1.7/configure.in.orig libtirpc-0.1.7/configure.in
|
||||
--- libtirpc-0.1.7/configure.in.orig 2007-10-17 12:03:25.000000000 -0400
|
||||
+++ libtirpc-0.1.7/configure.in 2007-10-17 12:07:18.000000000 -0400
|
||||
@@ -10,6 +10,10 @@ AC_ARG_ENABLE(gss,[ --enable-gss
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-gss) ;;
|
||||
esac],[gss=false])
|
||||
AM_CONDITIONAL(GSS, test x$gss = xtrue)
|
||||
+if test x$gss = xtrue; then
|
||||
+ PKG_CHECK_MODULES(GSSGLUE, libgssglue, [],
|
||||
+ AC_MSG_ERROR([Unable to locate information required to use libgssglue.]))
|
||||
+fi
|
||||
|
||||
|
||||
AC_PROG_CC
|
||||
diff -up libtirpc-0.1.7/src/Makefile.am.orig libtirpc-0.1.7/src/Makefile.am
|
||||
--- libtirpc-0.1.7/src/Makefile.am.orig 2007-10-17 12:03:25.000000000 -0400
|
||||
+++ libtirpc-0.1.7/src/Makefile.am 2007-10-17 12:06:19.000000000 -0400
|
||||
@@ -29,8 +29,8 @@ libtirpc_la_SOURCES += xdr.c xdr_rec.c x
|
||||
## Secure-RPC
|
||||
if GSS
|
||||
libtirpc_la_SOURCES += auth_gss.c authgss_prot.c svc_auth_gss.c
|
||||
- libtirpc_la_LDFLAGS += -lgssapi
|
||||
- libtirpc_la_CFLAGS = -DHAVE_RPCSEC_GSS
|
||||
+ libtirpc_la_LDFLAGS += $(GSSGLUE_LIBS)
|
||||
+ libtirpc_la_CFLAGS = -DHAVE_RPCSEC_GSS -I/usr/include/gssglue $(GSSGLUE_LIBS)
|
||||
endif
|
||||
|
||||
## libtirpc_a_SOURCES += key_call.c key_prot_xdr.c getpublickey.c
|
@ -1,51 +0,0 @@
|
||||
commit 4d77b479511a27fb52b54811020176bb32099444
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Mon Feb 18 17:30:46 2008 -0500
|
||||
|
||||
Added that libtirpc.pc.in that will create
|
||||
the /usr/lib/pkgconfig/libtirpc.pc file that is
|
||||
used by the pkg-config(1) command
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/Makefile.am b/Makefile.am
|
||||
index 1a212e8..4e1503c 100644
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -43,6 +43,9 @@ nobase_include_HEADERS = tirpc/un-namespace.h \
|
||||
tirpc/rpc/auth_gss.h \
|
||||
tirpc/rpc/auth_des.h
|
||||
|
||||
+pkgconfigdir=$(libdir)/pkgconfig
|
||||
+pkgconfig_DATA = libtirpc.pc
|
||||
+
|
||||
install-exec-local:
|
||||
cp -p ./doc/etc_netconfig /etc/netconfig
|
||||
chmod 0644 /etc/netconfig
|
||||
diff --git a/configure.in b/configure.in
|
||||
index dc597dd..e907c31 100644
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -27,4 +27,4 @@ AC_CHECK_LIB([pthread], [pthread_create])
|
||||
|
||||
|
||||
AC_CONFIG_FILES([Makefile src/Makefile])
|
||||
-AC_OUTPUT()
|
||||
+AC_OUTPUT(libtirpc.pc)
|
||||
diff --git a/libtirpc.pc.in b/libtirpc.pc.in
|
||||
new file mode 100644
|
||||
index 0000000..df9e7ed
|
||||
--- /dev/null
|
||||
+++ b/libtirpc.pc.in
|
||||
@@ -0,0 +1,11 @@
|
||||
+prefix=@prefix@
|
||||
+exec_prefix=@exec_prefix@
|
||||
+libdir=@libdir@
|
||||
+includedir=@includedir@
|
||||
+
|
||||
+Name: libtirpc
|
||||
+Description: Transport Independent RPC Library
|
||||
+Requires:
|
||||
+Version: @PACKAGE_VERSION@
|
||||
+Libs: -L@libdir@ -ltirpc
|
||||
+Cflags: -I@includedir@/tirpc
|
@ -1,35 +0,0 @@
|
||||
Index: libtirpc-0.1.7/man/Makefile.am
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libtirpc-0.1.7/man/Makefile.am
|
||||
@@ -0,0 +1,9 @@
|
||||
+
|
||||
+man5_MANS = netconfig.5
|
||||
+man3_MANS = bindresvport.3t des_crypt.3t getnetconfig.3t getnetpath.3t \
|
||||
+ getrpcent.3t getrpcport.3t rpc.3t rpc_clnt_auth.3t rpc_clnt_calls.3t \
|
||||
+ rpc_clnt_create.3t rpc_secure.3t rpc_soc.3t rpc_svc_calls.3t \
|
||||
+ rpc_svc_create.3t rpc_svc_err.3t rpc_svc_reg.3t rpc_xdr.3t rtime.3t
|
||||
+
|
||||
+EXTRA_DIST = $(man5_MANS) $(man3_MANS)
|
||||
+
|
||||
Index: libtirpc-0.1.7/configure.in
|
||||
===================================================================
|
||||
--- libtirpc-0.1.7.orig/configure.in
|
||||
+++ libtirpc-0.1.7/configure.in
|
||||
@@ -26,5 +26,5 @@ AC_CHECK_HEADERS([arpa/inet.h fcntl.h li
|
||||
AC_CHECK_LIB([pthread], [pthread_create])
|
||||
|
||||
|
||||
-AC_CONFIG_FILES([Makefile src/Makefile])
|
||||
+AC_CONFIG_FILES([Makefile src/Makefile man/Makefile])
|
||||
AC_OUTPUT(libtirpc.pc)
|
||||
Index: libtirpc-0.1.7/Makefile.am
|
||||
===================================================================
|
||||
--- libtirpc-0.1.7.orig/Makefile.am
|
||||
+++ libtirpc-0.1.7/Makefile.am
|
||||
@@ -1,4 +1,4 @@
|
||||
-SUBDIRS = src
|
||||
+SUBDIRS = src man
|
||||
|
||||
nobase_include_HEADERS = tirpc/un-namespace.h \
|
||||
tirpc/spinlock.h \
|
@ -1,15 +0,0 @@
|
||||
--- libtirpc-0.1.7/doc/etc_netconfig.orig 2005-05-18 01:10:50.000000000 -0400
|
||||
+++ libtirpc-0.1.7/doc/etc_netconfig 2007-07-24 09:45:40.000000000 -0400
|
||||
@@ -10,10 +10,10 @@
|
||||
# The <device> and <nametoaddr_libs> fields are always empty in this
|
||||
# implementation.
|
||||
#
|
||||
-#udp6 tpi_clts v inet6 udp - -
|
||||
-#tcp6 tpi_cots_ord v inet6 tcp - -
|
||||
udp tpi_clts v inet udp - -
|
||||
tcp tpi_cots_ord v inet tcp - -
|
||||
+udp6 tpi_clts - inet6 udp6 - -
|
||||
+tcp6 tpi_cots_ord - inet6 tcp6 - -
|
||||
rawip tpi_raw - inet - - -
|
||||
local tpi_cots_ord - loopback - - -
|
||||
unix tpi_cots_ord - loopback - - -
|
@ -1,12 +0,0 @@
|
||||
--- libtirpc-0.1.7/src/xdr_float.c.orig 2005-05-18 01:10:50.000000000 -0400
|
||||
+++ libtirpc-0.1.7/src/xdr_float.c 2006-08-16 08:41:43.000000000 -0400
|
||||
@@ -58,7 +58,8 @@
|
||||
#if defined(__m68k__) || defined(__sparc__) || defined(__i386__) || \
|
||||
defined(__mips__) || defined(__ns32k__) || defined(__alpha__) || \
|
||||
defined(__arm32__) || defined(__ppc__) || defined(__ia64__) || \
|
||||
- defined(__arm26__) || defined(__sparc64__) || defined(__amd64__)
|
||||
+ defined(__arm26__) || defined(__sparc64__) || defined(__amd64__) || \
|
||||
+ defined(__powerpc__) || defined(__s390__)
|
||||
#include <bits/endian.h>
|
||||
#define IEEEFP
|
||||
#endif
|
@ -1,150 +0,0 @@
|
||||
commit a3a3a4e5157932c254200e3b31a78739f5878071
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Fri May 4 11:27:43 2007 -0400
|
||||
|
||||
Ignore the return value of snprintf() and use strlen() instead
|
||||
to bump the pointer in clnt_sperror()
|
||||
|
||||
Also removed calls to assert(), not needed.
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/src/clnt_perror.c b/src/clnt_perror.c
|
||||
index e46d95f..8f53f8e 100644
|
||||
--- a/src/clnt_perror.c
|
||||
+++ b/src/clnt_perror.c
|
||||
@@ -36,7 +36,6 @@
|
||||
* Copyright (C) 1984, Sun Microsystems, Inc.
|
||||
*
|
||||
*/
|
||||
-#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -75,8 +74,8 @@ clnt_sperror(rpch, s)
|
||||
char *strstart;
|
||||
size_t len, i;
|
||||
|
||||
- assert(rpch != NULL);
|
||||
- assert(s != NULL);
|
||||
+ if (rpch == NULL || s == NULL)
|
||||
+ return(0);
|
||||
|
||||
str = _buf(); /* side effect: sets CLNT_PERROR_BUFLEN */
|
||||
if (str == 0)
|
||||
@@ -85,7 +84,8 @@ clnt_sperror(rpch, s)
|
||||
strstart = str;
|
||||
CLNT_GETERR(rpch, &e);
|
||||
|
||||
- if ((i = snprintf(str, len, "%s: ", s)) > 0) {
|
||||
+ if (snprintf(str, len, "%s: ", s) > 0) {
|
||||
+ i = strlen(str);
|
||||
str += i;
|
||||
len -= i;
|
||||
}
|
||||
@@ -113,7 +113,8 @@ clnt_sperror(rpch, s)
|
||||
|
||||
case RPC_CANTSEND:
|
||||
case RPC_CANTRECV:
|
||||
- i = snprintf(str, len, "; errno = %s", strerror(e.re_errno));
|
||||
+ snprintf(str, len, "; errno = %s", strerror(e.re_errno));
|
||||
+ i = strlen(str);
|
||||
if (i > 0) {
|
||||
str += i;
|
||||
len -= i;
|
||||
@@ -121,8 +122,9 @@ clnt_sperror(rpch, s)
|
||||
break;
|
||||
|
||||
case RPC_VERSMISMATCH:
|
||||
- i = snprintf(str, len, "; low version = %u, high version = %u",
|
||||
+ snprintf(str, len, "; low version = %u, high version = %u",
|
||||
e.re_vers.low, e.re_vers.high);
|
||||
+ i = strlen(str);
|
||||
if (i > 0) {
|
||||
str += i;
|
||||
len -= i;
|
||||
@@ -131,18 +133,20 @@ clnt_sperror(rpch, s)
|
||||
|
||||
case RPC_AUTHERROR:
|
||||
err = auth_errmsg(e.re_why);
|
||||
- i = snprintf(str, len, "; why = ");
|
||||
+ snprintf(str, len, "; why = ");
|
||||
+ i = strlen(str);
|
||||
if (i > 0) {
|
||||
str += i;
|
||||
len -= i;
|
||||
}
|
||||
if (err != NULL) {
|
||||
- i = snprintf(str, len, "%s",err);
|
||||
+ snprintf(str, len, "%s",err);
|
||||
} else {
|
||||
- i = snprintf(str, len,
|
||||
+ snprintf(str, len,
|
||||
"(unknown authentication error - %d)",
|
||||
(int) e.re_why);
|
||||
}
|
||||
+ i = strlen(str);
|
||||
if (i > 0) {
|
||||
str += i;
|
||||
len -= i;
|
||||
@@ -150,8 +154,9 @@ clnt_sperror(rpch, s)
|
||||
break;
|
||||
|
||||
case RPC_PROGVERSMISMATCH:
|
||||
- i = snprintf(str, len, "; low version = %u, high version = %u",
|
||||
+ snprintf(str, len, "; low version = %u, high version = %u",
|
||||
e.re_vers.low, e.re_vers.high);
|
||||
+ i = strlen(str);
|
||||
if (i > 0) {
|
||||
str += i;
|
||||
len -= i;
|
||||
@@ -159,8 +164,9 @@ clnt_sperror(rpch, s)
|
||||
break;
|
||||
|
||||
default: /* unknown */
|
||||
- i = snprintf(str, len, "; s1 = %u, s2 = %u",
|
||||
+ snprintf(str, len, "; s1 = %u, s2 = %u",
|
||||
e.re_lb.s1, e.re_lb.s2);
|
||||
+ i = strlen(str);
|
||||
if (i > 0) {
|
||||
str += i;
|
||||
len -= i;
|
||||
@@ -177,8 +183,8 @@ clnt_perror(rpch, s)
|
||||
const char *s;
|
||||
{
|
||||
|
||||
- assert(rpch != NULL);
|
||||
- assert(s != NULL);
|
||||
+ if (rpch == NULL || s == NULL)
|
||||
+ return;
|
||||
|
||||
(void) fprintf(stderr, "%s\n", clnt_sperror(rpch,s));
|
||||
}
|
||||
@@ -236,13 +242,15 @@ clnt_spcreateerror(s)
|
||||
char *str;
|
||||
size_t len, i;
|
||||
|
||||
- assert(s != NULL);
|
||||
+ if (s == NULL)
|
||||
+ return(0);
|
||||
|
||||
str = _buf(); /* side effect: sets CLNT_PERROR_BUFLEN */
|
||||
if (str == 0)
|
||||
return(0);
|
||||
len = CLNT_PERROR_BUFLEN;
|
||||
- i = snprintf(str, len, "%s: ", s);
|
||||
+ snprintf(str, len, "%s: ", s);
|
||||
+ i = strlen(str);
|
||||
if (i > 0)
|
||||
len -= i;
|
||||
(void)strncat(str, clnt_sperrno(rpc_createerr.cf_stat), len - 1);
|
||||
@@ -287,7 +295,8 @@ clnt_pcreateerror(s)
|
||||
const char *s;
|
||||
{
|
||||
|
||||
- assert(s != NULL);
|
||||
+ if (s == NULL)
|
||||
+ return;
|
||||
|
||||
(void) fprintf(stderr, "%s\n", clnt_spcreateerror(s));
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
commit f8ff8f0de33606ff544dc87c0a9993fd3a0f5475
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Mon Jul 30 07:26:45 2007 -0400
|
||||
|
||||
- Make sure remote address (xp_rtaddr) is populated
|
||||
with the correct type of address.
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/src/svc_vc.c b/src/svc_vc.c
|
||||
index 48494e1..3d77aef 100644
|
||||
--- a/src/svc_vc.c
|
||||
+++ b/src/svc_vc.c
|
||||
@@ -239,7 +239,10 @@ svc_fd_create(fd, sendsize, recvsize)
|
||||
warnx("svc_fd_create: no mem for local addr");
|
||||
goto freedata;
|
||||
}
|
||||
- memcpy(ret->xp_rtaddr.buf, &sin6, (size_t)sizeof(ss));
|
||||
+ if (ss.ss_family == AF_INET)
|
||||
+ memcpy(ret->xp_rtaddr.buf, &ss, (size_t)sizeof(ss));
|
||||
+ else
|
||||
+ memcpy(ret->xp_rtaddr.buf, &sin6, (size_t)sizeof(ss));
|
||||
#ifdef PORTMAP
|
||||
if (sin6.sin6_family == AF_INET6 || sin6.sin6_family == AF_LOCAL) {
|
||||
memcpy(&ret->xp_raddr, ret->xp_rtaddr.buf,
|
||||
@@ -343,20 +346,23 @@ again:
|
||||
newxprt = makefd_xprt(sock, r->sendsize, r->recvsize);
|
||||
if (addr.ss_family == AF_INET) {
|
||||
map_ipv4_to_ipv6((struct sockaddr_in *)&addr, &sin6);
|
||||
- len = sizeof(struct sockaddr_in6);
|
||||
} else {
|
||||
memcpy(&sin6, &addr, len);
|
||||
}
|
||||
newxprt->xp_rtaddr.buf = mem_alloc(len);
|
||||
if (newxprt->xp_rtaddr.buf == NULL)
|
||||
return (FALSE);
|
||||
- memcpy(newxprt->xp_rtaddr.buf, &sin6, len);
|
||||
+
|
||||
+ if (addr.ss_family == AF_INET)
|
||||
+ memcpy(newxprt->xp_rtaddr.buf, &addr, len);
|
||||
+ else
|
||||
+ memcpy(newxprt->xp_rtaddr.buf, &sin6, len);
|
||||
newxprt->xp_rtaddr.maxlen = newxprt->xp_rtaddr.len = len;
|
||||
#ifdef PORTMAP
|
||||
if (sin6.sin6_family == AF_INET6 || sin6.sin6_family == AF_LOCAL) {
|
||||
memcpy(&newxprt->xp_raddr, newxprt->xp_rtaddr.buf,
|
||||
sizeof(struct sockaddr_in6));
|
||||
- newxprt->xp_addrlen = len;
|
||||
+ newxprt->xp_addrlen = sizeof(struct sockaddr_in6);
|
||||
}
|
||||
#endif /* PORTMAP */
|
||||
if (__rpc_fd2sockinfo(sock, &si) && si.si_proto == IPPROTO_TCP) {
|
@ -1,19 +0,0 @@
|
||||
--- libtirpc-0.1.7/src/svc_run.c.orig 2005-05-18 01:10:50.000000000 -0400
|
||||
+++ libtirpc-0.1.7/src/svc_run.c 2007-07-09 12:52:23.000000000 -0400
|
||||
@@ -51,14 +51,14 @@ svc_run()
|
||||
struct timeval timeout;
|
||||
extern rwlock_t svc_fd_lock;
|
||||
|
||||
- timeout.tv_sec = 30;
|
||||
- timeout.tv_usec = 0;
|
||||
|
||||
for (;;) {
|
||||
rwlock_rdlock(&svc_fd_lock);
|
||||
readfds = svc_fdset;
|
||||
cleanfds = svc_fdset;
|
||||
rwlock_unlock(&svc_fd_lock);
|
||||
+ timeout.tv_sec = 30;
|
||||
+ timeout.tv_usec = 0;
|
||||
switch (select(svc_maxfd+1, &readfds, NULL, NULL, &timeout)) {
|
||||
case -1:
|
||||
FD_ZERO(&readfds);
|
@ -1,13 +0,0 @@
|
||||
Index: libtirpc-0.1.7/src/svc_auth_gss.c
|
||||
===================================================================
|
||||
--- libtirpc-0.1.7.orig/src/svc_auth_gss.c
|
||||
+++ libtirpc-0.1.7/src/svc_auth_gss.c
|
||||
@@ -390,7 +390,7 @@ _svcauth_gss(struct svc_req *rqst, struc
|
||||
return (AUTH_FAILED);
|
||||
}
|
||||
auth->svc_ah_ops = &svc_auth_gss_ops;
|
||||
- SVCAUTH_PRIVATE(auth) = gd;
|
||||
+ auth->svc_ah_private = gd;
|
||||
rqst->rq_xprt->xp_auth = auth;
|
||||
}
|
||||
else gd = SVCAUTH_PRIVATE(rqst->rq_xprt->xp_auth);
|
@ -1,12 +0,0 @@
|
||||
--- libtirpc-0.1.7/tirpc/rpc/svc_auth.h.orig 2005-05-18 01:10:51.000000000 -0400
|
||||
+++ libtirpc-0.1.7/tirpc/rpc/svc_auth.h 2006-08-28 08:13:37.801283000 -0400
|
||||
@@ -54,6 +54,9 @@
|
||||
caddr_t svc_ah_private;
|
||||
} SVCAUTH;
|
||||
|
||||
+#define SVCAUTH_DESTROY(cred) ((*(cred)->svc_ah_ops->svc_ah_destroy)())
|
||||
+#define svcauth_destroy(cred) ((*(cred)->svc_ah_ops->svc_ah_destroy)())
|
||||
+
|
||||
/*
|
||||
* Server side authenticator
|
||||
*/
|
@ -1,101 +0,0 @@
|
||||
Index: libtirpc-0.1.7/src/svc_auth_none.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libtirpc-0.1.7/src/svc_auth_none.c
|
||||
@@ -0,0 +1,73 @@
|
||||
+/*
|
||||
+ svc_auth_none.c
|
||||
+
|
||||
+ Copyright (c) 2000 The Regents of the University of Michigan.
|
||||
+ All rights reserved.
|
||||
+
|
||||
+ Copyright (c) 2000 Dug Song <dugsong@UMICH.EDU>.
|
||||
+ All rights reserved, all wrongs reversed.
|
||||
+
|
||||
+ Redistribution and use in source and binary forms, with or without
|
||||
+ modification, are permitted provided that the following conditions
|
||||
+ are met:
|
||||
+
|
||||
+ 1. Redistributions of source code must retain the above copyright
|
||||
+ notice, this list of conditions and the following disclaimer.
|
||||
+ 2. Redistributions in binary form must reproduce the above copyright
|
||||
+ notice, this list of conditions and the following disclaimer in the
|
||||
+ documentation and/or other materials provided with the distribution.
|
||||
+ 3. Neither the name of the University nor the names of its
|
||||
+ contributors may be used to endorse or promote products derived
|
||||
+ from this software without specific prior written permission.
|
||||
+
|
||||
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
+ DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
+
|
||||
+ $Id: svc_auth_none.c,v 1.1 2004/10/22 17:24:30 bfields Exp $
|
||||
+ */
|
||||
+
|
||||
+#include <rpc/rpc.h>
|
||||
+
|
||||
+static bool_t svcauth_none_destroy();
|
||||
+static bool_t svcauth_none_wrap();
|
||||
+
|
||||
+struct svc_auth_ops svc_auth_none_ops = {
|
||||
+ svcauth_none_wrap,
|
||||
+ svcauth_none_wrap,
|
||||
+ svcauth_none_destroy
|
||||
+};
|
||||
+
|
||||
+SVCAUTH svc_auth_none = {
|
||||
+ &svc_auth_none_ops,
|
||||
+ NULL,
|
||||
+};
|
||||
+
|
||||
+static bool_t
|
||||
+svcauth_none_destroy(SVCAUTH *auth)
|
||||
+{
|
||||
+ return (TRUE);
|
||||
+}
|
||||
+
|
||||
+static bool_t
|
||||
+svcauth_none_wrap(SVCAUTH *auth, XDR *xdrs, xdrproc_t xdr_func,
|
||||
+ caddr_t xdr_ptr)
|
||||
+{
|
||||
+ return ((*xdr_func)(xdrs, xdr_ptr));
|
||||
+}
|
||||
+
|
||||
+enum auth_stat
|
||||
+_svcauth_none(struct svc_req *rqst, struct rpc_msg *msg)
|
||||
+{
|
||||
+ rqst->rq_xprt->xp_auth = &svc_auth_none;
|
||||
+
|
||||
+ return (AUTH_OK);
|
||||
+}
|
||||
Index: libtirpc-0.1.7/src/Makefile.am
|
||||
===================================================================
|
||||
--- libtirpc-0.1.7.orig/src/Makefile.am
|
||||
+++ libtirpc-0.1.7/src/Makefile.am
|
||||
@@ -28,7 +28,8 @@ libtirpc_la_SOURCES += xdr.c xdr_rec.c x
|
||||
|
||||
## Secure-RPC
|
||||
if GSS
|
||||
- libtirpc_la_SOURCES += auth_gss.c authgss_prot.c svc_auth_gss.c
|
||||
+ libtirpc_la_SOURCES += auth_gss.c authgss_prot.c svc_auth_gss.c \
|
||||
+ svc_auth_none.c
|
||||
libtirpc_la_LDFLAGS += $(GSSGLUE_LIBS)
|
||||
libtirpc_la_CFLAGS = -DHAVE_RPCSEC_GSS -I/usr/include/gssglue $(GSSGLUE_LIBS)
|
||||
endif
|
||||
@@ -49,7 +50,7 @@ $(libtirpc_la_OBJECTS) :auth_none.c auth
|
||||
svc_raw.c svc_run.c svc_simple.c svc_vc.c \
|
||||
xdr.c xdr_rec.c xdr_array.c xdr_float.c xdr_mem.c xdr_reference.c xdr_stdio.c \
|
||||
auth_gss.c authgss_prot.c svc_auth_gss.c getpeereid.c \
|
||||
- auth_time.c auth_des.c authdes_prot.c
|
||||
+ auth_time.c auth_des.c authdes_prot.c svc_auth_none.c
|
||||
|
||||
else
|
||||
$(libtirpc_la_OBJECTS) :auth_none.c auth_unix.c authunix_prot.c bindresvport.c clnt_bcast.c \
|
@ -1,13 +1,13 @@
|
||||
Index: libtirpc-0.1.7/Makefile.am
|
||||
Index: libtirpc-0.1.9/Makefile.am
|
||||
===================================================================
|
||||
--- libtirpc-0.1.7.orig/Makefile.am
|
||||
+++ libtirpc-0.1.7/Makefile.am
|
||||
@@ -44,5 +44,6 @@ nobase_include_HEADERS = tirpc/un-namesp
|
||||
tirpc/rpc/auth_des.h
|
||||
|
||||
--- libtirpc-0.1.9.orig/Makefile.am 2008-07-09 20:13:20.000000000 +0200
|
||||
+++ libtirpc-0.1.9/Makefile.am 2008-09-02 13:40:24.000000000 +0200
|
||||
@@ -47,5 +47,6 @@ pkgconfigdir=$(libdir)/pkgconfig
|
||||
pkgconfig_DATA = libtirpc.pc
|
||||
|
||||
install-exec-local:
|
||||
- cp -p ./doc/etc_netconfig /etc/netconfig
|
||||
- chmod 0644 /etc/netconfig
|
||||
- cp -p ./doc/etc_netconfig $(DESTDIR)/etc/netconfig
|
||||
- chmod 0644 $(DESTDIR)/etc/netconfig
|
||||
+ mkdir -p $(DESTDIR)$(sysconfdir)
|
||||
+ cp -p ./doc/etc_netconfig $(DESTDIR)$(sysconfdir)/netconfig
|
||||
+ chmod 0644 $(DESTDIR)$(sysconfdir)/netconfig
|
||||
|
@ -1,26 +0,0 @@
|
||||
Index: libtirpc-0.1.7/configure.in
|
||||
===================================================================
|
||||
--- libtirpc-0.1.7.orig/configure.in
|
||||
+++ libtirpc-0.1.7/configure.in
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
-AC_INIT(libtirpc, 0.1.5)
|
||||
-AM_INIT_AUTOMAKE(libtirpc, 0.1.5)
|
||||
+AC_INIT(libtirpc, 0.1.7)
|
||||
+AM_INIT_AUTOMAKE(libtirpc, 0.1.7)
|
||||
AM_MAINTAINER_MODE
|
||||
AC_CONFIG_SRCDIR([src/auth_des.c])
|
||||
|
||||
Index: libtirpc-0.1.7/src/Makefile.am
|
||||
===================================================================
|
||||
--- libtirpc-0.1.7.orig/src/Makefile.am
|
||||
+++ libtirpc-0.1.7/src/Makefile.am
|
||||
@@ -11,7 +11,7 @@ INCLUDES = -I../tirpc -DPORTMAP -DINET6
|
||||
|
||||
lib_LTLIBRARIES = libtirpc.la
|
||||
|
||||
-libtirpc_la_LDFLAGS = -lnsl -lpthread
|
||||
+libtirpc_la_LDFLAGS = -lnsl -lpthread -version-info 1:7:0
|
||||
|
||||
libtirpc_la_SOURCES = auth_none.c auth_unix.c authunix_prot.c bindresvport.c clnt_bcast.c \
|
||||
clnt_dg.c clnt_generic.c clnt_perror.c clnt_raw.c clnt_simple.c \
|
@ -1,45 +0,0 @@
|
||||
commit 30431c6d846eab1bc6b7a3a91a7894f3acf2680f
|
||||
Author: Steve Dickson <steved@redhat.com>
|
||||
Date: Thu Apr 26 14:42:16 2007 -0400
|
||||
|
||||
Check for buffer overflow in xdr_string.
|
||||
|
||||
Signed-off-by: Steve Dickson <steved@redhat.com>
|
||||
|
||||
diff --git a/src/xdr.c b/src/xdr.c
|
||||
index 764c30f..292723b 100644
|
||||
--- a/src/xdr.c
|
||||
+++ b/src/xdr.c
|
||||
@@ -669,6 +669,8 @@ xdr_string(xdrs, cpp, maxsize)
|
||||
}
|
||||
/* FALLTHROUGH */
|
||||
case XDR_ENCODE:
|
||||
+ if (sp == NULL)
|
||||
+ return FALSE;
|
||||
size = strlen(sp);
|
||||
break;
|
||||
case XDR_DECODE:
|
||||
@@ -681,6 +683,13 @@ xdr_string(xdrs, cpp, maxsize)
|
||||
return (FALSE);
|
||||
}
|
||||
nodesize = size + 1;
|
||||
+ if (nodesize == 0) {
|
||||
+ /* This means an overflow. It a bug in the caller which
|
||||
+ * provided a too large maxsize but nevertheless catch it
|
||||
+ * here.
|
||||
+ */
|
||||
+ return FALSE;
|
||||
+ }
|
||||
|
||||
/*
|
||||
* now deal with the actual bytes
|
||||
@@ -688,9 +697,6 @@ xdr_string(xdrs, cpp, maxsize)
|
||||
switch (xdrs->x_op) {
|
||||
|
||||
case XDR_DECODE:
|
||||
- if (nodesize == 0) {
|
||||
- return (TRUE);
|
||||
- }
|
||||
if (sp == NULL)
|
||||
*cpp = sp = mem_alloc(nodesize);
|
||||
if (sp == NULL) {
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c66778f179fd5883d2cf8172c6aa730edacb2c1e4fc30ed4db165aed82d4c984
|
||||
size 450332
|
23
libtirpc-0.1.9-fix_broadcast.patch
Normal file
23
libtirpc-0.1.9-fix_broadcast.patch
Normal file
@ -0,0 +1,23 @@
|
||||
From: Olaf Kirch <okir@suse.de>
|
||||
Subject: Fix incorrect sizeof() in __rpc_getbroadifs
|
||||
|
||||
__rpc_getbroadifs returns bad broadcast addresses on 32bit
|
||||
machines because when copying the broadcast addresses, ite
|
||||
applies the sizeof() operator to a pointer to a sockaddr,
|
||||
rather than the sockaddr itself.
|
||||
|
||||
Signed-off-by: Olaf Kirch <okir@suse.de>
|
||||
|
||||
Index: libtirpc-0.1.7/src/clnt_bcast.c
|
||||
===================================================================
|
||||
--- libtirpc-0.1.7.orig/src/clnt_bcast.c
|
||||
+++ libtirpc-0.1.7/src/clnt_bcast.c
|
||||
@@ -163,7 +163,7 @@ __rpc_getbroadifs(int af, int proto, int
|
||||
/* memcpy(&bip->broadaddr, ifap->ifa_broadaddr,
|
||||
(size_t)ifap->ifa_broadaddr->sa_len);*/
|
||||
memcpy(&bip->broadaddr, ifap->ifa_broadaddr,
|
||||
- (size_t)sizeof(ifap->ifa_broadaddr));
|
||||
+ sizeof(bip->broadaddr));
|
||||
sin = (struct sockaddr_in *)(void *)&bip->broadaddr;
|
||||
sin->sin_port =
|
||||
((struct sockaddr_in *)
|
56
libtirpc-0.1.9-ipv6_sockets_v6only.patch
Normal file
56
libtirpc-0.1.9-ipv6_sockets_v6only.patch
Normal file
@ -0,0 +1,56 @@
|
||||
From: Olaf Kirch <okir@suse.de>
|
||||
Subject: Always make IPv6 sockets V6ONLY
|
||||
|
||||
Assume you have a netconfig file looking like this:
|
||||
|
||||
udp tpi_clts v inet udp - -
|
||||
udp6 tpi_clts v inet6 udp - -
|
||||
...
|
||||
|
||||
a call to svc_tli_create(... &someaddr, "udp") will fail to create an
|
||||
IPv6 server socket. The problem is that on Linux, passive IPv6 sockets
|
||||
will also accept packets/connections from IPv4, and will simply map
|
||||
the sender's address to an IPv6 mapped IPv4 address. So if you want to
|
||||
bind both a UDPv4 and UDPv6 socket to the same port, this will fail with
|
||||
EADDRINUSE.
|
||||
|
||||
The way to avoid this behavior is to change the socket to V6ONLY,
|
||||
which tells the kernel to avoid the autmatic mapping.
|
||||
|
||||
The change proposed in the patch below does this. I *think* this is
|
||||
a good place to do this, as it will also fix applications that do not
|
||||
use svc_tli_create() - such as rpcbind, which creates the sockets on
|
||||
its own using __rpc_nconf2fd.
|
||||
|
||||
I think this also improves portability, as BSD code assumes BSD
|
||||
behavior, where this mapping does not occur either.
|
||||
|
||||
Signed-off-by: okir@suse.de
|
||||
---
|
||||
src/rpc_generic.c | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: libtirpc/src/rpc_generic.c
|
||||
===================================================================
|
||||
--- libtirpc.orig/src/rpc_generic.c
|
||||
+++ libtirpc/src/rpc_generic.c
|
||||
@@ -525,11 +525,18 @@ int
|
||||
__rpc_nconf2fd(const struct netconfig *nconf)
|
||||
{
|
||||
struct __rpc_sockinfo si;
|
||||
+ int fd;
|
||||
|
||||
if (!__rpc_nconf2sockinfo(nconf, &si))
|
||||
return 0;
|
||||
|
||||
- return socket(si.si_af, si.si_socktype, si.si_proto);
|
||||
+ if ((fd = socket(si.si_af, si.si_socktype, si.si_proto)) >= 0 &&
|
||||
+ si.si_af == AF_INET6) {
|
||||
+ int val = 1;
|
||||
+
|
||||
+ setsockopt(fd, SOL_IPV6, IPV6_V6ONLY, &val, sizeof(val));
|
||||
+ }
|
||||
+ return fd;
|
||||
}
|
||||
|
||||
int
|
13
libtirpc-0.1.9-lib_version.patch
Normal file
13
libtirpc-0.1.9-lib_version.patch
Normal file
@ -0,0 +1,13 @@
|
||||
Index: libtirpc-0.1.9/src/Makefile.am
|
||||
===================================================================
|
||||
--- libtirpc-0.1.9.orig/src/Makefile.am 2008-07-09 20:13:20.000000000 +0200
|
||||
+++ libtirpc-0.1.9/src/Makefile.am 2008-09-02 19:24:32.000000000 +0200
|
||||
@@ -11,7 +11,7 @@ INCLUDES = -I../tirpc -DPORTMAP -DINET6
|
||||
|
||||
lib_LTLIBRARIES = libtirpc.la
|
||||
|
||||
-libtirpc_la_LDFLAGS = -lnsl -lpthread -version-info 1:8:0
|
||||
+libtirpc_la_LDFLAGS = -lnsl -lpthread -version-info 1:9:0
|
||||
|
||||
libtirpc_la_SOURCES = auth_none.c auth_unix.c authunix_prot.c bindresvport.c clnt_bcast.c \
|
||||
clnt_dg.c clnt_generic.c clnt_perror.c clnt_raw.c clnt_simple.c \
|
3
libtirpc-0.1.9.tar.bz2
Normal file
3
libtirpc-0.1.9.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8a8deae8e62dc75e1eb4f2ae01c1f047823040b3c196c639b6e0d795be3d1552
|
||||
size 411219
|
@ -1,3 +1,31 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Sep 2 18:49:16 CEST 2008 - mkoenig@suse.de
|
||||
|
||||
- update to version 0.1.9
|
||||
* several bugfixes
|
||||
- fix rpc_broadcast [bnc#421950]
|
||||
- fix ipv4+ipv6 binding [bnc#421976]
|
||||
- removed patches
|
||||
libtirpc-0.1.7-arm.patch
|
||||
libtirpc-0.1.7-bindresvport-ntohs.patch
|
||||
libtirpc-0.1.7-bindresvport_ports.patch
|
||||
libtirpc-0.1.7-bufoverflow.patch
|
||||
libtirpc-0.1.7-clnt_raw-mutex.patch
|
||||
libtirpc-0.1.7-dgcall-iprecverr.patch
|
||||
libtirpc-0.1.7-gssglue.patch
|
||||
libtirpc-0.1.7-libtirpc-pc.patch
|
||||
libtirpc-0.1.7-man-install.patch
|
||||
libtirpc-0.1.7-netconfig.patch
|
||||
libtirpc-0.1.7-ppc64.patch
|
||||
libtirpc-0.1.7-snprintf.patch
|
||||
libtirpc-0.1.7-svcauthdestroy.patch
|
||||
libtirpc-0.1.7-svc_auth_gss_lvalue_fix.patch
|
||||
libtirpc-0.1.7-svcauthnone.patch
|
||||
libtirpc-0.1.7-svc-rtaddr.patch
|
||||
libtirpc-0.1.7-svc-run.patch
|
||||
libtirpc-0.1.7-version.patch
|
||||
libtirpc-0.1.7-xdr_bufferoverlow.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Aug 1 17:32:28 CEST 2008 - ro@suse.de
|
||||
|
||||
|
@ -1,10 +1,17 @@
|
||||
#
|
||||
# spec file for package libtirpc (Version 0.1.7)
|
||||
# spec file for package libtirpc (Version 0.1.9)
|
||||
#
|
||||
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||
# This file and all modifications and additions to the pristine
|
||||
# package are under the same license as the package itself.
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
# upon. The license for this file, and modifications and additions to the
|
||||
# file, is the same license as for the pristine package itself (unless the
|
||||
# license for the pristine package is not an Open Source License, in which
|
||||
# case the license is the MIT License). An "Open Source License" is a
|
||||
# license that conforms to the Open Source Definition (Version 1.9)
|
||||
# published by the Open Source Initiative.
|
||||
|
||||
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
||||
#
|
||||
|
||||
@ -16,33 +23,16 @@ Name: libtirpc
|
||||
License: Other uncritical OpenSource License; Sun Industry Standards Source License 1.0
|
||||
Group: System/Libraries
|
||||
AutoReqProv: on
|
||||
Version: 0.1.7
|
||||
Release: 4
|
||||
Version: 0.1.9
|
||||
Release: 1
|
||||
Summary: Transport Independent RPC Library
|
||||
Url: http://nfsv4.bullopensource.org/doc/tirpc_rpcbind.php
|
||||
Source: %{name}-%{version}.tar.bz2
|
||||
Patch1: libtirpc-0.1.7-netconfig.patch
|
||||
Patch2: libtirpc-0.1.7-gssglue.patch
|
||||
Patch3: libtirpc-0.1.7-svcauthnone.patch
|
||||
Patch4: libtirpc-0.1.7-ppc64.patch
|
||||
Patch5: libtirpc-0.1.7-svcauthdestroy.patch
|
||||
Patch6: libtirpc-0.1.7-xdr_bufferoverlow.patch
|
||||
Patch7: libtirpc-0.1.7-bindresvport_ports.patch
|
||||
Patch8: libtirpc-0.1.7-svc-run.patch
|
||||
Patch9: libtirpc-0.1.7-clnt_raw-mutex.patch
|
||||
Patch10: libtirpc-0.1.7-snprintf.patch
|
||||
Patch11: libtirpc-0.1.7-bindresvport-ntohs.patch
|
||||
Patch12: libtirpc-0.1.7-dgcall-iprecverr.patch
|
||||
Patch13: libtirpc-0.1.7-svc-rtaddr.patch
|
||||
Patch14: libtirpc-0.1.7-arm.patch
|
||||
Patch15: libtirpc-0.1.7-bufoverflow.patch
|
||||
Patch16: libtirpc-0.1.7-libtirpc-pc.patch
|
||||
Patch17: libtirpc-0.1.7-man-install.patch
|
||||
#
|
||||
Patch20: libtirpc-0.1.7-use_sysconfdir.patch
|
||||
Patch21: libtirpc-0.1.7-overflow_fix.patch
|
||||
Patch22: libtirpc-0.1.7-version.patch
|
||||
Patch23: libtirpc-0.1.7-svc_auth_gss_lvalue_fix.patch
|
||||
Patch24: libtirpc-0.1.9-fix_broadcast.patch
|
||||
Patch25: libtirpc-0.1.9-ipv6_sockets_v6only.patch
|
||||
Patch26: libtirpc-0.1.9-lib_version.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
%define debug_package_requires libtirpc1 = %{version}
|
||||
|
||||
@ -80,7 +70,7 @@ Authors:
|
||||
%package devel
|
||||
License: Other uncritical OpenSource License; Sun Industry Standards Source License 1.0
|
||||
Summary: Transport Independent RPC Library
|
||||
Group: System/Libraries
|
||||
Group: Development/Libraries/C and C++
|
||||
Requires: libtirpc1 = %{version}
|
||||
|
||||
%description devel
|
||||
@ -98,30 +88,11 @@ Authors:
|
||||
|
||||
%prep
|
||||
%setup
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch13 -p1
|
||||
%patch14 -p1
|
||||
%patch15 -p1
|
||||
%patch16 -p1
|
||||
%patch17 -p1
|
||||
%patch20 -p1
|
||||
%patch21 -p1
|
||||
%patch22 -p1
|
||||
%patch23 -p1
|
||||
pushd man
|
||||
for f in *.3; do mv $f ${f}t; done
|
||||
popd
|
||||
%patch24 -p1
|
||||
%patch25 -p1
|
||||
%patch26 -p1
|
||||
|
||||
%build
|
||||
autoreconf -fi
|
||||
@ -154,8 +125,8 @@ rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files -n libtirpc1
|
||||
%defattr(-,root,root)
|
||||
%config %{_sysconfdir}/netconfig
|
||||
/%{_lib}/libtirpc.so.1*
|
||||
%{_sysconfdir}/netconfig
|
||||
%{_mandir}/man5/netconfig.5.gz
|
||||
|
||||
%files devel
|
||||
@ -167,6 +138,31 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%{_mandir}/man3/*
|
||||
|
||||
%changelog
|
||||
* Tue Sep 02 2008 mkoenig@suse.de
|
||||
- update to version 0.1.9
|
||||
* several bugfixes
|
||||
- fix rpc_broadcast [bnc#421950]
|
||||
- fix ipv4+ipv6 binding [bnc#421976]
|
||||
- removed patches
|
||||
libtirpc-0.1.7-arm.patch
|
||||
libtirpc-0.1.7-bindresvport-ntohs.patch
|
||||
libtirpc-0.1.7-bindresvport_ports.patch
|
||||
libtirpc-0.1.7-bufoverflow.patch
|
||||
libtirpc-0.1.7-clnt_raw-mutex.patch
|
||||
libtirpc-0.1.7-dgcall-iprecverr.patch
|
||||
libtirpc-0.1.7-gssglue.patch
|
||||
libtirpc-0.1.7-libtirpc-pc.patch
|
||||
libtirpc-0.1.7-man-install.patch
|
||||
libtirpc-0.1.7-netconfig.patch
|
||||
libtirpc-0.1.7-ppc64.patch
|
||||
libtirpc-0.1.7-snprintf.patch
|
||||
libtirpc-0.1.7-svcauthdestroy.patch
|
||||
libtirpc-0.1.7-svc_auth_gss_lvalue_fix.patch
|
||||
libtirpc-0.1.7-svcauthnone.patch
|
||||
libtirpc-0.1.7-svc-rtaddr.patch
|
||||
libtirpc-0.1.7-svc-run.patch
|
||||
libtirpc-0.1.7-version.patch
|
||||
libtirpc-0.1.7-xdr_bufferoverlow.patch
|
||||
* Fri Aug 01 2008 ro@suse.de
|
||||
- fix requires for debuginfo package
|
||||
* Wed Mar 19 2008 mkoenig@suse.de
|
||||
|
Loading…
Reference in New Issue
Block a user