patches for easier mirroring, to eliminate a special copy, to make www.freebsd.org/security a full copy of security.freebsd.org and be eventually be the same. For now files are just sitting there. The symlinks are missing. Discussed on: www (repository location) Discussed with: simon (so)
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Index: contrib/bind9/lib/dns/rbtdb.c
 | 
						|
===================================================================
 | 
						|
--- contrib/bind9/lib/dns/rbtdb.c	(revision 228801)
 | 
						|
+++ contrib/bind9/lib/dns/rbtdb.c	(working copy)
 | 
						|
@@ -244,6 +244,7 @@
 | 
						|
 #define RDATASET_ATTR_IGNORE		0x0004
 | 
						|
 #define RDATASET_ATTR_RETAIN		0x0008
 | 
						|
 #define RDATASET_ATTR_NXDOMAIN		0x0010
 | 
						|
+#define RDATASET_ATTR_NEGATIVE		0x0100
 | 
						|
 
 | 
						|
 typedef struct acache_cbarg {
 | 
						|
 	dns_rdatasetadditional_t	type;
 | 
						|
@@ -278,6 +279,8 @@
 | 
						|
 	(((header)->attributes & RDATASET_ATTR_RETAIN) != 0)
 | 
						|
 #define NXDOMAIN(header) \
 | 
						|
 	(((header)->attributes & RDATASET_ATTR_NXDOMAIN) != 0)
 | 
						|
+#define NEGATIVE(header) \
 | 
						|
+	(((header)->attributes & RDATASET_ATTR_NEGATIVE) != 0)
 | 
						|
 
 | 
						|
 #define DEFAULT_NODE_LOCK_COUNT		7	/*%< Should be prime. */
 | 
						|
 #define DEFAULT_CACHE_NODE_LOCK_COUNT	1009	/*%< Should be prime. */
 | 
						|
@@ -3662,7 +3665,7 @@
 | 
						|
 	    result == DNS_R_NCACHENXRRSET) {
 | 
						|
 		bind_rdataset(search.rbtdb, node, found, search.now,
 | 
						|
 			      rdataset);
 | 
						|
-		if (foundsig != NULL)
 | 
						|
+		if (!NEGATIVE(found) && foundsig != NULL)
 | 
						|
 			bind_rdataset(search.rbtdb, node, foundsig, search.now,
 | 
						|
 				      sigrdataset);
 | 
						|
 	}
 | 
						|
@@ -4248,7 +4251,7 @@
 | 
						|
 	}
 | 
						|
 	if (found != NULL) {
 | 
						|
 		bind_rdataset(rbtdb, rbtnode, found, now, rdataset);
 | 
						|
-		if (foundsig != NULL)
 | 
						|
+		if (!NEGATIVE(found) && foundsig != NULL)
 | 
						|
 			bind_rdataset(rbtdb, rbtnode, foundsig, now,
 | 
						|
 				      sigrdataset);
 | 
						|
 	}
 | 
						|
Index: contrib/bind9/bin/named/query.c
 | 
						|
===================================================================
 | 
						|
--- contrib/bind9/bin/named/query.c	(revision 228801)
 | 
						|
+++ contrib/bind9/bin/named/query.c	(working copy)
 | 
						|
@@ -1251,11 +1251,9 @@
 | 
						|
 			goto addname;
 | 
						|
 		if (result == DNS_R_NCACHENXRRSET) {
 | 
						|
 			dns_rdataset_disassociate(rdataset);
 | 
						|
-			/*
 | 
						|
-			 * Negative cache entries don't have sigrdatasets.
 | 
						|
-			 */
 | 
						|
-			INSIST(sigrdataset == NULL ||
 | 
						|
-			       ! dns_rdataset_isassociated(sigrdataset));
 | 
						|
+			if (sigrdataset != NULL &&
 | 
						|
+			    dns_rdataset_isassociated(sigrdataset))
 | 
						|
+				dns_rdataset_disassociate(sigrdataset);
 | 
						|
 		}
 | 
						|
 		if (result == ISC_R_SUCCESS) {
 | 
						|
 			mname = NULL;
 | 
						|
@@ -1296,8 +1294,9 @@
 | 
						|
 			goto addname;
 | 
						|
 		if (result == DNS_R_NCACHENXRRSET) {
 | 
						|
 			dns_rdataset_disassociate(rdataset);
 | 
						|
-			INSIST(sigrdataset == NULL ||
 | 
						|
-			       ! dns_rdataset_isassociated(sigrdataset));
 | 
						|
+			if (sigrdataset != NULL &&
 | 
						|
+			    dns_rdataset_isassociated(sigrdataset))
 | 
						|
+				dns_rdataset_disassociate(sigrdataset);
 | 
						|
 		}
 | 
						|
 		if (result == ISC_R_SUCCESS) {
 | 
						|
 			mname = NULL;
 | 
						|
@@ -1746,10 +1745,8 @@
 | 
						|
 		goto setcache;
 | 
						|
 	if (result == DNS_R_NCACHENXRRSET) {
 | 
						|
 		dns_rdataset_disassociate(rdataset);
 | 
						|
-		/*
 | 
						|
-		 * Negative cache entries don't have sigrdatasets.
 | 
						|
-		 */
 | 
						|
-		INSIST(! dns_rdataset_isassociated(sigrdataset));
 | 
						|
+		if (dns_rdataset_isassociated(sigrdataset))
 | 
						|
+			dns_rdataset_disassociate(sigrdataset);
 | 
						|
 	}
 | 
						|
 	if (result == ISC_R_SUCCESS) {
 | 
						|
 		/* Remember the result as a cache */
 |