X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/a759efa6dcc67b035726a4428157c35627653966..e7d93da8951557085bf18daac69e7b226203988e:/bres.c diff --git a/bres.c b/bres.c index c482262..2a928e4 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.6 2001/06/22 19:33:38 mdw Exp $ * * Background reverse name resolution * @@ -30,6 +30,24 @@ /*----- Revision history --------------------------------------------------* * * $Log: bres.c,v $ + * Revision 1.6 2001/06/22 19:33:38 mdw + * Hack if there is no @_SC_OPEN_MAX@ or @OPEN_MAX@. + * + * Revision 1.5 2001/02/03 16:21:08 mdw + * Bug fixes: restore signals to their default dispositions, and set up the + * addresses properly when unpacking @hostent@ structures. + * + * Revision 1.4 2000/08/15 17:35:02 mdw + * (gethost, and others): Since @gethost@ actually uses @malloc@ rather + * than @xmalloc@, it's wrong to use @xfree@ on the result. Fixed the code + * to use the right freeing function on the right data. + * + * Revision 1.3 2000/06/17 10:38:35 mdw + * Track changes to selbuf interface. + * + * Revision 1.2 1999/10/30 11:28:39 mdw + * Fix include error, pointed out by Chris Rutter. + * * Revision 1.1 1999/10/04 21:40:42 mdw * Added background resolver from `fw'. * @@ -53,11 +71,10 @@ #include #include -#include -#include -#include - +#include "alloc.h" #include "bres.h" +#include "report.h" +#include "sel.h" /*----- Magic numbers -----------------------------------------------------*/ @@ -298,9 +315,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 +429,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 +445,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 +476,7 @@ static void child(int rfd, int cfd) free(name); } break; - /* --- Forward lookup --- */ + /* --- Reverse lookup --- */ case BRES_BYADDR: { struct in_addr addr; @@ -594,7 +622,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 +689,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 +880,7 @@ again: lost: rc->func(0, rc->p); if (rc->q == BRES_BYNAME) - free(rc->u.name); + xfree(rc->u.name); } /* --- @resolve@ --- *