svn commit: r355006 - in head/usr.sbin: rpc.lockd rpc.statd

Ravi Pokala rpokala at FreeBSD.org
Fri Nov 22 16:53:32 UTC 2019


Author: rpokala
Date: Fri Nov 22 16:53:30 2019
New Revision: 355006
URL: https://svnweb.freebsd.org/changeset/base/355006

Log:
  Add and document options to allow rpc.lockd and rpc.statd to run in the
  foreground.
  
  This allows a separate process to monitor when and how those programs exit.
  That process can then restart them if needed.
  
  Submitted by:	Alex Burlyga
  Reviewed by:	bcr, imp
  MFC after:	1 week
  Sponsored by:	Panasas
  Differential Revision:	https://reviews.freebsd.org/D22474

Modified:
  head/usr.sbin/rpc.lockd/lockd.c
  head/usr.sbin/rpc.lockd/rpc.lockd.8
  head/usr.sbin/rpc.statd/rpc.statd.8
  head/usr.sbin/rpc.statd/statd.c

Modified: head/usr.sbin/rpc.lockd/lockd.c
==============================================================================
--- head/usr.sbin/rpc.lockd/lockd.c	Fri Nov 22 16:31:43 2019	(r355005)
+++ head/usr.sbin/rpc.lockd/lockd.c	Fri Nov 22 16:53:30 2019	(r355006)
@@ -120,6 +120,7 @@ main(int argc, char **argv)
 	char *endptr, **hosts_bak;
 	struct sigaction sigalarm;
 	int grace_period = 30;
+	int foreground = 0;
 	struct netconfig *nconf;
 	int have_v6 = 1;
 	int maxrec = RPC_MAXDATASIZE;
@@ -127,7 +128,7 @@ main(int argc, char **argv)
 	int attempt_cnt, port_len, port_pos, ret;
 	char **port_list;
 
-	while ((ch = getopt(argc, argv, "d:g:h:p:")) != (-1)) {
+	while ((ch = getopt(argc, argv, "d:Fg:h:p:")) != (-1)) {
 		switch (ch) {
 		case 'd':
 			debug_level = atoi(optarg);
@@ -136,6 +137,9 @@ main(int argc, char **argv)
 				/* NOTREACHED */
 			}
 			break;
+		case 'F':
+			foreground = 1;
+			break;
 		case 'g':
 			grace_period = atoi(optarg);
 			if (!grace_period) {
@@ -422,7 +426,7 @@ main(int argc, char **argv)
 	 * Note that it is NOT sensible to run this program from inetd - the
 	 * protocol assumes that it will run immediately at boot time.
 	 */
-	if (daemon(0, debug_level > 0)) {
+	if ((foreground == 0) && daemon(0, debug_level > 0)) {
 		err(1, "cannot fork");
 		/* NOTREACHED */
 	}
@@ -844,7 +848,7 @@ void
 usage()
 {
 	errx(1, "usage: rpc.lockd [-d <debuglevel>]"
-	    " [-g <grace period>] [-h <bindip>] [-p <port>]");
+	    " [-F] [-g <grace period>] [-h <bindip>] [-p <port>]");
 }
 
 /*

Modified: head/usr.sbin/rpc.lockd/rpc.lockd.8
==============================================================================
--- head/usr.sbin/rpc.lockd/rpc.lockd.8	Fri Nov 22 16:31:43 2019	(r355005)
+++ head/usr.sbin/rpc.lockd/rpc.lockd.8	Fri Nov 22 16:53:30 2019	(r355006)
@@ -29,7 +29,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd November 2, 2007
+.Dd November 21, 2019
 .Dt RPC.LOCKD 8
 .Os
 .Sh NAME
@@ -38,6 +38,7 @@
 .Sh SYNOPSIS
 .Nm
 .Op Fl d Ar debug_level
+.Op Fl F
 .Op Fl g Ar grace period
 .Op Fl h Ar bindip
 .Op Fl p Ar port
@@ -70,6 +71,17 @@ in the generation of one log line per protocol operati
 Higher
 debug levels can be specified, causing display of operation arguments
 and internal operations of the daemon.
+.It Fl F
+Run
+.Nm
+in the foreground, rather than going into daemon mode.
+This is useful if some other process uses
+.Xr fork 2
+and
+.Xr exec 3
+to run
+.Nm ,
+and wants to monitor when and how it exits.
 .It Fl g
 The
 .Fl g

Modified: head/usr.sbin/rpc.statd/rpc.statd.8
==============================================================================
--- head/usr.sbin/rpc.statd/rpc.statd.8	Fri Nov 22 16:31:43 2019	(r355005)
+++ head/usr.sbin/rpc.statd/rpc.statd.8	Fri Nov 22 16:53:30 2019	(r355006)
@@ -29,7 +29,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd November 1, 2007
+.Dd November 21, 2019
 .Dt RPC.STATD 8
 .Os
 .Sh NAME
@@ -38,6 +38,7 @@
 .Sh SYNOPSIS
 .Nm
 .Op Fl d
+.Op Fl F
 .Op Fl h Ar bindip
 .Op Fl p Ar port
 .Sh DESCRIPTION
@@ -71,6 +72,17 @@ These messages are logged with level
 LOG_DEBUG and facility LOG_DAEMON.
 Error conditions are logged irrespective
 of this option, using level LOG_ERR.
+.It Fl F
+Run
+.Nm
+in the foreground, rather than going into daemon mode.
+This is useful if some other process uses
+.Xr fork 2
+and
+.Xr exec 3
+to run
+.Nm ,
+and wants to monitor when and how it exits.
 .It Fl h Ar bindip
 Specify specific IP addresses to bind to.
 This option may be specified multiple times.

Modified: head/usr.sbin/rpc.statd/statd.c
==============================================================================
--- head/usr.sbin/rpc.statd/statd.c	Fri Nov 22 16:31:43 2019	(r355005)
+++ head/usr.sbin/rpc.statd/statd.c	Fri Nov 22 16:53:30 2019	(r355006)
@@ -89,15 +89,19 @@ main(int argc, char **argv)
   char *endptr;
   char **hosts_bak;
   int have_v6 = 1;
+  int foreground = 0;
   int maxrec = RPC_MAXDATASIZE;
   int attempt_cnt, port_len, port_pos, ret;
   char **port_list;
 
-  while ((ch = getopt(argc, argv, "dh:p:")) != -1)
+  while ((ch = getopt(argc, argv, "dFh:p:")) != -1)
     switch (ch) {
     case 'd':
       debug = 1;
       break;
+    case 'F':
+      foreground = 1;
+      break;
     case 'h':
       ++nhosts;
       hosts_bak = hosts;
@@ -288,7 +292,11 @@ main(int argc, char **argv)
 
   /* Note that it is NOT sensible to run this program from inetd - the 	*/
   /* protocol assumes that it will run immediately at boot time.	*/
-  daemon(0, 0);
+  if ((foreground == 0) && daemon(0, 0) < 0) {
+  	err(1, "cannot fork");
+  	/* NOTREACHED */
+  }
+
   openlog("rpc.statd", 0, LOG_DAEMON);
   if (debug) syslog(LOG_INFO, "Starting - debug enabled");
   else syslog(LOG_INFO, "Starting");
@@ -618,7 +626,7 @@ clearout_service(void)
 static void
 usage(void)
 {
-      fprintf(stderr, "usage: rpc.statd [-d] [-h <bindip>] [-p <port>]\n");
+      fprintf(stderr, "usage: rpc.statd [-d] [-F] [-h <bindip>] [-p <port>]\n");
       exit(1);
 }
 


More information about the svn-src-all mailing list