New source file added to maintain a randomness pool.
[become] / src / daemon.c
index eb36b39..3f1fa93 100644 (file)
@@ -1,13 +1,13 @@
 /* -*-c-*-
  *
- * $Id: daemon.c,v 1.1 1997/07/21 13:47:50 mdw Exp $
+ * $Id: daemon.c,v 1.2 1997/08/04 10:24:21 mdw Exp $
  *
  * Running a `become' daemon
  *
  * (c) 1997 EBI
  */
 
-/*----- Licencing notice --------------------------------------------------*
+/*----- Licensing notice --------------------------------------------------*
  *
  * This file is part of `become'
  *
  * 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.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
  *
  */
@@ -152,6 +155,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 +214,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 +232,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 +262,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);
 }
 
@@ -345,26 +354,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 +412,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 --- */