Lines Matching defs:zones

2  * services/localzone.c - local zones authority service.
59 struct local_zones* zones = (struct local_zones*)calloc(1,
60 sizeof(*zones));
61 if(!zones)
63 rbtree_init(&zones->ztree, &local_zone_cmp);
64 lock_rw_init(&zones->lock);
65 lock_protect(&zones->lock, &zones->ztree, sizeof(zones->ztree));
67 return zones;
70 /** helper traverse to delete zones */
79 local_zones_delete(struct local_zones* zones)
81 if(!zones)
83 lock_rw_destroy(&zones->lock);
84 /* walk through zones and delete them all */
85 traverse_postorder(&zones->ztree, lzdel, NULL);
86 free(zones);
163 /* also the zones->lock protects node, parent, name*, class */
169 lz_enter_zone_dname(struct local_zones* zones, uint8_t* nm, size_t len,
179 lock_rw_wrlock(&zones->lock);
181 if(!rbtree_insert(&zones->ztree, &z->node)) {
185 lock_rw_unlock(&zones->lock);
188 lock_rw_unlock(&zones->lock);
194 lz_enter_zone(struct local_zones* zones, const char* name, const char* type,
211 if(!(z=lz_enter_zone_dname(zones, nm, len, labs, t, dclass))) {
482 lz_enter_rr_str(struct local_zones* zones, const char* rr)
495 lock_rw_rdlock(&zones->lock);
496 z = local_zones_lookup(zones, rr_name, len, labs, rr_class);
498 lock_rw_unlock(&zones->lock);
502 lock_rw_unlock(&zones->lock);
511 lz_enter_zones(struct local_zones* zones, struct config_file* cfg)
516 if(!(z=lz_enter_zone(zones, p->str, p->str2,
526 lz_exists(struct local_zones* zones, const char* name)
535 lock_rw_rdlock(&zones->lock);
536 if(rbtree_search(&zones->ztree, &z.node)) {
537 lock_rw_unlock(&zones->lock);
541 lock_rw_unlock(&zones->lock);
567 add_as112_default(struct local_zones* zones, struct config_file* cfg,
572 if(lz_exists(zones, name) || lz_nodefault(cfg, name))
574 if(!(z=lz_enter_zone(zones, name, "static", LDNS_RR_CLASS_IN)))
591 /** enter default zones */
593 lz_enter_defaults(struct local_zones* zones, struct config_file* cfg)
598 /* this list of zones is from RFC 6303 and RFC 7686 */
600 /* block localhost level zones first, then onion and later the LAN zones */
603 if(!lz_exists(zones, "localhost.") &&
605 if(!(z=lz_enter_zone(zones, "localhost.", "static",
623 if(!lz_exists(zones, "127.in-addr.arpa.") &&
625 if(!(z=lz_enter_zone(zones, "127.in-addr.arpa.", "static",
641 if(!lz_exists(zones, "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.") &&
643 if(!(z=lz_enter_zone(zones, "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.", "static",
659 if(!lz_exists(zones, "onion.") &&
661 if(!(z=lz_enter_zone(zones, "onion.", "static",
675 /* block AS112 zones, unless asked not to */
678 if(!add_as112_default(zones, cfg, *zstr)) {
689 init_parents(struct local_zones* zones)
693 lock_rw_wrlock(&zones->lock);
694 RBTREE_FOR(node, struct local_zone*, &zones->ztree) {
718 lock_rw_unlock(&zones->lock);
723 lz_setup_implicit(struct local_zones* zones, struct config_file* cfg)
737 init_parents(zones); /* to enable local_zones_lookup() */
748 lock_rw_rdlock(&zones->lock);
749 if(!local_zones_lookup(zones, rr_name, len, labs, rr_class)) {
763 lock_rw_unlock(&zones->lock);
774 lock_rw_unlock(&zones->lock);
790 if(!(z=lz_enter_zone_dname(zones, n2, nmlen, match,
798 return lz_setup_implicit(zones, cfg);
805 lz_enter_data(struct local_zones* zones, struct config_file* cfg)
809 if(!lz_enter_rr_str(zones, p->str))
828 local_zones_apply_cfg(struct local_zones* zones, struct config_file* cfg)
830 /* create zones from zone statements. */
831 if(!lz_enter_zones(zones, cfg)) {
834 /* apply default zones+content (unless disabled, or overridden) */
835 if(!lz_enter_defaults(zones, cfg)) {
839 if(!lz_setup_implicit(zones, cfg)) {
844 init_parents(zones);
846 if(!lz_enter_data(zones, cfg)) {
855 local_zones_lookup(struct local_zones* zones,
866 if(rbtree_find_less_equal(&zones->ztree, &key, &res)) {
888 local_zones_find(struct local_zones* zones,
898 return (struct local_zone*)rbtree_search(&zones->ztree, &key);
916 void local_zones_print(struct local_zones* zones)
919 lock_rw_rdlock(&zones->lock);
920 log_info("number of auth zones %u", (unsigned)zones->ztree.count);
921 RBTREE_FOR(z, struct local_zone*, &zones->ztree) {
964 lock_rw_unlock(&zones->lock);
1119 local_zones_answer(struct local_zones* zones, struct query_info* qinfo,
1130 lock_rw_rdlock(&zones->lock);
1131 z = local_zones_lookup(zones, qinfo->qname,
1134 lock_rw_unlock(&zones->lock);
1138 lock_rw_unlock(&zones->lock);
1196 /* both zones and z are locked already */
1217 struct local_zone* local_zones_add_zone(struct local_zones* zones,
1227 z->parent = local_zones_find(zones, name, len, labs, dclass);
1230 if(!rbtree_insert(&zones->ztree, &z->node)) {
1245 void local_zones_del_zone(struct local_zones* zones, struct local_zone* z)
1252 (void)rbtree_delete(&zones->ztree, z);
1260 local_zones_add_RR(struct local_zones* zones, const char* rr)
1274 lock_rw_wrlock(&zones->lock);
1275 z = local_zones_lookup(zones, rr_name, len, labs, rr_class);
1277 z = local_zones_add_zone(zones, rr_name, len, labs, rr_class,
1280 lock_rw_unlock(&zones->lock);
1287 lock_rw_unlock(&zones->lock);
1327 void local_zones_del_data(struct local_zones* zones,
1333 lock_rw_rdlock(&zones->lock);
1334 z = local_zones_lookup(zones, name, len, labs, dclass);
1337 lock_rw_unlock(&zones->lock);
1341 lock_rw_unlock(&zones->lock);