rpcbind/bugfix-rmt-calls.patch
2021-05-21 11:22:53 +08:00

137 lines
3.5 KiB
Diff

From f2e2c1e85f32e4bb8be66f67efbab43e65dfb573 Mon Sep 17 00:00:00 2001
Description: Add command line option to enable remote calls at runtime instead build time
Author: Josue Ortega <josue@debian.org>
Last-Update: 2019-09-17
---
Makefile.am | 4 ----
configure.ac | 4 ----
man/rpcbind.8 | 7 ++++++-
src/rpcbind.c | 18 +++++++++++-------
4 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index bcdd69f..3efe198 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -29,10 +29,6 @@ if LIBWRAP
AM_CPPFLAGS += -DLIBWRAP
endif
-if RMTCALLS
-AM_CPPFLAGS += -DRMTCALLS
-endif
-
bin_PROGRAMS = rpcinfo
sbin_PROGRAMS = rpcbind
diff --git a/configure.ac b/configure.ac
index 9f494ea..65c2dc7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -21,10 +21,6 @@ AC_ARG_ENABLE([warmstarts],
AS_HELP_STRING([--enable-warmstarts], [Enables Warm Starts @<:@default=no@:>@]))
AM_CONDITIONAL(WARMSTART, test x$enable_warmstarts = xyes)
-AC_ARG_ENABLE([rmtcalls],
- AS_HELP_STRING([--enable-rmtcalls], [Enables Remote Calls @<:@default=no@:>@]))
-AM_CONDITIONAL(RMTCALLS, test x$enable_rmtcalls = xyes)
-
AC_ARG_WITH([statedir],
AS_HELP_STRING([--with-statedir=ARG], [use ARG as state dir @<:@default=/run/rpcbind@:>@])
,, [with_statedir=/run/rpcbind])
diff --git a/man/rpcbind.8 b/man/rpcbind.8
index af6200f..e396372 100644
--- a/man/rpcbind.8
+++ b/man/rpcbind.8
@@ -11,7 +11,7 @@
.Nd universal addresses to RPC program number mapper
.Sh SYNOPSIS
.Nm
-.Op Fl adhiLls
+.Op Fl adhiLlsr
.Sh DESCRIPTION
The
.Nm
@@ -137,6 +137,11 @@ to do a "warm start" by read a state file when
starts up. The state file is created when
.Nm
terminates.
+.It Fl r
+Turn on remote calls. Cause
+.Nm
+to open up random listening ports. Note that rpcinfo need this feature turned on
+for work properly. (This flag is a Debian extension.)
.El
.Sh NOTES
All RPC servers must be restarted if
diff --git a/src/rpcbind.c b/src/rpcbind.c
index fd8cab4..c43489d 100644
--- a/src/rpcbind.c
+++ b/src/rpcbind.c
@@ -88,6 +88,7 @@ int debugging = 0; /* Tell me what's going on */
int doabort = 0; /* When debugging, do an abort on errors */
int dofork = 1; /* fork? */
int createdsocket = 0; /* Did I create the socket or systemd did it for me? */
+int rmtcalls = 0; /* Remote calls */
rpcblist_ptr list_rbl; /* A list of version 3/4 rpcbind services */
@@ -806,12 +807,12 @@ got_socket:
#endif
-#ifdef RMTCALLS
+ if (rmtcalls) {
/*
* rmtcall only supported on CLTS transports for now.
*/
- if (nconf->nc_semantics == NC_TPI_CLTS) {
- status = create_rmtcall_fd(nconf);
+ if (nconf->nc_semantics == NC_TPI_CLTS) {
+ status = create_rmtcall_fd(nconf);
#ifdef RPCBIND_DEBUG
if (debugging) {
if (status < 0) {
@@ -824,8 +825,8 @@ got_socket:
}
}
#endif
- }
-#endif
+ }
+ }
return (0);
error:
@@ -891,7 +892,7 @@ parseargs(int argc, char *argv[])
{
int c;
oldstyle_local = 1;
- while ((c = getopt(argc, argv, "adh:ilswf")) != -1) {
+ while ((c = getopt(argc, argv, "adh:ilswfr")) != -1) {
switch (c) {
case 'a':
doabort = 1; /* when debugging, do an abort on */
@@ -921,13 +922,16 @@ parseargs(int argc, char *argv[])
case 'f':
dofork = 0;
break;
+ case 'r':
+ rmtcalls = 1;
+ break;
#ifdef WARMSTART
case 'w':
warmstart = 1;
break;
#endif
default: /* error */
- fprintf(stderr, "usage: rpcbind [-adhilswf]\n");
+ fprintf(stderr, "usage: rpcbind [-adhilswfr]\n");
exit (1);
}
}
--
2.23.0