X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/e2a18bd0eda077f0920274fd114240bc786f03b1..b3a0ac5ea5b0f341ab0c1fe0a68a7855fe5c36c1:/bres.c diff --git a/bres.c b/bres.c index 4971153..8a73aaf 100644 --- a/bres.c +++ b/bres.c @@ -1,13 +1,13 @@ /* -*-c-*- * - * $Id: bres.c,v 1.3 2000/06/17 10:38:35 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. * @@ -15,34 +15,22 @@ * 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.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'. - * - */ - /*----- Header files ------------------------------------------------------*/ +#include "config.h" + #include #include #include @@ -241,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))) @@ -269,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++) { @@ -303,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; @@ -319,16 +306,16 @@ static struct hostent *gethost(int fd) h->h_name = a; PUT(name); - xfree(name); + free(name); h->h_aliases = p; for (i = 0; i < hsk.nalias; i++) { *p++ = a; PUT(alias[i]); - xfree(alias[i]); + free(alias[i]); } *p++ = 0; - xfree(alias); - + free(alias); + #undef PUT } @@ -340,11 +327,11 @@ tidy_2: { int i; for (i = 0; i < hsk.nalias && alias[i]; i++) - xfree(alias[i]); - xfree(alias); + free(alias[i]); + free(alias); } tidy_1: - xfree(name); + free(name); tidy_0: return (0); } @@ -418,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... */ @@ -428,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 (;;) { @@ -453,7 +452,7 @@ static void child(int rfd, int cfd) free(name); } break; - /* --- Forward lookup --- */ + /* --- Reverse lookup --- */ case BRES_BYADDR: { struct in_addr addr; @@ -669,7 +668,7 @@ static void answer(int fd, unsigned mode, void *vp) xfree(rc->u.name); } if (h) - xfree(h); + free(h); if (fail) zap(rs); if (!rc)