Fix for daemon mode. Oops.
[become] / src / become.c
index d383084..60cb1f3 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: become.c,v 1.22 2003/10/12 00:14:55 mdw Exp $
+ * $Id: become.c,v 1.23 2003/10/12 10:00:06 mdw Exp $
  *
  * Main code for `become'
  *
@@ -29,6 +29,9 @@
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: become.c,v $
+ * Revision 1.23  2003/10/12 10:00:06  mdw
+ * Fix for daemon mode.  Oops.
+ *
  * Revision 1.22  2003/10/12 00:14:55  mdw
  * Major overhaul.  Now uses DSA signatures rather than the bogus symmetric
  * encrypt-and-hope thing.  Integrated with mLib and Catacomb.
@@ -470,6 +473,7 @@ static void bc__help(FILE *fp, int suid)
 #ifndef NONETWORK
 "\n"
 "-d, --daemon                  Start a daemon\n"
+"-n, --nofork                  In daemon mode, don't fork into background\n"
 "-p PORT, --port=PORT          In daemon mode, listen on PORT\n"
 "-f FILE, --config-file=FILE   In daemon mode, read config from FILE\n"
 #endif
@@ -539,14 +543,13 @@ int main(int argc, char *argv[])
 
   /* --- Definitions for the various flags --- */
 
-  enum {
-    f_daemon = 1,                      /* Start up in daemon mode */
-    f_duff = 2,                                /* Fault in arguments */
-    f_shell = 4,                       /* Run a default shell */
-    f_dummy = 8,                       /* Don't actually do anything */
-    f_setuid = 16,                     /* We're running setuid */
-    f_havegroup = 32                   /* Set a default group */
-  };
+#define f_daemon 1u                    /* Start up in daemon mode */
+#define f_duff 2u                      /* Fault in arguments */
+#define f_shell 4u                     /* Run a default shell */
+#define f_dummy 8u                     /* Don't actually do anything */
+#define f_setuid 16u                   /* We're running setuid */
+#define f_havegroup 32u                        /* Set a default group */
+#define f_nofork 64u                   /* Don't fork into background */
 
   /* --- Set up the program name --- */
 
@@ -601,6 +604,7 @@ int main(int argc, char *argv[])
 
 #ifndef NONETWORK
       { "daemon",      0,              0,      'd' },
+      { "nofork",      0,              0,      'n' },
       { "port",                gFlag_argReq,   0,      'p' },
       { "config-file", gFlag_argReq,   0,      'f' },
 #endif
@@ -627,7 +631,7 @@ int main(int argc, char *argv[])
 #endif
               "c:"                     /* Command to run options */
 #ifndef NONETWORK
-              "dp:f:"                  /* Server options */
+              "dnp:f:"                 /* Server options */
 #endif
 #ifndef NTRACE
               "I:T::L::"               /* Tracing options */
@@ -712,6 +716,9 @@ int main(int argc, char *argv[])
       case 'd':
        flags |= f_daemon;
        break;
+      case 'n':
+       flags |= f_nofork;
+       break;
       case 'f':
        conffile = optarg;
        break;
@@ -887,7 +894,7 @@ done_options:
 #ifndef NONETWORK
   if (flags & f_daemon) {
     T( trace(TRACE_MISC, "become: daemon mode requested"); )
-    daemon_init(conffile, port);
+    daemon_init(conffile, port, (flags & f_nofork) ? df_nofork : 0);
     exit(0);
   }
 #endif