From: mdw Date: Sun, 12 Oct 2003 10:00:06 +0000 (+0000) Subject: Fix for daemon mode. Oops. X-Git-Url: https://git.distorted.org.uk/~mdw/become/commitdiff_plain/4c37c6af624a9d4dabadac32a5e566d388ee78d7 Fix for daemon mode. Oops. --- diff --git a/src/become.c b/src/become.c index d383084..60cb1f3 100644 --- a/src/become.c +++ b/src/become.c @@ -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 diff --git a/src/daemon.c b/src/daemon.c index 8d69510..6c515f4 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -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 --- */ diff --git a/src/daemon.h b/src/daemon.h index 9c9ce72..cca5bdf 100644 --- a/src/daemon.h +++ b/src/daemon.h @@ -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 -------------------------------------------------*/