chiark / gitweb /
split --no-daemon into --no-daemon and --interactive
authorIan Jackson <ian@chiark.greenend.org.uk>
Thu, 6 May 2010 18:47:05 +0000 (19:47 +0100)
committerIan Jackson <ian@chiark.greenend.org.uk>
Thu, 6 May 2010 18:47:05 +0000 (19:47 +0100)
backends/innduct.c
doc/man/innduct.8

index 8f4e29e8e2ca91f125ae3a5c00b08f6205d6bfc3..8104fee469826eb8e83f0b0480e3ecdfd35ab660 100644 (file)
@@ -365,7 +365,7 @@ static oop_rd_call peer_rd_err, peer_rd_ok;
 static const char *sitename, *remote_host;
 static const char *feedfile, *path_run, *path_cli, *path_cli_dir;
 static int quiet_multiple=0;
-static int become_daemon=1, try_filemon=1;
+static int interactive=0, try_filemon=1;
 static int try_stream=1;
 static int port=119;
 static const char *inndconffile;
@@ -554,7 +554,7 @@ int simulate_flush= -1;
 static void logcore(int sysloglevel, const char *fmt, ...) PRINTF(2,3);
 static void logcore(int sysloglevel, const char *fmt, ...) {
   VA;
-  if (become_daemon) {
+  if (interactive < 2) {
     vsyslog(sysloglevel,fmt,al);
   } else {
     if (self_pid) fprintf(stderr,"[%lu] ",(unsigned long)self_pid);
@@ -3481,7 +3481,7 @@ static void vbadusage(const char *fmt, va_list al) {
   fprintf(stderr, "bad usage: %s\n"
          "say --help for help, or read the manpage\n",
          m);
-  if (become_daemon)
+  if (interactive < 2)
     syslog(LOG_CRIT,"innduct: invoked with bad usage: %s",m);
   exit(8);
 }
@@ -3641,7 +3641,8 @@ static void help(const Option *o, const char *val);
 static const Option innduct_options[]= {
 {'f',"feedfile",         "F",     &feedfile,                 op_string      },
 {'q',"quiet-multiple",   0,       &quiet_multiple,           op_setint, 1   },
-{0,"no-daemon",          0,       &become_daemon,            op_setint, 0   },
+{0,"no-daemon",          0,       &interactive,              op_setint, 1   },
+{0,"interactive",        0,       &interactive,              op_setint, 2   },
 {0,"no-streaming",       0,       &try_stream,               op_setint, 0   },
 {0,"no-filemon",         0,       &try_filemon,              op_setint, 0   },
 {'C',"inndconf",         "F",     &inndconffile,             op_string      },
@@ -3802,13 +3803,17 @@ int main(int argc, char **argv) {
 
   LIST_INIT(conns);
 
-  if (become_daemon) {
+  if (interactive < 1) {
     int i;
     for (i=3; i<255; i++)
       /* do this now before we open syslog, etc. */
       close(i);
+  }
+
+  if (interactive < 2)
     openlog("innduct",LOG_NDELAY|LOG_PID,LOG_NEWS);
 
+  if (interactive < 1) {
     int null= open("/dev/null",O_RDWR);
     if (null<0) sysfatal("failed to open /dev/null");
     dup2(null,0);
@@ -3842,7 +3847,7 @@ int main(int argc, char **argv) {
   r= SMsetup(SM_PREOPEN, &val); if (!r) warn("SMsetup SM_PREOPEN failed");
   r= SMinit(); if (!r) die("storage manager initialisation (SMinit) failed");
 
-  if (!become_daemon)
+  if (interactive >= 2)
     cli_stdio();
 
   cli_init();
index ad749aee2c7c461bbaf956bcbf681423e5175938..c2a6cef49db63842c542a0f46d218b72aa2d48e8 100644 (file)
@@ -75,6 +75,10 @@ the lock for the site.  Without \fB-q\fR, this causes a fatal error to
 be logged and a nonzero exit.
 .TP
 .BR \-\-no-daemon
+Do not daemonise.  innduct runs in the foreground, but otherwise
+operates normally (logging to syslog, etc.).
+.TP
+.BR \-\-interactive
 Do not daemonise.  innduct runs in the foreground and all messages
 (including all debug messages) are written to stderr rather than
 syslog.  A control command line is also available on stdin/stdout.