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