/* -*-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'
*
/*----- 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.
#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
/* --- 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 --- */
#ifndef NONETWORK
{ "daemon", 0, 0, 'd' },
+ { "nofork", 0, 0, 'n' },
{ "port", gFlag_argReq, 0, 'p' },
{ "config-file", gFlag_argReq, 0, 'f' },
#endif
#endif
"c:" /* Command to run options */
#ifndef NONETWORK
- "dp:f:" /* Server options */
+ "dnp:f:" /* Server options */
#endif
#ifndef NTRACE
"I:T::L::" /* Tracing options */
case 'd':
flags |= f_daemon;
break;
+ case 'n':
+ flags |= f_nofork;
+ break;
case 'f':
conffile = optarg;
break;
#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
/* -*-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
*
/*----- 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.
*
* 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;
/* --- Fork off into the sunset --- */
-#ifdef NDEBUG
- {
+ if (!(f & df_nofork)) {
int pid = fork();
FILE *fp;
}
T( trace(TRACE_DAEMON, "daemon: forked to pid %li", (long)getpid()); )
}
-#endif
/* --- Set signal handlers --- */
/* -*-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
*
/*----- 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.
*
* 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 -------------------------------------------------*/