Apply by doing:
cd /usr/src
patch -p0 < 036_named.patch
And then rebuild and install named:
cd usr.sbin/named
make obj depend
make && make install
Index: usr.sbin/named/Makefile
===================================================================
RCS file: /cvs/src/usr.sbin/named/Makefile,v
retrieving revision 1.11
diff -u -r1.11 Makefile
--- usr.sbin/named/Makefile 28 Jan 2001 02:18:13 -0000 1.11
+++ usr.sbin/named/Makefile 15 Nov 2002 00:06:02 -0000
@@ -6,6 +6,6 @@
SUBDIR+= doc/bog
.endif
-VER= 4.9.8-REL
+VER= 4.9.11-REL
.include <bsd.subdir.mk>
Index: usr.sbin/named/libresolv/getnetnamadr.c
===================================================================
RCS file: /cvs/src/usr.sbin/named/libresolv/getnetnamadr.c,v
retrieving revision 1.2
diff -u -r1.2 getnetnamadr.c
--- usr.sbin/named/libresolv/getnetnamadr.c 22 May 1998 00:47:20 -0000 1.2
+++ usr.sbin/named/libresolv/getnetnamadr.c 15 Nov 2002 00:06:02 -0000
@@ -105,10 +105,11 @@
register int n;
u_char *eom;
int type, class, buflen, ancount, qdcount, haveanswer, i, nchar;
- 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[PACKETSZ];
+ char aux1[30], aux2[30], *in, *st, *pauxt, *bp, **ap,
+ *paux1 = &aux1[0], *paux2 = &aux2[0];
+ static struct netent net_entry;
+ static char *net_aliases[MAXALIASES], netbuf[PACKETSZ];
+ static char ans[MAXDNAME];
/*
* find first satisfactory answer
@@ -138,8 +139,14 @@
h_errno = TRY_AGAIN;
return (NULL);
}
- while (qdcount-- > 0)
- cp += __dn_skipname(cp, eom) + QFIXEDSZ;
+ while (qdcount-- > 0) {
+ n = __dn_skipname(cp, eom);
+ if (n < 0 || (cp + n + QFIXEDSZ) > eom) {
+ h_errno = NO_RECOVERY;
+ return(NULL);
+ }
+ cp += n + QFIXEDSZ;
+ }
ap = net_aliases;
*ap = NULL;
net_entry.n_aliases = net_aliases;
@@ -150,7 +157,7 @@
break;
cp += n;
ans[0] = '\0';
- (void)strcpy(&ans[0], bp);
+ (void)strcpy(ans, bp);
GETSHORT(type, cp);
GETSHORT(class, cp);
cp += INT32SZ; /* TTL */
@@ -162,11 +169,13 @@
return (NULL);
}
cp += n;
- *ap++ = bp;
- bp += strlen(bp) + 1;
- net_entry.n_addrtype =
- (class == C_IN) ? AF_INET : AF_UNSPEC;
- haveanswer++;
+ if ((ap + 2) < &net_aliases[MAXALIASES]) {
+ *ap++ = bp;
+ bp += strlen(bp) + 1;
+ net_entry.n_addrtype =
+ (class == C_IN) ? AF_INET : AF_UNSPEC;
+ haveanswer++;
+ }
}
}
if (haveanswer) {
@@ -177,26 +186,33 @@
net_entry.n_net = 0L;
break;
case BYNAME:
- in = *net_entry.n_aliases;
- net_entry.n_name = &ans[0];
+ ap = net_entry.n_aliases;
+ next_alias:
+ in = *ap++;
+ if (in == NULL) {
+ h_errno = HOST_NOT_FOUND;
+ return (NULL);
+ }
+ net_entry.n_name = ans;
aux2[0] = '\0';
for (i = 0; i < 4; i++) {
for (st = in, nchar = 0;
- *st != '.';
+ isdigit((unsigned char)*st);
st++, nchar++)
;
- if (nchar != 1 || *in != '0' || flag) {
- flag = 1;
- (void)strncpy(paux1,
- (i==0) ? in : in-1,
- (i==0) ?nchar : nchar+1);
- paux1[(i==0) ? nchar : nchar+1] = '\0';
- pauxt = paux2;
- paux2 = strcat(paux1, paux2);
- paux1 = pauxt;
- }
+ if (*st != '.' || nchar == 0 || nchar > 3)
+ goto next_alias;
+ if (i != 0)
+ nchar++;
+ (void)strncpy(paux1, in, nchar);
+ paux1[nchar] = '\0';
+ pauxt = paux2;
+ paux2 = strcat(paux1, paux2);
+ paux1 = pauxt;
in = ++st;
}
+ if (strcasecmp(in, "IN-ADDR.ARPA") != 0)
+ goto next_alias;
net_entry.n_net = inet_network(paux2);
break;
}
Index: usr.sbin/named/named/Makefile
===================================================================
RCS file: /cvs/src/usr.sbin/named/named/Makefile,v
retrieving revision 1.3
diff -u -r1.3 Makefile
--- usr.sbin/named/named/Makefile 22 May 1998 00:47:29 -0000 1.3
+++ usr.sbin/named/named/Makefile 15 Nov 2002 00:06:02 -0000
@@ -10,15 +10,15 @@
ns_init.c ns_main.c ns_maint.c ns_ncache.c ns_req.c ns_resp.c \
ns_sort.c ns_stats.c ns_udp.c ns_validate.c storage.c tree.c
MAN= named.8
+CLEANFILES+= version.c
CFLAGS+=${INCLUDE} ${CONFIG}
-LDADD= ${LIBRESOLV}
-makeversionc:
+version.c: Version.c ${.CURDIR}/../Makefile
(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)
+ < ${.CURDIR}/Version.c > version.c)
.include <bsd.prog.mk>
.include "../../Makefile.inc"
Index: usr.sbin/named/named/db_defs.h
===================================================================
RCS file: /cvs/src/usr.sbin/named/named/db_defs.h,v
retrieving revision 1.3
diff -u -r1.3 db_defs.h
--- usr.sbin/named/named/db_defs.h 22 May 1998 00:47:31 -0000 1.3
+++ usr.sbin/named/named/db_defs.h 15 Nov 2002 00:06:02 -0000
@@ -68,7 +68,7 @@
#define INVHASHSZ 919 /* size of inverse hash table */
/* max length of data in RR data field */
-#define MAXDATA 2048
+#define MAXDATA (3*MAXDNAME + 5*INT32SZ)
#define DB_ROOT_TIMBUF 3600
#define TIMBUF 300
Index: usr.sbin/named/named/ns_ncache.c
===================================================================
RCS file: /cvs/src/usr.sbin/named/named/ns_ncache.c,v
retrieving revision 1.4
diff -u -r1.4 ns_ncache.c
--- usr.sbin/named/named/ns_ncache.c 22 May 1998 07:09:17 -0000 1.4
+++ usr.sbin/named/named/ns_ncache.c 15 Nov 2002 00:06:02 -0000
@@ -81,8 +81,8 @@
u_int16_t atype;
u_char *tp = cp;
u_char *cp1;
- u_char data[MAXDNAME*2 + INT32SZ*5];
- size_t len = sizeof data;
+ u_char data[MAXDATA];
+ u_char *eod = data + sizeof(data);
/* we store NXDOMAIN as T_SOA regardless of the query type */
if (hp->rcode == NXDOMAIN)
@@ -109,7 +109,7 @@
rdatap = tp;
/* origin */
- n = dn_expand(msg, eom, tp, (char*)data, len);
+ n = dn_expand(msg, eom, tp, (char*)data, eod - data);
if (n < 0) {
dprintf(3, (ddt, "ncache: form error 2\n"));
return;
@@ -117,9 +117,8 @@
tp += n;
n = strlen((char*)data) + 1;
cp1 = data + n;
- len -= n;
/* mail */
- n = dn_expand(msg, msg + msglen, tp, (char*)cp1, len);
+ n = dn_expand(msg, msg + msglen, tp, (char*)cp1, eod - cp1);
if (n < 0) {
dprintf(3, (ddt, "ncache: form error 2\n"));
return;
@@ -127,20 +126,20 @@
tp += n;
n = strlen((char*)cp1) + 1;
cp1 += n;
- len -= n;
n = 5 * INT32SZ;
+ if (n > (eod - cp1)) /* Can't happen. See MAXDATA. */
+ return;
BOUNDS_CHECK(tp, n);
bcopy(tp, cp1, n);
/* serial, refresh, retry, expire, min */
cp1 += n;
- len -= n;
tp += n;
if (tp != rdatap + dlen) {
dprintf(3, (ddt, "ncache: form error 2\n"));
return;
}
/* store the zone of the soa record */
- n = dn_expand(msg, msg + msglen, cp, (char*)cp1, len);
+ n = dn_expand(msg, msg + msglen, cp, (char*)cp1, eod - cp1);
if (n < 0) {
dprintf(3, (ddt, "ncache: form error 2\n"));
return;
Index: usr.sbin/named/named/ns_req.c
===================================================================
RCS file: /cvs/src/usr.sbin/named/named/ns_req.c,v
retrieving revision 1.7
diff -u -r1.7 ns_req.c
--- usr.sbin/named/named/ns_req.c 28 Jan 2001 02:12:50 -0000 1.7
+++ usr.sbin/named/named/ns_req.c 15 Nov 2002 00:06:03 -0000
@@ -1526,7 +1526,7 @@
/* first just copy over the type_covered, algorithm, */
/* labels, orig ttl, two timestamps, and the footprint */
- if ((dp->d_size - 18) > buflen)
+ if (buflen < 18)
goto cleanup;
bcopy( cp1, cp, 18 );
cp += 18;
Index: usr.sbin/named/named/ns_resp.c
===================================================================
RCS file: /cvs/src/usr.sbin/named/named/ns_resp.c,v
retrieving revision 1.5
diff -u -r1.5 ns_resp.c
--- usr.sbin/named/named/ns_resp.c 22 May 1998 07:09:19 -0000 1.5
+++ usr.sbin/named/named/ns_resp.c 15 Nov 2002 00:06:03 -0000
@@ -1678,7 +1678,7 @@
* to BOUNDS_CHECK() here.
*/
cp1 += (n = strlen((char *)cp1) + 1);
- n1 = sizeof(data) - n;
+ n1 = sizeof(data) - n - INT16SZ;
n = dn_expand(msg, eom, cp, (char *)cp1, n1);
if (n < 0) {
hp->rcode = FORMERR;
@@ -1696,7 +1696,7 @@
break;
case T_SIG: {
- u_long origTTL, exptime, signtime, timetilexp, now;
+ u_int32_t origTTL, exptime, signtime, timetilexp, now;
/* Check signature time, expiration, and adjust TTL. */
/* This code is similar to that in db_load.c. */
@@ -1717,8 +1717,18 @@
ttl = origTTL;
}
+ /*
+ * Check that expire and signature times are internally
+ * consistant.
+ */
+ if (!SEQ_GT(exptime, signtime) && exptime != signtime) {
+ dprintf(3, (ddt,
+ "ignoring SIG: signature expires before it was signed"));
+ return ((cp - rrp) + dlen);
+ }
+
/* Don't let bogus signers "sign" in the future. */
- if (signtime > now) {
+ if (SEQ_GT(signtime, now)) {
dprintf(3, (ddt,
"ignoring SIG: signature date %s is in the future\n",
p_secstodate (signtime)));
@@ -1726,7 +1736,7 @@
}
/* Ignore received SIG RR's that are already expired. */
- if (exptime <= now) {
+ if (SEQ_GT(exptime, now)) {
dprintf(3, (ddt,
"ignoring SIG: expiration %s is in the past\n",
p_secstodate (exptime)));
Index: usr.sbin/named/named/ns_udp.c
===================================================================
RCS file: /cvs/src/usr.sbin/named/named/ns_udp.c,v
retrieving revision 1.1
diff -u -r1.1 ns_udp.c
--- usr.sbin/named/named/ns_udp.c 12 Mar 1997 10:42:36 -0000 1.1
+++ usr.sbin/named/named/ns_udp.c 15 Nov 2002 00:06:03 -0000
@@ -81,7 +81,7 @@
res = lseek(fd, offset, SEEK_SET);
if (res != offset) {
- dprintf(1, (ddt, "ns_udp: lseek %ul failed %lu %d\n",
+ dprintf(1, (ddt, "ns_udp: lseek %lu failed %lu %d\n",
offset, res, errno));
goto cleanup;
}
@@ -97,7 +97,7 @@
sum = 1;
lseek(fd, offset, SEEK_SET);
if (res != offset) {
- dprintf(1, (ddt, "ns_udp: lseek %ul failed %lu %d\n",
+ dprintf(1, (ddt, "ns_udp: lseek %lu failed %lu %d\n",
offset, res, errno));
goto cleanup;
}
Index: usr.sbin/named/named/version.c
===================================================================
RCS file: usr.sbin/named/named/version.c
diff -N usr.sbin/named/named/version.c
--- usr.sbin/named/named/version.c 30 Jan 2001 20:56:10 -0000 1.5
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,95 +0,0 @@
-/* $OpenBSD: version.c,v 1.5 2001/01/30 20:56:10 niklas Exp $ */
-
-/*
- * @(#)Version.c 4.9 (Berkeley) 7/21/90
- * $From: Version.c,v 8.2 1997/06/01 20:34:34 vixie Exp $
- */
-
-#ifndef lint
-#if 0
-char sccsid[] = "@(#)named 4.9.8-REL Tue Jan 30 21:50:03 2001 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.5 2001/01/30 20:56:10 niklas Exp $";
-#endif
-#endif /* not lint */
-
-char Version[] = "named 4.9.8-REL Tue Jan 30 21:50:03 2001\n\troot@localhost:/usr/src/usr.sbin/named/named/obj";
-char ShortVersion[] = "4.9.8-REL";
-
-#ifdef COMMENT
-
-SCCS/s.Version.c:
-
-D 4.8.3 90/06/27 17:05:21 bloom 37 35 00031/00028/00079
-Version distributed with 4.3 Reno tape (June 1990)
-
-D 4.8.2 89/09/18 13:57:11 bloom 35 34 00020/00014/00087
-Interim fixes release
-
-D 4.8.1 89/02/08 17:12:15 karels 34 33 00026/00017/00075
-branch for 4.8.1
-
-D 4.8 88/07/09 14:27:00 karels 33 28 00043/00031/00049
-4.8 is here!
-
-D 4.7 87/11/20 13:15:52 karels 25 24 00000/00000/00062
-4.7.3 beta
-
-D 4.6 87/07/21 12:15:52 karels 25 24 00000/00000/00062
-4.6 declared stillborn
-
-D 4.5 87/02/10 12:33:25 kjd 24 18 00000/00000/00062
-February 1987, Network Release. Child (bind) grows up, parent (kevin) leaves home.
-
-D 4.4 86/10/01 10:06:26 kjd 18 12 00020/00017/00042
-October 1, 1986 Network Distribution
-
-D 4.3 86/06/04 12:12:18 kjd 12 7 00015/00028/00044
-Version distributed with 4.3BSD
-
-D 4.2 86/04/30 20:57:16 kjd 7 1 00056/00000/00016
-Network distribution Freeze and one more version until 4.3BSD
-
-D 1.1 86/04/30 19:30:00 kjd 1 0 00016/00000/00000
-date and time created 86/04/30 19:30:00 by kjd
-
-code versions:
-
-Makefile
- Makefile 4.14 (Berkeley) 2/28/88
-db.h
- db.h 4.13 (Berkeley) 2/17/88
-db_dump.c
- db_dump.c 4.20 (Berkeley) 2/17/88
-db_load.c
- db_load.c 4.26 (Berkeley) 2/28/88
-db_lookup.c
- db_lookup.c 4.14 (Berkeley) 2/17/88
-db_reload.c
- db_reload.c 4.15 (Berkeley) 2/28/88
-db_save.c
- db_save.c 4.13 (Berkeley) 2/17/88
-db_update.c
- db_update.c 4.16 (Berkeley) 2/28/88
-ns_forw.c
- ns_forw.c 4.26 (Berkeley) 3/28/88
-ns_init.c
- ns_init.c 4.23 (Berkeley) 2/28/88
-ns_main.c
- Copyright (c) 1986 Regents of the University of California.\n\
- ns_main.c 4.30 (Berkeley) 3/7/88
-ns_maint.c
- ns_maint.c 4.23 (Berkeley) 2/28/88
-ns_req.c
- ns_req.c 4.32 (Berkeley) 3/31/88
-ns_resp.c
- ns_resp.c 4.50 (Berkeley) 4/7/88
-ns_sort.c
- ns_sort.c 4.3 (Berkeley) 2/17/88
-ns_stats.c
- ns_stats.c 4.3 (Berkeley) 2/17/88
-newvers.sh
- newvers.sh 4.4 (Berkeley) 3/28/88
-
-#endif /* COMMENT */
Index: usr.sbin/named/named-xfer/Makefile
===================================================================
RCS file: /cvs/src/usr.sbin/named/named-xfer/Makefile,v
retrieving revision 1.3
diff -u -r1.3 Makefile
--- usr.sbin/named/named-xfer/Makefile 23 May 1998 19:24:54 -0000 1.3
+++ usr.sbin/named/named-xfer/Makefile 15 Nov 2002 00:06:03 -0000
@@ -8,10 +8,15 @@
PROG= named-xfer
SRCS= named-xfer.c db_glue.c storage.c version.c
CFLAGS+= ${INCLUDE} -I${.CURDIR}/../named ${CONFIG}
-LDADD= ${LIBRESOLV}
MAN= named-xfer.8
BINDIR= /var/named
LDSTATIC= ${STATIC}
+
+version.c: Version.c ${.CURDIR}/../Makefile
+ (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}/../named/Version.c > version.c)
.include <bsd.prog.mk>
.include "../../Makefile.inc"