/* -*-c-*-
*
- * $Id: bres.c,v 1.3 2000/06/17 10:38:35 mdw Exp $
+ * $Id: bres.c,v 1.6 2001/06/22 19:33:38 mdw Exp $
*
* Background reverse name resolution
*
/*----- 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.
*
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;
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
}
{
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);
}
{
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... */
}
}
+ 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 (;;) {
free(name);
} break;
- /* --- Forward lookup --- */
+ /* --- Reverse lookup --- */
case BRES_BYADDR: {
struct in_addr addr;
xfree(rc->u.name);
}
if (h)
- xfree(h);
+ free(h);
if (fail)
zap(rs);
if (!rc)