Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/lib/libc/net sync with BIND 4.9.7. mostly costmetic.
details: https://anonhg.NetBSD.org/src/rev/93e7c4401bd8
branches: trunk
changeset: 485340:93e7c4401bd8
user: itojun <itojun%NetBSD.org@localhost>
date: Tue Apr 25 13:57:08 2000 +0000
description:
sync with BIND 4.9.7. mostly costmetic.
XXX 4.9.5 -> 4.9.7 moves _res from data to bss. the bss version of the code
is committed, but is wrapped with #ifdef __RES_IN_BSS and is disabled
(_res is still in data segment).
diffstat:
lib/libc/net/res_init.c | 86 ++++++++++++++++++++++++++++++++++-----------
lib/libc/net/res_mkquery.c | 24 ++++++++----
2 files changed, 80 insertions(+), 30 deletions(-)
diffs (269 lines):
diff -r 31f2f855f77e -r 93e7c4401bd8 lib/libc/net/res_init.c
--- a/lib/libc/net/res_init.c Tue Apr 25 13:47:38 2000 +0000
+++ b/lib/libc/net/res_init.c Tue Apr 25 13:57:08 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: res_init.c,v 1.31 2000/04/25 08:56:06 itojun Exp $ */
+/* $NetBSD: res_init.c,v 1.32 2000/04/25 13:57:08 itojun Exp $ */
/*-
* Copyright (c) 1985, 1989, 1993
@@ -59,7 +59,7 @@
static char sccsid[] = "@(#)res_init.c 8.1 (Berkeley) 6/7/93";
static char rcsid[] = "Id: res_init.c,v 8.8 1997/06/01 20:34:37 vixie Exp ";
#else
-__RCSID("$NetBSD: res_init.c,v 1.31 2000/04/25 08:56:06 itojun Exp $");
+__RCSID("$NetBSD: res_init.c,v 1.32 2000/04/25 13:57:08 itojun Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -94,13 +94,17 @@
/*
* Resolver state default settings
*/
-
+/* #define __RES_IN_BSS */
+#ifdef __RES_IN_BSS
+struct __res_state _res;
+#else
struct __res_state _res = {
RES_TIMEOUT, /* retransmition time interval */
4, /* number of times to retransmit */
RES_DEFAULT, /* options flags */
1, /* number of name servers */
};
+#endif
#ifdef INET6
struct __res_state_ext _res_ext;
#endif /* INET6 */
@@ -130,26 +134,63 @@
res_init()
{
register FILE *fp;
- register char *cp, **pp, *net;
+ register char *cp, **pp;
register int n;
char buf[MAXDNAME];
int nserv = 0; /* number of nameserver records read from file */
int haveenv = 0;
int havesearch = 0;
int nsort = 0;
-#ifdef SEARCH_LOCAL_DOMAINS
+ char *net;
+#ifndef RFC1535
int dots;
#endif
+#ifdef __RES_IN_BSS
+ /*
+ * These three fields used to be statically initialized. This made
+ * it hard to use this code in a shared library. It is necessary,
+ * now that we're doing dynamic initialization here, that we preserve
+ * the old semantics: if an application modifies one of these three
+ * fields of _res before res_init() is called, res_init() will not
+ * alter them. Of course, if an application is setting them to
+ * _zero_ before calling res_init(), hoping to override what used
+ * to be the static default, we can't detect it and unexpected results
+ * will follow. Zero for any of these fields would make no sense,
+ * so one can safely assume that the applications were already getting
+ * unexpected results.
+ *
+ * _res.options is tricky since some apps were known to diddle the bits
+ * before res_init() was first called. We can't replicate that semantic
+ * with dynamic initialization (they may have turned bits off that are
+ * set in RES_DEFAULT). Our solution is to declare such applications
+ * "broken". They could fool us by setting RES_INIT but none do (yet).
+ */
+ if (!_res.retrans)
+ _res.retrans = RES_TIMEOUT;
+ if (!_res.retry)
+ _res.retry = 4;
+ if (!(_res.options & RES_INIT))
+ _res.options = RES_DEFAULT;
+
+ /*
+ * This one used to initialize implicitly to zero, so unless the app
+ * has set it to something in particular, we can randomize it now.
+ */
+ if (!_res.id)
+ _res.id = res_randomid();
+#else
_res.id = res_randomid();
- _res.nsaddr.sin_len = sizeof(struct sockaddr_in);
- _res.nsaddr.sin_family = AF_INET;
- _res.nsaddr.sin_port = htons(NAMESERVER_PORT);
+#endif
+
#ifdef USELOOPBACK
_res.nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1);
#else
_res.nsaddr.sin_addr.s_addr = INADDR_ANY;
#endif
+ _res.nsaddr.sin_len = sizeof(struct sockaddr_in);
+ _res.nsaddr.sin_family = AF_INET;
+ _res.nsaddr.sin_port = htons(NAMESERVER_PORT);
#ifdef INET6
if (sizeof(_res_ext.nsaddr) >= _res.nsaddr.sin_len)
memcpy(&_res_ext.nsaddr, &_res.nsaddr, _res.nsaddr.sin_len);
@@ -161,6 +202,7 @@
/* Allow user to override the local domain definition */
if ((cp = getenv("LOCALDOMAIN")) != NULL) {
(void)strncpy(_res.defdname, cp, sizeof(_res.defdname) - 1);
+ _res.defdname[sizeof(_res.defdname) - 1] = '\0';
if ((cp = strpbrk(_res.defdname, " \t\n")) != NULL)
*cp = '\0';
haveenv++;
@@ -176,7 +218,7 @@
pp = _res.dnsrch;
*pp++ = cp;
for (n = 0; *cp && pp < _res.dnsrch + MAXDNSRCH; cp++) {
- if (*cp == '\n') /* silly backwards compat */
+ if (*cp == '\n') /* silly backwards compat */
break;
else if (*cp == ' ' || *cp == '\t') {
*cp = 0;
@@ -214,8 +256,8 @@
cp++;
if ((*cp == '\0') || (*cp == '\n'))
continue;
- (void)strncpy(_res.defdname, cp,
- sizeof(_res.defdname) - 1);
+ (void)strncpy(_res.defdname, cp, sizeof(_res.defdname) - 1);
+ _res.defdname[sizeof(_res.defdname) - 1] = '\0';
if ((cp = strpbrk(_res.defdname, " \t\n")) != NULL)
*cp = '\0';
havesearch = 0;
@@ -233,8 +275,8 @@
cp++;
if ((*cp == '\0') || (*cp == '\n'))
continue;
- (void)strncpy(_res.defdname, cp,
- sizeof(_res.defdname) - 1);
+ (void)strncpy(_res.defdname, cp, sizeof(_res.defdname) - 1);
+ _res.defdname[sizeof(_res.defdname) - 1] = '\0';
if ((cp = strchr(_res.defdname, '\n')) != NULL)
*cp = '\0';
/*
@@ -434,22 +476,22 @@
if (havesearch == 0) {
pp = _res.dnsrch;
*pp++ = _res.defdname;
-#ifndef SEARCH_LOCAL_DOMAINS
*pp = NULL;
-#else
+
+#ifndef RFC1535
dots = 0;
- for (cp = _res.defdname, n = 0; *cp; cp++)
+ for (cp = _res.defdname; *cp; cp++)
dots += (*cp == '.');
cp = _res.defdname;
while (pp < _res.dnsrch + MAXDFLSRCH) {
if (dots < LOCALDOMAINPARTS)
break;
- cp = strchr(cp, '.') + 1;
+ cp = strchr(cp, '.') + 1; /* we know there is one */
*pp++ = cp;
dots--;
}
- *pp++ = 0;
+ *pp = NULL;
#ifdef DEBUG
if (_res.options & RES_DEBUG) {
printf(";; res_init()... default dnsrch list:\n");
@@ -458,7 +500,7 @@
printf(";;\t..END..\n");
}
#endif /* DEBUG */
-#endif
+#endif /* !RFC1535 */
}
if ((cp = getenv("RES_OPTIONS")) != NULL)
@@ -488,7 +530,7 @@
while (*cp == ' ' || *cp == '\t')
cp++;
/* search for and process individual options */
- if (!strncmp(cp, "ndots:", sizeof("ndots:")-1)) {
+ if (!strncmp(cp, "ndots:", sizeof("ndots:") - 1)) {
i = atoi(cp + sizeof("ndots:") - 1);
if (i <= RES_MAXNDOTS)
_res.ndots = i;
@@ -498,7 +540,7 @@
if (_res.options & RES_DEBUG)
printf(";;\tndots=%d\n", _res.ndots);
#endif
- } else if (!strncmp(cp, "debug", sizeof("debug")-1)) {
+ } else if (!strncmp(cp, "debug", sizeof("debug") - 1)) {
#ifdef DEBUG
if (!(_res.options & RES_DEBUG)) {
printf(";; res_setoptions(\"%s\", \"%s\")..\n",
@@ -527,7 +569,7 @@
if (IN_CLASSA(i))
return (htonl(IN_CLASSA_NET));
- if (IN_CLASSB(i))
+ else if (IN_CLASSB(i))
return (htonl(IN_CLASSB_NET));
return (htonl(IN_CLASSC_NET));
}
diff -r 31f2f855f77e -r 93e7c4401bd8 lib/libc/net/res_mkquery.c
--- a/lib/libc/net/res_mkquery.c Tue Apr 25 13:47:38 2000 +0000
+++ b/lib/libc/net/res_mkquery.c Tue Apr 25 13:57:08 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: res_mkquery.c,v 1.17 2000/01/22 22:19:16 mycroft Exp $ */
+/* $NetBSD: res_mkquery.c,v 1.18 2000/04/25 13:57:08 itojun Exp $ */
/*-
* Copyright (c) 1985, 1993
@@ -59,7 +59,7 @@
static char sccsid[] = "@(#)res_mkquery.c 8.1 (Berkeley) 6/4/93";
static char rcsid[] = "Id: res_mkquery.c,v 8.5 1996/08/27 08:33:28 vixie Exp ";
#else
-__RCSID("$NetBSD: res_mkquery.c,v 1.17 2000/01/22 22:19:16 mycroft Exp $");
+__RCSID("$NetBSD: res_mkquery.c,v 1.18 2000/04/25 13:57:08 itojun Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -118,16 +118,24 @@
/*
* Initialize header fields.
*/
- if ((buf == NULL) || (buflen < sizeof(HEADER)))
+ if (sizeof(HEADER) != HFIXEDSZ) {
+ /* XXX should raise compile time error, not runtime error */
+#ifdef DEBUG
+ if (_res.options & RES_DEBUG)
+ printf(";; HFIXEDSZ mismatch with sizeof(HEADER)\n");
+#endif
return(-1);
- (void)memset(buf, 0, sizeof (HEADER));
+ }
+ if ((buf == NULL) || (buflen < HFIXEDSZ))
+ return(-1);
+ (void)memset(buf, 0, HFIXEDSZ);
hp = (HEADER *)(void *)buf;
hp->id = htons(++_res.id);
hp->opcode = op;
hp->rd = (_res.options & RES_RECURSE) != 0;
hp->rcode = NOERROR;
- cp = buf + sizeof(HEADER);
- buflen -= sizeof(HEADER);
+ cp = buf + HFIXEDSZ;
+ buflen -= HFIXEDSZ;
dpp = dnptrs;
*dpp++ = buf;
*dpp++ = NULL;
@@ -136,10 +144,10 @@
* perform opcode specific processing
*/
switch (op) {
- case QUERY: /*FALLTHROUGH*/
+ case QUERY: /*FALLTHROUGH*/
case NS_NOTIFY_OP:
if ((buflen -= QFIXEDSZ) < 0)
- return(-1);
+ return (-1);
if ((n = dn_comp(dname, cp, buflen, dnptrs, lastdnptr)) < 0)
return (-1);
cp += n;
Home |
Main Index |
Thread Index |
Old Index