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