diff mbox series

allow TCP-only portmapper

Message ID 20230411121142.23312-1-dan@danny.cz (mailing list archive)
State New, archived
Headers show
Series allow TCP-only portmapper | expand

Commit Message

Dan Horák April 11, 2023, 12:11 p.m. UTC
Code that works in GLIBC's runrpc implementation fails with libtirpc.
libtirpc forces the RPC library to talk to the portmapper via UDP,
even when the client specifies TCP.  This breaks existing code which
expect the protocol specified to be honored, even when talking to
portmapper.

This is upstreaming of an old patch by Rob Riggs reported in Fedora.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1725329
Signed-off-by: Rob Riggs <rob+redhat@pangalactic.org>
Signed-off-by: Dan Horák <dan@danny.cz>
---
 src/rpcb_clnt.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

Comments

Steve Dickson April 21, 2023, 6:18 p.m. UTC | #1
On 4/11/23 8:11 AM, Dan Horák wrote:
> Code that works in GLIBC's runrpc implementation fails with libtirpc.
> libtirpc forces the RPC library to talk to the portmapper via UDP,
> even when the client specifies TCP.  This breaks existing code which
> expect the protocol specified to be honored, even when talking to
> portmapper.
> 
> This is upstreaming of an old patch by Rob Riggs reported in Fedora.
> 
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1725329
> Signed-off-by: Rob Riggs <rob+redhat@pangalactic.org>
> Signed-off-by: Dan Horák <dan@danny.cz>
Committed... (tag: libtirpc-1-3-4-rc1)

steved.
> ---
>   src/rpcb_clnt.c | 9 +++------
>   1 file changed, 3 insertions(+), 6 deletions(-)
> 
> diff --git a/src/rpcb_clnt.c b/src/rpcb_clnt.c
> index 9a9de69..d178d86 100644
> --- a/src/rpcb_clnt.c
> +++ b/src/rpcb_clnt.c
> @@ -496,11 +496,7 @@ getpmaphandle(nconf, hostname, tgtaddr)
>   	CLIENT *client = NULL;
>   	rpcvers_t pmapvers = 2;
>   
> -	/*
> -	 * Try UDP only - there are some portmappers out
> -	 * there that use UDP only.
> -	 */
> -	if (nconf == NULL || strcmp(nconf->nc_proto, NC_TCP) == 0) {
> +	if (nconf == NULL) {
>   		struct netconfig *newnconf;
>   
>   		if ((newnconf = getnetconfigent("udp")) == NULL) {
> @@ -509,7 +505,8 @@ getpmaphandle(nconf, hostname, tgtaddr)
>   		}
>   		client = getclnthandle(hostname, newnconf, tgtaddr);
>   		freenetconfigent(newnconf);
> -	} else if (strcmp(nconf->nc_proto, NC_UDP) == 0) {
> +	} else if (strcmp(nconf->nc_proto, NC_UDP) == 0 ||
> +	    strcmp(nconf->nc_proto, NC_TCP) == 0) {
>   		if (strcmp(nconf->nc_protofmly, NC_INET) != 0)
>   			return NULL;
>   		client = getclnthandle(hostname, nconf, tgtaddr);
diff mbox series

Patch

diff --git a/src/rpcb_clnt.c b/src/rpcb_clnt.c
index 9a9de69..d178d86 100644
--- a/src/rpcb_clnt.c
+++ b/src/rpcb_clnt.c
@@ -496,11 +496,7 @@  getpmaphandle(nconf, hostname, tgtaddr)
 	CLIENT *client = NULL;
 	rpcvers_t pmapvers = 2;
 
-	/*
-	 * Try UDP only - there are some portmappers out
-	 * there that use UDP only.
-	 */
-	if (nconf == NULL || strcmp(nconf->nc_proto, NC_TCP) == 0) {
+	if (nconf == NULL) {
 		struct netconfig *newnconf;
 
 		if ((newnconf = getnetconfigent("udp")) == NULL) {
@@ -509,7 +505,8 @@  getpmaphandle(nconf, hostname, tgtaddr)
 		}
 		client = getclnthandle(hostname, newnconf, tgtaddr);
 		freenetconfigent(newnconf);
-	} else if (strcmp(nconf->nc_proto, NC_UDP) == 0) {
+	} else if (strcmp(nconf->nc_proto, NC_UDP) == 0 ||
+	    strcmp(nconf->nc_proto, NC_TCP) == 0) {
 		if (strcmp(nconf->nc_protofmly, NC_INET) != 0)
 			return NULL;
 		client = getclnthandle(hostname, nconf, tgtaddr);