forked from rpms/rpcbind
133 lines
3.5 KiB
Diff
133 lines
3.5 KiB
Diff
diff --git a/Makefile.am b/Makefile.am
|
|
index d10c906..8715082 100644
|
|
--- a/Makefile.am
|
|
+++ b/Makefile.am
|
|
@@ -1,3 +1,5 @@
|
|
+AUTOMAKE_OPTIONS = subdir-objects
|
|
+
|
|
AM_CPPFLAGS = \
|
|
-DCHECK_LOCAL \
|
|
-DPORTMAP \
|
|
@@ -6,6 +8,7 @@ AM_CPPFLAGS = \
|
|
-DINET6 \
|
|
-DRPCBIND_STATEDIR="\"$(statedir)\"" \
|
|
-DRPCBIND_USER="\"$(rpcuser)\"" \
|
|
+ -DNSS_MODULES="\"$(nss_modules)\"" \
|
|
-D_GNU_SOURCE \
|
|
$(TIRPC_CFLAGS)
|
|
|
|
diff --git a/configure.ac b/configure.ac
|
|
index 747a8bf..5a88cc7 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -23,10 +23,17 @@ AC_ARG_WITH([statedir],
|
|
AC_SUBST([statedir], [$with_statedir])
|
|
|
|
AC_ARG_WITH([rpcuser],
|
|
- AS_HELP_STRING([--with-rpcuser=ARG], [use ARG for RPC @<:@default=root@:>@]),
|
|
+ AS_HELP_STRING([--with-rpcuser=ARG], [use ARG for RPC @<:@default=root@:>@])
|
|
,, [with_rpcuser=root])
|
|
AC_SUBST([rpcuser], [$with_rpcuser])
|
|
|
|
+AC_ARG_WITH([nss_modules],
|
|
+ AS_HELP_STRING([--with-nss-modules=NSS_MODULES]
|
|
+ , [Sets the nss module search list to the given space-delimited string.
|
|
+ For example --with-nss-modules="files altfiles" @<:@default=files@:>@])
|
|
+ ,, [with_nss_modules=files])
|
|
+AC_SUBST([nss_modules], [$with_nss_modules])
|
|
+
|
|
PKG_CHECK_MODULES([TIRPC], [libtirpc])
|
|
|
|
AS_IF([test x$enable_libwrap = xyes], [
|
|
diff --git a/man/rpcinfo.8 b/man/rpcinfo.8
|
|
index 5ece18f..750ffce 100644
|
|
--- a/man/rpcinfo.8
|
|
+++ b/man/rpcinfo.8
|
|
@@ -20,8 +20,7 @@
|
|
.Nm "rpcinfo"
|
|
.Fl l
|
|
.Op Fl T Ar transport
|
|
-.Ar host Ar prognum
|
|
-.Op Ar versnum
|
|
+.Ar host Ar prognum Ar versnum
|
|
.Nm "rpcinfo"
|
|
.Op Fl n Ar portnum
|
|
.Fl u
|
|
diff --git a/src/rpcbind.c b/src/rpcbind.c
|
|
index 83dbe93..e3462e3 100644
|
|
--- a/src/rpcbind.c
|
|
+++ b/src/rpcbind.c
|
|
@@ -62,6 +62,7 @@
|
|
#include <netconfig.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
+#include <grp.h>
|
|
#include <syslog.h>
|
|
#include <err.h>
|
|
#include <pwd.h>
|
|
@@ -90,6 +91,12 @@ char *rpcbinduser = RPCBIND_USER;
|
|
char *rpcbinduser = NULL;
|
|
#endif
|
|
|
|
+#ifdef NSS_MODULES
|
|
+char *nss_modules = NSS_MODULES;
|
|
+#else
|
|
+char *nss_modules = "files";
|
|
+#endif
|
|
+
|
|
/* who to suid to if -s is given */
|
|
#define RUN_AS "daemon"
|
|
|
|
@@ -164,7 +171,7 @@ main(int argc, char *argv[])
|
|
* Make sure we use the local service file
|
|
* for service lookkups
|
|
*/
|
|
- __nss_configure_lookup("services", "files");
|
|
+ __nss_configure_lookup("services", nss_modules);
|
|
|
|
nc_handle = setnetconfig(); /* open netconfig file */
|
|
if (nc_handle == NULL) {
|
|
@@ -230,7 +237,7 @@ main(int argc, char *argv[])
|
|
* Make sure we use the local password file
|
|
* for these lookups.
|
|
*/
|
|
- __nss_configure_lookup("passwd", "files");
|
|
+ __nss_configure_lookup("passwd", nss_modules);
|
|
|
|
if((p = getpwnam(id)) == NULL) {
|
|
syslog(LOG_ERR, "cannot get uid of '%s': %m", id);
|
|
@@ -726,11 +733,9 @@ terminate(int dummy /*__unused*/)
|
|
unlink(_PATH_RPCBINDSOCK);
|
|
unlink(RPCBINDDLOCK);
|
|
#ifdef WARMSTART
|
|
- syslog(LOG_ERR,
|
|
- "rpcbind terminating on signal. Restart with \"rpcbind -w\"");
|
|
write_warmstart(); /* Dump yourself */
|
|
#endif
|
|
- exit(2);
|
|
+ exit(0); /* exit gracefully */
|
|
}
|
|
|
|
void
|
|
diff --git a/src/util.c b/src/util.c
|
|
index 9a5fb69..7d56479 100644
|
|
--- a/src/util.c
|
|
+++ b/src/util.c
|
|
@@ -101,12 +101,14 @@ static void
|
|
in6_fillscopeid(struct sockaddr_in6 *sin6)
|
|
{
|
|
u_int16_t ifindex;
|
|
+ u_int16_t *addr;
|
|
|
|
if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) {
|
|
- ifindex = ntohs(*(u_int16_t *)&sin6->sin6_addr.s6_addr[2]);
|
|
+ addr = (u_int16_t *)&sin6->sin6_addr.s6_addr[2];
|
|
+ ifindex = ntohs(*addr);
|
|
if (sin6->sin6_scope_id == 0 && ifindex != 0) {
|
|
sin6->sin6_scope_id = ifindex;
|
|
- *(u_int16_t *)&sin6->sin6_addr.s6_addr[2] = 0;
|
|
+ *addr = 0;
|
|
}
|
|
}
|
|
}
|