git: 8d92ebe2fa49 - stable/13 - nfsd.c: Log a more meaningful failure message

From: Rick Macklem <rmacklem_at_FreeBSD.org>
Date: Wed, 24 May 2023 02:19:26 UTC
The branch stable/13 has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=8d92ebe2fa49f6701e6aea7345b9ab9047aaec5b

commit 8d92ebe2fa49f6701e6aea7345b9ab9047aaec5b
Author:     Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2023-02-22 22:09:15 +0000
Commit:     Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2023-05-24 02:15:01 +0000

    nfsd.c: Log a more meaningful failure message
    
    For the cases where the nfsd(8) daemon is already running or
    has failed to start within a prison due to an incorrect prison
    configuration, the failure message logged is:
      Can't read stable storage file: operation not permitted
    
    This patch replaces the above with more meaningful messages.
    It depends on commit 10dff9da9748 to differentiate between the
    above two cases, however even without this commit, the messages
    should be an improvement.
    
    (cherry picked from commit fe5c211ba87315b098769a7e6d50b41f00f6fed4)
---
 usr.sbin/nfsd/nfsd.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/usr.sbin/nfsd/nfsd.c b/usr.sbin/nfsd/nfsd.c
index 0222d23f2312..3a7f58c7b4e5 100644
--- a/usr.sbin/nfsd/nfsd.c
+++ b/usr.sbin/nfsd/nfsd.c
@@ -170,8 +170,8 @@ main(int argc, char **argv)
 	int udpflag, ecode, error, s;
 	int bindhostc, bindanyflag, rpcbreg, rpcbregcnt;
 	int nfssvc_addsock;
-	int longindex = 0;
-	size_t nfs_minvers_size;
+	int jailed, longindex = 0;
+	size_t jailed_size, nfs_minvers_size;
 	const char *lopt;
 	char **bindhost = NULL;
 	pid_t pid;
@@ -465,7 +465,21 @@ main(int argc, char **argv)
 	/* This system call will fail for old kernels, but that's ok. */
 	nfssvc(NFSSVC_BACKUPSTABLE, NULL);
 	if (nfssvc(NFSSVC_STABLERESTART, (caddr_t)&stablefd) < 0) {
-		syslog(LOG_ERR, "Can't read stable storage file: %m\n");
+		if (errno == EPERM) {
+			jailed = 0;
+			jailed_size = sizeof(jailed);
+			sysctlbyname("security.jail.jailed", &jailed,
+			    &jailed_size, NULL, 0);
+			if (jailed != 0)
+				syslog(LOG_ERR, "nfssvc stablerestart failed: "
+				    "allow.nfsd might not be configured");
+			else
+				syslog(LOG_ERR, "nfssvc stablerestart failed");
+		} else if (errno == ENXIO)
+			syslog(LOG_ERR, "nfssvc stablerestart failed: is nfsd "
+			    "already running?");
+		else
+			syslog(LOG_ERR, "Can't read stable storage file: %m\n");
 		exit(1);
 	}
 	nfssvc_addsock = NFSSVC_NFSDADDSOCK;