Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:FrontRunner
libtirpc.24713
0001-rpcb_clnt.c-config-to-try-protocolversion-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-rpcb_clnt.c-config-to-try-protocolversion-2-first.patch of Package libtirpc.24713
From 9a34c60f02f5ba46382afe43dcb26a04e51b089e Mon Sep 17 00:00:00 2001 From: Thomas Blume <Thomas.Blume@suse.com> Date: Mon, 20 Dec 2021 16:17:29 +0100 Subject: [PATCH] rpcb_clnt.c config to try protocolversion 2 first In some setups, it is necessary to try rpc protocol version 2 first. Creating the file /etc/netconfig-try-2-first will enforce this. --- man/Makefile.am | 1 + man/netconfig-try-2-first.7 | 18 ++++++++++++++++++ man/netconfig.5 | 1 + src/rpcb_clnt.c | 30 +++++++++++++++++++++++++++--- 4 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 man/netconfig-try-2-first.7 diff --git a/man/Makefile.am b/man/Makefile.am index fa43bb4..38907d4 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -16,6 +16,7 @@ RPCSEC_MANS = rpcsec_gss.3t rpc_gss_get_error.3t \ rpc_gss_get_principal_name.3t rpc_gss_set_callback.3t \ rpc_gss_set_svc_name.3t rpc_gss_svc_max_data_length.3t +dist_man7_MANS = netconfig-try-2-first.7 dist_man5_MANS = netconfig.5 dist_man3_MANS = $(LOOKUP_MANS) $(NETCONFIG_MANS) \ $(BIND_MANS) $(GENERIC_MANS) $(COMPAT_MANS) \ diff --git a/man/netconfig-try-2-first.7 b/man/netconfig-try-2-first.7 new file mode 100644 index 0000000..475c483 --- /dev/null +++ b/man/netconfig-try-2-first.7 @@ -0,0 +1,18 @@ +.Dd January 16, 2019 +.Dt NETCONFIG-TRY-2-FIRST 7 +.Os +.Sh NAME +.Nm netconfig-try-2-first +.Nd indicator to enfore tcp protocol version 2 +.Sh SYNOPSIS +.Pa /etc/netconfig-try-2-first +.Sh DESCRIPTION +libtirpc tries per default for transport UDP and TCP the rpc protocol versions +in the sequence 4, 3, 2. +In some setups, it is necessary to try rpc protocol version 2 first. +Creating the file +.Nm +will enforce this. +.Ed +.Sh FILES +/etc/netconfig-try-2-first diff --git a/man/netconfig.5 b/man/netconfig.5 index e8dcbb2..beaf27a 100644 --- a/man/netconfig.5 +++ b/man/netconfig.5 @@ -119,5 +119,6 @@ struct netconfig { .It Pa /etc/netconfig .El .Sh SEE ALSO +.Xr netconfig-try-2-first 7 , .Xr getnetconfig 3 , .Xr getnetpath 3 diff --git a/src/rpcb_clnt.c b/src/rpcb_clnt.c index 0c34cb7..575822d 100644 --- a/src/rpcb_clnt.c +++ b/src/rpcb_clnt.c @@ -32,6 +32,7 @@ */ #include <pthread.h> #include <reentrant.h> +#include <sys/stat.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> @@ -838,6 +839,9 @@ __rpcb_findaddr_timed(program, version, nconf, host, clpp, tp) { #ifdef NOTUSED static bool_t check_rpcbind = TRUE; +#endif +#ifdef PORTMAP + bool_t portmap_first = FALSE; #endif CLIENT *client = NULL; RPCB parms; @@ -884,6 +888,18 @@ __rpcb_findaddr_timed(program, version, nconf, host, clpp, tp) parms.r_addr = NULL; } +#ifdef PORTMAP + /*enforce protocol version 2 if file exists */ + struct stat fileStat; + + if (stat("/etc/netconfig-try-2-first" ,&fileStat) == 0 && + strcmp(nconf->nc_protofmly, NC_INET) == 0) { + portmap_first = TRUE; + goto portmap; + } +#endif + +rpcbind: if (client == NULL) { client = getclnthandle(host, nconf, &parms.r_addr); if (client == NULL) { @@ -943,17 +959,25 @@ __rpcb_findaddr_timed(program, version, nconf, host, clpp, tp) } } + if (portmap_first) { + goto check_address; + } + +portmap: #ifdef PORTMAP /* Try version 2 for TCP or UDP */ if (strcmp(nconf->nc_protofmly, NC_INET) == 0) { address = __try_protocol_version_2(program, version, nconf, host, tp); - if (address == NULL) + if (address == NULL && portmap_first) + goto rpcbind; + else goto error; } #endif /* PORTMAP */ +check_address: if ((address == NULL) || (address->len == 0)) { - rpc_createerr.cf_stat = RPC_PROGNOTREGISTERED; - clnt_geterr(client, &rpc_createerr.cf_error); + rpc_createerr.cf_stat = RPC_PROGNOTREGISTERED; + clnt_geterr(client, &rpc_createerr.cf_error); } error: -- 2.37.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor