summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>1998-05-22 00:47:52 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>1998-05-22 00:47:52 +0000
commitf574c55aa56261d8fc3ce601af6d42c4ebc83fb8 (patch)
treecf686e53be1725a85c2b49d468ffae9daa548f68
parent0d3f8bb38bb58b0a4742f327f9fe73684d125f20 (diff)
bind 4.9.6, 4.9.7 comming soon.
-rw-r--r--usr.sbin/named/Makefile4
-rw-r--r--usr.sbin/named/conf/portability.h15
-rw-r--r--usr.sbin/named/include/netdb.h12
-rw-r--r--usr.sbin/named/include/resolv.h6
-rw-r--r--usr.sbin/named/libresolv/gethnamaddr.c48
-rw-r--r--usr.sbin/named/libresolv/getnetent.c8
-rw-r--r--usr.sbin/named/libresolv/getnetnamadr.c8
-rw-r--r--usr.sbin/named/libresolv/res_comp.c13
-rw-r--r--usr.sbin/named/libresolv/res_debug.c55
-rw-r--r--usr.sbin/named/libresolv/res_init.c9
-rw-r--r--usr.sbin/named/libresolv/res_query.c33
-rw-r--r--usr.sbin/named/libresolv/res_send.c13
-rw-r--r--usr.sbin/named/man/dig.14
-rw-r--r--usr.sbin/named/named/Makefile6
-rw-r--r--usr.sbin/named/named/Version.c13
-rw-r--r--usr.sbin/named/named/db_defs.h12
-rw-r--r--usr.sbin/named/named/db_func.h5
-rw-r--r--usr.sbin/named/named/db_load.c15
-rw-r--r--usr.sbin/named/named/db_lookup.c6
-rw-r--r--usr.sbin/named/named/db_secure.c8
-rw-r--r--usr.sbin/named/named/db_update.c10
-rw-r--r--usr.sbin/named/named/ns_forw.c11
-rw-r--r--usr.sbin/named/named/ns_glob.h5
-rw-r--r--usr.sbin/named/named/ns_init.c35
-rw-r--r--usr.sbin/named/named/ns_main.c21
-rw-r--r--usr.sbin/named/named/ns_ncache.c4
-rw-r--r--usr.sbin/named/named/ns_req.c12
-rw-r--r--usr.sbin/named/named/ns_resp.c264
-rw-r--r--usr.sbin/named/named/ns_validate.c4
-rw-r--r--usr.sbin/named/named/storage.c4
-rw-r--r--usr.sbin/named/named/tree.h4
-rw-r--r--usr.sbin/named/named/version.c13
-rw-r--r--usr.sbin/named/nslookup/send.c9
33 files changed, 481 insertions, 208 deletions
diff --git a/usr.sbin/named/Makefile b/usr.sbin/named/Makefile
index 95f9c8221a7..7c6203c8862 100644
--- a/usr.sbin/named/Makefile
+++ b/usr.sbin/named/Makefile
@@ -1,8 +1,8 @@
-# $OpenBSD: Makefile,v 1.6 1997/09/21 11:43:59 deraadt Exp $
+# $OpenBSD: Makefile,v 1.7 1998/05/22 00:47:12 millert Exp $
SUBDIR= named named-xfer ndc reload restart dig nslookup \
host dnsquery addr
-VER= 4.9.5-P1
+VER= 4.9.6-REL
.include <bsd.subdir.mk>
diff --git a/usr.sbin/named/conf/portability.h b/usr.sbin/named/conf/portability.h
index 64228a0d813..ad6e8621db2 100644
--- a/usr.sbin/named/conf/portability.h
+++ b/usr.sbin/named/conf/portability.h
@@ -1,7 +1,7 @@
/* portability.h - include or define things that aren't present on all systems
* vixie@decwrl 26dec92 [new]
*
- * $Id: portability.h,v 1.2 1997/03/12 10:41:47 downsj Exp $
+ * $From: portability.h,v 8.21 1997/06/01 20:34:27 vixie Exp $
*/
/*
@@ -189,7 +189,8 @@
#endif
#if defined(_POSIX_SOURCE) || defined(__sgi) || defined(__ultrix) || \
- defined(__hpux) || (defined(BSD) && (BSD >= 199103)) || defined(sun)
+ defined(__hpux) || (defined(BSD) && (BSD >= 199103)) || \
+ defined(sun) || defined(__m88k__)
# define USE_POSIX
#endif
@@ -606,6 +607,16 @@ extern u_long htonl __P((u_long)), ntohl __P((u_long));
#endif
/*
+ * Motorola FH40.43 and FH40.44 need specific macros for
+ * get/settimeofday as only one argument seems to be accepted
+ * by the compiler. NULL generates compile errors
+ */
+#if defined(__m88k__) && defined(__unix__)
+# define gettimeofday(tp, tzp) gettimeofday(tp)
+# define settimeofday(tp, tzp) settimeofday(tp)
+#endif
+
+/*
* We need to know the IPv6 address family number even on IPv4-only systems.
* Note that this is NOT a protocol constant, and that if the system has its
* own AF_INET6, different from ours below, all of BIND's libraries and
diff --git a/usr.sbin/named/include/netdb.h b/usr.sbin/named/include/netdb.h
index b1aed8b8158..a4d246b1eb3 100644
--- a/usr.sbin/named/include/netdb.h
+++ b/usr.sbin/named/include/netdb.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: netdb.h,v 1.2 1997/03/12 11:21:14 downsj Exp $ */
+/* $OpenBSD: netdb.h,v 1.3 1998/05/22 00:47:15 millert Exp $ */
/*
* ++Copyright++ 1980, 1983, 1988, 1993
@@ -57,7 +57,7 @@
/*
* @(#)netdb.h 8.1 (Berkeley) 6/2/93
- * $From: netdb.h,v 8.7 1996/05/09 05:59:09 vixie Exp $
+ * $From: netdb.h,v 8.8 1997/06/01 20:34:32 vixie Exp $
*/
#ifndef _NETDB_H_
@@ -169,4 +169,12 @@ struct rpcent *getrpcbyname(), *getrpcbynumber(), *getrpcent();
#endif /* __GNU_LIBRARY__ */
#endif /* sun */
+/*
+ * The Motorola kernel will only support 64 characters for hostname
+ * also defined in /usr/ucbinclude/netdb.h
+ */
+#ifdef __m88k__
+#define MAXHOSTNAMELEN 64
+#endif
+
#endif /* !_NETDB_H_ */
diff --git a/usr.sbin/named/include/resolv.h b/usr.sbin/named/include/resolv.h
index 0f4d7bf8dc2..f6bdaef9a2a 100644
--- a/usr.sbin/named/include/resolv.h
+++ b/usr.sbin/named/include/resolv.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: resolv.h,v 1.2 1997/03/12 11:21:15 downsj Exp $ */
+/* $OpenBSD: resolv.h,v 1.3 1998/05/22 00:47:17 millert Exp $ */
/*
* ++Copyright++ 1983, 1987, 1989, 1993
@@ -57,7 +57,7 @@
/*
* @(#)resolv.h 8.1 (Berkeley) 6/2/93
- * $From: resolv.h,v 8.17 1996/11/26 10:11:20 vixie Exp $
+ * $From: resolv.h,v 8.18 1997/06/01 20:34:32 vixie Exp $
*/
#ifndef _RESOLV_H_
@@ -227,7 +227,6 @@ extern const struct res_sym __p_type_syms[];
#define dn_count_labels __dn_count_labels
#define dn_comp __dn_comp
#define res_randomid __res_randomid
-#define res_send __res_send
#define res_isourserver __res_isourserver
#define res_nameinquery __res_nameinquery
#define res_queriesmatch __res_queriesmatch
@@ -240,6 +239,7 @@ extern const struct res_sym __p_type_syms[];
#define res_search __res_search
#define res_querydomain __res_querydomain
#define res_mkquery __res_mkquery
+#define res_send __res_send
#endif
__BEGIN_DECLS
diff --git a/usr.sbin/named/libresolv/gethnamaddr.c b/usr.sbin/named/libresolv/gethnamaddr.c
index aa93b257643..e60164b728d 100644
--- a/usr.sbin/named/libresolv/gethnamaddr.c
+++ b/usr.sbin/named/libresolv/gethnamaddr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: gethnamaddr.c,v 1.1 1997/03/12 10:42:02 downsj Exp $ */
+/* $OpenBSD: gethnamaddr.c,v 1.2 1998/05/22 00:47:18 millert Exp $ */
/*
* ++Copyright++ 1985, 1988, 1993
@@ -58,9 +58,9 @@
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char sccsid[] = "@(#)gethostnamadr.c 8.1 (Berkeley) 6/4/93";
-static char rcsid[] = "$From: gethnamaddr.c,v 8.20 1996/09/28 06:51:07 vixie Exp $";
+static char rcsid[] = "$From: gethnamaddr.c,v 8.21 1997/06/01 20:34:37 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: gethnamaddr.c,v 1.1 1997/03/12 10:42:02 downsj Exp $";
+static char rcsid[] = "$OpenBSD: gethnamaddr.c,v 1.2 1998/05/22 00:47:18 millert Exp $";
#endif
#endif /* LIBC_SCCS and not lint */
@@ -216,6 +216,10 @@ getanswer(answer, anslen, qname, qtype)
* (i.e., with the succeeding search-domain tacked on).
*/
n = strlen(bp) + 1; /* for the \0 */
+ if (n >= MAXHOSTNAMELEN) {
+ h_errno = NO_RECOVERY;
+ return (NULL);
+ }
host.h_name = bp;
bp += n;
buflen -= n;
@@ -260,11 +264,15 @@ getanswer(answer, anslen, qname, qtype)
/* Store alias. */
*ap++ = bp;
n = strlen(bp) + 1; /* for the \0 */
+ if (n >= MAXHOSTNAMELEN) {
+ had_error++;
+ continue;
+ }
bp += n;
buflen -= n;
/* Get canonical name. */
n = strlen(tbuf) + 1; /* for the \0 */
- if (n > buflen) {
+ if (n > buflen || n >= MAXHOSTNAMELEN) {
had_error++;
continue;
}
@@ -276,14 +284,14 @@ getanswer(answer, anslen, qname, qtype)
}
if (qtype == T_PTR && type == T_CNAME) {
n = dn_expand(answer->buf, eom, cp, tbuf, sizeof tbuf);
- if ((n < 0) || !res_hnok(tbuf)) {
+ if (n < 0 || !res_dnok(tbuf)) {
had_error++;
continue;
}
cp += n;
/* Get canonical name. */
n = strlen(tbuf) + 1; /* for the \0 */
- if (n > buflen) {
+ if (n > buflen || n >= MAXHOSTNAMELEN) {
had_error++;
continue;
}
@@ -324,6 +332,10 @@ getanswer(answer, anslen, qname, qtype)
n = -1;
if (n != -1) {
n = strlen(bp) + 1; /* for the \0 */
+ if (n >= MAXHOSTNAMELEN) {
+ had_error++;
+ break;
+ }
bp += n;
buflen -= n;
}
@@ -332,6 +344,10 @@ getanswer(answer, anslen, qname, qtype)
host.h_name = bp;
if (_res.options & RES_USE_INET6) {
n = strlen(bp) + 1; /* for the \0 */
+ if (n >= MAXHOSTNAMELEN) {
+ had_error++;
+ break;
+ }
bp += n;
buflen -= n;
map_v4v6_hostent(&host, &bp, &buflen);
@@ -399,8 +415,8 @@ getanswer(answer, anslen, qname, qtype)
# endif /*RESOLVSORT*/
if (!host.h_name) {
n = strlen(qname) + 1; /* for the \0 */
- if (n > buflen)
- goto try_again;
+ if (n > buflen || n >= MAXHOSTNAMELEN)
+ goto no_recovery;
strcpy(bp, qname);
host.h_name = bp;
bp += n;
@@ -411,8 +427,8 @@ getanswer(answer, anslen, qname, qtype)
h_errno = NETDB_SUCCESS;
return (&host);
}
- try_again:
- h_errno = TRY_AGAIN;
+ no_recovery:
+ h_errno = NO_RECOVERY;
return (NULL);
}
@@ -512,7 +528,8 @@ gethostbyname2(name, af)
if (!isdigit(*cp) && *cp != '.')
break;
}
- if (isxdigit(name[0]) || name[0] == ':')
+ if ((isxdigit(name[0]) && strchr(name, ':') != NULL) ||
+ name[0] == ':')
for (cp = name;; ++cp) {
if (!*cp) {
if (*--cp == '.')
@@ -721,8 +738,7 @@ _gethtent()
if (!(cp = strpbrk(p, " \t")))
goto again;
*cp++ = '\0';
- if ((_res.options & RES_USE_INET6) &&
- inet_pton(AF_INET6, p, host_addr) > 0) {
+ if (inet_pton(AF_INET6, p, host_addr) > 0) {
af = AF_INET6;
len = IN6ADDRSZ;
} else if (inet_pton(AF_INET, p, host_addr) > 0) {
@@ -759,12 +775,6 @@ _gethtent()
*cp++ = '\0';
}
*q = NULL;
- if (_res.options & RES_USE_INET6) {
- char *bp = hostbuf;
- int buflen = sizeof hostbuf;
-
- map_v4v6_hostent(&host, &bp, &buflen);
- }
h_errno = NETDB_SUCCESS;
return (&host);
}
diff --git a/usr.sbin/named/libresolv/getnetent.c b/usr.sbin/named/libresolv/getnetent.c
index b80ada5f94b..96b0e648773 100644
--- a/usr.sbin/named/libresolv/getnetent.c
+++ b/usr.sbin/named/libresolv/getnetent.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getnetent.c,v 1.1 1997/03/12 10:42:03 downsj Exp $ */
+/* $OpenBSD: getnetent.c,v 1.2 1998/05/22 00:47:19 millert Exp $ */
/*
* Copyright (c) 1983 Regents of the University of California.
@@ -46,9 +46,9 @@
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char sccsid[] = "@(#)getnetent.c 8.1 (Berkeley) 6/4/93";
-static char rcsid[] = "$From: getnetent.c,v 8.3 1996/08/05 08:31:35 vixie Exp $";
+static char rcsid[] = "$From: getnetent.c,v 8.4 1997/06/01 20:34:37 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: getnetent.c,v 1.1 1997/03/12 10:42:03 downsj Exp $";
+static char rcsid[] = "$OpenBSD: getnetent.c,v 1.2 1998/05/22 00:47:19 millert Exp $";
#endif
#endif /* LIBC_SCCS and not lint */
@@ -128,7 +128,7 @@ getnetent()
if (netf == NULL && (netf = fopen(_PATH_NETWORKS, "r" )) == NULL)
return (NULL);
again:
- p = fgets(line, BUFSIZ, netf);
+ p = fgets(line, sizeof line, netf);
if (p == NULL)
return (NULL);
if (*p == '#')
diff --git a/usr.sbin/named/libresolv/getnetnamadr.c b/usr.sbin/named/libresolv/getnetnamadr.c
index 924bbb1dbb1..5ed407d6d5c 100644
--- a/usr.sbin/named/libresolv/getnetnamadr.c
+++ b/usr.sbin/named/libresolv/getnetnamadr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getnetnamadr.c,v 1.1 1997/03/12 10:42:04 downsj Exp $ */
+/* $OpenBSD: getnetnamadr.c,v 1.2 1998/05/22 00:47:20 millert Exp $ */
/* Copyright (c) 1993 Carlos Leandro and Rui Salgueiro
* Dep. Matematica Universidade de Coimbra, Portugal, Europe
@@ -44,9 +44,9 @@
#if 0
static char sccsid[] = "@(#)getnetbyaddr.c 8.1 (Berkeley) 6/4/93";
static char sccsid_[] = "from getnetnamadr.c 1.4 (Coimbra) 93/06/03";
-static char rcsid[] = "$From: getnetnamadr.c,v 8.7 1996/08/05 08:31:35 vixie Exp $";
+static char rcsid[] = "$From: getnetnamadr.c,v 8.8 1997/06/01 20:34:37 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: getnetnamadr.c,v 1.1 1997/03/12 10:42:04 downsj Exp $";
+static char rcsid[] = "$OpenBSD: getnetnamadr.c,v 1.2 1998/05/22 00:47:20 millert Exp $";
#endif
#endif /* LIBC_SCCS and not lint */
@@ -108,7 +108,7 @@ getnetanswer(answer, anslen, net_i)
char aux1[30], aux2[30], ans[30], *in, *st, *pauxt, *bp, **ap,
*paux1 = &aux1[0], *paux2 = &aux2[0], flag = 0;
static struct netent net_entry;
-static char *net_aliases[MAXALIASES], netbuf[BUFSIZ+1];
+static char *net_aliases[MAXALIASES], netbuf[PACKETSZ];
/*
* find first satisfactory answer
diff --git a/usr.sbin/named/libresolv/res_comp.c b/usr.sbin/named/libresolv/res_comp.c
index a40c00763da..1f71dd70105 100644
--- a/usr.sbin/named/libresolv/res_comp.c
+++ b/usr.sbin/named/libresolv/res_comp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: res_comp.c,v 1.1 1997/03/12 10:42:08 downsj Exp $ */
+/* $OpenBSD: res_comp.c,v 1.2 1998/05/22 00:47:21 millert Exp $ */
/*
* ++Copyright++ 1985, 1993
@@ -58,9 +58,9 @@
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char sccsid[] = "@(#)res_comp.c 8.1 (Berkeley) 6/4/93";
-static char rcsid[] = "$From: res_comp.c,v 8.11 1996/12/02 09:17:22 vixie Exp $";
+static char rcsid[] = "$From: res_comp.c,v 8.12 1997/06/01 20:34:37 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: res_comp.c,v 1.1 1997/03/12 10:42:08 downsj Exp $";
+static char rcsid[] = "$OpenBSD: res_comp.c,v 1.2 1998/05/22 00:47:21 millert Exp $";
#endif
#endif /* LIBC_SCCS and not lint */
@@ -100,7 +100,7 @@ dn_expand(msg, eomorig, comp_dn, exp_dn, length)
register char *dn;
register int n, c;
char *eom;
- int len = -1, checked = 0;
+ int len = -1, checked = 0, octets = 0;
dn = exp_dn;
cp = comp_dn;
@@ -114,6 +114,9 @@ dn_expand(msg, eomorig, comp_dn, exp_dn, length)
*/
switch (n & INDIR_MASK) {
case 0:
+ octets += (n + 1);
+ if (octets > MAXCDNAME)
+ return (-1);
if (dn != exp_dn) {
if (dn >= eom)
return (-1);
@@ -185,6 +188,8 @@ dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr)
dn = (u_char *)exp_dn;
cp = comp_dn;
+ if (length > MAXCDNAME)
+ length = MAXCDNAME;
eob = cp + length;
lpp = cpp = NULL;
if (dnptrs != NULL) {
diff --git a/usr.sbin/named/libresolv/res_debug.c b/usr.sbin/named/libresolv/res_debug.c
index ffce419c111..e09e12fb379 100644
--- a/usr.sbin/named/libresolv/res_debug.c
+++ b/usr.sbin/named/libresolv/res_debug.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: res_debug.c,v 1.1 1997/03/12 10:42:09 downsj Exp $ */
+/* $OpenBSD: res_debug.c,v 1.2 1998/05/22 00:47:22 millert Exp $ */
/*
* ++Copyright++ 1985, 1990, 1993
@@ -80,9 +80,9 @@
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93";
-static char rcsid[] = "$From: res_debug.c,v 8.19 1996/11/26 10:11:23 vixie Exp $";
+static char rcsid[] = "$From: res_debug.c,v 8.20 1997/06/01 20:34:37 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: res_debug.c,v 1.1 1997/03/12 10:42:09 downsj Exp $";
+static char rcsid[] = "$OpenBSD: res_debug.c,v 1.2 1998/05/22 00:47:22 millert Exp $";
#endif
#endif /* LIBC_SCCS and not lint */
@@ -1136,40 +1136,47 @@ static u_int8_t
precsize_aton(strptr)
char **strptr;
{
- unsigned int mval = 0, cmval = 0;
u_int8_t retval = 0;
- register char *cp;
- register int exponent;
- register int mantissa;
+ char *cp;
+ int exponent = 0;
+ int mantissa = 0;
cp = *strptr;
+ while (isdigit(*cp)) {
+ if (mantissa == 0)
+ mantissa = *cp - '0';
+ else
+ exponent++;
+ cp++;
+ }
- while (isdigit(*cp))
- mval = mval * 10 + (*cp++ - '0');
-
- if (*cp == '.') { /* centimeters */
+ if (*cp == '.') {
cp++;
if (isdigit(*cp)) {
- cmval = (*cp++ - '0') * 10;
+ if (mantissa == 0)
+ mantissa = *cp - '0';
+ else
+ exponent++;
+ cp++;
+
if (isdigit(*cp)) {
- cmval += (*cp++ - '0');
+ if (mantissa == 0)
+ mantissa = *cp - '0';
+ else
+ exponent++;
+ cp++;
}
+ else
+ exponent++;
}
}
- cmval = (mval * 100) + cmval;
-
- for (exponent = 0; exponent < 9; exponent++)
- if (cmval < poweroften[exponent+1])
- break;
-
- mantissa = cmval / poweroften[exponent];
- if (mantissa > 9)
- mantissa = 9;
+ else
+ exponent += 2;
+ if (mantissa == 0)
+ exponent = 0;
retval = (mantissa << 4) | exponent;
-
*strptr = cp;
-
return (retval);
}
diff --git a/usr.sbin/named/libresolv/res_init.c b/usr.sbin/named/libresolv/res_init.c
index c128e346290..8629d5370e9 100644
--- a/usr.sbin/named/libresolv/res_init.c
+++ b/usr.sbin/named/libresolv/res_init.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: res_init.c,v 1.2 1997/03/14 03:40:33 downsj Exp $ */
+/* $OpenBSD: res_init.c,v 1.3 1998/05/22 00:47:24 millert Exp $ */
/*
* ++Copyright++ 1985, 1989, 1993
@@ -58,9 +58,9 @@
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char sccsid[] = "@(#)res_init.c 8.1 (Berkeley) 6/7/93";
-static char rcsid[] = "$From: res_init.c,v 8.7 1996/09/28 06:51:07 vixie Exp $";
+static char rcsid[] = "$From: res_init.c,v 8.8 1997/06/01 20:34:37 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: res_init.c,v 1.2 1997/03/14 03:40:33 downsj Exp $";
+static char rcsid[] = "$OpenBSD: res_init.c,v 1.3 1998/05/22 00:47:24 millert Exp $";
#endif
#endif /* LIBC_SCCS and not lint */
@@ -165,7 +165,7 @@ res_init()
register FILE *fp;
register char *cp, **pp;
register int n;
- char buf[BUFSIZ];
+ char buf[MAXDNAME];
int nserv = 0; /* number of nameserver records read from file */
int haveenv = 0;
int havesearch = 0;
@@ -438,7 +438,6 @@ res_init()
return (0);
}
-/* ARGSUSED */
static void
res_setoptions(options, source)
char *options, *source;
diff --git a/usr.sbin/named/libresolv/res_query.c b/usr.sbin/named/libresolv/res_query.c
index 852572b1bec..ad91c0374c2 100644
--- a/usr.sbin/named/libresolv/res_query.c
+++ b/usr.sbin/named/libresolv/res_query.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: res_query.c,v 1.2 1997/03/14 03:40:34 downsj Exp $ */
+/* $OpenBSD: res_query.c,v 1.3 1998/05/22 00:47:25 millert Exp $ */
/*
* ++Copyright++ 1988, 1993
@@ -58,9 +58,9 @@
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char sccsid[] = "@(#)res_query.c 8.1 (Berkeley) 6/4/93";
-static char rcsid[] = "$From: res_query.c,v 8.9 1996/09/22 00:13:28 vixie Exp $";
+static char rcsid[] = "$From: res_query.c,v 8.10 1997/06/01 20:34:37 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: res_query.c,v 1.2 1997/03/14 03:40:34 downsj Exp $";
+static char rcsid[] = "$OpenBSD: res_query.c,v 1.3 1998/05/22 00:47:25 millert Exp $";
#endif
#endif /* LIBC_SCCS and not lint */
@@ -329,7 +329,7 @@ res_querydomain(name, domain, class, type, answer, anslen)
{
char nbuf[MAXDNAME];
const char *longname = nbuf;
- int n;
+ int n, d;
if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
h_errno = NETDB_INTERNAL;
@@ -345,15 +345,26 @@ res_querydomain(name, domain, class, type, answer, anslen)
* Check for trailing '.';
* copy without '.' if present.
*/
- n = strlen(name) - 1;
- if (n != (0 - 1) && name[n] == '.' && n < sizeof(nbuf) - 1) {
- bcopy(name, nbuf, n);
+ n = strlen(name);
+ if (n >= MAXDNAME) {
+ h_errno = NO_RECOVERY;
+ return (-1);
+ }
+ n--;
+ if (n >= 0 && name[n] == '.') {
+ strncpy(nbuf, name, n);
nbuf[n] = '\0';
} else
longname = name;
- } else
- sprintf(nbuf, "%.*s.%.*s", MAXDNAME, name, MAXDNAME, domain);
-
+ } else {
+ n = strlen(name);
+ d = strlen(domain);
+ if (n + d + 1 >= MAXDNAME) {
+ h_errno = NO_RECOVERY;
+ return (-1);
+ }
+ sprintf(nbuf, "%s.%s", name, domain);
+ }
return (res_query(longname, class, type, answer, anslen));
}
@@ -387,8 +398,8 @@ hostalias(name)
break;
for (cp2 = cp1 + 1; *cp2 && !isspace(*cp2); ++cp2)
;
- strncpy(abuf, cp1, sizeof(abuf) - 1);
abuf[sizeof(abuf) - 1] = *cp2 = '\0';
+ strncpy(abuf, cp1, sizeof(abuf) - 1);
fclose(fp);
return (abuf);
}
diff --git a/usr.sbin/named/libresolv/res_send.c b/usr.sbin/named/libresolv/res_send.c
index 437477a3306..436bb8cb9d6 100644
--- a/usr.sbin/named/libresolv/res_send.c
+++ b/usr.sbin/named/libresolv/res_send.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: res_send.c,v 1.1 1997/03/12 10:42:11 downsj Exp $ */
+/* $OpenBSD: res_send.c,v 1.2 1998/05/22 00:47:26 millert Exp $ */
/*
* ++Copyright++ 1985, 1989, 1993
@@ -58,9 +58,9 @@
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char sccsid[] = "@(#)res_send.c 8.1 (Berkeley) 6/4/93";
-static char rcsid[] = "$From: res_send.c,v 8.12 1996/10/08 04:51:06 vixie Exp $";
+static char rcsid[] = "$From: res_send.c,v 8.13 1997/06/01 20:34:37 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: res_send.c,v 1.1 1997/03/12 10:42:11 downsj Exp $";
+static char rcsid[] = "$OpenBSD: res_send.c,v 1.2 1998/05/22 00:47:26 millert Exp $";
#endif
#endif /* LIBC_SCCS and not lint */
@@ -607,7 +607,14 @@ read_len:
if ((long) timeout.tv_sec <= 0)
timeout.tv_sec = 1;
timeout.tv_usec = 0;
+ /* XXX - kernel can deal with > FD_SETSIZE */
+ if (s+1 > FD_SETSIZE) {
+ Perror(stderr, "s+1 > FD_SETSIZE", EMFILE);
+ res_close();
+ goto next_ns;
+ }
wait:
+ /* XXX - kernel can deal with > FD_SETSIZE */
FD_ZERO(&dsmask);
FD_SET(s, &dsmask);
n = select(s+1, &dsmask, (fd_set *)NULL,
diff --git a/usr.sbin/named/man/dig.1 b/usr.sbin/named/man/dig.1
index eb897404005..ae591d0882f 100644
--- a/usr.sbin/named/man/dig.1
+++ b/usr.sbin/named/man/dig.1
@@ -1,5 +1,5 @@
-.\" $OpenBSD: dig.1,v 1.5 1998/03/16 11:02:03 d Exp $
-.\" $From: dig.1,v 8.1 1994/12/15 06:24:10 vixie Exp $
+.\" $OpenBSD: dig.1,v 1.6 1998/05/22 00:47:27 millert Exp $
+.\" $From: dig.1,v 8.2 1997/06/01 20:34:33 vixie Exp $
.\"
.\" ++Copyright++ 1993
.\" -
diff --git a/usr.sbin/named/named/Makefile b/usr.sbin/named/named/Makefile
index 54a0ddfb8f3..debd0c37640 100644
--- a/usr.sbin/named/named/Makefile
+++ b/usr.sbin/named/named/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.2 1997/03/12 10:42:20 downsj Exp $
+# $OpenBSD: Makefile,v 1.3 1998/05/22 00:47:29 millert Exp $
# $NetBSD: Makefile,v 1.1 1996/02/02 15:28:00 mrg Exp $
# from: $Id: Makefile,v 8.1 1994/12/15 06:23:45 vixie Exp
@@ -15,7 +15,9 @@ CFLAGS+=${INCLUDE} ${CONFIG}
LDADD= ${LIBRESOLV}
makeversionc:
- (sed -e "s|%VERSION%|${VER}|" \
+ (u=root d=`pwd` h=localhost t=`date +%c`; \
+ sed -e "s|%WHEN%|$${t}|" -e "s|%VERSION%|"${VER}"|" \
+ -e "s|%WHOANDWHERE%|$${u}@$${h}:$${d}|" \
< ${.CURDIR}/Version.c > ${.CURDIR}/version.c)
.include <bsd.prog.mk>
diff --git a/usr.sbin/named/named/Version.c b/usr.sbin/named/named/Version.c
index 5170d4fbd6e..043336d91c5 100644
--- a/usr.sbin/named/named/Version.c
+++ b/usr.sbin/named/named/Version.c
@@ -1,20 +1,21 @@
-/* $OpenBSD: Version.c,v 1.2 1997/03/12 10:42:20 downsj Exp $ */
+/* $OpenBSD: Version.c,v 1.3 1998/05/22 00:47:30 millert Exp $ */
/*
* @(#)Version.c 4.9 (Berkeley) 7/21/90
- * $From: Version.c,v 8.1 1994/12/15 06:24:14 vixie Exp $
+ * $From: Version.c,v 8.2 1997/06/01 20:34:34 vixie Exp $
*/
#ifndef lint
#if 0
-char sccsid[] = "@(#)named %VERSION%";
-char rcsid[] = "$From: Version.c,v 8.1 1994/12/15 06:24:14 vixie Exp $";
+char sccsid[] = "@(#)named %VERSION% %WHEN% %WHOANDWHERE%";
+char rcsid[] = "$From: Version.c,v 8.2 1997/06/01 20:34:34 vixie Exp $";
#else
-char rcsid[] = "$OpenBSD: Version.c,v 1.2 1997/03/12 10:42:20 downsj Exp $";
+char rcsid[] = "$OpenBSD: Version.c,v 1.3 1998/05/22 00:47:30 millert Exp $";
#endif
#endif /* not lint */
-char Version[] = "named %VERSION%";
+char Version[] = "named %VERSION% %WHEN%\n\t%WHOANDWHERE%";
+char ShortVersion[] = "%VERSION%";
#ifdef COMMENT
diff --git a/usr.sbin/named/named/db_defs.h b/usr.sbin/named/named/db_defs.h
index 75dfee0dc0b..50a7568c959 100644
--- a/usr.sbin/named/named/db_defs.h
+++ b/usr.sbin/named/named/db_defs.h
@@ -1,8 +1,8 @@
-/* $OpenBSD: db_defs.h,v 1.2 1997/03/12 10:42:21 downsj Exp $ */
+/* $OpenBSD: db_defs.h,v 1.3 1998/05/22 00:47:31 millert Exp $ */
/*
* from db.h 4.16 (Berkeley) 6/1/90
- * $From: db_defs.h,v 8.5 1996/08/27 08:33:23 vixie Exp $
+ * $From: db_defs.h,v 8.6 1997/06/01 20:34:34 vixie Exp $
*/
/*
@@ -78,6 +78,9 @@
*/
struct databuf {
struct databuf *d_next; /* linked list */
+#ifdef STATS
+ struct nameser *d_ns; /* NS from whence this came */
+#endif
u_int32_t d_ttl; /* time to live */
/* if d_zone == DB_Z_CACHE, then
* d_ttl is actually the time when
@@ -93,13 +96,10 @@ struct databuf {
int16_t d_class; /* class number */
int16_t d_type; /* type number */
int16_t d_size; /* size of data area */
+ u_int32_t d_rcnt;
#ifdef NCACHE
unsigned d_rcode :4; /* rcode added for negative caching */
#endif
- unsigned d_rcnt :12;
-#ifdef STATS
- struct nameser *d_ns; /* NS from whence this came */
-#endif
u_int16_t d_nstime; /* NS response time, milliseconds */
u_char d_data[sizeof(char*)]; /* malloc'd (padded) */
};
diff --git a/usr.sbin/named/named/db_func.h b/usr.sbin/named/named/db_func.h
index bb5b8956748..43486481f1b 100644
--- a/usr.sbin/named/named/db_func.h
+++ b/usr.sbin/named/named/db_func.h
@@ -1,8 +1,8 @@
-/* $OpenBSD: db_func.h,v 1.2 1997/03/12 10:42:22 downsj Exp $ */
+/* $OpenBSD: db_func.h,v 1.3 1998/05/22 00:47:32 millert Exp $ */
/* db_proc.h - prototypes for functions in db_*.c
*
- * $From: db_func.h,v 8.12 1996/09/22 00:13:10 vixie Exp $
+ * $From: db_func.h,v 8.13 1997/06/01 20:34:34 vixie Exp $
*/
/* ++from db_update.c++ */
@@ -13,6 +13,7 @@ extern int db_update __P((char name[],
struct hashbuf *htp)),
db_cmp __P((struct databuf *,struct databuf *)),
findMyZone __P((struct namebuf *np, int class));
+extern void fixttl __P((struct databuf *dp));
/* --from db_update.c-- */
/* ++from db_reload.c++ */
diff --git a/usr.sbin/named/named/db_load.c b/usr.sbin/named/named/db_load.c
index 6e0d9463dfb..1a777a45909 100644
--- a/usr.sbin/named/named/db_load.c
+++ b/usr.sbin/named/named/db_load.c
@@ -1,11 +1,11 @@
-/* $OpenBSD: db_load.c,v 1.3 1997/04/27 23:09:43 deraadt Exp $ */
+/* $OpenBSD: db_load.c,v 1.4 1998/05/22 00:47:33 millert Exp $ */
#if !defined(lint) && !defined(SABER)
#if 0
static char sccsid[] = "@(#)db_load.c 4.38 (Berkeley) 3/2/91";
-static char rcsid[] = "$From: db_load.c,v 8.31 1996/12/18 04:09:48 vixie Exp $";
+static char rcsid[] = "$From: db_load.c,v 8.32 1997/06/01 20:34:34 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: db_load.c,v 1.3 1997/04/27 23:09:43 deraadt Exp $";
+static char rcsid[] = "$OpenBSD: db_load.c,v 1.4 1998/05/22 00:47:33 millert Exp $";
#endif
#endif /* not lint */
@@ -329,6 +329,13 @@ db_load(filename, in_origin, zp, def_domain)
n = n * 10 + (*cp++ - '0');
}
while (isdigit(*cp));
+ if (*cp != '\0') {
+ errs++;
+ syslog(LOG_INFO,
+ "%s: Line %d: bad TTL: %s.\n",
+ filename, lineno, buf);
+ break;
+ }
if (zp->z_type == Z_CACHE) {
/* this allows the cache entry to age */
/* while sitting on disk (powered off) */
@@ -1994,7 +2001,7 @@ get_netlist(fp, netlistp, allow, print_tag)
char *print_tag;
{
struct netinfo *ntp, **end;
- char buf[BUFSIZ], *maskp;
+ char buf[MAXDNAME], *maskp;
struct in_addr ina;
for (end = netlistp; *end; end = &(**end).next)
diff --git a/usr.sbin/named/named/db_lookup.c b/usr.sbin/named/named/db_lookup.c
index e1fed218445..500eaebd35c 100644
--- a/usr.sbin/named/named/db_lookup.c
+++ b/usr.sbin/named/named/db_lookup.c
@@ -1,11 +1,11 @@
-/* $OpenBSD: db_lookup.c,v 1.2 1997/03/12 10:42:24 downsj Exp $ */
+/* $OpenBSD: db_lookup.c,v 1.3 1998/05/22 00:47:34 millert Exp $ */
#if !defined(lint) && !defined(SABER)
#if 0
static char sccsid[] = "@(#)db_lookup.c 4.18 (Berkeley) 3/21/91";
-static char rcsid[] = "$Id: db_lookup.c,v 1.2 1997/03/12 10:42:24 downsj Exp $";
+static char rcsid[] = "$From: db_lookup.c,v 8.9 1996/09/22 00:13:10 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: db_lookup.c,v 1.2 1997/03/12 10:42:24 downsj Exp $";
+static char rcsid[] = "$OpenBSD: db_lookup.c,v 1.3 1998/05/22 00:47:34 millert Exp $";
#endif
#endif /* not lint */
diff --git a/usr.sbin/named/named/db_secure.c b/usr.sbin/named/named/db_secure.c
index fd3a4e7e774..2cc7c065feb 100644
--- a/usr.sbin/named/named/db_secure.c
+++ b/usr.sbin/named/named/db_secure.c
@@ -1,10 +1,10 @@
-/* $OpenBSD: db_secure.c,v 1.2 1997/03/12 10:42:25 downsj Exp $ */
+/* $OpenBSD: db_secure.c,v 1.3 1998/05/22 00:47:36 millert Exp $ */
#ifndef LINT
#if 0
static char rcsid[] = "$From: db_secure.c,v 8.6 1996/05/17 09:10:46 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: db_secure.c,v 1.2 1997/03/12 10:42:25 downsj Exp $";
+static char rcsid[] = "$OpenBSD: db_secure.c,v 1.3 1998/05/22 00:47:36 millert Exp $";
#endif
#endif
@@ -35,7 +35,7 @@ build_secure_netlist(zp)
struct zoneinfo *zp;
{
struct netinfo *ntp = NULL, **netlistp, **end;
- char buf[BUFSIZ];
+ char buf[MAXDNAME];
struct hashbuf *htp;
struct namebuf *snp;
struct databuf *dp;
@@ -71,7 +71,7 @@ build_secure_netlist(zp)
continue;
}
bzero(buf, sizeof(buf));
- bcopy(dp->d_data+1, buf, dp->d_size-1);
+ bcopy(dp->d_data+1, buf, MIN(dp->d_size, sizeof(buf))-1);
maskptr=strchr(buf, MASK_SEP);
if (maskptr) {
*maskptr++ = 0;
diff --git a/usr.sbin/named/named/db_update.c b/usr.sbin/named/named/db_update.c
index bd4d6464330..a34e3210535 100644
--- a/usr.sbin/named/named/db_update.c
+++ b/usr.sbin/named/named/db_update.c
@@ -1,11 +1,11 @@
-/* $OpenBSD: db_update.c,v 1.2 1997/03/12 10:42:26 downsj Exp $ */
+/* $OpenBSD: db_update.c,v 1.3 1998/05/22 00:47:37 millert Exp $ */
#if !defined(lint) && !defined(SABER)
#if 0
static char sccsid[] = "@(#)db_update.c 4.28 (Berkeley) 3/21/91";
-static char rcsid[] = "$From: db_update.c,v 8.18 1996/10/08 04:51:03 vixie Exp $";
+static char rcsid[] = "$From: db_update.c,v 8.19 1997/06/01 20:34:34 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: db_update.c,v 1.2 1997/03/12 10:42:26 downsj Exp $";
+static char rcsid[] = "$OpenBSD: db_update.c,v 1.3 1998/05/22 00:47:37 millert Exp $";
#endif
#endif /* not lint */
@@ -77,8 +77,6 @@ static char rcsid[] = "$OpenBSD: db_update.c,v 1.2 1997/03/12 10:42:26 downsj Ex
#include "named.h"
-static void fixttl __P((struct databuf *));
-
/* int
* isRefByNS(name, htp)
* recurse through all of `htp' looking for NS RR's that refer to `name'.
@@ -643,7 +641,7 @@ db_update(name, odp, newdp, flags, htp)
return (OK);
}
-static void
+void
fixttl(dp)
register struct databuf *dp;
{
diff --git a/usr.sbin/named/named/ns_forw.c b/usr.sbin/named/named/ns_forw.c
index 7a41cde8a6d..c3d30749d46 100644
--- a/usr.sbin/named/named/ns_forw.c
+++ b/usr.sbin/named/named/ns_forw.c
@@ -1,11 +1,11 @@
-/* $OpenBSD: ns_forw.c,v 1.3 1997/04/27 23:09:43 deraadt Exp $ */
+/* $OpenBSD: ns_forw.c,v 1.4 1998/05/22 00:47:38 millert Exp $ */
#if !defined(lint) && !defined(SABER)
#if 0
static char sccsid[] = "@(#)ns_forw.c 4.32 (Berkeley) 3/3/91";
static char rcsid[] = "$From: ns_forw.c,v 8.19 1996/12/02 09:27:36 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: ns_forw.c,v 1.3 1997/04/27 23:09:43 deraadt Exp $";
+static char rcsid[] = "$OpenBSD: ns_forw.c,v 1.4 1998/05/22 00:47:38 millert Exp $";
#endif
#endif /* not lint */
@@ -567,6 +567,13 @@ nslookup(nsp, qp, syslogdname, sysloginfo)
qs->nsdata = dp;
qs->nretry = 0;
/*
+ * If this A RR has no RTT, initialize its RTT to a
+ * small random value.
+ */
+ if (dp->d_nstime == 0)
+ dp->d_nstime = 1 +
+ (int)(25.0*rand()/(RAND_MAX + 1.0));
+ /*
* if we are being asked to fwd a query whose
* nameserver list includes our own name/address(es),
* then we have detected a lame delegation and rather
diff --git a/usr.sbin/named/named/ns_glob.h b/usr.sbin/named/named/ns_glob.h
index e67df41024f..87eaed92a68 100644
--- a/usr.sbin/named/named/ns_glob.h
+++ b/usr.sbin/named/named/ns_glob.h
@@ -1,8 +1,8 @@
-/* $OpenBSD: ns_glob.h,v 1.2 1997/03/12 10:42:30 downsj Exp $ */
+/* $OpenBSD: ns_glob.h,v 1.3 1998/05/22 00:47:39 millert Exp $ */
/*
* from ns.h 4.33 (Berkeley) 8/23/90
- * $From: ns_glob.h,v 8.11 1996/11/11 06:36:49 vixie Exp $
+ * $From: ns_glob.h,v 8.12 1997/06/01 20:34:34 vixie Exp $
*/
/*
@@ -250,6 +250,7 @@ DECL const char sendtoStr[] INIT("sendto");
/* defined in version.c, can't use DECL/INIT */
extern char Version[];
+extern char ShortVersion[];
/* max value of xfers_running */
DECL int max_xfers_running INIT(MAX_XFERS_RUNNING);
diff --git a/usr.sbin/named/named/ns_init.c b/usr.sbin/named/named/ns_init.c
index 7f87972bea5..316702df4dd 100644
--- a/usr.sbin/named/named/ns_init.c
+++ b/usr.sbin/named/named/ns_init.c
@@ -1,11 +1,11 @@
-/* $OpenBSD: ns_init.c,v 1.4 1997/06/10 20:04:34 deraadt Exp $ */
+/* $OpenBSD: ns_init.c,v 1.5 1998/05/22 00:47:40 millert Exp $ */
#if !defined(lint) && !defined(SABER)
#if 0
static char sccsid[] = "@(#)ns_init.c 4.38 (Berkeley) 3/21/91";
-static char rcsid[] = "$From: ns_init.c,v 8.24 1996/12/02 09:17:21 vixie Exp $";
+static char rcsid[] = "$From: ns_init.c,v 8.25 1997/06/01 20:34:34 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: ns_init.c,v 1.4 1997/06/10 20:04:34 deraadt Exp $";
+static char rcsid[] = "$OpenBSD: ns_init.c,v 1.5 1998/05/22 00:47:40 millert Exp $";
#endif
#endif /* not lint */
@@ -239,7 +239,7 @@ boot_read(filename, includefile)
int includefile;
{
register struct zoneinfo *zp;
- char buf[BUFSIZ], obuf[BUFSIZ], *source;
+ char buf[MAXDNAME], obuf[MAXDNAME], *source;
FILE *fp;
int type;
int class;
@@ -564,7 +564,8 @@ boot_read(filename, includefile)
if (!source) {
/*
* We will always transfer this zone again
- * after a reload.
+ * after a reload. Note that _PATH_TMPDIR
+ * is not writable by normal users on OpenBSD.
*/
sprintf(buf, "%s/NsTmpXXXXXXXXXX",
_PATH_TMPDIR);
@@ -583,21 +584,25 @@ boot_read(filename, includefile)
(strcmp(source, zp->z_source) ||
(stat(zp->z_source, &f_time) == -1 ||
(zp->z_ftime != f_time.st_mtime)))) {
- dprintf(1, (ddt, "backup file changed\n"));
+ dprintf(1, (ddt,
+ "backup file changed or missing\n"));
free(zp->z_source);
zp->z_source = NULL;
- zp->z_flags &= ~Z_AUTH;
zp->z_serial = 0; /* force xfer */
+ if (zp->z_flags & Z_AUTH) {
+ zp->z_flags &= ~Z_AUTH;
#ifdef CLEANCACHE
- remove_zone(hashtab, zp - zones, 1);
+ remove_zone(hashtab, zp - zones, 1);
#else
- remove_zone(hashtab, zp - zones);
+ remove_zone(hashtab, zp - zones);
#endif
- /*
- * reload parent so that NS records are
- * present during the zone transfer.
- */
- do_reload(zp->z_origin, zp->z_type, zp->z_class);
+ /*
+ * reload parent so that NS records are
+ * present during the zone transfer.
+ */
+ do_reload(zp->z_origin, zp->z_type,
+ zp->z_class);
+ }
}
if (zp->z_source)
free(source);
@@ -681,7 +686,7 @@ static void
get_forwarders(fp)
FILE *fp;
{
- char buf[BUFSIZ];
+ char buf[MAXDNAME];
register struct fwdinfo *fip = NULL, *ftp = NULL;
#ifdef SLAVE_FORWARD
diff --git a/usr.sbin/named/named/ns_main.c b/usr.sbin/named/named/ns_main.c
index 27f59ff84e0..c4bcd7b0019 100644
--- a/usr.sbin/named/named/ns_main.c
+++ b/usr.sbin/named/named/ns_main.c
@@ -1,11 +1,11 @@
-/* $OpenBSD: ns_main.c,v 1.10 1998/04/25 14:05:08 d Exp $ */
+/* $OpenBSD: ns_main.c,v 1.11 1998/05/22 00:47:41 millert Exp $ */
#if !defined(lint) && !defined(SABER)
#if 0
static char sccsid[] = "@(#)ns_main.c 4.55 (Berkeley) 7/1/91";
-static char rcsid[] = "$From: ns_main.c,v 8.24 1996/11/26 10:11:22 vixie Exp $";
+static char rcsid[] = "$From: ns_main.c,v 8.25 1997/06/01 20:34:34 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: ns_main.c,v 1.10 1998/04/25 14:05:08 d Exp $";
+static char rcsid[] = "$OpenBSD: ns_main.c,v 1.11 1998/05/22 00:47:41 millert Exp $";
#endif
#endif /* not lint */
@@ -182,7 +182,7 @@ main(argc, argv, envp)
const int on = 1;
int rfd, size, len;
time_t lasttime, maxctime;
- u_char buf[BUFSIZ];
+ u_char buf[PACKETSZ];
#ifdef NeXT
int old_sigmask;
#endif
@@ -873,7 +873,7 @@ main(argc, argv, envp)
malloc(rbufsize))
) {
sp->s_buf = buf;
- sp->s_size = sizeof(buf);
+ sp->s_bufsize=sizeof(buf);
} else {
sp->s_bufsize = rbufsize;
}
@@ -906,6 +906,12 @@ main(argc, argv, envp)
sp->s_bufp += n;
sp->s_size -= n;
}
+
+ if (sp->s_size > 0 &&
+ (n == -1) &&
+ (errno == PORT_WOULDBLK))
+ continue;
+
/*
* we don't have enough memory for the query.
* if we have a query id, then we will send an
@@ -926,8 +932,10 @@ main(argc, argv, envp)
(void) writemsg(sp->s_rfd, sp->s_buf,
HFIXEDSZ);
}
+ sqrm(sp);
continue;
}
+
/*
* If the message is too short to contain a valid
* header, try to send back an error, and drop the
@@ -948,10 +956,9 @@ main(argc, argv, envp)
(void) writemsg(sp->s_rfd, sp->s_buf,
HFIXEDSZ);
}
+ sqrm(sp);
continue;
}
- if ((n == -1) && (errno == PORT_WOULDBLK))
- continue;
if (n <= 0) {
sqrm(sp);
continue;
diff --git a/usr.sbin/named/named/ns_ncache.c b/usr.sbin/named/named/ns_ncache.c
index f9d84c57d32..c55335d988a 100644
--- a/usr.sbin/named/named/ns_ncache.c
+++ b/usr.sbin/named/named/ns_ncache.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ns_ncache.c,v 1.2 1997/03/12 10:42:32 downsj Exp $ */
+/* $OpenBSD: ns_ncache.c,v 1.3 1998/05/22 00:47:42 millert Exp $ */
/**************************************************************************
* ns_ncache.c
@@ -71,7 +71,7 @@ cache_n_resp(msg, msglen)
u_int16_t atype;
u_char *tp = cp;
u_char *cp1;
- u_char data[BUFSIZ+MAXDNAME];
+ u_char data[MAXDNAME*2 + INT32SZ*5];
size_t len = sizeof data;
/* we store NXDOMAIN as T_SOA regardless of the query type */
diff --git a/usr.sbin/named/named/ns_req.c b/usr.sbin/named/named/ns_req.c
index 1d5c8c0d257..038aa86dc9a 100644
--- a/usr.sbin/named/named/ns_req.c
+++ b/usr.sbin/named/named/ns_req.c
@@ -1,11 +1,11 @@
-/* $OpenBSD: ns_req.c,v 1.4 1998/03/31 00:16:30 deraadt Exp $ */
+/* $OpenBSD: ns_req.c,v 1.5 1998/05/22 00:47:44 millert Exp $ */
#if !defined(lint) && !defined(SABER)
#if 0
static char sccsid[] = "@(#)ns_req.c 4.47 (Berkeley) 7/1/91";
-static char rcsid[] = "$From: ns_req.c,v 8.27 1996/10/08 04:51:03 vixie Exp $";
+static char rcsid[] = "$From: ns_req.c,v 8.28 1997/06/01 20:34:34 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: ns_req.c,v 1.4 1998/03/31 00:16:30 deraadt Exp $";
+static char rcsid[] = "$OpenBSD: ns_req.c,v 1.5 1998/05/22 00:47:44 millert Exp $";
#endif
#endif /* not lint */
@@ -503,7 +503,7 @@ req_query(hp, cpp, eom, qsp, buflenp, msglenp, msg, dfd, from)
PUTLONG(0, *cpp); /* TTL */
tp = *cpp; /* Temp RdLength */
PUTSHORT(0, *cpp);
- copyCharString(cpp, Version);
+ copyCharString(cpp, ShortVersion);
PUTSHORT((*cpp) - (tp + INT16SZ), tp); /* Real RdLength */
*msglenp = *cpp - msg; /* Total message length */
return (Finish);
@@ -1704,7 +1704,7 @@ doaxfr(np, rfp, top, class)
struct namebuf *tnp; /* top namebuf */
struct databuf *tdp; /* top databuf */
struct namebuf **npp, **nppend;
- u_char msg[PACKETSZ];
+ u_char msg[64*1024];
u_char *cp;
const char *fname;
char dname[MAXDNAME];
@@ -2020,8 +2020,8 @@ startxfr(qsp, np, soa, soalen, class, dname)
*/
setsockopt(qsp->s_rfd, SOL_SOCKET, SO_LINGER,
(char *)&ll, sizeof ll);
- close(qsp->s_rfd);
#endif
+ close(qsp->s_rfd);
_exit(0);
/* NOTREACHED */
}
diff --git a/usr.sbin/named/named/ns_resp.c b/usr.sbin/named/named/ns_resp.c
index 3dee212bbfb..8dee880acd2 100644
--- a/usr.sbin/named/named/ns_resp.c
+++ b/usr.sbin/named/named/ns_resp.c
@@ -1,11 +1,11 @@
-/* $OpenBSD: ns_resp.c,v 1.3 1997/04/27 23:09:45 deraadt Exp $ */
+/* $OpenBSD: ns_resp.c,v 1.4 1998/05/22 00:47:45 millert Exp $ */
#if !defined(lint) && !defined(SABER)
#if 0
static char sccsid[] = "@(#)ns_resp.c 4.65 (Berkeley) 3/3/91";
-static char rcsid[] = "$From: ns_resp.c,v 8.37 1996/12/02 09:17:21 vixie Exp $";
+static char rcsid[] = "$From: ns_resp.c,v 8.38 1997/06/01 20:34:34 vixie Exp vixie $";
#else
-static char rcsid[] = "$OpenBSD: ns_resp.c,v 1.3 1997/04/27 23:09:45 deraadt Exp $";
+static char rcsid[] = "$OpenBSD: ns_resp.c,v 1.4 1998/05/22 00:47:45 millert Exp $";
#endif
#endif /* not lint */
@@ -132,6 +132,7 @@ struct flush_set {
int fs_class;
u_int fs_cred;
struct db_list *fs_list;
+ struct db_list *fs_last;
};
static void rrsetadd __P((struct flush_set *, char *,
@@ -142,7 +143,18 @@ static int rrsetcmp __P((char *, struct db_list *)),
check_root __P((void)),
check_ns __P((void)),
rrextract __P((u_char *, int, u_char *,
- struct databuf **, char *, int));
+ struct databuf **, char *, int,
+ char **));
+
+static void add_related_additional __P((char *));
+static void free_related_additional __P((void));
+static int related_additional __P((char *));
+static void maybe_free __P((char **));
+
+#define MAX_RELATED 100
+
+static int num_related = 0;
+static char *related[MAX_RELATED];
#ifdef LAME_LOGGING
static char *
@@ -236,11 +248,11 @@ ns_resp(msg, msglen)
struct flush_set *flushset;
struct sockaddr_in *nsa;
struct databuf *nsp[NSMAX];
- int i, c, n, qdcount, ancount, aucount, nscount, arcount;
+ int i, c, n, qdcount, ancount, aucount, nscount, arcount, arfirst;
int qtype, qclass, dbflags;
int restart; /* flag for processing cname response */
int validanswer;
- int cname, lastwascname;
+ int cname, lastwascname, externalcname;
int count, founddata, foundname;
int buflen;
int newmsglen;
@@ -256,6 +268,9 @@ ns_resp(msg, msglen)
struct namebuf *np;
struct netinfo *lp;
struct fwdinfo *fwd;
+ char *tname = NULL;
+
+ free_related_additional();
nameserIncr(from_addr.sin_addr, nssRcvdR);
nsp[0] = NULL;
@@ -695,7 +710,8 @@ ns_resp(msg, msglen)
/*
* Add the info received in the response to the data base.
*/
- c = ancount + aucount + arcount;
+ arfirst = ancount + aucount;
+ c = arfirst + arcount;
/* -ve $ing non-existence of record, must handle non-authoritative
* NOERRORs with c == 0.
@@ -759,7 +775,8 @@ ns_resp(msg, msglen)
nscount = 0;
cname = 0;
lastwascname = 0;
- strncpy(aname, qname, sizeof aname);
+ externalcname = 0;
+ strncpy(aname, qname, sizeof aname-1);
aname[sizeof aname-1] = '\0';
if (count) {
@@ -775,12 +792,14 @@ ns_resp(msg, msglen)
struct databuf *dp;
int type;
+ maybe_free(&tname);
if (cp >= eom) {
formerrmsg = outofDataFinal;
goto formerr;
}
- n = rrextract(msg, msglen, cp, &dp, name, sizeof name);
+ n = rrextract(msg, msglen, cp, &dp, name, sizeof name, &tname);
if (n < 0) {
+ maybe_free(&tname);
formerrmsg = outofDataFinal;
goto formerr;
}
@@ -790,16 +809,24 @@ ns_resp(msg, msglen)
type = dp->d_type;
if (i < ancount) {
/* Answer section. */
- if (strcasecmp(name, aname) != 0) {
- syslog(LOG_DEBUG, "wrong ans. name (%s != %s)",
- name, aname);
+ if (externalcname || (strcasecmp(name, aname) != 0)) {
+ if (!externalcname)
+ syslog(LOG_DEBUG,
+ "wrong ans. name (%s != %s)",
+ name, aname);
+ else
+ dprintf(3, (ddt,
+ "ignoring answer '%s' after external cname\n",
+ name));
db_free(dp);
continue;
}
if (type == T_CNAME &&
qtype != T_CNAME && qtype != T_ANY) {
- strncpy(aname, (char *)dp->d_data, sizeof aname);
+ strncpy(aname, (char *)dp->d_data, sizeof aname-1);
aname[sizeof aname-1] = '\0';
+ if (!samedomain(aname, qp->q_domain))
+ externalcname = 1;
cname = 1;
lastwascname = 1;
} else {
@@ -807,27 +834,95 @@ ns_resp(msg, msglen)
lastwascname = 0;
}
+ if (tname != NULL) {
+ add_related_additional(tname);
+ tname = NULL;
+ }
+
dp->d_cred = (hp->aa && !strcasecmp(name, qname))
? DB_C_AUTH
: DB_C_ANSWER;
} else {
/* After answer section. */
if (lastwascname) {
+ dprintf(3, (ddt,
+ "last was cname, ignoring auth. and add.\n"));
db_free(dp);
break;
}
- if (i < ancount + aucount && type == T_NS) {
+ if (i < arfirst) {
/* Authority section. */
- if (!samedomain(aname, name) ||
- (!cname && !samedomain(name, qp->q_domain))
- ) {
+ switch (type) {
+ case T_NS:
+ case T_SOA:
+ if (!samedomain(aname, name)){
+ syslog(LOG_DEBUG,
+ "bad referral (%s !< %s)",
+ aname[0] ? aname : ".",
+ name[0] ? name : ".");
+ db_free(dp);
+ continue;
+ } else if (!samedomain(name,
+ qp->q_domain)) {
+ if (!externalcname)
+ syslog(LOG_DEBUG,
+ "bad referral (%s !< %s)",
+ name[0] ? name : ".",
+ qp->q_domain[0] ?
+ qp->q_domain : ".");
+ db_free(dp);
+ continue;
+ }
+ if (type == T_NS) {
+ nscount++;
+ add_related_additional(tname);
+ tname = NULL;
+ }
+ break;
+ case T_NXT:
+ case T_SIG:
+ break;
+ default:
syslog(LOG_DEBUG,
- "bad referral (%s !< %s)",
- name, qp->q_domain);
+ "invalid RR type '%s' in authority section (name = '%s') from %s",
+ p_type(type), name,
+ sin_ntoa(&from_addr));
+ db_free(dp);
+ continue;
+ }
+ } else {
+ /* Additional section. */
+ switch (type) {
+ case T_A:
+ case T_AAAA:
+ if (externalcname ||
+ !samedomain(name, qp->q_domain)) {
+ dprintf(3, (ddt,
+ "ignoring additional info '%s' type %s\n",
+ name, p_type(type)));
+ db_free(dp);
+ continue;
+ }
+ if (!related_additional(name)) {
+ syslog(LOG_DEBUG,
+ "unrelated additional info '%s' type %s from %s",
+ name, p_type(type),
+ sin_ntoa(&from_addr));
+ db_free(dp);
+ continue;
+ }
+ break;
+ case T_KEY:
+ case T_SIG:
+ break;
+ default:
+ syslog(LOG_DEBUG,
+ "invalid RR type '%s' in additional section (name = '%s') from %s",
+ p_type(type), name,
+ sin_ntoa(&from_addr));
db_free(dp);
continue;
}
- nscount++;
}
dp->d_cred = (qp->q_flags & Q_PRIMING)
? DB_C_ANSWER
@@ -835,6 +930,7 @@ ns_resp(msg, msglen)
}
rrsetadd(flushset, name, dp);
}
+ maybe_free(&tname);
if (flushset) {
rrsetupdate(flushset, dbflags);
for (i = 0; i < count; i++)
@@ -842,7 +938,7 @@ ns_resp(msg, msglen)
free(flushset[i].fs_name);
free((char*)flushset);
}
- if (lastwascname)
+ if (lastwascname && !externalcname)
syslog(LOG_DEBUG, "%s (%s)", danglingCname, aname);
if (cp > eom) {
@@ -1109,7 +1205,11 @@ ns_resp(msg, msglen)
qp->q_fwd = fwdtab;
getname(np, tmpdomain, sizeof tmpdomain);
+ if (qp->q_domain != NULL)
+ free(qp->q_domain);
qp->q_domain = strdup(tmpdomain);
+ if (qp->q_domain == NULL)
+ panic(ENOMEM, "ns_resp: strdup failed");
if ((n = nslookup(nsp, qp, dname, "ns_resp")) <= 0) {
if (n < 0) {
@@ -1155,17 +1255,20 @@ ns_resp(msg, msglen)
qp->q_cmsglen = qp->q_msglen;
} else if (qp->q_msg)
(void) free(qp->q_msg);
- if ((qp->q_msg = (u_char *)malloc(BUFSIZ)) == NULL) {
+ if ((qp->q_msg = (u_char *)malloc(PACKETSZ)) == NULL) {
syslog(LOG_NOTICE, "resp: malloc error\n");
goto servfail;
}
n = res_mkquery(QUERY, dname, qclass, qtype,
- NULL, 0, NULL, qp->q_msg, BUFSIZ);
+ NULL, 0, NULL, qp->q_msg, PACKETSZ);
if (n < 0) {
syslog(LOG_INFO, "resp: res_mkquery(%s) failed",
dname);
goto servfail;
}
+ if (qp->q_name != NULL)
+ free(qp->q_name);
+ qp->q_name = savestr(dname);
qp->q_msglen = n;
hp = (HEADER *) qp->q_msg;
hp->rd = 0;
@@ -1264,29 +1367,35 @@ ns_resp(msg, msglen)
(void) send_msg((u_char *)hp, (qp->q_cmsglen ? qp->q_cmsglen : qp->q_msglen),
qp);
timeout:
+ if (qp->q_stream != QSTREAM_NULL)
+ sqrm(qp->q_stream);
qremove(qp);
free_nsp(nsp);
return;
}
static int
-rrextract(msg, msglen, rrp, dpp, dname, namelen)
+rrextract(msg, msglen, rrp, dpp, dname, namelen, tnamep)
u_char *msg;
int msglen;
u_char *rrp;
struct databuf **dpp;
char *dname;
int namelen;
+ char **tnamep;
{
register u_char *cp;
register int n;
int class, type, dlen, n1;
u_int32_t ttl;
u_char *cp1;
- u_char data[BUFSIZ];
+ u_char data[MAXDNAME*2 + INT32SZ*5];
register HEADER *hp = (HEADER *)msg;
enum context context;
+ if (tnamep != NULL)
+ *tnamep = NULL;
+
*dpp = NULL;
cp = rrp;
if ((n = dn_expand(msg, msg + msglen, cp, dname, namelen)) < 0) {
@@ -1371,6 +1480,8 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen)
cp += n;
cp1 = data;
n = strlen((char *)data) + 1;
+ if (tnamep != NULL && (type == T_NS || type == T_MB))
+ *tnamep = strdup((char *)cp1);
break;
case T_SOA:
@@ -1478,7 +1589,7 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen)
if (type == T_SRV) {
/* Grab weight and port. */
- bcopy(cp, data, INT16SZ*2);
+ bcopy(cp, cp1, INT16SZ*2);
cp1 += INT16SZ*2;
cp += INT16SZ*2;
}
@@ -1497,6 +1608,9 @@ rrextract(msg, msglen, rrp, dpp, dname, namelen)
}
cp += n;
+ if (tnamep != NULL)
+ *tnamep = strdup((char *)cp1);
+
/* compute end of data */
cp1 += strlen((char *)cp1) + 1;
/* compute size of data */
@@ -1656,12 +1770,12 @@ doupdate(msg, msglen, rrp, zone, savens, flags, cred)
int class, type;
struct databuf *dp;
char dname[MAXDNAME];
- u_char data[BUFSIZ+MAX_MD5RSA_KEY_BYTES];
dprintf(3, (ddt, "doupdate(zone %d, savens %#lx, flags %#lx)\n",
zone, (u_long)savens, (u_long)flags));
- if ((n = rrextract(msg, msglen, rrp, &dp, dname, sizeof(dname))) == -1)
+ if ((n = rrextract(msg, msglen, rrp, &dp, dname, sizeof(dname), NULL))
+ == -1)
return (-1);
if (!dp)
return (-1);
@@ -1682,7 +1796,7 @@ doupdate(msg, msglen, rrp, zone, savens, flags, cred)
}
#endif
if (!bogus &&
- ((temp = strrchr((char *)data, '.')) != NULL) &&
+ ((temp = strrchr((char *)dp->d_data, '.')) != NULL) &&
!strcasecmp(temp, ".arpa")
)
bogus++;
@@ -1697,7 +1811,7 @@ doupdate(msg, msglen, rrp, zone, savens, flags, cred)
"bogus root NS"))
syslog(LOG_NOTICE,
"bogus root NS %s rcvd from %s on query for \"%s\"",
- data, sin_ntoa(&from_addr), qname);
+ dp->d_data, sin_ntoa(&from_addr), qname);
db_free(dp);
return (cp - rrp);
}
@@ -1707,7 +1821,7 @@ doupdate(msg, msglen, rrp, zone, savens, flags, cred)
"bogus nonroot NS"))
syslog(LOG_INFO,
"bogus nonroot NS %s rcvd from %s on query for \"%s\"",
- data, sin_ntoa(&from_addr), qname);
+ dp->d_data, sin_ntoa(&from_addr), qname);
db_free(dp);
return (cp - rrp);
}
@@ -2029,17 +2143,19 @@ sysquery(dname, class, type, nss, nsc, opcode)
qp->q_flags |= Q_SYSTEM;
getname(np, tmpdomain, sizeof tmpdomain);
+ if (qp->q_domain != NULL)
+ free(qp->q_domain);
qp->q_domain = strdup(tmpdomain);
- if (!qp->q_domain)
+ if (qp->q_domain == NULL)
panic(ENOMEM, "ns_resp: strdup failed");
- if ((qp->q_msg = (u_char *)malloc(BUFSIZ)) == NULL) {
+ if ((qp->q_msg = (u_char *)malloc(PACKETSZ)) == NULL) {
syslog(LOG_NOTICE, "sysquery: malloc failed");
goto err2;
}
n = res_mkquery(opcode, dname, class,
type, NULL, 0, NULL,
- qp->q_msg, BUFSIZ);
+ qp->q_msg, PACKETSZ);
if (n < 0) {
syslog(LOG_INFO, "sysquery: res_mkquery(%s) failed", dname);
goto err2;
@@ -2738,19 +2854,25 @@ rrsetadd(flushset, name, dp)
fs->fs_type = dp->d_type;
fs->fs_cred = dp->d_cred;
fs->fs_list = NULL;
+ fs->fs_last = NULL;
}
dbl = (struct db_list *)malloc(sizeof(struct db_list));
if (!dbl)
panic(-1, "rrsetadd: out of memory");
- dbl->db_next = fs->fs_list;
+ dbl->db_next = NULL;
dbl->db_dp = dp;
- fs->fs_list = dbl;
+ if (fs->fs_last == NULL)
+ fs->fs_list = dbl;
+ else
+ fs->fs_last->db_next = dbl;
+ fs->fs_last = dbl;
}
static int
-ttlcheck(name,dbl)
+ttlcheck(name,dbl,update)
char *name;
struct db_list *dbl;
+ int update;
{
int type = dbl->db_dp->d_type;
int class = dbl->db_dp->d_class;
@@ -2774,6 +2896,9 @@ ttlcheck(name,dbl)
if (!match(dp, class, type))
continue;
if (first) {
+ /* we can't update zone data so return early */
+ if (dp->d_zone != 0)
+ return(0);
ttl = dp->d_ttl;
first = 0;
} else if (ttl != dp->d_ttl) {
@@ -2801,6 +2926,19 @@ ttlcheck(name,dbl)
}
dbp = dbp->db_next;
}
+
+ /* update ttl if required */
+ if (update) {
+ for (dp = np->n_data; dp != NULL; dp = dp->d_next) {
+ if (!match(dp, class, type))
+ continue;
+ if (dp->d_ttl > ttl)
+ break;
+ dp->d_ttl = ttl;
+ fixttl(dp);
+ }
+ }
+
return(1);
}
@@ -2881,8 +3019,8 @@ rrsetupdate(flushset, flags)
while (fs->fs_name) {
dprintf(1,(ddt, "rrsetupdate: %s\n",
fs->fs_name[0] ? fs->fs_name : "."));
- if ((n = rrsetcmp(fs->fs_name,fs->fs_list)) &&
- ttlcheck(fs->fs_name,fs->fs_list)) {
+ if ((n = rrsetcmp(fs->fs_name, fs->fs_list)) &&
+ ttlcheck(fs->fs_name, fs->fs_list, 0)) {
if (n > 0)
flushrrset(fs);
@@ -2899,6 +3037,8 @@ rrsetupdate(flushset, flags)
free((char *)odbp);
}
} else {
+ if (n == 0)
+ (void)ttlcheck(fs->fs_name, fs->fs_list, 1);
dbp = fs->fs_list;
while (dbp) {
db_free(dbp->db_dp);
@@ -2984,3 +3124,49 @@ delete_stale(np)
}
}
}
+
+
+static void
+add_related_additional(name)
+ char *name;
+{
+ int i;
+
+ if (num_related >= MAX_RELATED - 1)
+ return;
+ for (i = 0; i < num_related; i++)
+ if (strcasecmp(name, related[i]) == 0)
+ return;
+ related[num_related++] = name;
+}
+
+static void
+free_related_additional() {
+ int i;
+
+ for (i = 0; i < num_related; i++)
+ free(related[i]);
+ num_related = 0;
+}
+
+static int
+related_additional(name)
+ char *name;
+{
+ int i;
+
+ for (i = 0; i < num_related; i++)
+ if (strcasecmp(name, related[i]) == 0)
+ return (1);
+ return (0);
+}
+
+static void
+maybe_free(tname)
+ char **tname;
+{
+ if (tname == NULL || *tname == NULL)
+ return;
+ free(*tname);
+ *tname = NULL;
+}
diff --git a/usr.sbin/named/named/ns_validate.c b/usr.sbin/named/named/ns_validate.c
index 1e5e63a979e..e412f25a5d3 100644
--- a/usr.sbin/named/named/ns_validate.c
+++ b/usr.sbin/named/named/ns_validate.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ns_validate.c,v 1.2 1997/03/12 10:42:37 downsj Exp $ */
+/* $OpenBSD: ns_validate.c,v 1.3 1998/05/22 00:47:46 millert Exp $ */
/**************************************************************************
* ns_validate.c (was security.c in original ISI contribution)
@@ -611,7 +611,7 @@ dovalidate(msg, msglen, rrp, zone, flags, qdomain, server, VCode)
u_int32_t ttl;
char dname[MAXDNAME];
u_char *cp1;
- u_char data[BUFSIZ];
+ u_char data[MAXDNAME*2 + INT32SZ*5];
register HEADER *hp = (HEADER *) msg;
dprintf(2, (ddt, "dovalidate(zone %d, flags %x)\n",
diff --git a/usr.sbin/named/named/storage.c b/usr.sbin/named/named/storage.c
index b412a1cd3a7..e63a9645897 100644
--- a/usr.sbin/named/named/storage.c
+++ b/usr.sbin/named/named/storage.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: storage.c,v 1.2 1997/03/12 10:42:38 downsj Exp $ */
+/* $OpenBSD: storage.c,v 1.3 1998/05/22 00:47:47 millert Exp $ */
/*
* ++Copyright++ 1985, 1989
@@ -88,7 +88,7 @@ extern void panic __P((int, const char *));
* All rights reserved.
*/
#ifndef lint
-static char RCSid[] = "$Id: storage.c,v 1.2 1997/03/12 10:42:38 downsj Exp $";
+static char RCSid[] = "$From: storage.c,v 8.2 1996/08/05 08:31:30 vixie Exp $";
#endif
#undef malloc
diff --git a/usr.sbin/named/named/tree.h b/usr.sbin/named/named/tree.h
index cd354004295..75e89500cef 100644
--- a/usr.sbin/named/named/tree.h
+++ b/usr.sbin/named/named/tree.h
@@ -1,11 +1,11 @@
-/* $OpenBSD: tree.h,v 1.2 1997/03/12 10:42:39 downsj Exp $ */
+/* $OpenBSD: tree.h,v 1.3 1998/05/22 00:47:49 millert Exp $ */
/* tree.h - declare structures used by tree library
*
* vix 22jan93 [revisited; uses RCS, ANSI, POSIX; has bug fixes]
* vix 27jun86 [broken out of tree.c]
*
- * $Id: tree.h,v 1.2 1997/03/12 10:42:39 downsj Exp $
+ * $From: tree.h,v 8.1 1994/12/15 06:24:14 vixie Exp $
*/
diff --git a/usr.sbin/named/named/version.c b/usr.sbin/named/named/version.c
index 7fa5ada4dcd..700cef0c140 100644
--- a/usr.sbin/named/named/version.c
+++ b/usr.sbin/named/named/version.c
@@ -1,20 +1,21 @@
-/* $OpenBSD: version.c,v 1.2 1997/03/12 10:42:39 downsj Exp $ */
+/* $OpenBSD: version.c,v 1.3 1998/05/22 00:47:50 millert Exp $ */
/*
* @(#)Version.c 4.9 (Berkeley) 7/21/90
- * $From: Version.c,v 8.1 1994/12/15 06:24:14 vixie Exp $
+ * $From: Version.c,v 8.2 1997/06/01 20:34:34 vixie Exp $
*/
#ifndef lint
#if 0
-char sccsid[] = "@(#)named 4.9.5-P1";
-char rcsid[] = "$From: Version.c,v 8.1 1994/12/15 06:24:14 vixie Exp $";
+char sccsid[] = "@(#)named 4.9.6-REL Thu May 21 18:38:36 1998 root@localhost:/usr/src/usr.sbin/named/named/obj";
+char rcsid[] = "$From: Version.c,v 8.2 1997/06/01 20:34:34 vixie Exp $";
#else
-char rcsid[] = "$OpenBSD: version.c,v 1.2 1997/03/12 10:42:39 downsj Exp $";
+char rcsid[] = "$OpenBSD: version.c,v 1.3 1998/05/22 00:47:50 millert Exp $";
#endif
#endif /* not lint */
-char Version[] = "named 4.9.5-P1";
+char Version[] = "named 4.9.6-REL Thu May 21 18:38:36 1998\n\troot@localhost:/usr/src/usr.sbin/named/named/obj";
+char ShortVersion[] = "4.9.6-REL";
#ifdef COMMENT
diff --git a/usr.sbin/named/nslookup/send.c b/usr.sbin/named/nslookup/send.c
index a61f3ceed69..2232dd18596 100644
--- a/usr.sbin/named/nslookup/send.c
+++ b/usr.sbin/named/nslookup/send.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: send.c,v 1.2 1997/03/12 10:42:50 downsj Exp $ */
+/* $OpenBSD: send.c,v 1.3 1998/05/22 00:47:51 millert Exp $ */
/*
* ++Copyright++ 1985, 1989
@@ -58,9 +58,9 @@
#ifndef lint
#if 0
static char sccsid[] = "@(#)send.c 5.18 (Berkeley) 3/2/91";
-static char rcsid[] = "$From: send.c,v 8.1 1994/12/15 06:24:31 vixie Exp $";
+static char rcsid[] = "$From: send.c,v 8.2 1997/06/01 20:34:40 vixie Exp $";
#else
-static char rcsid[] = "$OpenBSD: send.c,v 1.2 1997/03/12 10:42:50 downsj Exp $";
+static char rcsid[] = "$OpenBSD: send.c,v 1.3 1998/05/22 00:47:51 millert Exp $";
#endif
#endif /* not lint */
@@ -338,8 +338,7 @@ wait:
* timeout
*/
if (_res.options & RES_DEBUG)
- printf("timeout (%d secs)\n",
- timeout.tv_sec);
+ printf("timeout\n");
#if BSD >= 43
gotsomewhere = 1;
#endif