summaryrefslogtreecommitdiffstats
path: root/contrib/bind/bin/named/db_update.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bind/bin/named/db_update.c')
-rw-r--r--contrib/bind/bin/named/db_update.c77
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);
OpenPOWER on IntegriCloud