SOURCES: libtirpc-git.patch - updated from git: git log -p libtirpc-0-1-1...
glen
glen at pld-linux.org
Sun Mar 22 01:26:52 CET 2009
Author: glen Date: Sun Mar 22 00:26:52 2009 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- updated from git:
git log -p libtirpc-0-1-10..HEAD
---- Files affected:
SOURCES:
libtirpc-git.patch (1.1 -> 1.2)
---- Diffs:
================================================================
Index: SOURCES/libtirpc-git.patch
diff -u SOURCES/libtirpc-git.patch:1.1 SOURCES/libtirpc-git.patch:1.2
--- SOURCES/libtirpc-git.patch:1.1 Wed Mar 4 23:00:56 2009
+++ SOURCES/libtirpc-git.patch Sun Mar 22 01:26:46 2009
@@ -1,122 +1,109 @@
-commit 951a1b9b0195cbe58e1e62142e84d7ec4658943f
-Author: Steve Dickson <steved at redhat.com>
-Date: Wed Jan 28 12:44:46 2009 -0500
+commit fbe8b50728c565459f2678aa1ad4dfc6610d1f9e
+Author: Jeff Layton <jlayton at redhat.com>
+Date: Fri Mar 13 12:48:40 2009 -0400
- Converted all uid and gid variables of the type uid_t and gid_t.
+ libtirpc: must free saved wire verifier when destroying context
- Signed-off-by: Steve Dickson <steved at redhat.com>
-
-commit 5bc80ccd81e0c7ef185de34e7f34a7766bce0e27
-Author: Steve Dickson <steved at redhat.com>
-Date: Wed Jan 28 09:56:10 2009 -0500
-
- Removed a number warnings by adding a number of type casts.
+ When we're destroying the authgss context, we must also free any
+ saved wire verifier that we have to keep from leaking memory.
+ Signed-off-by: Jeff Layton <jlayton at redhat.com>
Signed-off-by: Steve Dickson <steved at redhat.com>
-commit 2bb4c8d7ec8a98e1be9133d5901149a81ea9b5d9
-Author: Chuck Lever <chuck.lever at oracle.com>
-Date: Wed Jan 28 09:19:07 2009 -0500
+diff --git a/src/auth_gss.c b/src/auth_gss.c
+index bf6cba6..df3017a 100644
+--- a/src/auth_gss.c
++++ b/src/auth_gss.c
+@@ -567,6 +567,12 @@ authgss_destroy_context(AUTH *auth)
+ gss_delete_sec_context(&min_stat, &gd->ctx, NULL);
+ gd->ctx = GSS_C_NO_CONTEXT;
+ }
++
++ /* free saved wire verifier (if any) */
++ mem_free(gd->gc_wire_verf.value, gd->gc_wire_verf.length);
++ gd->gc_wire_verf.value = NULL;
++ gd->gc_wire_verf.length = 0;
++
+ gd->established = FALSE;
+ }
+
- backwards compatibility: fix order of fields in TI-RPC's svc_req
-
- Preserve ABI compatibility between glibc's RPC implementation and
- the legacy RPC implementation in libtirpc by moving the rq_xprt
- field in the TI-RPC version of the svc_req struct so it is
- backwards compatible with the legacy version of this structure.
-
- Linux's legacy svc_req struct, from /usr/include/rpc/svc.h, looks
- like this:
-
- struct svc_req {
- rpcprog_t rq_prog; /* service program number */
- rpcvers_t rq_vers; /* service protocol version */
- rpcproc_t rq_proc; /* the desired procedure */
- struct opaque_auth rq_cred; /* raw creds from the wire */
- caddr_t rq_clntcred; /* read only cooked cred */
- SVCXPRT *rq_xprt; /* associated transport */
- };
-
- The new TI-RPC svc_req struct, from /usr/include/tirpc/rpc/svc.h,
- looks like this:
-
- struct svc_req {
- u_int32_t rq_prog; /* service program number */
- u_int32_t rq_vers; /* service protocol version */
- u_int32_t rq_proc; /* the desired procedure */
- struct opaque_auth rq_cred; /* raw creds from the wire */
- void *rq_clntcred; /* read only cooked cred */
- caddr_t rq_clntname; /* read only client name */
- caddr_t rq_svcname; /* read only cooked service cred */
- SVCXPRT *rq_xprt; /* associated transport */
- };
-
- Note the extra fields rq_clntname and rq_svcname. These are used for
- TI-RPC's RPCSEC GSS flavor support.
-
- This issue came to light because rpc.statd still uses only legacy RPC
- calls, and thus includes /usr/include/rpc/svc.h. However, other parts
- of nfs-utils now link with TI-RPC, so the legacy RPC functions in
- libtirpc are used in favor of glibc's RPC functions. The libtirpc svc
- functions use the new svc_req struct, but rpc.statd uses the old
- svc_req struct.
-
- Since the svc_req fields were different, rpc.statd broke after recent
- IPv6-related changes, even though I hadn't made any changes to it.
- Note that rpc.mountd also references the rq_xprt field, so it has the
- same issue.
-
- In most operating systems, there is only one rpc/svc.h and one version
- of svc_req so this is not a problem. We should audit all of the
- structures and functions under /usr/include/rpc and
- /usr/include/tirpc/rpc to ensure we have a reasonable level of
- backwards compatibility until such a time it is decided to merge these
- implementations or get rid of RPC support in glibc.
+commit 956a049085101961593956d01084f7f713ea8ded
+Author: Jeff Layton <jlayton at redhat.com>
+Date: Fri Mar 13 12:47:36 2009 -0400
+
+ libtirpc: be sure to free cl_netid and cl_tp
+
+ When creating a client with clnt_tli_create, it uses strdup to copy
+ strings for these fields if nconf is passed in. clnt_dg_destroy frees
+ these strings already. Make sure clnt_vc_destroy frees them in the same
+ way.
- Signed-off-by: Chuck Lever <chuck.lever at oracle.com>
+ Signed-off-by: Jeff Layton <jlayton at redhat.com>
Signed-off-by: Steve Dickson <steved at redhat.com>
-commit 12129663ddc356aed44434aeda28ff1ce2dfc786
-Author: Sandeep Josh <sdjres at yahoo.com>
-Date: Thu Jan 22 12:34:19 2009 -0500
-
- tirpc header file fixes for C++
-
- Added a __THROW to a couple extern declarations.
+diff --git a/src/clnt_vc.c b/src/clnt_vc.c
+index 1dcc976..eb9bb7f 100644
+--- a/src/clnt_vc.c
++++ b/src/clnt_vc.c
+@@ -646,6 +646,10 @@ clnt_vc_destroy(cl)
+ if (ct->ct_addr.buf)
+ free(ct->ct_addr.buf);
+ mem_free(ct, sizeof(struct ct_data));
++ if (cl->cl_netid && cl->cl_netid[0])
++ mem_free(cl->cl_netid, strlen(cl->cl_netid) +1);
++ if (cl->cl_tp && cl->cl_tp[0])
++ mem_free(cl->cl_tp, strlen(cl->cl_tp) +1);
+ mem_free(cl, sizeof(CLIENT));
+ mutex_unlock(&clnt_fd_lock);
+ thr_sigsetmask(SIG_SETMASK, &(mask), NULL);
+
+commit 1c8c2bf2f0b81b0fa1992894679786619c048a1e
+Author: Jeff Layton <jlayton at redhat.com>
+Date: Fri Mar 13 12:44:16 2009 -0400
+
+ libtirpc: set r_netid and r_owner in __rpcb_findaddr_timed
+
+ These fields in the rpcbind GETADDR call are being passed uninitialized
+ to CLNT_CALL. In the case of x86_64 at least, this usually leads to a
+ segfault. On x86, it sometimes causes segfaults and other times causes
+ garbage to be sent on the wire.
+
+ rpcbind generally ignores the r_owner field for calls that come in over
+ the wire, so it really doesn't matter what we send in that slot. We just
+ need to send something. The reference implementation from Sun seems to
+ send a blank string. Have ours follow suit.
+ Signed-off-by: Jeff Layton <jlayton at redhat.com>
Signed-off-by: Steve Dickson <steved at redhat.com>
-commit e145633cf10c92aa6f24b8a1a322435b4e874b02
-Author: Steve Dickson <steved at redhat.com>
-Date: Thu Nov 20 08:55:31 2008 -0500
-
- Changed clnt_spcreateerror() to return clearer
- and more concise error messages.
-
- Signed-off-by: Steve Dickson <steved at redhat.com>
+diff --git a/src/rpcb_clnt.c b/src/rpcb_clnt.c
+index ed16f00..b1c0038 100644
+--- a/src/rpcb_clnt.c
++++ b/src/rpcb_clnt.c
+@@ -749,6 +749,13 @@ __rpcb_findaddr_timed(program, version, nconf, host, clpp, tp)
+ parms.r_addr = NULL;
+ parms.r_prog = program;
+ parms.r_vers = version;
++ parms.r_netid = nconf->nc_netid;
++
++ /*
++ * According to wire captures, the reference implementation
++ * (OpenSolaris) sends a blank string here too.
++ */
++ parms.r_owner = "";
+
+ /*
+ * Use default total timeout if no timeout is specified.
-commit 7c78a0362fcd3e0749330f11d0fdecb62131a6a3
+commit 951a1b9b0195cbe58e1e62142e84d7ec4658943f
Author: Steve Dickson <steved at redhat.com>
-Date: Thu Nov 20 08:53:52 2008 -0500
+Date: Wed Jan 28 12:44:46 2009 -0500
- The clnt_fd_lock mutex lock was not being
- released during an error path in clnt_dg_call.
+ Converted all uid and gid variables of the type uid_t and gid_t.
Signed-off-by: Steve Dickson <steved at redhat.com>
-diff --git a/src/auth_gss.c b/src/auth_gss.c
-index 8f7919c..bf6cba6 100644
---- a/src/auth_gss.c
-+++ b/src/auth_gss.c
-@@ -221,7 +221,7 @@ authgss_create_default(CLIENT *clnt, char *service, struct rpc_gss_sec *sec)
- sname.length = strlen(service);
-
- maj_stat = gss_import_name(&min_stat, &sname,
-- GSS_C_NT_HOSTBASED_SERVICE,
-+ (gss_OID)GSS_C_NT_HOSTBASED_SERVICE,
- &name);
-
- if (maj_stat != GSS_S_COMPLETE) {
diff --git a/src/auth_unix.c b/src/auth_unix.c
index c2727e0..04ee5dd 100644
--- a/src/auth_unix.c
@@ -145,24 +132,6 @@
}
/*
-diff --git a/src/authgss_prot.c b/src/authgss_prot.c
-index 97724f1..be0d1a6 100644
---- a/src/authgss_prot.c
-+++ b/src/authgss_prot.c
-@@ -176,10 +176,11 @@ xdr_rpc_gss_unwrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr,
- XDR tmpxdrs;
- gss_buffer_desc databuf, wrapbuf;
- OM_uint32 maj_stat, min_stat;
-- u_int seq_num, conf_state, qop_state;
-+ u_int seq_num, qop_state;
-+ int conf_state;
- bool_t xdr_stat;
-
-- if (xdr_func == xdr_void || xdr_ptr == NULL)
-+ if (xdr_func == (xdrproc_t)xdr_void || xdr_ptr == NULL)
- return (TRUE);
-
- memset(&databuf, 0, sizeof(databuf));
diff --git a/src/authunix_prot.c b/src/authunix_prot.c
index 01c1711..79f2fb6 100644
--- a/src/authunix_prot.c
@@ -178,87 +147,6 @@
&& xdr_array(xdrs, (caddr_t *)&(p->aup_gids),
&(p->aup_len), NGRPS, sizeof(int), (xdrproc_t)xdr_int) ) {
return (TRUE);
-diff --git a/src/clnt_dg.c b/src/clnt_dg.c
-index da01c5b..9a574eb 100644
---- a/src/clnt_dg.c
-+++ b/src/clnt_dg.c
-@@ -402,6 +402,7 @@ get_reply:
-
- fd.fd = cu->cu_fd;
- fd.events = POLLIN;
-+ fd.revents = 0;
- while (total_time > 0) {
- tv = total_time < nextsend_time ? total_time : nextsend_time;
- switch (poll(&fd, 1, tv)) {
-@@ -455,6 +456,7 @@ get_reply:
- {
- e = (struct sock_extended_err *) CMSG_DATA(cmsg);
- cu->cu_error.re_errno = e->ee_errno;
-+ release_fd_lock(cu->cu_fd, mask);
- return (cu->cu_error.re_status = RPC_CANTRECV);
- }
- }
-diff --git a/src/clnt_perror.c b/src/clnt_perror.c
-index 8f53f8e..1c1c705 100644
---- a/src/clnt_perror.c
-+++ b/src/clnt_perror.c
-@@ -239,7 +239,7 @@ char *
- clnt_spcreateerror(s)
- const char *s;
- {
-- char *str;
-+ char *str, *err;
- size_t len, i;
-
- if (s == NULL)
-@@ -257,8 +257,21 @@ clnt_spcreateerror(s)
- switch (rpc_createerr.cf_stat) {
- case RPC_PMAPFAILURE:
- (void) strncat(str, " - ", len - 1);
-- (void) strncat(str,
-- clnt_sperrno(rpc_createerr.cf_error.re_status), len - 4);
-+ err = clnt_sperrno(rpc_createerr.cf_error.re_status);
-+ if (err)
-+ (void) strncat(str, err+5, len-5);
-+ switch(rpc_createerr.cf_error.re_status) {
-+ case RPC_CANTSEND:
-+ case RPC_CANTRECV:
-+ i = strlen(str);
-+ len -= i;
-+ snprintf(str+i, len, ": errno %d (%s)",
-+ rpc_createerr.cf_error.re_errno,
-+ strerror(rpc_createerr.cf_error.re_errno));
-+ break;
-+ default:
-+ break;
-+ }
- break;
-
- case RPC_SYSTEMERROR:
-diff --git a/src/svc_auth_gss.c b/src/svc_auth_gss.c
-index 346e5b1..9e9ff81 100644
---- a/src/svc_auth_gss.c
-+++ b/src/svc_auth_gss.c
-@@ -190,7 +190,7 @@ svcauth_gss_accept_sec_context(struct svc_req *rqst,
- /* Deserialize arguments. */
- memset(&recv_tok, 0, sizeof(recv_tok));
-
-- if (!svc_getargs(rqst->rq_xprt, xdr_rpc_gss_init_args,
-+ if (!svc_getargs(rqst->rq_xprt, (xdrproc_t)xdr_rpc_gss_init_args,
- (caddr_t)&recv_tok))
- return (FALSE);
-
-@@ -469,8 +469,8 @@ _svcauth_gss(struct svc_req *rqst, struct rpc_msg *msg, bool_t *no_dispatch)
-
- *no_dispatch = TRUE;
-
-- call_stat = svc_sendreply(rqst->rq_xprt, xdr_rpc_gss_init_res,
-- (caddr_t)&gr);
-+ call_stat = svc_sendreply(rqst->rq_xprt,
-+ (xdrproc_t)xdr_rpc_gss_init_res, (caddr_t)&gr);
-
- if (!call_stat)
- return (AUTH_FAILED);
diff --git a/src/svc_auth_unix.c b/src/svc_auth_unix.c
index 77a1272..7a7eeaa 100644
--- a/src/svc_auth_unix.c
@@ -304,6 +192,167 @@
};
#define authsys_parms authunix_parms
+
+commit 5bc80ccd81e0c7ef185de34e7f34a7766bce0e27
+Author: Steve Dickson <steved at redhat.com>
+Date: Wed Jan 28 09:56:10 2009 -0500
+
+ Removed a number warnings by adding a number of type casts.
+
+ Signed-off-by: Steve Dickson <steved at redhat.com>
+
+diff --git a/src/auth_gss.c b/src/auth_gss.c
+index 8f7919c..bf6cba6 100644
+--- a/src/auth_gss.c
++++ b/src/auth_gss.c
+@@ -221,7 +221,7 @@ authgss_create_default(CLIENT *clnt, char *service, struct rpc_gss_sec *sec)
+ sname.length = strlen(service);
+
+ maj_stat = gss_import_name(&min_stat, &sname,
+- GSS_C_NT_HOSTBASED_SERVICE,
++ (gss_OID)GSS_C_NT_HOSTBASED_SERVICE,
+ &name);
+
+ if (maj_stat != GSS_S_COMPLETE) {
+diff --git a/src/authgss_prot.c b/src/authgss_prot.c
+index 97724f1..be0d1a6 100644
+--- a/src/authgss_prot.c
++++ b/src/authgss_prot.c
+@@ -176,10 +176,11 @@ xdr_rpc_gss_unwrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr,
+ XDR tmpxdrs;
+ gss_buffer_desc databuf, wrapbuf;
+ OM_uint32 maj_stat, min_stat;
+- u_int seq_num, conf_state, qop_state;
++ u_int seq_num, qop_state;
++ int conf_state;
+ bool_t xdr_stat;
+
+- if (xdr_func == xdr_void || xdr_ptr == NULL)
++ if (xdr_func == (xdrproc_t)xdr_void || xdr_ptr == NULL)
+ return (TRUE);
+
+ memset(&databuf, 0, sizeof(databuf));
+diff --git a/src/svc_auth_gss.c b/src/svc_auth_gss.c
+index 346e5b1..9e9ff81 100644
+--- a/src/svc_auth_gss.c
++++ b/src/svc_auth_gss.c
+@@ -190,7 +190,7 @@ svcauth_gss_accept_sec_context(struct svc_req *rqst,
+ /* Deserialize arguments. */
+ memset(&recv_tok, 0, sizeof(recv_tok));
+
+- if (!svc_getargs(rqst->rq_xprt, xdr_rpc_gss_init_args,
++ if (!svc_getargs(rqst->rq_xprt, (xdrproc_t)xdr_rpc_gss_init_args,
+ (caddr_t)&recv_tok))
+ return (FALSE);
+
+@@ -469,8 +469,8 @@ _svcauth_gss(struct svc_req *rqst, struct rpc_msg *msg, bool_t *no_dispatch)
+
+ *no_dispatch = TRUE;
+
+- call_stat = svc_sendreply(rqst->rq_xprt, xdr_rpc_gss_init_res,
+- (caddr_t)&gr);
++ call_stat = svc_sendreply(rqst->rq_xprt,
++ (xdrproc_t)xdr_rpc_gss_init_res, (caddr_t)&gr);
+
+ if (!call_stat)
+ return (AUTH_FAILED);
+
+commit 2bb4c8d7ec8a98e1be9133d5901149a81ea9b5d9
+Author: Chuck Lever <chuck.lever at oracle.com>
+Date: Wed Jan 28 09:19:07 2009 -0500
+
+ backwards compatibility: fix order of fields in TI-RPC's svc_req
+
+ Preserve ABI compatibility between glibc's RPC implementation and
+ the legacy RPC implementation in libtirpc by moving the rq_xprt
+ field in the TI-RPC version of the svc_req struct so it is
+ backwards compatible with the legacy version of this structure.
+
+ Linux's legacy svc_req struct, from /usr/include/rpc/svc.h, looks
+ like this:
+
+ struct svc_req {
+ rpcprog_t rq_prog; /* service program number */
+ rpcvers_t rq_vers; /* service protocol version */
+ rpcproc_t rq_proc; /* the desired procedure */
+ struct opaque_auth rq_cred; /* raw creds from the wire */
+ caddr_t rq_clntcred; /* read only cooked cred */
+ SVCXPRT *rq_xprt; /* associated transport */
+ };
+
+ The new TI-RPC svc_req struct, from /usr/include/tirpc/rpc/svc.h,
+ looks like this:
+
+ struct svc_req {
+ u_int32_t rq_prog; /* service program number */
+ u_int32_t rq_vers; /* service protocol version */
+ u_int32_t rq_proc; /* the desired procedure */
+ struct opaque_auth rq_cred; /* raw creds from the wire */
+ void *rq_clntcred; /* read only cooked cred */
+ caddr_t rq_clntname; /* read only client name */
+ caddr_t rq_svcname; /* read only cooked service cred */
+ SVCXPRT *rq_xprt; /* associated transport */
+ };
+
+ Note the extra fields rq_clntname and rq_svcname. These are used for
+ TI-RPC's RPCSEC GSS flavor support.
+
+ This issue came to light because rpc.statd still uses only legacy RPC
+ calls, and thus includes /usr/include/rpc/svc.h. However, other parts
+ of nfs-utils now link with TI-RPC, so the legacy RPC functions in
+ libtirpc are used in favor of glibc's RPC functions. The libtirpc svc
+ functions use the new svc_req struct, but rpc.statd uses the old
+ svc_req struct.
+
+ Since the svc_req fields were different, rpc.statd broke after recent
+ IPv6-related changes, even though I hadn't made any changes to it.
+ Note that rpc.mountd also references the rq_xprt field, so it has the
+ same issue.
+
+ In most operating systems, there is only one rpc/svc.h and one version
+ of svc_req so this is not a problem. We should audit all of the
+ structures and functions under /usr/include/rpc and
+ /usr/include/tirpc/rpc to ensure we have a reasonable level of
+ backwards compatibility until such a time it is decided to merge these
+ implementations or get rid of RPC support in glibc.
+
+ Signed-off-by: Chuck Lever <chuck.lever at oracle.com>
+ Signed-off-by: Steve Dickson <steved at redhat.com>
+
+diff --git a/tirpc/rpc/svc.h b/tirpc/rpc/svc.h
+index ec5914f..ea2985d 100644
+--- a/tirpc/rpc/svc.h
++++ b/tirpc/rpc/svc.h
+@@ -131,14 +131,17 @@ typedef struct __rpc_svcxprt {
+ * Service request
+ */
+ struct svc_req {
++ /* ORDER: compatibility with legacy RPC */
+ u_int32_t rq_prog; /* service program number */
+ u_int32_t rq_vers; /* service protocol version */
+ u_int32_t rq_proc; /* the desired procedure */
+ struct opaque_auth rq_cred; /* raw creds from the wire */
+ void *rq_clntcred; /* read only cooked cred */
++ SVCXPRT *rq_xprt; /* associated transport */
++
++ /* New with TI-RPC */
+ caddr_t rq_clntname; /* read only client name */
+ caddr_t rq_svcname; /* read only cooked service cred */
+- SVCXPRT *rq_xprt; /* associated transport */
+ };
+
+ /*
+
+commit 12129663ddc356aed44434aeda28ff1ce2dfc786
+Author: Sandeep Josh <sdjres at yahoo.com>
+Date: Thu Jan 22 12:34:19 2009 -0500
+
+ tirpc header file fixes for C++
+
+ Added a __THROW to a couple extern declarations.
+
+ Signed-off-by: Steve Dickson <steved at redhat.com>
+
diff --git a/tirpc/rpc/rpc.h b/tirpc/rpc/rpc.h
index 23e3197..f93479e 100644
--- a/tirpc/rpc/rpc.h
@@ -332,26 +381,80 @@
__END_DECLS
#endif /* !_RPC_CENT_H */
-diff --git a/tirpc/rpc/svc.h b/tirpc/rpc/svc.h
-index ec5914f..ea2985d 100644
---- a/tirpc/rpc/svc.h
-+++ b/tirpc/rpc/svc.h
-@@ -131,14 +131,17 @@ typedef struct __rpc_svcxprt {
- * Service request
- */
- struct svc_req {
-+ /* ORDER: compatibility with legacy RPC */
- u_int32_t rq_prog; /* service program number */
- u_int32_t rq_vers; /* service protocol version */
- u_int32_t rq_proc; /* the desired procedure */
- struct opaque_auth rq_cred; /* raw creds from the wire */
- void *rq_clntcred; /* read only cooked cred */
-+ SVCXPRT *rq_xprt; /* associated transport */
-+
-+ /* New with TI-RPC */
- caddr_t rq_clntname; /* read only client name */
- caddr_t rq_svcname; /* read only cooked service cred */
-- SVCXPRT *rq_xprt; /* associated transport */
- };
+
+commit e145633cf10c92aa6f24b8a1a322435b4e874b02
+Author: Steve Dickson <steved at redhat.com>
+Date: Thu Nov 20 08:55:31 2008 -0500
+
+ Changed clnt_spcreateerror() to return clearer
+ and more concise error messages.
+
+ Signed-off-by: Steve Dickson <steved at redhat.com>
+
+diff --git a/src/clnt_perror.c b/src/clnt_perror.c
+index 8f53f8e..1c1c705 100644
+--- a/src/clnt_perror.c
++++ b/src/clnt_perror.c
+@@ -239,7 +239,7 @@ char *
+ clnt_spcreateerror(s)
+ const char *s;
+ {
+- char *str;
++ char *str, *err;
+ size_t len, i;
- /*
+ if (s == NULL)
+@@ -257,8 +257,21 @@ clnt_spcreateerror(s)
+ switch (rpc_createerr.cf_stat) {
+ case RPC_PMAPFAILURE:
+ (void) strncat(str, " - ", len - 1);
+- (void) strncat(str,
+- clnt_sperrno(rpc_createerr.cf_error.re_status), len - 4);
++ err = clnt_sperrno(rpc_createerr.cf_error.re_status);
++ if (err)
++ (void) strncat(str, err+5, len-5);
++ switch(rpc_createerr.cf_error.re_status) {
++ case RPC_CANTSEND:
++ case RPC_CANTRECV:
++ i = strlen(str);
++ len -= i;
++ snprintf(str+i, len, ": errno %d (%s)",
++ rpc_createerr.cf_error.re_errno,
++ strerror(rpc_createerr.cf_error.re_errno));
++ break;
++ default:
++ break;
++ }
+ break;
+
+ case RPC_SYSTEMERROR:
+
+commit 7c78a0362fcd3e0749330f11d0fdecb62131a6a3
+Author: Steve Dickson <steved at redhat.com>
+Date: Thu Nov 20 08:53:52 2008 -0500
+
+ The clnt_fd_lock mutex lock was not being
+ released during an error path in clnt_dg_call.
+
+ Signed-off-by: Steve Dickson <steved at redhat.com>
+
+diff --git a/src/clnt_dg.c b/src/clnt_dg.c
+index da01c5b..9a574eb 100644
+--- a/src/clnt_dg.c
++++ b/src/clnt_dg.c
+@@ -402,6 +402,7 @@ get_reply:
+
+ fd.fd = cu->cu_fd;
+ fd.events = POLLIN;
++ fd.revents = 0;
+ while (total_time > 0) {
+ tv = total_time < nextsend_time ? total_time : nextsend_time;
+ switch (poll(&fd, 1, tv)) {
+@@ -455,6 +456,7 @@ get_reply:
+ {
+ e = (struct sock_extended_err *) CMSG_DATA(cmsg);
+ cu->cu_error.re_errno = e->ee_errno;
++ release_fd_lock(cu->cu_fd, mask);
<<Diff was trimmed, longer than 597 lines>>
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/libtirpc-git.patch?r1=1.1&r2=1.2&f=u
More information about the pld-cvs-commit
mailing list