51 ldns_rbnode_t* node = (ldns_rbnode_t*) malloc(
sizeof(ldns_rbnode_t));
55 node->key = domain->
dname;
68 ldns_rbnode_t* node = (ldns_rbnode_t*) malloc(
sizeof(ldns_rbnode_t));
72 node->key = denial->
dname;
83 domain_compare(
const void* a,
const void* b)
85 ldns_rdf* x = (ldns_rdf*)a;
86 ldns_rdf* y = (ldns_rdf*)b;
87 return ldns_dname_compare(x, y);
99 db->
denials = ldns_rbtree_create(domain_compare);
113 db->
domains = ldns_rbtree_create(domain_compare);
140 namedb_init_domains(db);
172 namedb_domain_search(ldns_rbtree_t* tree, ldns_rdf* dname)
174 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
175 if (!tree || !dname) {
178 node = ldns_rbtree_search(tree, dname);
179 if (node && node != LDNS_RBTREE_NULL) {
180 return (
void*) node->data;
187 max(uint32_t a, uint32_t b)
199 uint32_t inbound_serial)
204 if (!db || !format || !zone_name) {
207 prev = max(db->
outserial, inbound_serial);
209 prev = inbound_serial;
211 ods_log_debug(
"[%s] zone %s update serial: format=%s in=%u internal=%u "
218 " increase %u. Serial set to %u",
db_str, zone_name, soa, prev,
226 }
else if (
ods_strcmp(format,
"unixtime") == 0) {
231 "%u does not increase %u. Serial set to %u",
db_str,
232 zone_name, soa, prev, (prev+1));
236 }
else if (
ods_strcmp(format,
"datecounter") == 0) {
241 "serial: %u does not increase %u. Serial set to %u",
db_str,
242 zone_name, soa, prev, (prev+1));
246 }
else if (
ods_strcmp(format,
"counter") == 0) {
247 soa = inbound_serial + 1;
253 soa = inbound_serial;
255 ods_log_error(
"[%s] zone %s cannot keep SOA SERIAL from input zone "
256 " (%u): previous output SOA SERIAL is %u",
db_str, zone_name,
267 if (update > 0x7FFFFFFF) {
288 ldns_rdf* parent_rdf = NULL;
300 while (domain && ldns_dname_is_subdomain(domain->
dname, apex) &&
301 ldns_dname_compare(domain->
dname, apex) != 0) {
309 parent_rdf = ldns_dname_left_chop(domain->
dname);
311 ods_log_error(
"[%s] unable to entize domain: left chop failed",
316 if (!parent_domain) {
318 ldns_rdf_deep_free(parent_rdf);
319 if (!parent_domain) {
324 domain->
parent = parent_domain;
326 domain = parent_domain;
328 ldns_rdf_deep_free(parent_rdf);
329 domain->
parent = parent_domain;
360 ldns_rbnode_t* new_node = LDNS_RBTREE_NULL;
361 if (!dname || !db || !db->
domains) {
366 ods_log_error(
"[%s] unable to add domain: domain_create() failed",
370 new_node = domain2node(domain);
372 ods_log_error(
"[%s] unable to add domain: domain2node() failed",
376 if (ldns_rbtree_insert(db->
domains, new_node) == NULL) {
380 free((
void*)new_node);
384 domain->
node = new_node;
398 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
399 if (!domain || !db || !db->
domains) {
408 node = ldns_rbtree_delete(db->
domains, (
const void*)domain->
dname);
445 ldns_rbnode_t* n = LDNS_RBTREE_NULL;
454 n = ldns_rbtree_next(domain->
node);
459 if(d && ldns_dname_is_subdomain(d->
dname, domain->
dname)) {
474 return (domain_is_empty_terminal(domain) && !domain->
denial);
485 ldns_rr_type dstatus = LDNS_RR_TYPE_FIRST;
491 if (dstatus == LDNS_RR_TYPE_DNAME || dstatus == LDNS_RR_TYPE_A) {
500 denial->
domain = (
void*) domain;
501 domain->
denial = (
void*) denial;
515 ldns_rr_type dstatus = LDNS_RR_TYPE_FIRST;
522 if (dstatus == LDNS_RR_TYPE_DNAME || dstatus == LDNS_RR_TYPE_A) {
530 if (dstatus == LDNS_RR_TYPE_NS) {
537 denial->
domain = (
void*) domain;
538 domain->
denial = (
void*) denial;
555 zone = (
void*) domain->
zone;
559 namedb_add_nsec_trigger(db, domain);
576 ldns_rr_type dstatus = LDNS_RR_TYPE_FIRST;
582 if (dstatus == LDNS_RR_TYPE_DNAME || dstatus == LDNS_RR_TYPE_A ||
583 domain_is_empty_terminal(domain) || !domain->
rrsets) {
602 ldns_rr_type dstatus = LDNS_RR_TYPE_FIRST;
609 if (dstatus == LDNS_RR_TYPE_DNAME || dstatus == LDNS_RR_TYPE_A ||
610 domain_is_empty_terminal(domain)) {
616 }
else if (n3p->
flags) {
620 if (dstatus == LDNS_RR_TYPE_NS) {
640 unsigned is_deleted = 0;
644 zone = (
void*) domain->
zone;
651 namedb_del_nsec_trigger(db, domain);
655 namedb_del_nsec3_trigger(db, domain,
661 if (domain_can_be_deleted(domain)) {
681 ldns_rdf* hashed_ownername = NULL;
682 ldns_rdf* hashed_label = NULL;
690 hashed_label = ldns_nsec3_hash_name(dname, nsec3params->
algorithm,
696 hashed_ownername = ldns_dname_cat_clone((
const ldns_rdf*) hashed_label,
697 (
const ldns_rdf*) apex);
698 if (!hashed_ownername) {
701 ldns_rdf_deep_free(hashed_label);
702 return hashed_ownername;
714 ldns_rbnode_t* new_node = LDNS_RBTREE_NULL;
715 ldns_rbnode_t* pnode = LDNS_RBTREE_NULL;
716 ldns_rdf* owner = NULL;
726 owner = dname_hash(dname, z->
apex, n3p);
728 owner = ldns_rdf_clone(dname);
731 ods_log_error(
"[%s] unable to add denial: create owner failed",
737 ods_log_error(
"[%s] unable to add denial: denial_create() failed",
741 new_node = denial2node(denial);
743 ods_log_error(
"[%s] unable to add denial: denial2node() failed",
747 if (!ldns_rbtree_insert(db->
denials, new_node)) {
751 free((
void*)new_node);
756 denial->
node = new_node;
758 pnode = ldns_rbtree_previous(new_node);
759 if (!pnode || pnode == LDNS_RBTREE_NULL) {
760 pnode = ldns_rbtree_last(db->
denials);
778 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
779 ldns_rbnode_t* pnode = LDNS_RBTREE_NULL;
782 if (!denial || !db || !db->
denials) {
786 ods_log_error(
"[%s] unable to delete denial: denial in use [#%u]",
791 pnode = ldns_rbtree_previous(denial->
node);
792 if (!pnode || pnode == LDNS_RBTREE_NULL) {
793 pnode = ldns_rbtree_last(db->
denials);
798 node = ldns_rbtree_delete(db->
denials, (
const void*)denial->
dname);
821 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
826 node = ldns_rbtree_first(db->
domains);
827 if (!node || node == LDNS_RBTREE_NULL) {
830 while (node && node != LDNS_RBTREE_NULL) {
832 node = ldns_rbtree_next(node);
835 node = ldns_rbtree_first(db->
domains);
836 if (!node || node == LDNS_RBTREE_NULL) {
839 while (node && node != LDNS_RBTREE_NULL) {
841 node = ldns_rbtree_next(node);
842 if (!namedb_del_denial_trigger(db, domain, 0)) {
844 namedb_add_denial_trigger(db, domain);
858 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
863 node = ldns_rbtree_first(db->
domains);
864 if (!node || node == LDNS_RBTREE_NULL) {
867 while (node && node != LDNS_RBTREE_NULL) {
869 node = ldns_rbtree_next(node);
871 (void) namedb_del_denial_trigger(db, domain, 1);
884 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
885 ldns_rbnode_t* nxt_node = LDNS_RBTREE_NULL;
888 uint32_t nsec_added = 0;
890 node = ldns_rbtree_first(db->
denials);
891 while (node && node != LDNS_RBTREE_NULL) {
893 nxt_node = ldns_rbtree_next(node);
894 if (!nxt_node || nxt_node == LDNS_RBTREE_NULL) {
895 nxt_node = ldns_rbtree_first(db->
denials);
899 node = ldns_rbtree_next(node);
902 *num_added = nsec_added;
916 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
929 if (db->
domains->root != LDNS_RBTREE_NULL) {
930 node = ldns_rbtree_first(db->
domains);
932 while (node && node != LDNS_RBTREE_NULL) {
940 "CNAME and other data at the same name",
LOG_ERR);
946 "multiple CNAMEs at the same name",
LOG_ERR);
955 "multiple DNAMEs at the same name",
LOG_ERR);
959 if (!soa_seen && domain->
is_apex) {
965 "Wrong number of SOA records, should be 1",
LOG_ERR);
979 node = ldns_rbtree_next(node);
992 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
1003 node = ldns_rbtree_first(db->
denials);
1004 while (node && node != LDNS_RBTREE_NULL) {
1006 if (!denial->
rrset) {
1007 node = ldns_rbtree_next(node);
1030 denial->
rrset = NULL;
1031 node = ldns_rbtree_next(node);
1045 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
1047 if (!fd || !db || !db->
domains) {
1049 ods_log_error(
"[%s] unable to export namedb: file descriptor "
1050 "or name database missing",
db_str);
1055 node = ldns_rbtree_first(db->
domains);
1056 if (!node || node == LDNS_RBTREE_NULL) {
1057 fprintf(fd,
"; empty zone\n");
1063 while (node && node != LDNS_RBTREE_NULL) {
1068 node = ldns_rbtree_next(node);
1079 domain_delfunc(ldns_rbnode_t* elem)
1082 if (elem && elem != LDNS_RBTREE_NULL) {
1084 domain_delfunc(elem->left);
1085 domain_delfunc(elem->right);
1098 denial_delfunc(ldns_rbnode_t* elem)
1102 if (elem && elem != LDNS_RBTREE_NULL) {
1104 denial_delfunc(elem->left);
1105 denial_delfunc(elem->right);
1125 domain_delfunc(db->
domains->root);
1126 ldns_rbtree_free(db->
domains);
1141 denial_delfunc(db->
denials->root);
1142 ldns_rbtree_free(db->
denials);
1165 namedb_cleanup_domains(db);
1178 ldns_rbnode_t* node = LDNS_RBTREE_NULL;
1184 node = ldns_rbtree_first(db->
domains);
1185 while (node && node != LDNS_RBTREE_NULL) {
1188 node = ldns_rbtree_next(node);
1191 node = ldns_rbtree_first(db->
denials);
1192 while (node && node != LDNS_RBTREE_NULL) {
1194 if (denial->
rrset) {
1197 node = ldns_rbtree_next(node);
1201 node = ldns_rbtree_first(db->
domains);
1202 while (node && node != LDNS_RBTREE_NULL) {
1205 node = ldns_rbtree_next(node);
1207 node = ldns_rbtree_first(db->
denials);
1208 while (node && node != LDNS_RBTREE_NULL) {
1210 if (denial->
rrset) {
1213 node = ldns_rbtree_next(node);