X-Git-Url: https://git.distorted.org.uk/~mdw/become/blobdiff_plain/03f996bd8a0d6391518979cdab3dbe38cba0bf83..0c6c5a979b3da98915ab3ad8064f9dbfdf901e08:/src/daemon.c diff --git a/src/daemon.c b/src/daemon.c index 3f1fa93..317a7fb 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: daemon.c,v 1.2 1997/08/04 10:24:21 mdw Exp $ + * $Id: daemon.c,v 1.7 1997/09/17 10:23:23 mdw Exp $ * * Running a `become' daemon * @@ -29,6 +29,20 @@ /*----- Revision history --------------------------------------------------* * * $Log: daemon.c,v $ + * Revision 1.7 1997/09/17 10:23:23 mdw + * Fix a typo. Port numbers are in network order now, so don't change them. + * + * Revision 1.6 1997/09/09 18:17:06 mdw + * Allow default port to be given as a service name or port number. + * + * Revision 1.5 1997/08/20 16:17:10 mdw + * More sensible restart routine: `_reinit' functions replaced by `_end' and + * `_init' functions. + * + * Revision 1.4 1997/08/07 10:00:37 mdw + * (Log entry for previous version is bogus.) Read netgroups database. + * Give up privileges permanently on startup. + * * Revision 1.2 1997/08/04 10:24:21 mdw * Sources placed under CVS control. * @@ -71,6 +85,7 @@ #include "idea.h" #include "lexer.h" #include "name.h" +#include "netg.h" #include "parser.h" #include "rule.h" #include "tx.h" @@ -79,7 +94,7 @@ /*----- Arbitrary constants -----------------------------------------------*/ -#define daemon__awakeEvery (5 * 60) /* Awaken this often to rescan */ +#define daemon__awakeEvery (30 * 60) /* Awaken this often to rescan */ /*----- Static variables --------------------------------------------------*/ @@ -286,7 +301,7 @@ void daemon_init(const char *cf, int port) * user wants me to start on a funny port. */ - seteuid(getuid()); + setuid(getuid()); /* --- Initialise bits of the program --- */ @@ -295,6 +310,7 @@ void daemon_init(const char *cf, int port) userdb_init(); userdb_local(); userdb_yp(); + netg_init(); name_init(); rule_init(); openlog(quis(), 0, LOG_DAEMON); @@ -309,11 +325,11 @@ void daemon_init(const char *cf, int port) * look it up in /etc/services under whatever name I was started as. */ - if (daemon__port <= 0) { + if (daemon__port == 0) { struct servent *se = getservbyname(quis(), "udp"); if (!se) die("no idea which port to use"); - daemon__port = ntohs(se->s_port); + daemon__port = se->s_port; } /* --- Now set up a socket --- */ @@ -324,10 +340,12 @@ void daemon_init(const char *cf, int port) if ((s = socket(PF_INET, SOCK_DGRAM, 0)) == -1) die("couldn't create socket: %s", strerror(errno)); sin.sin_family = AF_INET; - sin.sin_port = htons(daemon__port); + sin.sin_port = daemon__port; sin.sin_addr.s_addr = htonl(INADDR_ANY); - if (bind(s, (struct sockaddr *)&sin, sizeof(sin))) - die("couldn't bind socket to port: %s", strerror(errno)); + if (bind(s, (struct sockaddr *)&sin, sizeof(sin))) { + die("couldn't bind socket to port %i: %s", + ntohs(daemon__port), strerror(errno)); + } } /* --- Fork off into the sunset --- */ @@ -420,11 +438,16 @@ void daemon_init(const char *cf, int port) if (daemon__rescan || time(0) - when > 0) { daemon__rescan = 0; syslog(LOG_INFO, "rescanning configuration file"); - userdb_reinit(); + name_end(); + rule_end(); + netg_end(); + userdb_end(); + userdb_init(); userdb_local(); userdb_yp(); - rule_reinit(); - name_reinit(); + netg_init(); + rule_init(); + name_init(); if (daemon__readConfig(cf)) syslog(LOG_ERR, "error reading configuration file"); when = time(0) + daemon__awakeEvery;