basebuilder_pel7ppc64bebuilder0
7 years ago
10 changed files with 2713 additions and 0 deletions
@ -0,0 +1,251 @@
@@ -0,0 +1,251 @@
|
||||
diff -up libtirpc-0.2.4/src/rpcb_prot.c.orig libtirpc-0.2.4/src/rpcb_prot.c |
||||
--- libtirpc-0.2.4/src/rpcb_prot.c.orig 2013-12-09 15:59:51.000000000 -0500 |
||||
+++ libtirpc-0.2.4/src/rpcb_prot.c 2017-05-17 13:05:47.562168877 -0400 |
||||
@@ -41,6 +41,7 @@ |
||||
#include <rpc/types.h> |
||||
#include <rpc/xdr.h> |
||||
#include <rpc/rpcb_prot.h> |
||||
+#include "rpc_com.h" |
||||
|
||||
bool_t |
||||
xdr_rpcb(xdrs, objp) |
||||
@@ -53,13 +54,13 @@ xdr_rpcb(xdrs, objp) |
||||
if (!xdr_u_int32_t(xdrs, &objp->r_vers)) { |
||||
return (FALSE); |
||||
} |
||||
- if (!xdr_string(xdrs, &objp->r_netid, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->r_netid, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
- if (!xdr_string(xdrs, &objp->r_addr, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->r_addr, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
- if (!xdr_string(xdrs, &objp->r_owner, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->r_owner, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
return (TRUE); |
||||
@@ -159,19 +160,19 @@ xdr_rpcb_entry(xdrs, objp) |
||||
XDR *xdrs; |
||||
rpcb_entry *objp; |
||||
{ |
||||
- if (!xdr_string(xdrs, &objp->r_maddr, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->r_maddr, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
- if (!xdr_string(xdrs, &objp->r_nc_netid, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->r_nc_netid, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
if (!xdr_u_int32_t(xdrs, &objp->r_nc_semantics)) { |
||||
return (FALSE); |
||||
} |
||||
- if (!xdr_string(xdrs, &objp->r_nc_protofmly, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->r_nc_protofmly, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
- if (!xdr_string(xdrs, &objp->r_nc_proto, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->r_nc_proto, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
return (TRUE); |
||||
@@ -292,7 +293,7 @@ xdr_rpcb_rmtcallres(xdrs, p) |
||||
bool_t dummy; |
||||
struct r_rpcb_rmtcallres *objp = (struct r_rpcb_rmtcallres *)(void *)p; |
||||
|
||||
- if (!xdr_string(xdrs, &objp->addr, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->addr, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
if (!xdr_u_int(xdrs, &objp->results.results_len)) { |
||||
@@ -312,6 +313,11 @@ xdr_netbuf(xdrs, objp) |
||||
if (!xdr_u_int32_t(xdrs, (u_int32_t *) &objp->maxlen)) { |
||||
return (FALSE); |
||||
} |
||||
+ |
||||
+ if (objp->maxlen > RPC_MAXDATASIZE) { |
||||
+ return (FALSE); |
||||
+ } |
||||
+ |
||||
dummy = xdr_bytes(xdrs, (char **)&(objp->buf), |
||||
(u_int *)&(objp->len), objp->maxlen); |
||||
return (dummy); |
||||
diff -up libtirpc-0.2.4/src/rpcb_st_xdr.c.orig libtirpc-0.2.4/src/rpcb_st_xdr.c |
||||
--- libtirpc-0.2.4/src/rpcb_st_xdr.c.orig 2013-12-09 15:59:51.000000000 -0500 |
||||
+++ libtirpc-0.2.4/src/rpcb_st_xdr.c 2017-05-17 13:05:47.562168877 -0400 |
||||
@@ -38,6 +38,7 @@ |
||||
#include <sys/cdefs.h> |
||||
|
||||
#include <rpc/rpc.h> |
||||
+#include "rpc_com.h" |
||||
|
||||
/* Link list of all the stats about getport and getaddr */ |
||||
|
||||
@@ -59,7 +60,7 @@ xdr_rpcbs_addrlist(xdrs, objp) |
||||
if (!xdr_int(xdrs, &objp->failure)) { |
||||
return (FALSE); |
||||
} |
||||
- if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
|
||||
@@ -110,7 +111,7 @@ xdr_rpcbs_rmtcalllist(xdrs, objp) |
||||
IXDR_PUT_INT32(buf, objp->failure); |
||||
IXDR_PUT_INT32(buf, objp->indirect); |
||||
} |
||||
- if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
if (!xdr_pointer(xdrs, (char **)&objp->next, |
||||
@@ -148,7 +149,7 @@ xdr_rpcbs_rmtcalllist(xdrs, objp) |
||||
objp->failure = (int)IXDR_GET_INT32(buf); |
||||
objp->indirect = (int)IXDR_GET_INT32(buf); |
||||
} |
||||
- if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
if (!xdr_pointer(xdrs, (char **)&objp->next, |
||||
@@ -176,7 +177,7 @@ xdr_rpcbs_rmtcalllist(xdrs, objp) |
||||
if (!xdr_int(xdrs, &objp->indirect)) { |
||||
return (FALSE); |
||||
} |
||||
- if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) { |
||||
+ if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) { |
||||
return (FALSE); |
||||
} |
||||
if (!xdr_pointer(xdrs, (char **)&objp->next, |
||||
diff -up libtirpc-0.2.4/src/rpc_generic.c.orig libtirpc-0.2.4/src/rpc_generic.c |
||||
--- libtirpc-0.2.4/src/rpc_generic.c.orig 2013-12-09 15:59:51.000000000 -0500 |
||||
+++ libtirpc-0.2.4/src/rpc_generic.c 2017-05-17 13:05:47.562168877 -0400 |
||||
@@ -615,6 +615,9 @@ __rpc_taddr2uaddr_af(int af, const struc |
||||
|
||||
switch (af) { |
||||
case AF_INET: |
||||
+ if (nbuf->len < sizeof(*sin)) { |
||||
+ return NULL; |
||||
+ } |
||||
sin = nbuf->buf; |
||||
if (inet_ntop(af, &sin->sin_addr, namebuf, sizeof namebuf) |
||||
== NULL) |
||||
@@ -626,6 +629,9 @@ __rpc_taddr2uaddr_af(int af, const struc |
||||
break; |
||||
#ifdef INET6 |
||||
case AF_INET6: |
||||
+ if (nbuf->len < sizeof(*sin6)) { |
||||
+ return NULL; |
||||
+ } |
||||
sin6 = nbuf->buf; |
||||
if (inet_ntop(af, &sin6->sin6_addr, namebuf6, sizeof namebuf6) |
||||
== NULL) |
||||
@@ -668,6 +674,8 @@ __rpc_uaddr2taddr_af(int af, const char |
||||
|
||||
port = 0; |
||||
sin = NULL; |
||||
+ if (uaddr == NULL) |
||||
+ return NULL; |
||||
addrstr = strdup(uaddr); |
||||
if (addrstr == NULL) |
||||
return NULL; |
||||
diff -up libtirpc-0.2.4/src/xdr.c.orig libtirpc-0.2.4/src/xdr.c |
||||
--- libtirpc-0.2.4/src/xdr.c.orig 2013-12-09 15:59:51.000000000 -0500 |
||||
+++ libtirpc-0.2.4/src/xdr.c 2017-05-17 13:05:47.563168892 -0400 |
||||
@@ -43,8 +43,10 @@ |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
|
||||
+#include <rpc/rpc.h> |
||||
#include <rpc/types.h> |
||||
#include <rpc/xdr.h> |
||||
+#include <rpc/rpc_com.h> |
||||
|
||||
typedef quad_t longlong_t; /* ANSI long long type */ |
||||
typedef u_quad_t u_longlong_t; /* ANSI unsigned long long type */ |
||||
@@ -54,7 +56,6 @@ typedef u_quad_t u_longlong_t; |
||||
*/ |
||||
#define XDR_FALSE ((long) 0) |
||||
#define XDR_TRUE ((long) 1) |
||||
-#define LASTUNSIGNED ((u_int) 0-1) |
||||
|
||||
/* |
||||
* for unit alignment |
||||
@@ -630,6 +631,7 @@ xdr_bytes(xdrs, cpp, sizep, maxsize) |
||||
{ |
||||
char *sp = *cpp; /* sp is the actual string pointer */ |
||||
u_int nodesize; |
||||
+ bool_t ret, allocated = FALSE; |
||||
|
||||
/* |
||||
* first deal with the length since xdr bytes are counted |
||||
@@ -653,6 +655,7 @@ xdr_bytes(xdrs, cpp, sizep, maxsize) |
||||
} |
||||
if (sp == NULL) { |
||||
*cpp = sp = mem_alloc(nodesize); |
||||
+ allocated = TRUE; |
||||
} |
||||
if (sp == NULL) { |
||||
warnx("xdr_bytes: out of memory"); |
||||
@@ -661,7 +664,14 @@ xdr_bytes(xdrs, cpp, sizep, maxsize) |
||||
/* FALLTHROUGH */ |
||||
|
||||
case XDR_ENCODE: |
||||
- return (xdr_opaque(xdrs, sp, nodesize)); |
||||
+ ret = xdr_opaque(xdrs, sp, nodesize); |
||||
+ if ((xdrs->x_op == XDR_DECODE) && (ret == FALSE)) { |
||||
+ if (allocated == TRUE) { |
||||
+ free(sp); |
||||
+ *cpp = NULL; |
||||
+ } |
||||
+ } |
||||
+ return (ret); |
||||
|
||||
case XDR_FREE: |
||||
if (sp != NULL) { |
||||
@@ -755,6 +765,7 @@ xdr_string(xdrs, cpp, maxsize) |
||||
char *sp = *cpp; /* sp is the actual string pointer */ |
||||
u_int size; |
||||
u_int nodesize; |
||||
+ bool_t ret, allocated = FALSE; |
||||
|
||||
/* |
||||
* first deal with the length since xdr strings are counted-strings |
||||
@@ -794,8 +805,10 @@ xdr_string(xdrs, cpp, maxsize) |
||||
switch (xdrs->x_op) { |
||||
|
||||
case XDR_DECODE: |
||||
- if (sp == NULL) |
||||
+ if (sp == NULL) { |
||||
*cpp = sp = mem_alloc(nodesize); |
||||
+ allocated = TRUE; |
||||
+ } |
||||
if (sp == NULL) { |
||||
warnx("xdr_string: out of memory"); |
||||
return (FALSE); |
||||
@@ -804,7 +817,14 @@ xdr_string(xdrs, cpp, maxsize) |
||||
/* FALLTHROUGH */ |
||||
|
||||
case XDR_ENCODE: |
||||
- return (xdr_opaque(xdrs, sp, size)); |
||||
+ ret = xdr_opaque(xdrs, sp, size); |
||||
+ if ((xdrs->x_op == XDR_DECODE) && (ret == FALSE)) { |
||||
+ if (allocated == TRUE) { |
||||
+ free(sp); |
||||
+ *cpp = NULL; |
||||
+ } |
||||
+ } |
||||
+ return (ret); |
||||
|
||||
case XDR_FREE: |
||||
mem_free(sp, nodesize); |
||||
@@ -824,7 +844,7 @@ xdr_wrapstring(xdrs, cpp) |
||||
XDR *xdrs; |
||||
char **cpp; |
||||
{ |
||||
- return xdr_string(xdrs, cpp, LASTUNSIGNED); |
||||
+ return xdr_string(xdrs, cpp, RPC_MAXDATASIZE); |
||||
} |
||||
|
||||
/* |
@ -0,0 +1,67 @@
@@ -0,0 +1,67 @@
|
||||
diff --git a/src/clnt_vc.c b/src/clnt_vc.c |
||||
index 61264d4..ebe28f8 100644 |
||||
--- a/src/clnt_vc.c |
||||
+++ b/src/clnt_vc.c |
||||
@@ -72,6 +72,8 @@ |
||||
#define CMGROUP_MAX 16 |
||||
#define SCM_CREDS 0x03 /* process creds (struct cmsgcred) */ |
||||
|
||||
+#undef rpc_createerr /* make it clear it is a thread safe variable */ |
||||
+ |
||||
/* |
||||
* Credentials structure, used to verify the identity of a peer |
||||
* process that has sent us a message. This is allocated by the |
||||
@@ -188,10 +190,11 @@ clnt_vc_create(fd, raddr, prog, vers, sendsz, recvsz) |
||||
cl = (CLIENT *)mem_alloc(sizeof (*cl)); |
||||
ct = (struct ct_data *)mem_alloc(sizeof (*ct)); |
||||
if ((cl == (CLIENT *)NULL) || (ct == (struct ct_data *)NULL)) { |
||||
+ struct rpc_createerr *ce = &get_rpc_createerr(); |
||||
+ ce->cf_stat = RPC_SYSTEMERROR; |
||||
+ ce->cf_error.re_errno = errno; |
||||
(void) syslog(LOG_ERR, clnt_vc_errstr, |
||||
clnt_vc_str, __no_mem_str); |
||||
- rpc_createerr.cf_stat = RPC_SYSTEMERROR; |
||||
- rpc_createerr.cf_error.re_errno = errno; |
||||
goto err; |
||||
} |
||||
ct->ct_addr.buf = NULL; |
||||
@@ -230,26 +233,29 @@ clnt_vc_create(fd, raddr, prog, vers, sendsz, recvsz) |
||||
assert(vc_cv != (cond_t *) NULL); |
||||
|
||||
/* |
||||
- * XXX - fvdl connecting while holding a mutex? |
||||
+ * Do not hold mutex during connect |
||||
*/ |
||||
+ mutex_unlock(&clnt_fd_lock); |
||||
+ |
||||
slen = sizeof ss; |
||||
if (getpeername(fd, (struct sockaddr *)&ss, &slen) < 0) { |
||||
if (errno != ENOTCONN) { |
||||
- rpc_createerr.cf_stat = RPC_SYSTEMERROR; |
||||
- rpc_createerr.cf_error.re_errno = errno; |
||||
- mutex_unlock(&clnt_fd_lock); |
||||
+ struct rpc_createerr *ce = &get_rpc_createerr(); |
||||
+ ce->cf_stat = RPC_SYSTEMERROR; |
||||
+ ce->cf_error.re_errno = errno; |
||||
thr_sigsetmask(SIG_SETMASK, &(mask), NULL); |
||||
goto err; |
||||
} |
||||
if (connect(fd, (struct sockaddr *)raddr->buf, raddr->len) < 0){ |
||||
- rpc_createerr.cf_stat = RPC_SYSTEMERROR; |
||||
- rpc_createerr.cf_error.re_errno = errno; |
||||
- mutex_unlock(&clnt_fd_lock); |
||||
- thr_sigsetmask(SIG_SETMASK, &(mask), NULL); |
||||
- goto err; |
||||
+ if (errno != EISCONN) { |
||||
+ struct rpc_createerr *ce = &get_rpc_createerr(); |
||||
+ ce->cf_stat = RPC_SYSTEMERROR; |
||||
+ ce->cf_error.re_errno = errno; |
||||
+ thr_sigsetmask(SIG_SETMASK, &(mask), NULL); |
||||
+ goto err; |
||||
+ } |
||||
} |
||||
} |
||||
- mutex_unlock(&clnt_fd_lock); |
||||
if (!__rpc_fd2sockinfo(fd, &si)) |
||||
goto err; |
||||
thr_sigsetmask(SIG_SETMASK, &(mask), NULL); |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,93 @@
@@ -0,0 +1,93 @@
|
||||
diff -up libtirpc-0.2.4/src/rtime.c.orig libtirpc-0.2.4/src/rtime.c |
||||
--- libtirpc-0.2.4/src/rtime.c.orig 2013-12-09 15:59:51.000000000 -0500 |
||||
+++ libtirpc-0.2.4/src/rtime.c 2017-02-25 12:29:25.227847702 -0500 |
||||
@@ -46,6 +46,7 @@ |
||||
#include <unistd.h> |
||||
#include <errno.h> |
||||
#include <sys/types.h> |
||||
+#include <sys/poll.h> |
||||
#include <sys/socket.h> |
||||
#include <sys/time.h> |
||||
#include <netinet/in.h> |
||||
@@ -67,7 +68,8 @@ rtime(addrp, timep, timeout) |
||||
struct timeval *timeout; |
||||
{ |
||||
int s; |
||||
- fd_set readfds; |
||||
+ struct pollfd fd; |
||||
+ int milliseconds; |
||||
int res; |
||||
unsigned long thetime; |
||||
struct sockaddr_in from; |
||||
@@ -94,31 +96,32 @@ rtime(addrp, timep, timeout) |
||||
addrp->sin_port = serv->s_port; |
||||
|
||||
if (type == SOCK_DGRAM) { |
||||
- res = sendto(s, (char *)&thetime, sizeof(thetime), 0, |
||||
+ res = sendto(s, (char *)&thetime, sizeof(thetime), 0, |
||||
(struct sockaddr *)addrp, sizeof(*addrp)); |
||||
if (res < 0) { |
||||
do_close(s); |
||||
- return(-1); |
||||
+ return(-1); |
||||
} |
||||
- do { |
||||
- FD_ZERO(&readfds); |
||||
- FD_SET(s, &readfds); |
||||
- res = select(_rpc_dtablesize(), &readfds, |
||||
- (fd_set *)NULL, (fd_set *)NULL, timeout); |
||||
- } while (res < 0 && errno == EINTR); |
||||
+ |
||||
+ milliseconds = (timeout->tv_sec * 1000) + (timeout->tv_usec / 1000); |
||||
+ fd.fd = s; |
||||
+ fd.events = POLLIN; |
||||
+ do |
||||
+ res = poll (&fd, 1, milliseconds); |
||||
+ while (res < 0 && errno == EINTR); |
||||
if (res <= 0) { |
||||
if (res == 0) { |
||||
errno = ETIMEDOUT; |
||||
} |
||||
do_close(s); |
||||
- return(-1); |
||||
+ return(-1); |
||||
} |
||||
fromlen = sizeof(from); |
||||
- res = recvfrom(s, (char *)&thetime, sizeof(thetime), 0, |
||||
+ res = recvfrom(s, (char *)&thetime, sizeof(thetime), 0, |
||||
(struct sockaddr *)&from, &fromlen); |
||||
do_close(s); |
||||
if (res < 0) { |
||||
- return(-1); |
||||
+ return(-1); |
||||
} |
||||
} else { |
||||
if (connect(s, (struct sockaddr *)addrp, sizeof(*addrp)) < 0) { |
||||
diff -up libtirpc-0.2.4/src/svc_vc.c.orig libtirpc-0.2.4/src/svc_vc.c |
||||
--- libtirpc-0.2.4/src/svc_vc.c.orig 2017-02-25 12:26:55.430978326 -0500 |
||||
+++ libtirpc-0.2.4/src/svc_vc.c 2017-02-25 12:29:25.227847702 -0500 |
||||
@@ -260,14 +260,8 @@ makefd_xprt(fd, sendsize, recvsize) |
||||
struct cf_conn *cd; |
||||
const char *netid; |
||||
struct __rpc_sockinfo si; |
||||
- |
||||
- assert(fd != -1); |
||||
|
||||
- if (fd >= FD_SETSIZE) { |
||||
- warnx("svc_vc: makefd_xprt: fd too high\n"); |
||||
- xprt = NULL; |
||||
- goto done; |
||||
- } |
||||
+ assert(fd != -1); |
||||
|
||||
xprt = mem_alloc(sizeof(SVCXPRT)); |
||||
if (xprt == NULL) { |
||||
@@ -340,6 +334,8 @@ again: |
||||
*/ |
||||
|
||||
newxprt = makefd_xprt(sock, r->sendsize, r->recvsize); |
||||
+ if (!newxprt) |
||||
+ return (FALSE); |
||||
|
||||
if (!__rpc_set_netbuf(&newxprt->xp_rtaddr, &addr, len)) |
||||
return (FALSE); |
@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
|
||||
diff -up libtirpc-0.2.4/src/svc_generic.c.orig libtirpc-0.2.4/src/svc_generic.c |
||||
--- libtirpc-0.2.4/src/svc_generic.c.orig 2013-12-09 15:59:51.000000000 -0500 |
||||
+++ libtirpc-0.2.4/src/svc_generic.c 2015-06-29 10:20:27.239019533 -0400 |
||||
@@ -283,6 +283,8 @@ svc_tli_create(fd, nconf, bindaddr, send |
||||
xprt->xp_type = __rpc_socktype2seman(si.si_socktype); |
||||
|
||||
if (nconf) { |
||||
+ if (xprt->xp_netid != NULL) |
||||
+ free(xprt->xp_netid); |
||||
xprt->xp_netid = strdup(nconf->nc_netid); |
||||
xprt->xp_tp = strdup(nconf->nc_device); |
||||
} |
||||
diff -up libtirpc-0.2.4/src/svc_vc.c.orig libtirpc-0.2.4/src/svc_vc.c |
||||
--- libtirpc-0.2.4/src/svc_vc.c.orig 2015-06-29 10:19:21.205835483 -0400 |
||||
+++ libtirpc-0.2.4/src/svc_vc.c 2015-06-29 10:20:34.616151809 -0400 |
||||
@@ -393,6 +393,12 @@ svc_vc_destroy(xprt) |
||||
__svc_vc_dodestroy(xprt); |
||||
} |
||||
|
||||
+static bool_t |
||||
+__svc_rendezvous_socket(xprt) |
||||
+ SVCXPRT *xprt; |
||||
+{ |
||||
+ return (xprt->xp_ops->xp_recv == rendezvous_request); |
||||
+} |
||||
static void |
||||
__svc_vc_dodestroy(xprt) |
||||
SVCXPRT *xprt; |
||||
@@ -404,7 +410,7 @@ __svc_vc_dodestroy(xprt) |
||||
|
||||
if (xprt->xp_fd != RPC_ANYFD) |
||||
(void)close(xprt->xp_fd); |
||||
- if (xprt->xp_port != 0) { |
||||
+ if (__svc_rendezvous_socket(xprt)) { |
||||
/* a rendezvouser socket */ |
||||
r = (struct cf_rendezvous *)xprt->xp_p1; |
||||
mem_free(r, sizeof (struct cf_rendezvous)); |
@ -0,0 +1,57 @@
@@ -0,0 +1,57 @@
|
||||
commit a4fa582908b9c63957240cb0cb68b59d56244ef5 |
||||
Author: Bodo Stroesser <bstroesser@ts.fujitsu.com> |
||||
Date: Thu Nov 6 13:26:00 2014 -0500 |
||||
|
||||
write_vc: fix write retry loop for nonblocking mode |
||||
|
||||
This is a simple fix for the write retry loop that is used on |
||||
non-blocking connections if write() failed with -EAGAIN. |
||||
|
||||
Additionally it removes a redundant if () {} |
||||
|
||||
Erroneously at each cycle of the loop the length of the data |
||||
to send is incremented and the buffer pointer is decremented. |
||||
Thus, it might happen that: |
||||
* the application crashes |
||||
* data from the memory before the buffer is sent |
||||
|
||||
Signed-off-by: Bodo Stroesser <bstroesser@ts.fujitsu.com> |
||||
Signed-off-by: Steve Dickson <steved@redhat.com> |
||||
|
||||
diff --git a/src/svc_vc.c b/src/svc_vc.c |
||||
index 4c70de8..4d3ea51 100644 |
||||
--- a/src/svc_vc.c |
||||
+++ b/src/svc_vc.c |
||||
@@ -559,20 +559,19 @@ write_vc(xprtp, buf, len) |
||||
cd->strm_stat = XPRT_DIED; |
||||
return (-1); |
||||
} |
||||
- if (cd->nonblock && i != cnt) { |
||||
- /* |
||||
- * For non-blocking connections, do not |
||||
- * take more than 2 seconds writing the |
||||
- * data out. |
||||
- * |
||||
- * XXX 2 is an arbitrary amount. |
||||
- */ |
||||
- gettimeofday(&tv1, NULL); |
||||
- if (tv1.tv_sec - tv0.tv_sec >= 2) { |
||||
- cd->strm_stat = XPRT_DIED; |
||||
- return (-1); |
||||
- } |
||||
+ /* |
||||
+ * For non-blocking connections, do not |
||||
+ * take more than 2 seconds writing the |
||||
+ * data out. |
||||
+ * |
||||
+ * XXX 2 is an arbitrary amount. |
||||
+ */ |
||||
+ gettimeofday(&tv1, NULL); |
||||
+ if (tv1.tv_sec - tv0.tv_sec >= 2) { |
||||
+ cd->strm_stat = XPRT_DIED; |
||||
+ return (-1); |
||||
} |
||||
+ i = 0; /* Don't change buf and cnt */ |
||||
} |
||||
} |
||||
|
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
commit cf2e0082ce88fc2c75479c26a4b9f69f1b028c80 |
||||
Author: Steve Dickson <steved@redhat.com> |
||||
Date: Thu May 29 09:40:59 2014 -0400 |
||||
|
||||
Avoid buffer overruns by allocating buffer in svcauth_gss_validate() |
||||
|
||||
Reviewed-by: Chuck Lever <chuck.lever@oracle.com> |
||||
Signed-off-by: Steve Dickson <steved@redhat.com> |
||||
|
||||
diff --git a/src/svc_auth_gss.c b/src/svc_auth_gss.c |
||||
index 601a691..26c1065 100644 |
||||
--- a/src/svc_auth_gss.c |
||||
+++ b/src/svc_auth_gss.c |
||||
@@ -286,21 +286,19 @@ svcauth_gss_validate(struct svc_rpc_gss_data *gd, struct rpc_msg *msg) |
||||
struct opaque_auth *oa; |
||||
gss_buffer_desc rpcbuf, checksum; |
||||
OM_uint32 maj_stat, min_stat, qop_state; |
||||
- u_char rpchdr[128]; |
||||
+ u_char *rpchdr; |
||||
int32_t *buf; |
||||
|
||||
gss_log_debug("in svcauth_gss_validate()"); |
||||
|
||||
- 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))) |
||||
+ |
||||
+ rpchdr = (u_char *)calloc(((8 * BYTES_PER_XDR_UNIT) + |
||||
+ RNDUP(oa->oa_length)), 1); |
||||
+ if (rpchdr == NULL) |
||||
return (FALSE); |
||||
|
||||
buf = (int32_t *)rpchdr; |
||||
@@ -325,6 +323,8 @@ svcauth_gss_validate(struct svc_rpc_gss_data *gd, struct rpc_msg *msg) |
||||
maj_stat = gss_verify_mic(&min_stat, gd->ctx, &rpcbuf, &checksum, |
||||
&qop_state); |
||||
|
||||
+ free(rpchdr); |
||||
+ |
||||
if (maj_stat != GSS_S_COMPLETE) { |
||||
gss_log_status("gss_verify_mic", maj_stat, min_stat); |
||||
return (FALSE); |
@ -0,0 +1,364 @@
@@ -0,0 +1,364 @@
|
||||
diff --git a/src/svc.c b/src/svc.c |
||||
index 08cd6c9..8afd15d 100644 |
||||
--- a/src/svc.c |
||||
+++ b/src/svc.c |
||||
@@ -649,6 +649,7 @@ svc_getreq_common (fd) |
||||
{ |
||||
if (SVC_RECV (xprt, &msg)) |
||||
{ |
||||
+ bool_t no_dispatch; |
||||
|
||||
/* now find the exported program and call it */ |
||||
struct svc_callout *s; |
||||
@@ -660,11 +661,14 @@ svc_getreq_common (fd) |
||||
r.rq_proc = msg.rm_call.cb_proc; |
||||
r.rq_cred = msg.rm_call.cb_cred; |
||||
/* first authenticate the message */ |
||||
- if ((why = _authenticate (&r, &msg)) != AUTH_OK) |
||||
+ why = _gss_authenticate(&r, &msg, &no_dispatch); |
||||
+ if (why != AUTH_OK) |
||||
{ |
||||
svcerr_auth (xprt, why); |
||||
goto call_done; |
||||
} |
||||
+ if (no_dispatch) |
||||
+ goto call_done; |
||||
/* now match message with a registered service */ |
||||
prog_found = FALSE; |
||||
low_vers = (rpcvers_t) - 1L; |
||||
diff --git a/src/svc_auth.c b/src/svc_auth.c |
||||
index e80d5f9..31241c9 100644 |
||||
--- a/src/svc_auth.c |
||||
+++ b/src/svc_auth.c |
||||
@@ -82,9 +82,10 @@ static struct authsvc *Auths = NULL; |
||||
* invalid. |
||||
*/ |
||||
enum auth_stat |
||||
-_authenticate(rqst, msg) |
||||
+_gss_authenticate(rqst, msg, no_dispatch) |
||||
struct svc_req *rqst; |
||||
struct rpc_msg *msg; |
||||
+ bool_t *no_dispatch; |
||||
{ |
||||
int cred_flavor; |
||||
struct authsvc *asp; |
||||
@@ -97,6 +98,7 @@ _authenticate(rqst, msg) |
||||
rqst->rq_xprt->xp_verf.oa_flavor = _null_auth.oa_flavor; |
||||
rqst->rq_xprt->xp_verf.oa_length = 0; |
||||
cred_flavor = rqst->rq_cred.oa_flavor; |
||||
+ *no_dispatch = FALSE; |
||||
switch (cred_flavor) { |
||||
case AUTH_NONE: |
||||
dummy = _svcauth_none(rqst, msg); |
||||
@@ -112,6 +114,11 @@ _authenticate(rqst, msg) |
||||
dummy = _svcauth_des(rqst, msg); |
||||
return (dummy); |
||||
#endif |
||||
+#ifdef HAVE_RPCSEC_GSS |
||||
+ case RPCSEC_GSS: |
||||
+ dummy = _svcauth_gss(rqst, msg, no_dispatch); |
||||
+ return (dummy); |
||||
+#endif |
||||
default: |
||||
break; |
||||
} |
||||
@@ -132,6 +139,13 @@ _authenticate(rqst, msg) |
||||
return (AUTH_REJECTEDCRED); |
||||
} |
||||
|
||||
+enum auth_stat |
||||
+_authenticate(struct svc_req *rqst, struct rpc_msg *msg) |
||||
+{ |
||||
+ bool_t no_dispatch; |
||||
+ return _gss_authenticate(rqst, msg, &no_dispatch); |
||||
+} |
||||
+ |
||||
/* |
||||
* Allow the rpc service to register new authentication types that it is |
||||
* prepared to handle. When an authentication flavor is registered, |
||||
@@ -161,6 +175,9 @@ svc_auth_reg(cred_flavor, handler) |
||||
#ifdef DES_BUILTIN |
||||
case AUTH_DES: |
||||
#endif |
||||
+#ifdef HAVE_RPCSEC_GSS |
||||
+ case RPCSEC_GSS: |
||||
+#endif |
||||
/* already registered */ |
||||
return (1); |
||||
|
||||
diff --git a/src/svc_auth_gss.c b/src/svc_auth_gss.c |
||||
index 3a3c980..7376107 100644 |
||||
--- a/src/svc_auth_gss.c |
||||
+++ b/src/svc_auth_gss.c |
||||
@@ -116,6 +116,7 @@ svcauth_gss_import_name(char *service) |
||||
gss_name_t name; |
||||
gss_buffer_desc namebuf; |
||||
OM_uint32 maj_stat, min_stat; |
||||
+ bool_t result; |
||||
|
||||
gss_log_debug("in svcauth_gss_import_name()"); |
||||
|
||||
@@ -130,11 +131,9 @@ svcauth_gss_import_name(char *service) |
||||
maj_stat, min_stat); |
||||
return (FALSE); |
||||
} |
||||
- if (svcauth_gss_set_svc_name(name) != TRUE) { |
||||
- gss_release_name(&min_stat, &name); |
||||
- return (FALSE); |
||||
- } |
||||
- return (TRUE); |
||||
+ result = svcauth_gss_set_svc_name(name); |
||||
+ gss_release_name(&min_stat, &name); |
||||
+ return result; |
||||
} |
||||
|
||||
static bool_t |
||||
@@ -211,6 +210,8 @@ svcauth_gss_accept_sec_context(struct svc_req *rqst, |
||||
NULL, |
||||
NULL); |
||||
|
||||
+ xdr_free((xdrproc_t)xdr_rpc_gss_init_args, (caddr_t)&recv_tok); |
||||
+ |
||||
if (gr->gr_major != GSS_S_COMPLETE && |
||||
gr->gr_major != GSS_S_CONTINUE_NEEDED) { |
||||
gss_log_status("svcauth_gss_accept_sec_context: accept_sec_context", |
||||
@@ -279,8 +280,11 @@ svcauth_gss_accept_sec_context(struct svc_req *rqst, |
||||
return (FALSE); |
||||
|
||||
rqst->rq_xprt->xp_verf.oa_flavor = RPCSEC_GSS; |
||||
- rqst->rq_xprt->xp_verf.oa_base = checksum.value; |
||||
+ memcpy(rqst->rq_xprt->xp_verf.oa_base, checksum.value, |
||||
+ checksum.length); |
||||
rqst->rq_xprt->xp_verf.oa_length = checksum.length; |
||||
+ |
||||
+ gss_release_buffer(&min_stat, &checksum); |
||||
} |
||||
return (TRUE); |
||||
} |
||||
@@ -363,10 +367,13 @@ svcauth_gss_nextverf(struct svc_req *rqst, u_int num) |
||||
maj_stat, min_stat); |
||||
return (FALSE); |
||||
} |
||||
+ |
||||
rqst->rq_xprt->xp_verf.oa_flavor = RPCSEC_GSS; |
||||
- rqst->rq_xprt->xp_verf.oa_base = (caddr_t)checksum.value; |
||||
+ memcpy(rqst->rq_xprt->xp_verf.oa_base, checksum.value, checksum.length); |
||||
rqst->rq_xprt->xp_verf.oa_length = (u_int)checksum.length; |
||||
|
||||
+ gss_release_buffer(&min_stat, &checksum); |
||||
+ |
||||
return (TRUE); |
||||
} |
||||
|
||||
@@ -379,8 +386,10 @@ _svcauth_gss(struct svc_req *rqst, struct rpc_msg *msg, bool_t *no_dispatch) |
||||
struct rpc_gss_cred *gc; |
||||
struct rpc_gss_init_res gr; |
||||
int call_stat, offset; |
||||
+ enum auth_stat result = AUTH_OK; |
||||
+ OM_uint32 min_stat; |
||||
|
||||
- gss_log_debug("in svcauth_gss()"); |
||||
+ gss_log_debug("in _svcauth_gss()"); |
||||
|
||||
/* Initialize reply. */ |
||||
rqst->rq_xprt->xp_verf = _null_auth; |
||||
@@ -419,19 +428,25 @@ _svcauth_gss(struct svc_req *rqst, struct rpc_msg *msg, bool_t *no_dispatch) |
||||
XDR_DESTROY(&xdrs); |
||||
|
||||
/* Check version. */ |
||||
- if (gc->gc_v != RPCSEC_GSS_VERSION) |
||||
- return (AUTH_BADCRED); |
||||
+ if (gc->gc_v != RPCSEC_GSS_VERSION) { |
||||
+ result = AUTH_BADCRED; |
||||
+ goto out; |
||||
+ } |
||||
|
||||
/* Check RPCSEC_GSS service. */ |
||||
if (gc->gc_svc != RPCSEC_GSS_SVC_NONE && |
||||
gc->gc_svc != RPCSEC_GSS_SVC_INTEGRITY && |
||||
- gc->gc_svc != RPCSEC_GSS_SVC_PRIVACY) |
||||
- return (AUTH_BADCRED); |
||||
+ gc->gc_svc != RPCSEC_GSS_SVC_PRIVACY) { |
||||
+ result = AUTH_BADCRED; |
||||
+ goto out; |
||||
+ } |
||||
|
||||
/* Check sequence number. */ |
||||
if (gd->established) { |
||||
- if (gc->gc_seq > MAXSEQ) |
||||
- return (RPCSEC_GSS_CTXPROBLEM); |
||||
+ if (gc->gc_seq > MAXSEQ) { |
||||
+ result = RPCSEC_GSS_CTXPROBLEM; |
||||
+ goto out; |
||||
+ } |
||||
|
||||
if ((offset = gd->seqlast - gc->gc_seq) < 0) { |
||||
gd->seqlast = gc->gc_seq; |
||||
@@ -441,7 +456,8 @@ _svcauth_gss(struct svc_req *rqst, struct rpc_msg *msg, bool_t *no_dispatch) |
||||
} |
||||
else if (offset >= gd->win || (gd->seqmask & (1 << offset))) { |
||||
*no_dispatch = 1; |
||||
- return (RPCSEC_GSS_CTXPROBLEM); |
||||
+ result = RPCSEC_GSS_CTXPROBLEM; |
||||
+ goto out; |
||||
} |
||||
gd->seq = gc->gc_seq; |
||||
gd->seqmask |= (1 << offset); |
||||
@@ -452,35 +468,52 @@ _svcauth_gss(struct svc_req *rqst, struct rpc_msg *msg, bool_t *no_dispatch) |
||||
rqst->rq_svcname = (char *)gd->ctx; |
||||
} |
||||
|
||||
+ rqst->rq_xprt->xp_verf.oa_base = msg->rm_call.cb_verf.oa_base; |
||||
+ |
||||
/* Handle RPCSEC_GSS control procedure. */ |
||||
switch (gc->gc_proc) { |
||||
|
||||
case RPCSEC_GSS_INIT: |
||||
case RPCSEC_GSS_CONTINUE_INIT: |
||||
- if (rqst->rq_proc != NULLPROC) |
||||
- return (AUTH_FAILED); /* XXX ? */ |
||||
+ if (rqst->rq_proc != NULLPROC) { |
||||
+ result = AUTH_FAILED; |
||||
+ break; |
||||
+ } |
||||
|
||||
if (_svcauth_gss_name == NULL) { |
||||
- if (!svcauth_gss_import_name("nfs")) |
||||
- return (AUTH_FAILED); |
||||
+ if (!svcauth_gss_import_name("nfs")) { |
||||
+ result = AUTH_FAILED; |
||||
+ break; |
||||
+ } |
||||
} |
||||
|
||||
- if (!svcauth_gss_acquire_cred()) |
||||
- return (AUTH_FAILED); |
||||
+ if (!svcauth_gss_acquire_cred()) { |
||||
+ result = AUTH_FAILED; |
||||
+ break; |
||||
+ } |
||||
|
||||
- if (!svcauth_gss_accept_sec_context(rqst, &gr)) |
||||
- return (AUTH_REJECTEDCRED); |
||||
+ if (!svcauth_gss_accept_sec_context(rqst, &gr)) { |
||||
+ result = AUTH_REJECTEDCRED; |
||||
+ break; |
||||
+ } |
||||
|
||||
- if (!svcauth_gss_nextverf(rqst, htonl(gr.gr_win))) |
||||
- return (AUTH_FAILED); |
||||
+ if (!svcauth_gss_nextverf(rqst, htonl(gr.gr_win))) { |
||||
+ result = AUTH_FAILED; |
||||
+ break; |
||||
+ } |
||||
|
||||
*no_dispatch = TRUE; |
||||
|
||||
call_stat = svc_sendreply(rqst->rq_xprt, |
||||
(xdrproc_t)xdr_rpc_gss_init_res, (caddr_t)&gr); |
||||
|
||||
- if (!call_stat) |
||||
- return (AUTH_FAILED); |
||||
+ gss_release_buffer(&min_stat, &gr.gr_token); |
||||
+ free(gr.gr_ctx.value); |
||||
+ |
||||
+ if (!call_stat) { |
||||
+ result = AUTH_FAILED; |
||||
+ break; |
||||
+ } |
||||
|
||||
if (gr.gr_major == GSS_S_COMPLETE) |
||||
gd->established = TRUE; |
||||
@@ -488,25 +521,36 @@ _svcauth_gss(struct svc_req *rqst, struct rpc_msg *msg, bool_t *no_dispatch) |
||||
break; |
||||
|
||||
case RPCSEC_GSS_DATA: |
||||
- if (!svcauth_gss_validate(gd, msg)) |
||||
- return (RPCSEC_GSS_CREDPROBLEM); |
||||
+ if (!svcauth_gss_validate(gd, msg)) { |
||||
+ result = RPCSEC_GSS_CREDPROBLEM; |
||||
+ break; |
||||
+ } |
||||
|
||||
- if (!svcauth_gss_nextverf(rqst, htonl(gc->gc_seq))) |
||||
- return (AUTH_FAILED); |
||||
+ if (!svcauth_gss_nextverf(rqst, htonl(gc->gc_seq))) { |
||||
+ result = AUTH_FAILED; |
||||
+ break; |
||||
+ } |
||||
break; |
||||
|
||||
case RPCSEC_GSS_DESTROY: |
||||
- if (rqst->rq_proc != NULLPROC) |
||||
- return (AUTH_FAILED); /* XXX ? */ |
||||
- |
||||
- if (!svcauth_gss_validate(gd, msg)) |
||||
- return (RPCSEC_GSS_CREDPROBLEM); |
||||
+ if (rqst->rq_proc != NULLPROC) { |
||||
+ result = AUTH_FAILED; /* XXX ? */ |
||||
+ break; |
||||
+ } |
||||
+ if (!svcauth_gss_validate(gd, msg)) { |
||||
+ result = RPCSEC_GSS_CREDPROBLEM; |
||||
+ break; |
||||
+ } |
||||
|
||||
- if (!svcauth_gss_nextverf(rqst, htonl(gc->gc_seq))) |
||||
- return (AUTH_FAILED); |
||||
+ if (!svcauth_gss_nextverf(rqst, htonl(gc->gc_seq))) { |
||||
+ result = AUTH_FAILED; |
||||
+ break; |
||||
+ } |
||||
|
||||
- if (!svcauth_gss_release_cred()) |
||||
- return (AUTH_FAILED); |
||||
+ if (!svcauth_gss_release_cred()) { |
||||
+ result = AUTH_FAILED; |
||||
+ break; |
||||
+ } |
||||
|
||||
SVCAUTH_DESTROY(rqst->rq_xprt->xp_auth); |
||||
rqst->rq_xprt->xp_auth = &svc_auth_none; |
||||
@@ -514,10 +558,15 @@ _svcauth_gss(struct svc_req *rqst, struct rpc_msg *msg, bool_t *no_dispatch) |
||||
break; |
||||
|
||||
default: |
||||
- return (AUTH_REJECTEDCRED); |
||||
+ result = AUTH_REJECTEDCRED; |
||||
break; |
||||
} |
||||
- return (AUTH_OK); |
||||
+out: |
||||
+ xdr_free((xdrproc_t)xdr_rpc_gss_cred, (caddr_t)gc); |
||||
+ if (result != AUTH_OK) |
||||
+ gss_log_debug("_svcauth_gss() failed: %d", result); |
||||
+ |
||||
+ return result; |
||||
} |
||||
|
||||
bool_t |
||||
diff --git a/tirpc/rpc/auth.h b/tirpc/rpc/auth.h |
||||
index 4ce11f0..7c8f813 100644 |
||||
--- a/tirpc/rpc/auth.h |
||||
+++ b/tirpc/rpc/auth.h |
||||
@@ -399,6 +399,7 @@ struct rpc_msg; |
||||
enum auth_stat _svcauth_none (struct svc_req *, struct rpc_msg *); |
||||
enum auth_stat _svcauth_short (struct svc_req *, struct rpc_msg *); |
||||
enum auth_stat _svcauth_unix (struct svc_req *, struct rpc_msg *); |
||||
+enum auth_stat _svcauth_gss (struct svc_req *, struct rpc_msg *, bool_t *); |
||||
__END_DECLS |
||||
|
||||
#define AUTH_NONE 0 /* no authentication */ |
||||
diff --git a/tirpc/rpc/svc_auth.h b/tirpc/rpc/svc_auth.h |
||||
index 14269d1..723c989 100644 |
||||
--- a/tirpc/rpc/svc_auth.h |
||||
+++ b/tirpc/rpc/svc_auth.h |
||||
@@ -66,6 +66,8 @@ typedef struct SVCAUTH { |
||||
* Server side authenticator |
||||
*/ |
||||
__BEGIN_DECLS |
||||
+extern enum auth_stat _gss_authenticate(struct svc_req *, struct rpc_msg *, |
||||
+ bool_t *); |
||||
extern enum auth_stat _authenticate(struct svc_req *, struct rpc_msg *); |
||||
extern int svc_auth_reg(int, enum auth_stat (*)(struct svc_req *, |
||||
struct rpc_msg *)); |
@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
|
||||
diff -up libtirpc-0.2.4/src/svc_vc.c.orig libtirpc-0.2.4/src/svc_vc.c |
||||
--- libtirpc-0.2.4/src/svc_vc.c.orig 2016-04-08 10:52:23.254767196 -0400 |
||||
+++ libtirpc-0.2.4/src/svc_vc.c 2016-04-08 10:57:44.461237876 -0400 |
||||
@@ -158,8 +158,10 @@ svc_vc_create(fd, sendsize, recvsize) |
||||
warnx("svc_vc_create: out of memory"); |
||||
goto cleanup_svc_vc_create; |
||||
} |
||||
- if (!__rpc_fd2sockinfo(fd, &si)) |
||||
- return NULL; |
||||
+ if (!__rpc_fd2sockinfo(fd, &si)) { |
||||
+ warnx("svc_vc_create: __rpc_fd2sockinfo failed"); |
||||
+ goto cleanup_svc_vc_create; |
||||
+ } |
||||
r->sendsize = __rpc_get_t_size(si.si_af, si.si_proto, (int)sendsize); |
||||
r->recvsize = __rpc_get_t_size(si.si_af, si.si_proto, (int)recvsize); |
||||
r->maxrec = __svc_maxrec; |
@ -0,0 +1,422 @@
@@ -0,0 +1,422 @@
|
||||
%define _root_libdir /%{_lib} |
||||
|
||||
Name: libtirpc |
||||
Version: 0.2.4 |
||||
Release: 0.10%{?dist} |
||||
Summary: Transport Independent RPC Library |
||||
Group: System Environment/Libraries |
||||
License: SISSL and BSD |
||||
URL: http://nfsv4.bullopensource.org/ |
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) |
||||
Source0: http://downloads.sourceforge.net/libtirpc/libtirpc-%{version}.tar.bz2 |
||||
|
||||
BuildRequires: automake, autoconf, libtool, pkgconfig |
||||
BuildRequires: krb5-devel |
||||
|
||||
# |
||||
# RHEL7.1 |
||||
# |
||||
Patch001: libtirpc-0.2.4-svc-buffer-overflow.patch |
||||
Patch002: libtirpc-0.2.4-nonblocking-mode.patch |
||||
|
||||
# |
||||
# RHEL7.2 |
||||
# |
||||
Patch003: libtirpc-0.2.4-mem-leak.patch |
||||
|
||||
# |
||||
# RHEL7.3 |
||||
# |
||||
Patch004: libtirpc-0.2.4-debug.patch |
||||
Patch005: libtirpc-0.2.4-svc_vc_create-memleak.patch |
||||
Patch006: libtirpc-0.2.4-svc-gss-memleaks.patch |
||||
Patch007: libtirpc-0.2.4-clnt-mthr-create.patch |
||||
|
||||
# |
||||
# RHEL7.4 |
||||
# |
||||
Patch008: libtirpc-0.2.4-makefd_xprt-fd.patch |
||||
Patch009: libtirpc-0.2.4-CVE-2017-8779.patch |
||||
|
||||
%description |
||||
This package contains SunLib's implementation of transport-independent |
||||
RPC (TI-RPC) documentation. This library forms a piece of the base of |
||||
Open Network Computing (ONC), and is derived directly from the |
||||
Solaris 2.3 source. |
||||
|
||||
TI-RPC is an enhanced version of TS-RPC that requires the UNIX System V |
||||
Transport Layer Interface (TLI) or an equivalent X/Open Transport Interface |
||||
(XTI). TI-RPC is on-the-wire compatible with the TS-RPC, which is supported |
||||
by almost 70 vendors on all major operating systems. TS-RPC source code |
||||
(RPCSRC 4.0) remains available from several internet sites. |
||||
|
||||
%package devel |
||||
Summary: Development files for the libtirpc library |
||||
Group: Development/Libraries |
||||
Requires: %{name} = %{version}-%{release} |
||||
Requires: pkgconfig man-db |
||||
|
||||
%description devel |
||||
This package includes header files and libraries necessary for |
||||
developing programs which use the tirpc library. |
||||
|
||||
|
||||
%prep |
||||
%setup -q |
||||
# 1102765 - rpcbind segfaults in svc_vc_recv |
||||
%patch001 -p1 |
||||
# 1162714 - Non blocking mode for writes is broken |
||||
%patch002 -p1 |
||||
# 1236187 - Memory Leak in libtirpc |
||||
%patch003 -p1 |
||||
# 1273159 - Backport libtirpc's new debugging interface from upstream |
||||
%patch004 -p1 |
||||
# 1276685 - memory leak in svc_vc_create |
||||
%patch005 -p1 |
||||
# 1282488 - Address memory leaks in server-side GSS authenticator |
||||
%patch006 -p1 |
||||
# 1342545 - Threads specifically interacting with libtirpc library... |
||||
%patch007 -p1 |
||||
# 1410617 - makefd_xprt: remove obsolete check for fd number |
||||
%patch008 -p1 |
||||
# CVE-2017-8779 libtirpc: libtirpc, libntirpc: Memory leak.... |
||||
%patch009 -p1 |
||||
|
||||
# Remove .orig files |
||||
find . -name "*.orig" | xargs rm -f |
||||
|
||||
%build |
||||
sh autogen.sh |
||||
autoreconf -fisv |
||||
%configure |
||||
make all |
||||
|
||||
%install |
||||
rm -rf %{buildroot} |
||||
mkdir -p %{buildroot}/etc |
||||
mkdir -p %{buildroot}%{_root_libdir} |
||||
mkdir -p %{buildroot}%{_libdir}/pkgconfig |
||||
make install DESTDIR=%{buildroot} \ |
||||
libdir=%{_root_libdir} pkgconfigdir=%{_libdir}/pkgconfig |
||||
# Don't package .a or .la files |
||||
rm -f %{buildroot}%{_root_libdir}/*.{a,la} |
||||
|
||||
# Creat the man diretory |
||||
mv %{buildroot}%{_mandir}/man3 %{buildroot}%{_mandir}/man3t |
||||
|
||||
%post -p /sbin/ldconfig |
||||
|
||||
%postun -p /sbin/ldconfig |
||||
|
||||
%post devel |
||||
# Register the new man section |
||||
#if [ "$1" -eq 1 ]; then |
||||
# makewhatis -s 3t |
||||
#fi |
||||
|
||||
%postun devel |
||||
# Remove the existance of the man section |
||||
#makewhatis -s 3t |
||||
|
||||
|
||||
%clean |
||||
rm -rf %{buildroot} |
||||
|
||||
%files |
||||
%defattr(-,root,root) |
||||
%doc AUTHORS ChangeLog NEWS README |
||||
%{_root_libdir}/libtirpc.so.* |
||||
%config(noreplace)%{_sysconfdir}/netconfig |
||||
|
||||
%files devel |
||||
%defattr(0644,root,root,755) |
||||
%dir %{_includedir}/tirpc |
||||
%dir %{_includedir}/tirpc/rpc |
||||
%dir %{_includedir}/tirpc/rpcsvc |
||||
%{_root_libdir}/libtirpc.so |
||||
%{_libdir}/pkgconfig/libtirpc.pc |
||||
%{_includedir}/tirpc/netconfig.h |
||||
%{_includedir}/tirpc/rpc/auth.h |
||||
%{_includedir}/tirpc/rpc/auth_des.h |
||||
%{_includedir}/tirpc/rpc/auth_gss.h |
||||
%{_includedir}/tirpc/rpc/auth_kerb.h |
||||
%{_includedir}/tirpc/rpc/auth_unix.h |
||||
%{_includedir}/tirpc/rpc/clnt.h |
||||
%{_includedir}/tirpc/rpc/clnt_soc.h |
||||
%{_includedir}/tirpc/rpc/clnt_stat.h |
||||
%{_includedir}/tirpc/rpc/des.h |
||||
%{_includedir}/tirpc/rpc/des_crypt.h |
||||
%{_includedir}/tirpc/rpc/nettype.h |
||||
%{_includedir}/tirpc/rpc/pmap_clnt.h |
||||
%{_includedir}/tirpc/rpc/pmap_prot.h |
||||
%{_includedir}/tirpc/rpc/pmap_rmt.h |
||||
%{_includedir}/tirpc/rpc/raw.h |
||||
%{_includedir}/tirpc/rpc/rpc.h |
||||
%{_includedir}/tirpc/rpc/rpc_com.h |
||||
%{_includedir}/tirpc/rpc/rpc_msg.h |
||||
%{_includedir}/tirpc/rpc/rpcb_clnt.h |
||||
%{_includedir}/tirpc/rpc/rpcb_prot.h |
||||
%{_includedir}/tirpc/rpc/rpcb_prot.x |
||||
%{_includedir}/tirpc/rpc/rpcent.h |
||||
%{_includedir}/tirpc/rpc/svc.h |
||||
%{_includedir}/tirpc/rpc/svc_auth.h |
||||
%{_includedir}/tirpc/rpc/svc_dg.h |
||||
%{_includedir}/tirpc/rpc/svc_soc.h |
||||
%{_includedir}/tirpc/rpc/types.h |
||||
%{_includedir}/tirpc/rpc/xdr.h |
||||
%{_includedir}/tirpc/rpcsvc/crypt.h |
||||
%{_includedir}/tirpc/rpcsvc/crypt.x |
||||
%{_mandir}/*/* |
||||
|
||||
%changelog |
||||
* Wed May 17 2017 Steve Dickson <steved@redhat.com> 0.2.4-0.10 |
||||
- Fix for CVE-2017-8779 (bz 1449463) |
||||
|
||||
* Sat Feb 25 2017 Steve Dickson <steved@redhat.com> 0.2.4-0.9 |
||||
- makefd_xprt: remove obsolete check for fd number (bz 1410617) |
||||
|
||||
* Mon Jun 6 2016 Steve Dickson <steved@redhat.com> 0.2.4-0.8 |
||||
- handle concurrent connect calls in clnt_vc_create() (bz 1342545) |
||||
|
||||
* Fri Apr 8 2016 Steve Dickson <steved@redhat.com> 0.2.4-0.7 |
||||
- Backported upstream debugging (bz 1273159) |
||||
- Fixed memory leak in svc_vc_create (bz 1276685) |
||||
- Fixed memory leaks in server-side GSS authenticator (bz 1282488) |
||||
|
||||
* Mon Jun 29 2015 Steve Dickson <steved@redhat.com> 0.2.4-0.6 |
||||
- Fixed a couple memory leaks (bz 1236187) |
||||
|
||||
* Sat Nov 15 2014 Steve Dickson <steved@redhat.com> 0.2.4-0.5 |
||||
- Fixed the non-blocking mode (bz 1162714) |
||||
|
||||
* Wed Sep 17 2014 Steve Dickson <steved@redhat.com> 0.2.4-0.4 |
||||
- Avoid buffer overruns svcauth_gss_validate() (bz 1102765) |
||||
|
||||
* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 0.2.4-0.3 |
||||
- Mass rebuild 2014-01-24 |
||||
|
||||
* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 0.2.4-0.2 |
||||
- Mass rebuild 2013-12-27 |
||||
|
||||
* Fri Dec 13 2013 Steve Dickson <steved@redhat.com> 0.2.4-0.1 |
||||
- Update to latest upstream release: 0.2.4 (bz 1040593) |
||||
|
||||
* Wed Dec 11 2013 Steve Dickson <steved@redhat.com> 0.2.4-0 |
||||
- Update to latest upstream release: 0.2.4 (bz 1038736) |
||||
|
||||
* Tue Nov 26 2013 Steve Dickson <steved@redhat.com> 0.2.3-4 |
||||
- Update to latest RC release: libtirpc-0-2-4-rc3 (bz 1034434) |
||||
|
||||
* Tue Jul 2 2013 Steve Dickson <steved@redhat.com> 0.2.3-3 |
||||
- Update to latest RC release: libtirpc-0-2-4-rc2 (bz 959469) |
||||
|
||||
* Mon Apr 22 2013 Steve Dickson <steved@redhat.com> 0.2.3-2 |
||||
- Update to latest RC release: libtirpc-0-2-4-rc1 (bz 948378) |
||||
|
||||
* Thu Apr 11 2013 Guenther Deschner <gdeschner@redhat.com> 0.2.3-1 |
||||
- Removed libgssglue dependency (patch from master) |
||||
|
||||
* Wed Feb 13 2013 Steve Dickson <steved@redhat.com> 0.2.3-0 |
||||
- Updated to latest upstream release: 0.2.3 |
||||
|
||||
* Tue Nov 13 2012 Steve Dickson <steved@redhat.com> 0.2.1-43 |
||||
- Updated to latest upstream RC release: 0.2.3-rc4 |
||||
|
||||
* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.2.2-42 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild |
||||
|
||||
* Thu Apr 26 2012 Steve Dickson <steved@redhat.com> 0.2.1-4.1 |
||||
- Updated to latest upstream RC release: libtirpc-0.2.3-rc3 |
||||
|
||||
* Mon Mar 19 2012 Steve Dickson <steved@redhat.com> 0.2.1-3.1 |
||||
- Fixed the install path in doc/Makefile.am |
||||
|
||||
* Fri Jan 13 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.2.2-2.1 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild |
||||
|
||||
* Wed Jul 20 2011 Steve Dickson <steved@redhat.com> 0.2.1-1.1 |
||||
- Fixed segfault in SVCAUTH_WRAP call (bz 722594) |
||||
|
||||
* Tue Jun 21 2011 Steve Dickson <steved@redhat.com> 0.2.1-1 |
||||
- Updated to latest upstream version: 0.2.3-rc1 |
||||
|
||||
* Mon May 2 2011 Steve Dickson <steved@redhat.com> 0.2.1-0 |
||||
- Updated to latest upstream version: 0.2.2 |
||||
|
||||
* Tue Apr 12 2011 Karsten Hopp <karsten@redhat.com> 0.2.1-7.1 |
||||
- replace Requires(devel) with a simple Requires as the new rpm |
||||
aborts otherwise with "Bad Requireflags: qualifiers: Requires(devel)" |
||||
|
||||
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild |
||||
|
||||
* Thu Dec 2 2010 Steve Dickson <steved@redhat.com> 0.2.1-6 |
||||
- Moved the libraries from /usr/lib to /lib |
||||
|
||||
* Mon Aug 30 2010 Steve Dickson <steved@redhat.com> 0.2.1-5 |
||||
- Relicense these SISSL files to 3 clause BSD |
||||
- Fixed last remaining BSD license issues |
||||
|
||||
* Fri Jul 16 2010 Steve Dickson <steved@redhat.com> 0.2.1-4 |
||||
- Add back SISSL license attribution |
||||
|
||||
* Fri Jul 09 2010 Mike McGrath <mmcgrath@redhat.com> 0.2.1-3.1 |
||||
- Rebuild to fix broken man dep s/man/man-db/ |
||||
|
||||
* Tue May 18 2010 Steve Dickson <steved@redhat.com> 0.2.1-3 |
||||
- Updated to latest RC release: libtirpc-0-2-2-rc2 [bz 519430] |
||||
|
||||
* Mon Mar 22 2010 Steve Dickson <steved@redhat.com> 0.2.1-2 |
||||
- Updated to latest RC release: libtirpc-0-2-2-rc1 |
||||
|
||||
* Mon Nov 30 2009 Steve Dickson <steved@redhat.com> 0.2.1-1 |
||||
- Updated to latest upstream version: 0.2.1 |
||||
|
||||
* Sat Jul 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.2.0-4 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild |
||||
|
||||
* Thu Jul 9 2009 Steve Dickson <steved@redhat.com> 0.2.0-3 |
||||
- Updated to latest upstream tag: 0-2-1-rc3 |
||||
Fixed the --disable-gss options |
||||
Fixed a number of warnings |
||||
Change how architectures are define in xdr_float.c |
||||
|
||||
* Mon Jun 29 2009 Steve Dickson <steved@redhat.com> 0.2.0-2 |
||||
- Updated to latest upstream tag: 0-2-1-rc2 |
||||
rpcb_clnt: RPC_PROGNOTREGISTERED is a permanent error |
||||
clnt_dg: Fix infinite loop when datagram call times ou |
||||
Updated .gitignore file |
||||
Replace the hard coded path name with the top_srcdir macrc |
||||
Added 'doc' to the SUBDIRS list so make install work correctly. |
||||
|
||||
* Fri May 29 2009 Steve Dickson <steved@redhat.com> 0.2.0-1 |
||||
- Updated to latest upstream version: 0.2.0 |
||||
|
||||
* Tue May 19 2009 Tom "spot" Callaway <tcallawa@redhat.com> 0.1.11-3 |
||||
- Replace the Sun RPC license with the BSD license, with the explicit permission of Sun Microsystems |
||||
|
||||
* Mon Apr 20 2009 Steve Dickson <steved@redhat.com> 0.1.11-2 |
||||
- Updated to libtirpc-0.1.12-rc1 |
||||
|
||||
* Mon Apr 20 2009 Steve Dickson <steved@redhat.com> 0.1.11-1 |
||||
- Updated to the latest release: 0.1.11 |
||||
|
||||
* Fri Mar 13 2009 Steve Dickson <steved@redhat.com> 0.1.10-6 |
||||
- libtirpc: set r_netid and r_owner in __rpcb_findaddr_timed |
||||
- libtirpc: be sure to free cl_netid and cl_tp |
||||
- libtirpc: must free saved wire verifier when destroying context |
||||
|
||||
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.1.10-5 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild |
||||
|
||||
* Wed Jan 28 2009 Steve Dickson <steved@redhat.com> 0.1.10-4 |
||||
- Converted all uids and uids to type uid_t and gid_t (sf 2446314) |
||||
|
||||
* Wed Jan 28 2009 Steve Dickson <steved@redhat.com> 0.1.10-3 |
||||
- backwards compatibility: fix order of fields in TI-RPC's |
||||
svc_req (bz 481388) |
||||
- Removed a number warnings. |
||||
|
||||
* Thu Jan 22 2009 Steve Dickson <steved@redhat.com> 0.1.10-2 |
||||
- Header file fixes for C++ |
||||
|
||||
* Thu Nov 20 2008 Steve Dickson <steved@redhat.com> 0.1.10-1 |
||||
- Updated to latest upstream version: 0.1.10 |
||||
|
||||
* Tue Oct 28 2008 Steve Dickson <steved@redhat.com> 0.1.9-7 |
||||
- Fixed some incorrect function declarations (bz468815) |
||||
|
||||
* Mon Oct 27 2008 Steve Dickson <steved@redhat.com> 0.1.9-6 |
||||
- Fix bad assumption taddr2uaddr processing that |
||||
caused a segfault (bz468014) |
||||
|
||||
* Tue Sep 16 2008 Steve Dickson <steved@redhat.com> 0.1.9-5 |
||||
- Fix for taddr2addr conversion bug of local addresses |
||||
- Fixed some of warnings in: src/auth_time.c, src/clnt_dg.c and |
||||
src/clnt_raw.c |
||||
- Added some #ifdef NOTUSED around some code in src/rpbc_clnt.c |
||||
that was not being used... |
||||
|
||||
* Thu Sep 4 2008 Steve Dickson <steved@redhat.com> 0.1.9-4 |
||||
- Always make IPv6 sockets V6ONLY |
||||
- Fix incorrect sizeof() in __rpc_getbroadifs |
||||
|
||||
* Thu Aug 7 2008 Tom "spot" Callaway <tcallawa@redhat.com> 0.1.9-3 |
||||
- fix license tag |
||||
|
||||
* Tue Jul 8 2008 Steve Dickson <steved@redhat.com> 0.1.9-1 |
||||
- Update to latest upstream version 0.1.9 |
||||
|
||||
* Fri Jun 27 2008 Steve Dickson <steved@redhat.com> 0.1.8-2 |
||||
- Added super-H(sh3,4) architecture support (bz 446559) |
||||
|
||||
* Tue Jun 10 2008 Steve Dickson <steved@redhat.com> 0.1.8-1 |
||||
- Update to latest upstream version 0.1.8 |
||||
|
||||
* Wed Mar 12 2008 Steve Dickson <steved@redhat.com> 0.1.7-18 |
||||
- Install man pages in the 3t section |
||||
|
||||
* Tue Feb 19 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 0.1.7-17 |
||||
- Autorebuild for GCC 4.3 |
||||
|
||||
* Mon Feb 18 2008 Steve Dickson <steved@redhat.com> 0.1.7-16 |
||||
- Added patch that creates a libtirpc.pc used by the |
||||
pkg-config command. |
||||
|
||||
* Thu Jan 24 2008 Steve Dickson <steved@redhat.com> 0.1.7-15 |
||||
- Protect from buffer overflow in the GSS code. (bz 362121) |
||||
|
||||
* Mon Dec 17 2007 Steve Dickson <steved@redhat.com> 0.1.7-14 |
||||
- Fixed typo in /etc/netconfig file (bz 414471) |
||||
|
||||
* Thu Oct 25 2007 Steve Dickson <steved@redhat.com> 0.1.7-13 |
||||
- Added a check for the ARM arch (bz 351071) |
||||
|
||||
* Wed Oct 17 2007 Steve Dickson <steved@redhat.com> 0.1.7-12 |
||||
- Switch the libgssapi dependency to libgssglue |
||||
|
||||
* Mon Oct 15 2007 Steve Dickson <steved@redhat.com> 0.1.7-11 |
||||
- Made tcp6/udp6 network ids no longer visible in the netconfig |
||||
file since the ipv6 code is not fully baked yet in rpcbind. (bz 249121) |
||||
|
||||
* Wed Aug 29 2007 Fedora Release Engineering <rel-eng at fedoraproject dot org> - 0.1.7-10 |
||||
- Rebuild for selinux ppc32 issue. |
||||
|
||||
* Mon Jul 30 2007 <steved@redhat.com> 0.1.7-9 |
||||
- Fixed mutex lock problem in clnt_raw_create() |
||||
- Ignore the return value of snprintf() and use strlen() instead |
||||
to bump the pointer in clnt_sperror() |
||||
- A couple ntohs() were needed in bindresvport_sa() |
||||
- Added IP_RECVERR processing with to clnt_dg_call() so |
||||
application will see errors instead of timing out |
||||
- Make sure remote address (xp_rtaddr) is populated |
||||
with the correct type of address. |
||||
- Change the order of network ids in /etc/netconfg |
||||
putting ipv4 ids before ipv6. |
||||
- Bumped up Release from 8 to 9. |
||||
|
||||
* Mon Jul 9 2007 <steved@redhat.com> 0.1.7-7 |
||||
- Fixed infinite loop in svc_run() (bz 246677) |
||||
|
||||
* Thu Apr 26 2007 <steved@redhat.com> 0.1.7-6 |
||||
- Fixed potential buffer overflow in xdr_strings |
||||
- Added a optimization to bindresvport that allows more |
||||
ports to be tried. |
||||
|
||||
* Mon Mar 26 2007 Steve Dickson <steved@redhat.com> 0.1.7-5 |
||||
- Fixed Unowned Directory RPM problem (bz 233873) |
||||
|
||||
* Mon Aug 28 2006 Steve Dickson <steved@redhat.com> 0.1.7-4 |
||||
- Fixed undefined symbol (bz 204296) |
||||
|
||||
* Mon Aug 14 2006 Steve Dickson <steved@redhat.com> 0.1.7-3 |
||||
- Added in svc_auth_none needed by the GSSAPI code. |
||||
- Added compile define for ppc64 archs |
||||
|
||||
* Fri Aug 11 2006 Steve Dickson <steved@redhat.com> 0.1.7-2 |
||||
- Uncommented tcp6 and udp6 in the default /etc/netconfig file. |
||||
- Added hooks to used the libgssapi library. |
||||
|
||||
* Fri Aug 4 2006 Steve Dickson <steved@redhat.com> 0.1.7-1 |
||||
- Initial commit |
Loading…
Reference in new issue