chiark / gitweb /
Brown-paper-bag fixes.
[mLib] / bres.c
diff --git a/bres.c b/bres.c
index c48226222b773c8436cddc866a668b2cb466cab7..8a73aaf266925a52c0ccff01fd82377e5ded39c0 100644 (file)
--- a/bres.c
+++ b/bres.c
@@ -1,13 +1,13 @@
 /* -*-c-*-
  *
- * $Id: bres.c,v 1.1 1999/10/04 21:40:42 mdw Exp $
+ * $Id: bres.c,v 1.7 2004/04/08 01:36:11 mdw Exp $
  *
  * Background reverse name resolution
  *
  * (c) 1999 Straylight/Edgeware
  */
 
-/*----- Licensing notice --------------------------------------------------* 
+/*----- Licensing notice --------------------------------------------------*
  *
  * This file is part of the mLib utilities library.
  *
  * it under the terms of the GNU Library General Public License as
  * published by the Free Software Foundation; either version 2 of the
  * License, or (at your option) any later version.
- * 
+ *
  * mLib is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Library General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Library General Public
  * License along with mLib; if not, write to the Free
  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  * MA 02111-1307, USA.
  */
 
-/*----- Revision history --------------------------------------------------* 
- *
- * $Log: bres.c,v $
- * Revision 1.1  1999/10/04 21:40:42  mdw
- * Added background resolver from `fw'.
- *
- */
-
 /*----- Header files ------------------------------------------------------*/
 
+#include "config.h"
+
 #include <errno.h>
 #include <signal.h>
 #include <stdio.h>
 #include <arpa/inet.h>
 #include <netdb.h>
 
-#include <mLib/alloc.h>
-#include <mLib/report.h>
-#include <mLib/sel.h>
-
+#include "alloc.h"
 #include "bres.h"
+#include "report.h"
+#include "sel.h"
 
 /*----- Magic numbers -----------------------------------------------------*/
 
@@ -236,7 +229,7 @@ static struct hostent *gethost(int fd)
   struct hostent *h;
   char *name;
   char **alias = 0;
-  
+
   /* --- Read the skeleton structure --- */
 
   if (doread(fd, &hsk, sizeof(hsk)))
@@ -264,7 +257,7 @@ static struct hostent *gethost(int fd)
     if (hsk.nalias) {
       int i;
       if ((alias = malloc(hsk.nalias * sizeof(char *))) == 0)
-       goto tidy_1;      
+       goto tidy_1;
       for (i = 0; i < hsk.nalias; i++)
        alias[i] = 0;
       for (i = 0; i < hsk.nalias; i++) {
@@ -298,9 +291,8 @@ static struct hostent *gethost(int fd)
     if (doread(fd, a, hsk.naddr * hsk.addrsz))
       goto tidy_2;
     for (i = 0; i < hsk.naddr; i++) {
-      struct in_addr in;
       *p++ = a;
-      memcpy(&in, a, sizeof(in));
+      a += hsk.addrsz;
     }
     *p++ = 0;
 
@@ -323,7 +315,7 @@ static struct hostent *gethost(int fd)
     }
     *p++ = 0;
     free(alias);
+
 #undef PUT
   }
 
@@ -413,7 +405,13 @@ static void child(int rfd, int cfd)
 
   {
     int i;
+#if defined(_SC_OPEN_MAX)
     int maxfd = sysconf(_SC_OPEN_MAX);
+#elif defined(OPEN_MAX)
+    int maxfd = OPEN_MAX;
+#else
+    int maxfd = -1;
+#endif
 
     if (maxfd < 0)
       maxfd = 256; /* Fingers crossed... */
@@ -423,6 +421,12 @@ static void child(int rfd, int cfd)
     }
   }
 
+  signal(SIGTERM, SIG_DFL);
+  signal(SIGHUP, SIG_DFL);
+  signal(SIGQUIT, SIG_DFL);
+  signal(SIGALRM, SIG_DFL);
+  signal(SIGINT, SIG_DFL);
+
   /* --- Main request/response loop --- */
 
   for (;;) {
@@ -448,7 +452,7 @@ static void child(int rfd, int cfd)
        free(name);
       }        break;
 
-      /* --- Forward lookup --- */
+      /* --- Reverse lookup --- */
 
       case BRES_BYADDR: {
        struct in_addr addr;
@@ -594,7 +598,7 @@ static void zap(bres_server *rs)
 void bres_abort(bres_client *rc)
 {
   if (rc->q == BRES_BYNAME)
-    free(rc->u.name);
+    xfree(rc->u.name);
   if (rc->rs) {
     sel_rmfile(&rc->rs->f);
     zap(rc->rs);
@@ -661,7 +665,7 @@ static void answer(int fd, unsigned mode, void *vp)
   if (rc) {
     rc->func(h, rc->p);
     if (rc->q == BRES_BYNAME)
-      free(rc->u.name);
+      xfree(rc->u.name);
   }
   if (h)
     free(h);
@@ -852,7 +856,7 @@ again:
 lost:
   rc->func(0, rc->p);
   if (rc->q == BRES_BYNAME)
-    free(rc->u.name);
+    xfree(rc->u.name);
 }
 
 /* --- @resolve@ --- *