X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=secnet.c;h=a21e52b39753c68c3fa562203c429b218088ebc3;hp=39a635a033cd5714253654dacac7fcc6bc00a3cf;hb=4f5e39ecfaa49376b0a5c3a4c384e91a828c1105;hpb=d3fe100dfc120244d316e083ce87b1eb130fe4fd diff --git a/secnet.c b/secnet.c index 39a635a..a21e52b 100644 --- a/secnet.c +++ b/secnet.c @@ -1,9 +1,3 @@ -/* $Log: secnet.c,v $ - * Revision 1.1 1996/03/13 22:27:41 sde1000 - * Initial revision - * - */ - extern char version[]; #include "secnet.h" @@ -86,28 +80,27 @@ static void parse_options(int argc, char **argv) switch(c) { case 2: /* Help */ - fprintf(stderr, - "Usage: secnet [OPTION]...\n\n" - " -f, --silent, --quiet suppress error messages\n" - " -w, --nowarnings suppress warnings\n" - " -v, --verbose output extra diagnostics\n" - " -c, --config=filename specify a configuration file\n" - " -j, --just-check-config stop after reading " - "configuration file\n" - " -s, --sites-key=name configuration key that " - "specifies active sites\n" - " -n, --nodetach do not run in background\n" - " -d, --debug=item,... set debug options\n" - " --help display this help and exit\n" - " --version output version information " - "and exit\n" + printf("Usage: secnet [OPTION]...\n\n" + " -f, --silent, --quiet suppress error messages\n" + " -w, --nowarnings suppress warnings\n" + " -v, --verbose output extra diagnostics\n" + " -c, --config=filename specify a configuration file\n" + " -j, --just-check-config stop after reading " + "configuration file\n" + " -s, --sites-key=name configuration key that " + "specifies active sites\n" + " -n, --nodetach do not run in background\n" + " -d, --debug=item,... set debug options\n" + " --help display this help and exit\n" + " --version output version information " + "and exit\n" ); exit(0); break; case 1: /* Version */ - fprintf(stderr,"%s\n",version); + printf("%s\n",version); exit(0); break; @@ -176,7 +169,7 @@ static void setup(dict_t *config) l=dict_lookup(config,"system"); if (!l || list_elem(l,0)->type!=t_dict) { - fatal("configuration does not include a \"system\" dictionary\n"); + fatal("configuration does not include a \"system\" dictionary"); } system=list_elem(l,0)->data.dict; loc=list_elem(l,0)->loc; @@ -184,7 +177,7 @@ static void setup(dict_t *config) /* Arrange systemwide log facility */ l=dict_lookup(system,"log"); if (!l) { - fatal("configuration does not include a system/log facility\n"); + fatal("configuration does not include a system/log facility"); } system_log=init_log(l); @@ -200,7 +193,7 @@ static void setup(dict_t *config) } while(pw); endpwent(); if (uid==0) { - fatal("userid \"%s\" not found\n",userid); + fatal("userid \"%s\" not found",userid); } } @@ -209,8 +202,8 @@ static void setup(dict_t *config) /* Check whether we need root privileges */ if (require_root_privileges && uid!=0) { - fatal("the following configured feature (\"%s\") requires " - "that secnet retain root privileges while running.\n", + fatal("the configured feature \"%s\" requires " + "that secnet retain root privileges while running.", require_root_privileges_explanation); } @@ -272,7 +265,7 @@ static void run(void) fds=alloca(sizeof(*fds)*total_nfds); if (!fds) { - fatal("run: couldn't alloca\n"); + fatal("run: couldn't alloca"); } Message(M_NOTICE,"%s [%d]: starting\n",version,secnet_pid); @@ -297,10 +290,10 @@ static void run(void) if (rv!=0) { /* XXX we need to handle this properly: increase the nfds available */ - fatal("run: beforepoll_fn (%s) returns %d\n",i->desc,rv); + fatal("run: beforepoll_fn (%s) returns %d",i->desc,rv); } if (timeout<-1) { - fatal("run: beforepoll_fn (%s) set timeout to %d\n",timeout); + fatal("run: beforepoll_fn (%s) set timeout to %d",timeout); } idx+=nfds; remain-=nfds; @@ -357,10 +350,14 @@ static void droppriv(void) /* Child process - all done, just carry on */ if (pf) fclose(pf); /* Close stdin, stdout and stderr; we don't need them any more */ + /* XXX we must leave stderr pointing to something useful - + a pipe to a log destination, for example, or just leave + it alone. */ close(0); close(1); - close(2); + /* XXX close(2); */ secnet_is_daemon=True; + setsid(); } else { /* Error */ fatal_perror("cannot fork");