chiark
/
gitweb
/
~mdw
/
mLib
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
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-*-
*
/* -*-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
*/
*
* Background reverse name resolution
*
* (c) 1999 Straylight/Edgeware
*/
-/*----- Licensing notice --------------------------------------------------*
+/*----- Licensing notice --------------------------------------------------*
*
* This file is part of the mLib utilities library.
*
*
* This file is part of the mLib utilities library.
*
@@
-15,28
+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.
* 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.
* 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.
*/
* 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 ------------------------------------------------------*/
/*----- Header files ------------------------------------------------------*/
+#include "config.h"
+
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <errno.h>
#include <signal.h>
#include <stdio.h>
@@
-53,11
+47,10
@@
#include <arpa/inet.h>
#include <netdb.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 "bres.h"
+#include "report.h"
+#include "sel.h"
/*----- Magic numbers -----------------------------------------------------*/
/*----- Magic numbers -----------------------------------------------------*/
@@
-236,7
+229,7
@@
static struct hostent *gethost(int fd)
struct hostent *h;
char *name;
char **alias = 0;
struct hostent *h;
char *name;
char **alias = 0;
-
+
/* --- Read the skeleton structure --- */
if (doread(fd, &hsk, sizeof(hsk)))
/* --- 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)
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++) {
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++) {
if (doread(fd, a, hsk.naddr * hsk.addrsz))
goto tidy_2;
for (i = 0; i < hsk.naddr; i++) {
- struct in_addr in;
*p++ = a;
*p++ = a;
-
memcpy(&in, a, sizeof(in))
;
+
a += hsk.addrsz
;
}
*p++ = 0;
}
*p++ = 0;
@@
-323,7
+315,7
@@
static struct hostent *gethost(int fd)
}
*p++ = 0;
free(alias);
}
*p++ = 0;
free(alias);
-
+
#undef PUT
}
#undef PUT
}
@@
-413,7
+405,13
@@
static void child(int rfd, int cfd)
{
int i;
{
int i;
+#if defined(_SC_OPEN_MAX)
int maxfd = sysconf(_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... */
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 (;;) {
/* --- Main request/response loop --- */
for (;;) {
@@
-448,7
+452,7
@@
static void child(int rfd, int cfd)
free(name);
} break;
free(name);
} break;
- /* ---
Forward
lookup --- */
+ /* ---
Reverse
lookup --- */
case BRES_BYADDR: {
struct in_addr addr;
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)
void bres_abort(bres_client *rc)
{
if (rc->q == BRES_BYNAME)
- free(rc->u.name);
+
x
free(rc->u.name);
if (rc->rs) {
sel_rmfile(&rc->rs->f);
zap(rc->rs);
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)
if (rc) {
rc->func(h, rc->p);
if (rc->q == BRES_BYNAME)
- free(rc->u.name);
+
x
free(rc->u.name);
}
if (h)
free(h);
}
if (h)
free(h);
@@
-852,7
+856,7
@@
again:
lost:
rc->func(0, rc->p);
if (rc->q == BRES_BYNAME)
lost:
rc->func(0, rc->p);
if (rc->q == BRES_BYNAME)
- free(rc->u.name);
+
x
free(rc->u.name);
}
/* --- @resolve@ --- *
}
/* --- @resolve@ --- *