Fix for daemon mode. Oops.
authormdw <mdw>
Sun, 12 Oct 2003 10:00:06 +0000 (10:00 +0000)
committermdw <mdw>
Sun, 12 Oct 2003 10:00:06 +0000 (10:00 +0000)
src/become.c
src/daemon.c
src/daemon.h

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
index 8d69510..6c515f4 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: daemon.c,v 1.12 2003/10/12 00:14:55 mdw Exp $
+ * $Id: daemon.c,v 1.13 2003/10/12 10:00:06 mdw Exp $
  *
  * Running a `become' daemon
  *
@@ -29,6 +29,9 @@
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: daemon.c,v $
+ * Revision 1.13  2003/10/12 10:00:06  mdw
+ * Fix for daemon mode.  Oops.
+ *
  * Revision 1.12  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.
@@ -443,13 +446,14 @@ static void daemon__wakeUp(struct timeval *tv, void *p)
  *
  * Arguments:  @const char *cf@ = pointer to name of configuration file
  *             @int port@ = port to listen to, or %$-1$% for default
+ *             @unsigned f@ = various flags
  *
  * Returns:    Never.
  *
  * Use:                Starts `become' up in daemon mode.
  */
 
-void daemon_init(const char *cf, int port)
+void daemon_init(const char *cf, int port, unsigned f)
 {
   int s;
   int i;
@@ -529,8 +533,7 @@ void daemon_init(const char *cf, int port)
 
   /* --- Fork off into the sunset --- */
 
-#ifdef NDEBUG
-  {
+  if (!(f & df_nofork)) {
     int pid = fork();
     FILE *fp;
 
@@ -553,7 +556,6 @@ void daemon_init(const char *cf, int port)
     }
     T( trace(TRACE_DAEMON, "daemon: forked to pid %li", (long)getpid()); )
   }
-#endif
 
   /* --- Set signal handlers --- */
 
index 9c9ce72..cca5bdf 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: daemon.h,v 1.3 1998/01/12 16:46:01 mdw Exp $
+ * $Id: daemon.h,v 1.4 2003/10/12 10:00:06 mdw Exp $
  *
  * Running a `become' daemon
  *
@@ -29,6 +29,9 @@
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: daemon.h,v $
+ * Revision 1.4  2003/10/12 10:00:06  mdw
+ * Fix for daemon mode.  Oops.
+ *
  * Revision 1.3  1998/01/12 16:46:01  mdw
  * Fix copyright date.
  *
@@ -81,7 +84,9 @@ extern void daemon_readKey(const char */*kf*/);
  * Use:                Starts `become' up in daemon mode.
  */
 
-extern void daemon_init(const char */*cf*/, int /*port*/);
+#define df_nofork 1u
+
+extern void daemon_init(const char */*cf*/, int /*port*/, unsigned flags);
 
 /*----- That's all, folks -------------------------------------------------*/