X-Git-Url: https://git.distorted.org.uk/~mdw/become/blobdiff_plain/c4f2d992e4a0fc068281376d89ec38de56dc2f58..ce0f6e911b29a924c91046a091cc6fe149d53fe6:/src/daemon.c diff --git a/src/daemon.c b/src/daemon.c index eb36b39..5b5df85 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -1,13 +1,13 @@ /* -*-c-*- * - * $Id: daemon.c,v 1.1 1997/07/21 13:47:50 mdw Exp $ + * $Id: daemon.c,v 1.5 1997/08/20 16:17:10 mdw Exp $ * * Running a `become' daemon * * (c) 1997 EBI */ -/*----- Licencing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of `become' * @@ -22,14 +22,25 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with `become'; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * along with `become'; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*----- Revision history --------------------------------------------------* * * $Log: daemon.c,v $ - * Revision 1.1 1997/07/21 13:47:50 mdw + * 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. + * + * Revision 1.1 1997/07/21 13:47:50 mdw * Initial revision * */ @@ -68,6 +79,7 @@ #include "idea.h" #include "lexer.h" #include "name.h" +#include "netg.h" #include "parser.h" #include "rule.h" #include "tx.h" @@ -76,7 +88,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 --------------------------------------------------*/ @@ -152,6 +164,7 @@ static int daemon__readConfig(const char *cf) if (!daemon__readKey) daemon_readKey(file_KEY); daemon__rescan = 0; + T( trace(TRACE_DAEMON, "daemon: read config file"); ) return (0); } @@ -210,6 +223,8 @@ void daemon__read(int fd) if (recvfrom(fd, (char *)buff, sizeof(buff), 0, (struct sockaddr *)&sin, &slen) < 0) { + T( trace(TRACE_DAEMON, "daemon: error reading packet: %s", + strerror(errno)); ) syslog(LOG_INFO, "duff packet received: %e"); return; } @@ -226,12 +241,14 @@ void daemon__read(int fd) he ? he->h_name : inet_ntoa(sin.sin_addr), sizeof(sender)); syslog(LOG_DEBUG, "packet received from %s", sender); + T( trace(TRACE_DAEMON, "daemon: received request from %s", sender); ) } /* --- Unpack the block --- */ if (crypt_unpackRequest(&rq, buff, daemon__key, sk, rpl) == 0) { burn(buff); + T( trace(TRACE_DAEMON, "daemon: received corrupt or invalid request"); ) syslog(LOG_INFO, "packet from %s rejected", sender); return; } @@ -254,6 +271,7 @@ void daemon__read(int fd) /* --- Send the reply off --- */ sendto(fd, (char *)rpl, crp_size, 0, (struct sockaddr *)&sin, sizeof(sin)); + T( trace(TRACE_DAEMON, "daemon: reply sent"); ) burn(rpl); } @@ -277,7 +295,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 --- */ @@ -286,6 +304,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); @@ -345,26 +364,38 @@ void daemon_init(const char *cf, int port) fprintf(fp, "%lu\n", (unsigned long)getpid()); fclose(fp); } + T( trace(TRACE_DAEMON, "daemon: forked to pid %li", (long)getpid()); ) } #endif /* --- Program in daemon death mode --- */ if (setjmp(daemon__dieBuf)) { - syslog(LOG_NOTICE, "killed by signal type %i", daemon__signum); - remove(file_PID); - exit(0); - } +#ifdef TRACING + if (daemon__signum == SIGQUIT && tracing() & TRACE_RULE) { + T( rule_dump(); ) + signal(SIGQUIT, daemon__die); + } else +#endif + { + T( trace(TRACE_DAEMON, "daemon: killed by signal %i", + daemon__signum); ) + syslog(LOG_NOTICE, "killed by signal type %i", daemon__signum); + remove(file_PID); + exit(0); + } + } else { - /* --- Set signal handlers --- */ + /* --- Set signal handlers --- */ - signal(SIGHUP, daemon__restart); - signal(SIGQUIT, daemon__restart); - signal(SIGINT, daemon__die); - signal(SIGTERM, daemon__die); - signal(SIGSEGV, daemon__die); - signal(SIGFPE, daemon__die); - signal(SIGBUS, daemon__die); + signal(SIGHUP, daemon__restart); + signal(SIGQUIT, daemon__die); + signal(SIGINT, daemon__die); + signal(SIGTERM, daemon__die); + signal(SIGSEGV, daemon__die); + signal(SIGFPE, daemon__die); + signal(SIGBUS, daemon__die); + } /* --- Now wait for something exciting to happen --- * * @@ -391,6 +422,7 @@ void daemon_init(const char *cf, int port) /* --- Now wait for something interesting --- */ + T( trace(TRACE_DAEMON, "daemon: waiting for requests"); ) i = select(FD_SETSIZE, &fds, 0, 0, 0); /* --- Now, see if I need to rescan the config --- */ @@ -398,11 +430,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;