diff options
Diffstat (limited to 'contrib/bind/bin/named/db_update.c')
-rw-r--r-- | contrib/bind/bin/named/db_update.c | 77 |
1 files changed, 46 insertions, 31 deletions
diff --git a/contrib/bind/bin/named/db_update.c b/contrib/bind/bin/named/db_update.c index d742fe9..494a0de 100644 --- a/contrib/bind/bin/named/db_update.c +++ b/contrib/bind/bin/named/db_update.c @@ -1,6 +1,6 @@ #if !defined(lint) && !defined(SABER) static const char sccsid[] = "@(#)db_update.c 4.28 (Berkeley) 3/21/91"; -static const char rcsid[] = "$Id: db_update.c,v 8.46 2001/02/08 02:05:51 marka Exp $"; +static const char rcsid[] = "$Id: db_update.c,v 8.50 2001/10/24 23:53:09 marka Exp $"; #endif /* not lint */ /* @@ -117,7 +117,7 @@ isRefByNS(const char *name, struct hashbuf *htp) { dp->d_class == C_HS) && dp->d_type == T_NS && !dp->d_rcode && - ns_samename(name, (char *)dp->d_data) == 1) { + ns_samename(name, (const char *)dp->d_data) == 1) { return (1); } } @@ -227,7 +227,7 @@ db_update(const char *name, struct databuf *tmpdp; #endif - ns_debug(ns_log_db, 3, "db_update(%s, %#x, %#x, %#x, 0%o, %#x)%s", + ns_debug(ns_log_db, 3, "db_update(%s, %p, %p, %p, 0%o, %p)%s", name, odp, newdp, savedpp, flags, htp, (odp && (odp->d_flags&DB_F_HINT)) ? " hint" : ""); np = nlookup(name, &htp, &fname, newdp != NULL); @@ -267,9 +267,21 @@ db_update(const char *name, if (newdp && zn && !(flags & DB_NOTAUTH)) { if (nlabels(zones[zn].z_origin) > newdp->d_clev) { - ns_debug(ns_log_db, 5, - "attempted update child zone %s, %s", - zones[zn].z_origin, name); + if ((!ISVALIDGLUE(newdp) && + zones[newdp->d_zone].z_type == Z_PRIMARY) || + (newdp->d_type == T_NS && + !ns_samename(name, zones[zn].z_origin))) { + ns_info(ns_log_db, + "domain %s %s record in zone %s should be in zone %s", + name, p_type(newdp->d_type), + zones[newdp->d_zone].z_origin, + zones[zn].z_origin); + return (NONGLUE); + } else + ns_debug(ns_log_db, 5, + "attempted update child zone %s, %s %s", + zones[zn].z_origin, name, + p_type(newdp->d_type)); return (AUTH); } } @@ -319,11 +331,10 @@ db_update(const char *name, dp, dp, NULL, (flags|DB_NOHINTS), fcachetab, from) - != OK) { + != OK) ns_debug(ns_log_db, 3, - "db_update: hint %#x freed", dp); - db_freedata(dp); - } + "db_update: hint %p freed", dp); + db_detach(&dp); } if (odp != NULL) { @@ -749,7 +760,7 @@ db_update(const char *name, * response source address here if flags&NOTAUTH. */ fixttl(newdp); - ns_debug(ns_log_db, 3, "db_update: adding%s %#x", + ns_debug(ns_log_db, 3, "db_update: adding%s %p", (newdp->d_flags&DB_F_HINT) ? " hint":"", newdp); if (newdp->d_zone == DB_Z_CACHE && @@ -840,7 +851,8 @@ db_cmp(const struct databuf *dp1, const struct databuf *dp2) { case T_MG: case T_MR: /* Only a domain name */ - if (ns_samename((char *)dp1->d_data, (char *)dp2->d_data) == 1) + if (ns_samename((const char *)dp1->d_data, + (const char *)dp2->d_data) == 1) return (0); else return (1); @@ -852,9 +864,9 @@ db_cmp(const struct databuf *dp1, const struct databuf *dp2) { if (memcmp(dp1->d_data, dp2->d_data, NS_SIG_SIGNER)) return (1); len = NS_SIG_SIGNER + - strlen((char *)dp1->d_data + NS_SIG_SIGNER); - if (ns_samename((char *)dp1->d_data + NS_SIG_SIGNER, - (char *)dp2->d_data + NS_SIG_SIGNER) != 1) + strlen((const char *)dp1->d_data + NS_SIG_SIGNER); + if (ns_samename((const char *)dp1->d_data + NS_SIG_SIGNER, + (const char *)dp2->d_data + NS_SIG_SIGNER) != 1) return (1); return (memcmp(dp1->d_data + len, dp2->d_data + len, @@ -862,9 +874,10 @@ db_cmp(const struct databuf *dp1, const struct databuf *dp2) { case T_NXT: /* First a domain name, then binary data */ - if (ns_samename((char *)dp1->d_data, (char *)dp2->d_data) != 1) + if (ns_samename((const char *)dp1->d_data, + (const char *)dp2->d_data) != 1) return (1); - len = strlen((char *)dp1->d_data)+1; + len = strlen((const char *)dp1->d_data)+1; return (memcmp(dp1->d_data + len, dp2->d_data + len, dp1->d_size - len)); @@ -877,7 +890,7 @@ db_cmp(const struct databuf *dp1, const struct databuf *dp2) { len2 = *cp2; if (len != len2) return (1); - if (strncasecmp((char *)++cp1, (char *)++cp2, len)) + if (strncasecmp((const char *)++cp1, (const char *)++cp2, len)) return (1); cp1 += len; cp2 += len; @@ -885,21 +898,23 @@ db_cmp(const struct databuf *dp1, const struct databuf *dp2) { len2 = *cp2; if (len != len2) return (1); - return (strncasecmp((char *)++cp1, (char *)++cp2, len)); + return (strncasecmp((const char *)++cp1, (const char *)++cp2, + len)); case T_SOA: case T_MINFO: case T_RP: - if (ns_samename((char *)dp1->d_data, (char *)dp2->d_data) != 1) + if (ns_samename((const char *)dp1->d_data, + (const char *)dp2->d_data) != 1) return (1); - cp1 = dp1->d_data + strlen((char *)dp1->d_data) + 1; - cp2 = dp2->d_data + strlen((char *)dp2->d_data) + 1; - if (ns_samename((char *)cp1, (char *)cp2) != 1) + cp1 = dp1->d_data + strlen((const char *)dp1->d_data) + 1; + cp2 = dp2->d_data + strlen((const char *)dp2->d_data) + 1; + if (ns_samename((const char *)cp1, (const char *)cp2) != 1) return (1); if (dp1->d_type != T_SOA) return (0); - cp1 += strlen((char *)cp1) + 1; - cp2 += strlen((char *)cp2) + 1; + cp1 += strlen((const char *)cp1) + 1; + cp2 += strlen((const char *)cp2) + 1; return (memcmp(cp1, cp2, INT32SZ * 5)); case T_NAPTR: { @@ -937,7 +952,7 @@ db_cmp(const struct databuf *dp1, const struct databuf *dp2) { cp1 += t1; cp2 += t2; /* Replacement */ - if (ns_samename((char *)cp1, (char *)cp2) != 1) + if (ns_samename((const char *)cp1, (const char *)cp2) != 1) return (1); /* they all checked out! */ @@ -958,7 +973,7 @@ db_cmp(const struct databuf *dp1, const struct databuf *dp2) { if (*cp1++ != *cp2++ || *cp1++ != *cp2++) /* port */ return (1); } - if (ns_samename((char *)cp1, (char *)cp2) != 1) + if (ns_samename((const char *)cp1, (const char *)cp2) != 1) return (1); return (0); @@ -967,11 +982,11 @@ db_cmp(const struct databuf *dp1, const struct databuf *dp2) { cp2 = dp2->d_data; if (*cp1++ != *cp2++ || *cp1++ != *cp2++) /* cmp prio */ return (1); - if (ns_samename((char *)cp1, (char *)cp2) != 1) + if (ns_samename((const char *)cp1, (const char *)cp2) != 1) return (1); - cp1 += strlen((char *)cp1) + 1; - cp2 += strlen((char *)cp2) + 1; - if (ns_samename((char *)cp1, (char *)cp2) != 1) + cp1 += strlen((const char *)cp1) + 1; + cp2 += strlen((const char *)cp2) + 1; + if (ns_samename((const char *)cp1, (const char *)cp2) != 1) return (1); return (0); |