aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRick Macklem <rmacklem@FreeBSD.org>2023-05-29 20:38:07 +0000
committerRick Macklem <rmacklem@FreeBSD.org>2023-05-29 20:38:07 +0000
commita94018e2003b83c10e8fb814f7a8d47e2513da95 (patch)
treeff39bca9eaa5099f472a3a899a06df4a1950100d
parent78914cd641ccf00cc45e720a10dba24927c0a3b8 (diff)
downloadsrc-a94018e2003b83c10e8fb814f7a8d47e2513da95.tar.gz
src-a94018e2003b83c10e8fb814f7a8d47e2513da95.zip
nfsuserd: Improve failure message when running in a jail
If a jail is not correctly configured to run nfsd(8) in the jail, nfsuserd(8) cannot run. This patch improves the failure message for this case. MFC after: 2 weeks
-rw-r--r--usr.sbin/nfsuserd/nfsuserd.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/usr.sbin/nfsuserd/nfsuserd.c b/usr.sbin/nfsuserd/nfsuserd.c
index 3095948dce75..0f632a6efccc 100644
--- a/usr.sbin/nfsuserd/nfsuserd.c
+++ b/usr.sbin/nfsuserd/nfsuserd.c
@@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
#include <sys/mount.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
+#include <sys/sysctl.h>
#include <sys/time.h>
#include <sys/ucred.h>
#include <sys/vnode.h>
@@ -127,7 +128,8 @@ main(int argc, char *argv[])
#ifdef INET6
struct sockaddr_in6 *sin6;
#endif
- int s;
+ int jailed, s;
+ size_t jailed_size;
if (modfind("nfscommon") < 0) {
/* Not present in kernel, try loading it */
@@ -326,10 +328,19 @@ main(int argc, char *argv[])
#else
if (nfssvc(NFSSVC_NFSUSERDPORT | NFSSVC_NEWSTRUCT, &nargs) < 0) {
if (errno == EPERM) {
- fprintf(stderr,
- "Can't start nfsuserd when already running");
- fprintf(stderr,
- " If not running, use the -force option.\n");
+ jailed = 0;
+ jailed_size = sizeof(jailed);
+ sysctlbyname("security.jail.jailed", &jailed,
+ &jailed_size, NULL, 0);
+ if (jailed != 0) {
+ fprintf(stderr, "Cannot start nfsuserd. "
+ "allow.nfsd might not be configured\n");
+ } else {
+ fprintf(stderr, "Cannot start nfsuserd "
+ "when already running.");
+ fprintf(stderr, " If not running, "
+ "use the -force option.\n");
+ }
} else {
fprintf(stderr, "Can't do nfssvc() to add port\n");
}