Compare commits

...
Sign in to create a new pull request.

3 commits

Author SHA1 Message Date
Steve Dickson
90dd4fd8a1 Updated to latest upstream release: rpcbind-1_2_8 (bz 2300081)
Signed-off-by: Steve Dickson <steved@redhat.com>
2025-07-29 08:13:49 -04:00
Scott Mayhew
5aa98037a8 Fix rpm scriptlets to remove excessive restarts during upgrade
Signed-off-by: Scott Mayhew <smayhew@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
2025-05-08 11:18:17 -04:00
Zbigniew Jędrzejewski-Szmek
63e3b3eeee Add sysusers.d config file to allow rpm to create users/groups automatically
See https://fedoraproject.org/wiki/Changes/RPMSuportForSystemdSysusers.
Previously, a non-system user was created :(, sysusers does not support this.
2025-02-12 05:36:07 -05:00
7 changed files with 38 additions and 324 deletions

4
.gitignore vendored
View file

@ -1,4 +1,4 @@
x86_64
Makefile
rpcbind-1.2.7/
/rpcbind-1.2.7.tar.bz2
rpcbind-1.2.8-build/
/rpcbind-1.2.8.tar.bz2

View file

@ -1,16 +1,16 @@
diff -up rpcbind-1.2.6/src/rpcbind.c.orig rpcbind-1.2.6/src/rpcbind.c
--- rpcbind-1.2.6/src/rpcbind.c.orig 2022-07-12 16:25:36.422972803 -0400
+++ rpcbind-1.2.6/src/rpcbind.c 2022-07-12 16:26:00.679085433 -0400
@@ -143,6 +143,8 @@ static void rbllist_add(rpcprog_t, rpcve
static void terminate(int);
static void parseargs(int, char *[]);
diff -up rpcbind-1.2.8/src/rpcbind.c.orig rpcbind-1.2.8/src/rpcbind.c
--- rpcbind-1.2.8/src/rpcbind.c.orig 2025-07-26 16:57:24.000000000 -0400
+++ rpcbind-1.2.8/src/rpcbind.c 2025-07-26 17:15:51.933467872 -0400
@@ -214,6 +214,8 @@ static void version()
fprintf(stderr, "\n");
}
+char *systemdtmp = "/usr/bin/systemd-tmpfiles --create rpcbind.conf";
+
int
main(int argc, char *argv[])
{
@@ -150,13 +152,21 @@ main(int argc, char *argv[])
@@ -221,13 +223,21 @@ main(int argc, char *argv[])
void *nc_handle; /* Net config handle */
struct rlimit rl;
int maxrec = RPC_MAXDATASIZE;

View file

@ -1,46 +0,0 @@
diff --git a/configure.ac b/configure.ac
index c0ef896..c2069a2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,6 +20,12 @@ AM_CONDITIONAL(LIBSETDEBUG, test x$lib_setdebug = xyes)
AC_ARG_ENABLE([warmstarts],
AS_HELP_STRING([--enable-warmstarts], [Enables Warm Starts @<:@default=no@:>@]))
AM_CONDITIONAL(WARMSTART, test x$enable_warmstarts = xyes)
+AS_IF([test x$enable_warmstarts = xyes], [
+ warmstarts_opt=-w
+], [
+ warmstarts_opt=
+])
+AC_SUBST([warmstarts_opt], [$warmstarts_opt])
AC_ARG_ENABLE([rmtcalls],
AS_HELP_STRING([--enable-rmtcalls], [Enables Remote Calls @<:@default=no@:>@]))
diff --git a/src/rpcbind.c b/src/rpcbind.c
index 25d8a90..ecebe97 100644
--- a/src/rpcbind.c
+++ b/src/rpcbind.c
@@ -552,8 +552,10 @@ init_transport(struct netconfig *nconf)
syslog(LOG_ERR, "cannot bind %s on %s: %m",
(hosts[nhostsbak] == NULL) ? "*" :
hosts[nhostsbak], nconf->nc_netid);
- if (res != NULL)
+ if (res != NULL) {
freeaddrinfo(res);
+ res = NULL;
+ }
continue;
} else
checkbind++;
diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
index 7b1c74b..c892ca8 100644
--- a/systemd/rpcbind.service.in
+++ b/systemd/rpcbind.service.in
@@ -12,7 +12,7 @@ Wants=rpcbind.target
[Service]
Type=notify
# distro can provide a drop-in adding EnvironmentFile=-/??? if needed.
-ExecStart=@_sbindir@/rpcbind $RPCBIND_OPTIONS -w -f
+ExecStart=@_sbindir@/rpcbind $RPCBIND_OPTIONS @warmstarts_opt@ -f
[Install]
WantedBy=multi-user.target

View file

@ -1,177 +0,0 @@
diff --git a/configure.ac b/configure.ac
index c0ef896..573e4fd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,6 +20,12 @@ AM_CONDITIONAL(LIBSETDEBUG, test x$lib_setdebug = xyes)
AC_ARG_ENABLE([warmstarts],
AS_HELP_STRING([--enable-warmstarts], [Enables Warm Starts @<:@default=no@:>@]))
AM_CONDITIONAL(WARMSTART, test x$enable_warmstarts = xyes)
+AS_IF([test x$enable_warmstarts = xyes], [
+ warmstarts_opt=-w
+], [
+ warmstarts_opt=
+])
+AC_SUBST([warmstarts_opt], [$warmstarts_opt])
AC_ARG_ENABLE([rmtcalls],
AS_HELP_STRING([--enable-rmtcalls], [Enables Remote Calls @<:@default=no@:>@]))
@@ -44,6 +50,17 @@ AC_SUBST([nss_modules], [$with_nss_modules])
PKG_CHECK_MODULES([TIRPC], [libtirpc])
+CPPFLAGS=$TIRPC_CFLAGS
+AC_MSG_CHECKING([for abstract socket support in libtirpc])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
+#include <rpc/rpc.h>
+],[
+char *path = _PATH_RPCBINDSOCK_ABSTRACT;
+])], [have_abstract=yes], [have_abstract=no])
+CPPFLAGS=
+AC_MSG_RESULT([$have_abstract])
+AM_CONDITIONAL(ABSTRACT, [ test "x$have_abstract" = "xyes" ])
+
PKG_PROG_PKG_CONFIG
AC_ARG_WITH([systemdsystemunitdir],
AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
@@ -70,4 +87,4 @@ AC_CHECK_HEADERS([nss.h])
AC_SUBST([_sbindir])
AC_CONFIG_COMMANDS_PRE([eval eval _sbindir=$sbindir])
-AC_OUTPUT([Makefile systemd/rpcbind.service])
+AC_OUTPUT([Makefile systemd/rpcbind.service systemd/rpcbind.socket])
diff --git a/src/rpcbind.c b/src/rpcbind.c
index 25d8a90..ecebe97 100644
--- a/src/rpcbind.c
+++ b/src/rpcbind.c
@@ -552,8 +552,10 @@ init_transport(struct netconfig *nconf)
syslog(LOG_ERR, "cannot bind %s on %s: %m",
(hosts[nhostsbak] == NULL) ? "*" :
hosts[nhostsbak], nconf->nc_netid);
- if (res != NULL)
+ if (res != NULL) {
freeaddrinfo(res);
+ res = NULL;
+ }
continue;
} else
checkbind++;
diff --git a/src/rpcinfo.c b/src/rpcinfo.c
index 0e14f78..006057a 100644
--- a/src/rpcinfo.c
+++ b/src/rpcinfo.c
@@ -311,29 +311,17 @@ main (int argc, char **argv)
return (0);
}
+/* Evaluate to actual length of the `sockaddr_un' structure, whether
+ * abstract or not.
+ */
+#include <stddef.h>
+#define SUN_LEN_A(ptr) (offsetof(struct sockaddr_un, sun_path) \
+ + 1 + strlen((ptr)->sun_path + 1))
+
static CLIENT *
local_rpcb (rpcprog_t prog, rpcvers_t vers)
{
-#if 0
- void *localhandle;
- struct netconfig *nconf;
CLIENT *clnt;
-
- localhandle = setnetconfig();
- while ((nconf = getnetconfig(localhandle)) != NULL) {
- if (nconf->nc_protofmly != NULL &&
- strcmp(nconf->nc_protofmly, NC_LOOPBACK) == 0)
- break;
- }
- if (nconf == NULL) {
- warnx("getnetconfig: %s", nc_sperror());
- return (NULL);
- }
-
- clnt = clnt_tp_create (/* "localhost"*/ NULL, prog, vers, nconf);
- endnetconfig(localhandle);
- return clnt;
-#else
struct netbuf nbuf;
struct sockaddr_un sun;
int sock;
@@ -344,13 +332,26 @@ local_rpcb (rpcprog_t prog, rpcvers_t vers)
return NULL;
sun.sun_family = AF_LOCAL;
+
+#ifdef _PATH_RPCBINDSOCK_ABSTRACT
+ memcpy(sun.sun_path, _PATH_RPCBINDSOCK_ABSTRACT,
+ sizeof(_PATH_RPCBINDSOCK_ABSTRACT));
+ nbuf.len = SUN_LEN_A (&sun);
+ nbuf.maxlen = sizeof (struct sockaddr_un);
+ nbuf.buf = &sun;
+
+ clnt = clnt_vc_create (sock, &nbuf, prog, vers, 0, 0);
+ if (clnt)
+ return clnt;
+#endif
+
strcpy (sun.sun_path, _PATH_RPCBINDSOCK);
nbuf.len = SUN_LEN (&sun);
nbuf.maxlen = sizeof (struct sockaddr_un);
nbuf.buf = &sun;
- return clnt_vc_create (sock, &nbuf, prog, vers, 0, 0);
-#endif
+ clnt = clnt_vc_create (sock, &nbuf, prog, vers, 0, 0);
+ return clnt;
}
#ifdef PORTMAP
diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
index 7b1c74b..c892ca8 100644
--- a/systemd/rpcbind.service.in
+++ b/systemd/rpcbind.service.in
@@ -12,7 +12,7 @@ Wants=rpcbind.target
[Service]
Type=notify
# distro can provide a drop-in adding EnvironmentFile=-/??? if needed.
-ExecStart=@_sbindir@/rpcbind $RPCBIND_OPTIONS -w -f
+ExecStart=@_sbindir@/rpcbind $RPCBIND_OPTIONS @warmstarts_opt@ -f
[Install]
WantedBy=multi-user.target
diff --git a/systemd/rpcbind.socket b/systemd/rpcbind.socket
index 3b1a936..685341c 100644
--- a/systemd/rpcbind.socket
+++ b/systemd/rpcbind.socket
@@ -6,6 +6,7 @@ Before=rpcbind.target
[Socket]
ListenStream=/run/rpcbind.sock
+#ListenStream=@/run/rpcbind.sock
# RPC netconfig can't handle ipv6/ipv4 dual sockets
BindIPv6Only=ipv6-only
diff --git a/systemd/rpcbind.socket.in b/systemd/rpcbind.socket.in
new file mode 100644
index 0000000..5dd09a1
--- /dev/null
+++ b/systemd/rpcbind.socket.in
@@ -0,0 +1,19 @@
+[Unit]
+Description=RPCbind Server Activation Socket
+DefaultDependencies=no
+Wants=rpcbind.target
+Before=rpcbind.target
+
+[Socket]
+ListenStream=/run/rpcbind.sock
+@ABSTRACT_TRUE@ListenStream=@/run/rpcbind.sock
+
+# RPC netconfig can't handle ipv6/ipv4 dual sockets
+BindIPv6Only=ipv6-only
+ListenStream=0.0.0.0:111
+ListenDatagram=0.0.0.0:111
+ListenStream=[::]:111
+ListenDatagram=[::]:111
+
+[Install]
+WantedBy=sockets.target

View file

@ -1,63 +0,0 @@
diff --git a/man/rpcbind.8 b/man/rpcbind.8
index fbf0ace..cdcdcfd 100644
--- a/man/rpcbind.8
+++ b/man/rpcbind.8
@@ -150,6 +150,14 @@ starts up. The state file is created when
.Nm
terminates.
.El
+.Sh FILES
+The
+.Nm
+utility tries to load configuration file in following order:
+.Bd -literal
+.Pa /etc/rpcbind.conf
+.Pa /etc/default/rpcbind
+.Pa /etc/sysconfig/rpcbind
.Sh NOTES
All RPC servers must be restarted if
.Nm
diff --git a/src/rpcbind.c b/src/rpcbind.c
index ecebe97..9887b82 100644
--- a/src/rpcbind.c
+++ b/src/rpcbind.c
@@ -105,7 +105,7 @@ char *nss_modules = "files";
/* who to suid to if -s is given */
#define RUN_AS "daemon"
-#define RPCBINDDLOCK "/var/run/rpcbind.lock"
+#define RPCBINDDLOCK "/run/rpcbind.lock"
int runasdaemon = 0;
int insecure = 0;
diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
index c892ca8..771b944 100644
--- a/systemd/rpcbind.service.in
+++ b/systemd/rpcbind.service.in
@@ -7,11 +7,25 @@ RequiresMountsFor=@statedir@
# Make sure we use the IP addresses listed for
# rpcbind.socket, no matter how this unit is started.
Requires=rpcbind.socket
-Wants=rpcbind.target
+Wants=rpcbind.target systemd-tmpfiles-setup.service
+After=systemd-tmpfiles-setup.service
[Service]
+ProtectSystem=full
+ProtectHome=true
+PrivateDevices=true
+ProtectHostname=true
+ProtectClock=true
+ProtectKernelTunables=true
+ProtectKernelModules=true
+ProtectKernelLogs=true
+ProtectControlGroups=true
+RestrictRealtime=true
Type=notify
# distro can provide a drop-in adding EnvironmentFile=-/??? if needed.
+EnvironmentFile=-/etc/rpcbind.conf
+EnvironmentFile=-/etc/default/rpcbind
+EnvironmentFile=-/etc/sysconfig/rpcbind
ExecStart=@_sbindir@/rpcbind $RPCBIND_OPTIONS @warmstarts_opt@ -f
[Install]

View file

@ -3,8 +3,8 @@
%global rpcbind_state_dir %{_rundir}/rpcbind
Name: rpcbind
Version: 1.2.7
Release: 1.rc1%{?dist}.3
Version: 1.2.8
Release: 0%{?dist}
Summary: Universal Addresses to RPC Program Number Mapper
License: BSD-3-Clause
URL: http://nfsv4.bullopensource.org
@ -18,14 +18,10 @@ Conflicts: man-pages < 2.43-12
BuildRequires: make
BuildRequires: automake, autoconf, libtool, systemd, systemd-devel
BuildRequires: libtirpc-devel, quota-devel
Requires(pre): coreutils shadow-utils
Requires(pre): coreutils
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd coreutils
Provides: user(rpc)
Provides: group(rpc)
Patch001: rpcbind-1.2.8-rc1.patch
Patch100: rpcbind-0.2.3-systemd-tmpfiles.patch
Patch101: rpcbind-0.2.4-systemd-rundir.patch
@ -49,6 +45,11 @@ RPC calls on a server on that machine.
%prep
%autosetup -p1
# Create a sysusers.d config file
cat >rpcbind.sysusers.conf <<EOF
u rpc 32 'Rpcbind Daemon' /var/lib/rpcbind -
EOF
%build
autoreconf -fisv
%configure \
@ -80,19 +81,7 @@ ln -sf ../bin/rpcbind
ln -sf ../bin/rpcinfo
%endif
%pre
# Softly static allocate the rpc uid and gid.
getent group rpc >/dev/null || groupadd -f -g 32 -r rpc
if ! getent passwd rpc >/dev/null ; then
if ! getent passwd 32 >/dev/null ; then
useradd -l -c "Rpcbind Daemon" -d /var/lib/rpcbind \
-g rpc -M -s /sbin/nologin -o -u 32 rpc > /dev/null 2>&1
else
useradd -l -c "Rpcbind Daemon" -d /var/lib/rpcbind \
-g rpc -M -s /sbin/nologin rpc > /dev/null 2>&1
fi
fi
install -m0644 -D rpcbind.sysusers.conf %{buildroot}%{_sysusersdir}/rpcbind.conf
%post
%systemd_post rpcbind.service rpcbind.socket
@ -100,15 +89,16 @@ fi
%preun
%systemd_preun rpcbind.service rpcbind.socket
# NOTE: We only restart rpcbind.socket in the %postun scriptlet in order to
# avoid the race described in:
#
# https://github.com/systemd/systemd/issues/13271
# https://github.com/systemd/systemd/issues/8102
#
# Restarting rpcbind.socket causes rpcbind.service to be restarted automatically
# due to "Requires=rpcbind.socket" in the rpcbind.service unit file.
%postun
%systemd_postun_with_restart rpcbind.service rpcbind.socket
%triggerin -- rpcbind > 0.2.2-2.0
if systemctl -q is-enabled rpcbind.socket
then
/bin/systemctl reenable rpcbind.socket >/dev/null 2>&1 || :
/bin/systemctl restart rpcbind.socket >/dev/null 2>&1 || :
fi
%systemd_postun_with_restart rpcbind.socket
%files
%license COPYING
@ -125,8 +115,18 @@ fi
%{_unitdir}/%{name}.socket
%{_tmpfilesdir}/%{name}.conf
%attr(0700, %{rpcbind_user_group}, %{rpcbind_user_group}) %dir %{rpcbind_state_dir}
%{_sysusersdir}/rpcbind.conf
%changelog
* Sat Jul 26 2025 Steve Dickson <steved@redhat.com> 1.2.8-0
- Updated to latest upstream release: rpcbind-1_2_8 (bz 2300081)
* Wed May 7 2025 Scott Mayhew <smayhew@redhat.com> - 1.2.7-2.rc1
- Fix rpm scriptlets to remove excessive restarts during upgrade
* Wed Jan 29 2025 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 1.2.7-1.rc1.4
- Add sysusers.d config file to allow rpm to create users/groups automatically
* Sat Jan 18 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.2.7-1.rc1.3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild

View file

@ -1 +1 @@
SHA512 (rpcbind-1.2.7.tar.bz2) = ca1517bdab86221d13c645042cc31b25b4d2b574d63ebaa20da4f5392b611cf58811f267214293e953f504d364e5daaa5875eab7aa68a04b89e68fd5508e3926
SHA512 (rpcbind-1.2.8.tar.bz2) = 66f3955a67c4d0142ec635614ceafbc9bdbea985f2edaeec903f17efaf3c2e98f6483e8e6b7f1358cf8d2c1c877b281d153a3bf1b6748b6d259ae7ad1465ee71