diff --git a/libtirpc-0.2.0-rc3.patch b/libtirpc-0.2.0-rc3.patch new file mode 100644 index 0000000..03cc7b5 --- /dev/null +++ b/libtirpc-0.2.0-rc3.patch @@ -0,0 +1,372 @@ +diff --git a/configure.ac b/configure.ac +new file mode 100644 +index 0000000..df50e94 +--- /dev/null ++++ b/configure.ac +@@ -0,0 +1,29 @@ ++AC_INIT(libtirpc, 0.2.0) ++AM_INIT_AUTOMAKE(libtirpc, 0.2.0) ++AM_MAINTAINER_MODE ++AC_CONFIG_SRCDIR([src/auth_des.c]) ++ ++AC_ARG_ENABLE(gss,[ --enable-gss Turn on gss api], [case "${enableval}" in ++ yes) gss=true ; AC_CHECK_LIB([gssapi],[gss_init_sec_context]) ;; ++ no) gss=false ;; ++ *) 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 ++ AC_DEFINE(HAVE_LIBGSSAPI, 1, []) ++ PKG_CHECK_MODULES(GSSGLUE, libgssglue, [], ++ AC_MSG_ERROR([Unable to locate information required to use libgssglue.])) ++fi ++ ++AC_PROG_CC ++AM_CONFIG_HEADER(config.h) ++AC_PROG_LIBTOOL ++##AC_PROG_RANLIB ++AC_HEADER_DIRENT ++AC_PREFIX_DEFAULT(/usr) ++AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h limits.h locale.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h syslog.h unistd.h]) ++AC_CHECK_LIB([pthread], [pthread_create]) ++ ++ ++AC_CONFIG_FILES([Makefile src/Makefile man/Makefile doc/Makefile]) ++AC_OUTPUT(libtirpc.pc) +diff --git a/configure.in b/configure.in +deleted file mode 100644 +index bacb265..0000000 +--- a/configure.in ++++ /dev/null +@@ -1,28 +0,0 @@ +-AC_INIT(libtirpc, 0.2.0) +-AM_INIT_AUTOMAKE(libtirpc, 0.2.0) +-AM_MAINTAINER_MODE +-AC_CONFIG_SRCDIR([src/auth_des.c]) +- +-AC_ARG_ENABLE(gss,[ --enable-gss Turn on gss api], [case "${enableval}" in +- yes) gss=true ; AC_CHECK_LIB([gssapi],[gss_init_sec_context]) ;; +- no) gss=false ;; +- *) 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 +-AM_CONFIG_HEADER(config.h) +-AC_PROG_LIBTOOL +-##AC_PROG_RANLIB +-AC_HEADER_DIRENT +-AC_PREFIX_DEFAULT(/usr) +-AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h limits.h locale.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h syslog.h unistd.h]) +-AC_CHECK_LIB([pthread], [pthread_create]) +- +- +-AC_CONFIG_FILES([Makefile src/Makefile man/Makefile doc/Makefile]) +-AC_OUTPUT(libtirpc.pc) +diff --git a/src/authgss_prot.c b/src/authgss_prot.c +index be0d1a6..ab72d91 100644 +--- a/src/authgss_prot.c ++++ b/src/authgss_prot.c +@@ -54,7 +54,7 @@ xdr_rpc_gss_cred(XDR *xdrs, struct rpc_gss_cred *p) + xdr_u_int(xdrs, &p->gc_seq) && + xdr_enum(xdrs, (enum_t *)&p->gc_svc) && + xdr_bytes(xdrs, (char **)&p->gc_ctx.value, +- &p->gc_ctx.length, MAX_AUTH_BYTES)); ++ (u_int *)&p->gc_ctx.length, MAX_AUTH_BYTES)); + + log_debug("xdr_rpc_gss_cred: %s %s " + "(v %d, proc %d, seq %d, svc %d, ctx %p:%d)", +@@ -72,7 +72,7 @@ xdr_rpc_gss_init_args(XDR *xdrs, gss_buffer_desc *p) + bool_t xdr_stat; + + xdr_stat = xdr_bytes(xdrs, (char **)&p->value, +- &p->length, MAX_NETOBJ_SZ); ++ (u_int *)&p->length, MAX_NETOBJ_SZ); + + log_debug("xdr_rpc_gss_init_args: %s %s (token %p:%d)", + (xdrs->x_op == XDR_ENCODE) ? "encode" : "decode", +@@ -88,12 +88,12 @@ xdr_rpc_gss_init_res(XDR *xdrs, struct rpc_gss_init_res *p) + bool_t xdr_stat; + + xdr_stat = (xdr_bytes(xdrs, (char **)&p->gr_ctx.value, +- &p->gr_ctx.length, MAX_NETOBJ_SZ) && ++ (u_int *)&p->gr_ctx.length, MAX_NETOBJ_SZ) && + xdr_u_int(xdrs, &p->gr_major) && + xdr_u_int(xdrs, &p->gr_minor) && + xdr_u_int(xdrs, &p->gr_win) && + xdr_bytes(xdrs, (char **)&p->gr_token.value, +- &p->gr_token.length, MAX_NETOBJ_SZ)); ++ (u_int *)&p->gr_token.length, MAX_NETOBJ_SZ)); + + log_debug("xdr_rpc_gss_init_res %s %s " + "(ctx %p:%d, maj %d, min %d, win %d, token %p:%d)", +@@ -135,7 +135,7 @@ xdr_rpc_gss_wrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, + if (svc == RPCSEC_GSS_SVC_INTEGRITY) { + /* Marshal databody_integ length. */ + XDR_SETPOS(xdrs, start); +- if (!xdr_u_int(xdrs, &databuf.length)) ++ if (!xdr_u_int(xdrs, (u_int *)&databuf.length)) + return (FALSE); + + /* Checksum rpc_gss_data_t. */ +@@ -148,7 +148,7 @@ xdr_rpc_gss_wrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, + /* Marshal checksum. */ + XDR_SETPOS(xdrs, end); + xdr_stat = xdr_bytes(xdrs, (char **)&wrapbuf.value, +- &wrapbuf.length, MAX_NETOBJ_SZ); ++ (u_int *)&wrapbuf.length, MAX_NETOBJ_SZ); + gss_release_buffer(&min_stat, &wrapbuf); + } + else if (svc == RPCSEC_GSS_SVC_PRIVACY) { +@@ -162,7 +162,7 @@ xdr_rpc_gss_wrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, + /* Marshal databody_priv. */ + XDR_SETPOS(xdrs, start); + xdr_stat = xdr_bytes(xdrs, (char **)&wrapbuf.value, +- &wrapbuf.length, MAX_NETOBJ_SZ); ++ (u_int *)&wrapbuf.length, MAX_NETOBJ_SZ); + gss_release_buffer(&min_stat, &wrapbuf); + } + return (xdr_stat); +@@ -188,13 +188,13 @@ xdr_rpc_gss_unwrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, + + if (svc == RPCSEC_GSS_SVC_INTEGRITY) { + /* Decode databody_integ. */ +- if (!xdr_bytes(xdrs, (char **)&databuf.value, &databuf.length, ++ if (!xdr_bytes(xdrs, (char **)&databuf.value, (u_int *)&databuf.length, + MAX_NETOBJ_SZ)) { + log_debug("xdr decode databody_integ failed"); + return (FALSE); + } + /* Decode checksum. */ +- if (!xdr_bytes(xdrs, (char **)&wrapbuf.value, &wrapbuf.length, ++ if (!xdr_bytes(xdrs, (char **)&wrapbuf.value, (u_int *)&wrapbuf.length, + MAX_NETOBJ_SZ)) { + gss_release_buffer(&min_stat, &databuf); + log_debug("xdr decode checksum failed"); +@@ -213,7 +213,7 @@ xdr_rpc_gss_unwrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, + } + else if (svc == RPCSEC_GSS_SVC_PRIVACY) { + /* Decode databody_priv. */ +- if (!xdr_bytes(xdrs, (char **)&wrapbuf.value, &wrapbuf.length, ++ if (!xdr_bytes(xdrs, (char **)&wrapbuf.value, (u_int *)&wrapbuf.length, + MAX_NETOBJ_SZ)) { + log_debug("xdr decode databody_priv failed"); + return (FALSE); +diff --git a/src/bindresvport.c b/src/bindresvport.c +index 730dc6b..6ce3e81 100644 +--- a/src/bindresvport.c ++++ b/src/bindresvport.c +@@ -88,11 +88,10 @@ bindresvport_sa(sd, sa) + salen = sizeof(myaddr); + sa = (struct sockaddr *)&myaddr; + +- if (getsockname(sd, sa, &salen) == -1) ++ if (getsockname(sd, (struct sockaddr *)&myaddr, &salen) == -1) + return -1; /* errno is correctly set */ + +- af = sa->sa_family; +- memset(sa, 0, salen); ++ af = myaddr.ss_family; + } else + af = sa->sa_family; + +diff --git a/src/clnt_bcast.c b/src/clnt_bcast.c +index fef7a4b..140407b 100644 +--- a/src/clnt_bcast.c ++++ b/src/clnt_bcast.c +@@ -586,13 +586,12 @@ rpc_broadcast_exp(prog, vers, proc, xargs, argsp, xresults, resultsp, + struct netbuf *np; + #ifdef PORTMAP + struct netbuf taddr; +- struct sockaddr_in *sin; ++ struct sockaddr_in sin; + + if (pmap_flag && pmap_reply_flag) { +- sin = (struct sockaddr_in *) +- (void *)&fdlist[i].raddr; +- sin->sin_port = +- htons((u_short)port); ++ memcpy(&sin, &fdlist[i].raddr, sizeof(sin)); ++ sin.sin_port = htons((u_short)port); ++ memcpy(&fdlist[i].raddr, &sin, sizeof(sin)); + taddr.len = taddr.maxlen = + sizeof(fdlist[i].raddr); + taddr.buf = &fdlist[i].raddr; +diff --git a/src/clnt_dg.c b/src/clnt_dg.c +index 2f870b1..79fed5d 100644 +--- a/src/clnt_dg.c ++++ b/src/clnt_dg.c +@@ -312,7 +312,7 @@ clnt_dg_call(cl, proc, xargs, argsp, xresults, resultsp, utimeout) + socklen_t inlen, salen; + ssize_t recvlen = 0; + int rpc_lock_value; +- u_int32_t xid; ++ u_int32_t xid, inval, outval; + + outlen = 0; + sigfillset(&newmask); +@@ -475,15 +475,23 @@ get_reply: + cu->cu_error.re_status = RPC_CANTRECV; + goto out; + } +- if (recvlen >= sizeof(u_int32_t) && +- (cu->cu_async == TRUE || +- *((u_int32_t *)(void *)(cu->cu_inbuf)) == +- *((u_int32_t *)(void *)(cu->cu_outbuf)))) +- inlen = (socklen_t)recvlen; +- else { +- total_time -= tv; +- goto send_again; +- } ++ ++ if (recvlen < sizeof(u_int32_t)) { ++ total_time -= tv; ++ goto send_again; ++ } ++ ++ if (cu->cu_async == TRUE) ++ inlen = (socklen_t)recvlen; ++ else { ++ memcpy(&inval, cu->cu_inbuf, sizeof(u_int32_t)); ++ memcpy(&outval, cu->cu_outbuf, sizeof(u_int32_t)); ++ if (inval != outval) { ++ total_time -= tv; ++ goto send_again; ++ } ++ inlen = (socklen_t)recvlen; ++ } + + /* + * now decode and validate the response +diff --git a/src/mt_misc.c b/src/mt_misc.c +index 94bb645..4cba143 100644 +--- a/src/mt_misc.c ++++ b/src/mt_misc.c +@@ -120,7 +120,7 @@ __rpc_createerr() + return (rce_addr); + } + +-void __attribute ((descructor)) tsd_key_delete(void) ++void tsd_key_delete(void) + { + if (clnt_broadcast_key != -1) + thr_keydelete(clnt_broadcast_key); +diff --git a/src/rpc_generic.c b/src/rpc_generic.c +index 8219483..541275c 100644 +--- a/src/rpc_generic.c ++++ b/src/rpc_generic.c +@@ -812,6 +812,11 @@ int + __rpc_sockisbound(int fd) + { + struct sockaddr_storage ss; ++ union { ++ struct sockaddr_in sin; ++ struct sockaddr_in6 sin6; ++ struct sockaddr_un usin; ++ } u_addr; + socklen_t slen; + + slen = sizeof (struct sockaddr_storage); +@@ -820,17 +825,17 @@ __rpc_sockisbound(int fd) + + switch (ss.ss_family) { + case AF_INET: +- return (((struct sockaddr_in *) +- (void *)&ss)->sin_port != 0); ++ memcpy(&u_addr.sin, &ss, sizeof(u_addr.sin)); ++ return (u_addr.sin.sin_port != 0); + #ifdef INET6 + case AF_INET6: +- return (((struct sockaddr_in6 *) +- (void *)&ss)->sin6_port != 0); ++ memcpy(&u_addr.sin6, &ss, sizeof(u_addr.sin6)); ++ return (u_addr.sin6.sin6_port != 0); + #endif + case AF_LOCAL: + /* XXX check this */ +- return (((struct sockaddr_un *) +- (void *)&ss)->sun_path[0] != '\0'); ++ memcpy(&u_addr.usin, &ss, sizeof(u_addr.usin)); ++ return (u_addr.usin.sun_path[0] != 0); + default: + break; + } +diff --git a/src/svc.c b/src/svc.c +index a61c14b..cc65e6a 100644 +--- a/src/svc.c ++++ b/src/svc.c +@@ -77,7 +77,9 @@ static struct svc_callout + + extern rwlock_t svc_lock; + extern rwlock_t svc_fd_lock; ++#ifdef HAVE_LIBGSSAPI + extern struct svc_auth_ops svc_auth_gss_ops; ++#endif + + static struct svc_callout *svc_find (rpcprog_t, rpcvers_t, + struct svc_callout **, char *); +@@ -715,9 +717,11 @@ svc_getreq_common (fd) + SVC_DESTROY (xprt); + break; + } +- else if ((xprt->xp_auth != NULL) && +- (xprt->xp_auth->svc_ah_ops != &svc_auth_gss_ops)) +- { ++ else if ((xprt->xp_auth != NULL) ++#ifdef HAVE_LIBGSSAPI ++ && (xprt->xp_auth->svc_ah_ops != &svc_auth_gss_ops) ++#endif ++ ) { + xprt->xp_auth = NULL; + } + } +diff --git a/src/svc_auth_gss.c b/src/svc_auth_gss.c +index 9e9ff81..54b23b1 100644 +--- a/src/svc_auth_gss.c ++++ b/src/svc_auth_gss.c +@@ -121,7 +121,7 @@ svcauth_gss_import_name(char *service) + namebuf.length = strlen(service); + + maj_stat = gss_import_name(&min_stat, &namebuf, +- GSS_C_NT_HOSTBASED_SERVICE, &name); ++ (gss_OID)GSS_C_NT_HOSTBASED_SERVICE, &name); + + if (maj_stat != GSS_S_COMPLETE) { + log_status("gss_import_name", maj_stat, min_stat); +diff --git a/src/xdr_float.c b/src/xdr_float.c +index 4c5b28a..114b192 100644 +--- a/src/xdr_float.c ++++ b/src/xdr_float.c +@@ -54,16 +54,6 @@ + * This routine works on machines with IEEE754 FP and Vaxen. + */ + +-#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(__powerpc__) || defined(__s390__) || defined(__arm__) || \ +- defined(__sh__) +-#include +-#define IEEEFP +-#endif +- + #if defined(__vax__) + + /* What IEEE single precision floating point looks like on a Vax */ +@@ -93,6 +83,11 @@ static struct sgl_limits { + {{ 0x0, 0x0, 0x0, 0x0 }, /* Min Vax */ + { 0x0, 0x0, 0x0 }} /* Min IEEE */ + }; ++#else ++ ++#include ++#define IEEEFP ++ + #endif /* vax */ + + bool_t diff --git a/libtirpc.spec b/libtirpc.spec index 18d88f3..b3f923e 100644 --- a/libtirpc.spec +++ b/libtirpc.spec @@ -1,6 +1,6 @@ Name: libtirpc Version: 0.2.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Transport Independent RPC Library Group: System Environment/Libraries License: SISSL and BSD @@ -31,6 +31,7 @@ Requires: %{name} = %{version}-%{release} Requires(devel): pkgconfig man Patch1: libtirpc-0.2.0-rc2.patch +Patch2: libtirpc-0.2.0-rc3.patch %description devel This package includes header files and libraries necessary for @@ -40,6 +41,7 @@ developing programs which use the tirpc library. %prep %setup -q %patch1 -p1 +%patch2 -p1 # Remove .orig files find . -name "*.orig" | xargs rm -f @@ -124,6 +126,12 @@ rm -rf %{buildroot} %{_mandir}/*/* %changelog +* Thu Jul 9 2009 Steve Dickson 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 0.2.0-2 - Updated to latest upstream tag: 0-2-1-rc2 rpcb_clnt: RPC_PROGNOTREGISTERED is a permanent error