1004
1005
ISC_LINK_INIT(target, link);
1010
rr_exists(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
1011
const dns_rdata_t *rdata, isc_boolean_t *flag)
1013
dns_rdataset_t rdataset;
1014
dns_dbnode_t *node = NULL;
1015
isc_result_t result;
1017
dns_rdataset_init(&rdataset);
1018
if (rdata->type == dns_rdatatype_nsec3)
1019
CHECK(dns_db_findnsec3node(db, name, ISC_FALSE, &node));
1021
CHECK(dns_db_findnode(db, name, ISC_FALSE, &node));
1022
result = dns_db_findrdataset(db, node, ver, rdata->type, 0,
1023
(isc_stdtime_t) 0, &rdataset, NULL);
1024
if (result == ISC_R_NOTFOUND) {
1026
result = ISC_R_SUCCESS;
1030
for (result = dns_rdataset_first(&rdataset);
1031
result == ISC_R_SUCCESS;
1032
result = dns_rdataset_next(&rdataset)) {
1033
dns_rdata_t myrdata = DNS_RDATA_INIT;
1034
dns_rdataset_current(&rdataset, &myrdata);
1035
if (!dns_rdata_casecompare(&myrdata, rdata))
1038
dns_rdataset_disassociate(&rdataset);
1039
if (result == ISC_R_SUCCESS) {
1041
} else if (result == ISC_R_NOMORE) {
1043
result = ISC_R_SUCCESS;
1048
dns_db_detachnode(db, &node);
1055
dns_nsec3param_deletechains(dns_db_t *db, dns_dbversion_t *ver,
1056
dns_zone_t *zone, dns_diff_t *diff)
1058
dns_dbnode_t *node = NULL;
1059
dns_difftuple_t *tuple = NULL;
1061
dns_rdata_t rdata = DNS_RDATA_INIT;
1062
dns_rdataset_t rdataset;
1064
isc_result_t result = ISC_R_SUCCESS;
1065
unsigned char buf[DNS_NSEC3PARAM_BUFFERSIZE + 1];
1066
dns_name_t *origin = dns_zone_getorigin(zone);
1067
dns_rdatatype_t privatetype = dns_zone_getprivatetype(zone);
1069
dns_name_init(&next, NULL);
1070
dns_rdataset_init(&rdataset);
1072
result = dns_db_getoriginnode(db, &node);
1073
if (result != ISC_R_SUCCESS)
1077
* Cause all NSEC3 chains to be deleted.
1079
result = dns_db_findrdataset(db, node, ver, dns_rdatatype_nsec3param,
1080
0, (isc_stdtime_t) 0, &rdataset, NULL);
1081
if (result == ISC_R_NOTFOUND)
1083
if (result != ISC_R_SUCCESS)
1086
for (result = dns_rdataset_first(&rdataset);
1087
result == ISC_R_SUCCESS;
1088
result = dns_rdataset_next(&rdataset)) {
1089
dns_rdata_t private = DNS_RDATA_INIT;
1091
dns_rdataset_current(&rdataset, &rdata);
1093
CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_DEL, origin,
1094
rdataset.ttl, &rdata, &tuple));
1095
CHECK(do_one_tuple(&tuple, db, ver, diff));
1096
INSIST(tuple == NULL);
1098
dns_nsec3param_toprivate(&rdata, &private, privatetype,
1100
buf[2] = DNS_NSEC3FLAG_REMOVE | DNS_NSEC3FLAG_NONSEC;
1102
CHECK(rr_exists(db, ver, origin, &private, &flag));
1105
CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_ADD,
1106
origin, 0, &private,
1108
CHECK(do_one_tuple(&tuple, db, ver, diff));
1109
INSIST(tuple == NULL);
1111
dns_rdata_reset(&rdata);
1113
if (result != ISC_R_NOMORE)
1116
dns_rdataset_disassociate(&rdataset);
1119
if (privatetype == 0)
1121
result = dns_db_findrdataset(db, node, ver, privatetype, 0,
1122
(isc_stdtime_t) 0, &rdataset, NULL);
1123
if (result == ISC_R_NOTFOUND)
1125
if (result != ISC_R_SUCCESS)
1128
for (result = dns_rdataset_first(&rdataset);
1129
result == ISC_R_SUCCESS;
1130
result = dns_rdataset_next(&rdataset)) {
1131
dns_rdataset_current(&rdataset, &rdata);
1132
INSIST(rdata.length <= sizeof(buf));
1133
memcpy(buf, rdata.data, rdata.length);
1136
buf[2] == (DNS_NSEC3FLAG_REMOVE | DNS_NSEC3FLAG_NONSEC)) {
1137
dns_rdata_reset(&rdata);
1141
CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_DEL, origin,
1142
0, &rdata, &tuple));
1143
CHECK(do_one_tuple(&tuple, db, ver, diff));
1144
INSIST(tuple == NULL);
1146
buf[2] = DNS_NSEC3FLAG_REMOVE | DNS_NSEC3FLAG_NONSEC;
1148
CHECK(rr_exists(db, ver, origin, &rdata, &flag));
1151
CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_ADD,
1152
origin, 0, &rdata, &tuple));
1153
CHECK(do_one_tuple(&tuple, db, ver, diff));
1154
INSIST(tuple == NULL);
1156
dns_rdata_reset(&rdata);
1158
if (result != ISC_R_NOMORE)
1161
result = ISC_R_SUCCESS;
1164
if (dns_rdataset_isassociated(&rdataset))
1165
dns_rdataset_disassociate(&rdataset);
1166
dns_db_detachnode(db, &node);
1008
1172
dns_nsec3_addnsec3sx(dns_db_t *db, dns_dbversion_t *version,
1009
1173
dns_name_t *name, dns_ttl_t nsecttl,