X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/a759efa6dcc67b035726a4428157c35627653966..d45be1af09ff22a4778172ee2e55745c2c3229ed:/bres.c?ds=sidebyside diff --git a/bres.c b/bres.c index c482262..1f27f02 100644 --- a/bres.c +++ b/bres.c @@ -1,6 +1,6 @@ /* -*-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 * @@ -27,14 +27,6 @@ * 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 @@ -53,11 +45,10 @@ #include #include -#include -#include -#include - +#include "alloc.h" #include "bres.h" +#include "report.h" +#include "sel.h" /*----- Magic numbers -----------------------------------------------------*/ @@ -298,9 +289,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; @@ -413,7 +403,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 +419,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 +450,7 @@ static void child(int rfd, int cfd) free(name); } break; - /* --- Forward lookup --- */ + /* --- Reverse lookup --- */ case BRES_BYADDR: { struct in_addr addr; @@ -594,7 +596,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 +663,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 +854,7 @@ again: lost: rc->func(0, rc->p); if (rc->q == BRES_BYNAME) - free(rc->u.name); + xfree(rc->u.name); } /* --- @resolve@ --- *