Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-1-6]: src/dist/bind/lib/irs Pull up revision 1.3 (requested by it...
details: https://anonhg.NetBSD.org/src/rev/382ce8a7aefc
branches: netbsd-1-6
changeset: 528200:382ce8a7aefc
user: lukem <lukem%NetBSD.org@localhost>
date: Fri Jun 28 11:47:09 2002 +0000
description:
Pull up revision 1.3 (requested by itojun in ticket #387):
Update to BIND 8.3.3. Fixes buffer overrun in resolver code.
diffstat:
dist/bind/lib/irs/gen.c | 9 ++++++---
dist/bind/lib/irs/gen_gr.c | 35 +++++++++++++++++++++++++----------
2 files changed, 31 insertions(+), 13 deletions(-)
diffs (112 lines):
diff -r 0e3fa18a3920 -r 382ce8a7aefc dist/bind/lib/irs/gen.c
--- a/dist/bind/lib/irs/gen.c Fri Jun 28 11:47:00 2002 +0000
+++ b/dist/bind/lib/irs/gen.c Fri Jun 28 11:47:09 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: gen.c,v 1.2 2000/03/01 10:50:00 itojun Exp $ */
+/* $NetBSD: gen.c,v 1.2.6.1 2002/06/28 11:47:09 lukem Exp $ */
/*
* Copyright (c) 1996-1999 by Internet Software Consortium.
@@ -18,7 +18,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "Id: gen.c,v 1.25 1999/10/13 16:39:29 vixie Exp";
+static const char rcsid[] = "Id: gen.c,v 1.26 2001/05/29 05:48:35 marka Exp";
#endif
/*
@@ -408,7 +408,10 @@
char *tmp;
int n;
- for (tmp = line; isascii(*tmp) && isspace(*tmp); tmp++)
+ for (tmp = line;
+ isascii((unsigned char)*tmp) &&
+ isspace((unsigned char)*tmp);
+ tmp++)
(void)NULL;
if (*tmp == '#' || *tmp == '\n' || *tmp == '\0')
continue;
diff -r 0e3fa18a3920 -r 382ce8a7aefc dist/bind/lib/irs/gen_gr.c
--- a/dist/bind/lib/irs/gen_gr.c Fri Jun 28 11:47:00 2002 +0000
+++ b/dist/bind/lib/irs/gen_gr.c Fri Jun 28 11:47:09 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: gen_gr.c,v 1.2 2001/01/27 07:22:03 itojun Exp $ */
+/* $NetBSD: gen_gr.c,v 1.2.2.1 2002/06/28 11:47:18 lukem Exp $ */
/*
* Copyright (c) 1996-1999 by Internet Software Consortium.
@@ -18,7 +18,7 @@
*/
#if !defined(LINT) && !defined(CODECENTER)
-static const char rcsid[] = "Id: gen_gr.c,v 1.22 2000/07/11 05:51:56 vixie Exp";
+static const char rcsid[] = "Id: gen_gr.c,v 1.25 2001/06/07 02:12:26 marka Exp";
#endif
/* Imports */
@@ -326,8 +326,9 @@
static void
grmerge(struct irs_gr *this, const struct group *src, int preserve) {
struct pvt *pvt = (struct pvt *)this->private;
- char *cp, **m, **p;
- int n, ndst, nnew, memadj;
+ char *cp, **m, **p, *oldmembuf;
+ int n, ndst, nnew;
+ size_t used;
if (!preserve) {
pvt->group.gr_gid = src->gr_gid;
@@ -374,15 +375,25 @@
/* No work to do. */
return;
}
- cp = realloc(pvt->membuf, pvt->membufsize + n);
+ used = preserve ? pvt->membufsize : 0;
+ cp = malloc(used + n);
if (!cp) {
/* No harm done, no work done. */
return;
}
- memadj = cp - pvt->membuf;
+ if (used != 0)
+ memcpy(cp, pvt->membuf, used);
+ oldmembuf = pvt->membuf;
pvt->membuf = cp;
- cp += pvt->membufsize;
- pvt->membufsize += n;
+ pvt->membufsize = used + n;
+ cp += used;
+
+ /*
+ * Adjust group.gr_mem.
+ */
+ if (pvt->membuf != oldmembuf)
+ for (m = pvt->group.gr_mem; *m; m++)
+ *m = pvt->membuf + (*m - oldmembuf);
/*
* Add new elements.
@@ -395,8 +406,10 @@
cp += strlen(cp) + 1;
}
if (preserve) {
- pvt->group.gr_name += memadj;
- pvt->group.gr_passwd += memadj;
+ pvt->group.gr_name = pvt->membuf +
+ (pvt->group.gr_name - oldmembuf);
+ pvt->group.gr_passwd = pvt->membuf +
+ (pvt->group.gr_passwd - oldmembuf);
} else {
pvt->group.gr_name = cp;
strcpy(cp, src->gr_name);
@@ -405,6 +418,8 @@
strcpy(cp, src->gr_passwd);
cp += strlen(src->gr_passwd) + 1;
}
+ if (oldmembuf != NULL)
+ free(oldmembuf);
INSIST(cp >= pvt->membuf && cp <= &pvt->membuf[pvt->membufsize]);
}
Home |
Main Index |
Thread Index |
Old Index