Lines Matching refs:z

61 local_zone_out(struct local_zone* z)  in local_zone_out()  argument
65 RBTREE_FOR(d, struct local_data*, &z->data) { in local_zone_out()
75 local_zone_print(struct local_zone* z) in local_zone_print() argument
78 lock_rw_rdlock(&z->lock); in local_zone_print()
80 local_zone_type2str(z->type)); in local_zone_print()
81 log_nametypeclass(NO_VERBOSE, buf, z->name, 0, z->dclass); in local_zone_print()
82 local_zone_out(z); in local_zone_print()
83 lock_rw_unlock(&z->lock); in local_zone_print()
88 struct local_zone* z; in local_zones_print() local
91 RBTREE_FOR(z, struct local_zone*, &zones->ztree) { in local_zones_print()
92 local_zone_print(z); in local_zones_print()
115 struct local_zone* z = (struct local_zone*)n->key; in lzdel() local
116 local_zone_delete(z); in lzdel()
131 local_zone_delete(struct local_zone* z) in local_zone_delete() argument
133 if(!z) in local_zone_delete()
135 lock_rw_destroy(&z->lock); in local_zone_delete()
136 regional_destroy(z->region); in local_zone_delete()
137 free(z->name); in local_zone_delete()
138 free(z->taglist); in local_zone_delete()
139 free(z); in local_zone_delete()
187 struct local_zone* z = (struct local_zone*)calloc(1, sizeof(*z)); in local_zone_create() local
188 if(!z) { in local_zone_create()
191 z->node.key = z; in local_zone_create()
192 z->dclass = dclass; in local_zone_create()
193 z->type = t; in local_zone_create()
194 z->name = nm; in local_zone_create()
195 z->namelen = len; in local_zone_create()
196 z->namelabs = labs; in local_zone_create()
197 lock_rw_init(&z->lock); in local_zone_create()
198 z->region = regional_create_nochunk(sizeof(struct regional)); in local_zone_create()
199 if(!z->region) { in local_zone_create()
200 free(z); in local_zone_create()
203 rbtree_init(&z->data, &local_data_cmp); in local_zone_create()
204 lock_protect(&z->lock, &z->parent, sizeof(*z)-sizeof(rbnode_type)); in local_zone_create()
206 return z; in local_zone_create()
214 struct local_zone* z = local_zone_create(nm, len, labs, t, c); in lz_enter_zone_dname() local
215 if(!z) { in lz_enter_zone_dname()
223 lock_rw_wrlock(&z->lock); in lz_enter_zone_dname()
224 if(!rbtree_insert(&zones->ztree, &z->node)) { in lz_enter_zone_dname()
229 lock_rw_unlock(&z->lock); in lz_enter_zone_dname()
232 oldz = z; in lz_enter_zone_dname()
234 z = local_zones_find(zones, nm, len, labs, c); in lz_enter_zone_dname()
235 lock_rw_wrlock(&z->lock); in lz_enter_zone_dname()
238 return z; in lz_enter_zone_dname()
241 return z; in lz_enter_zone_dname()
249 struct local_zone* z; in lz_enter_zone() local
263 if(!(z=lz_enter_zone_dname(zones, nm, len, labs, t, dclass))) { in lz_enter_zone()
267 return z; in lz_enter_zone()
460 local_zone_find_data(struct local_zone* z, uint8_t* nm, size_t nmlen, int nmlabs) in local_zone_find_data() argument
467 return (struct local_data*)rbtree_search(&z->data, &key.node); in local_zone_find_data()
472 lz_find_create_node(struct local_zone* z, uint8_t* nm, size_t nmlen, in lz_find_create_node() argument
475 struct local_data* ld = local_zone_find_data(z, nm, nmlen, nmlabs); in lz_find_create_node()
478 ld = (struct local_data*)regional_alloc_zero(z->region, in lz_find_create_node()
485 ld->name = regional_alloc_init(z->region, nm, nmlen); in lz_find_create_node()
492 if(!rbtree_insert(&z->data, &ld->node)) { in lz_find_create_node()
496 if(nmlabs > z->namelabs) { in lz_find_create_node()
498 if(!lz_find_create_node(z, nm, nmlen, nmlabs-1, res)) in lz_find_create_node()
512 lz_mark_soa_for_zone(struct local_zone* z, struct ub_packed_rrset_key* soa_rrset, in lz_mark_soa_for_zone() argument
516 regional_alloc_zero(z->region, sizeof(*pd)); in lz_mark_soa_for_zone()
518 regional_alloc_zero(z->region, sizeof(*rrset_negative)); in lz_mark_soa_for_zone()
525 z->soa = soa_rrset; in lz_mark_soa_for_zone()
534 if(!rrset_insert_rr(z->region, pd, rdata, rdata_len, ttl, rrstr)) in lz_mark_soa_for_zone()
544 z->soa_negative = rrset_negative; in lz_mark_soa_for_zone()
549 local_zone_enter_rr(struct local_zone* z, uint8_t* nm, size_t nmlen, in local_zone_enter_rr() argument
557 if(!lz_find_create_node(z, nm, nmlen, nmlabs, &node)) { in local_zone_enter_rr()
564 if((z->type == local_zone_redirect || in local_zone_enter_rr()
565 z->type == local_zone_inform_redirect) && node->rrsets) { in local_zone_enter_rr()
581 rrset = new_local_rrset(z->region, node, rrtype, rrclass); in local_zone_enter_rr()
584 if(query_dname_compare(node->name, z->name) == 0) { in local_zone_enter_rr()
588 !lz_mark_soa_for_zone(z, rrset->rrset, rdata, rdata_len, ttl, in local_zone_enter_rr()
601 return rrset_insert_rr(z->region, pd, rdata, rdata_len, ttl, rrstr); in local_zone_enter_rr()
606 lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr) in lz_enter_rr_into_zone() argument
621 log_assert(z->dclass == rrclass); in lz_enter_rr_into_zone()
622 if((z->type == local_zone_redirect || in lz_enter_rr_into_zone()
623 z->type == local_zone_inform_redirect) && in lz_enter_rr_into_zone()
624 query_dname_compare(z->name, nm) != 0) { in lz_enter_rr_into_zone()
631 ret = local_zone_enter_rr(z, nm, nmlen, nmlabs, rrtype, rrclass, ttl, in lz_enter_rr_into_zone()
645 struct local_zone* z; in lz_enter_rr_str() local
653 z = local_zones_lookup(zones, rr_name, len, labs, rr_class, rr_type); in lz_enter_rr_str()
654 if(!z) { in lz_enter_rr_str()
658 lock_rw_wrlock(&z->lock); in lz_enter_rr_str()
661 r = lz_enter_rr_into_zone(z, rr); in lz_enter_rr_str()
662 lock_rw_unlock(&z->lock); in lz_enter_rr_str()
674 struct local_zone* z; in lz_enter_zone_tag() local
683 z = local_zones_find(zones, dname, dname_len, dname_labs, rr_class); in lz_enter_zone_tag()
684 if(!z) { in lz_enter_zone_tag()
689 lock_rw_wrlock(&z->lock); in lz_enter_zone_tag()
691 free(z->taglist); in lz_enter_zone_tag()
692 z->taglist = memdup(list, len); in lz_enter_zone_tag()
693 z->taglen = len; in lz_enter_zone_tag()
694 if(z->taglist) in lz_enter_zone_tag()
696 lock_rw_unlock(&z->lock); in lz_enter_zone_tag()
711 struct local_zone* z; in lz_enter_override() local
739 z = local_zones_find(zones, dname, dname_len, dname_labs, rr_class); in lz_enter_override()
740 if(!z) { in lz_enter_override()
745 lock_rw_wrlock(&z->lock); in lz_enter_override()
749 if(!z->override_tree) { in lz_enter_override()
750 z->override_tree = (struct rbtree_type*)regional_alloc_zero( in lz_enter_override()
751 z->region, sizeof(*z->override_tree)); in lz_enter_override()
752 if(!z->override_tree) { in lz_enter_override()
753 lock_rw_unlock(&z->lock); in lz_enter_override()
757 addr_tree_init(z->override_tree); in lz_enter_override()
760 if(z->override_tree) { in lz_enter_override()
763 z->region, sizeof(*n)); in lz_enter_override()
765 lock_rw_unlock(&z->lock); in lz_enter_override()
770 if(!addr_tree_insert(z->override_tree, in lz_enter_override()
772 lock_rw_unlock(&z->lock); in lz_enter_override()
779 lock_rw_unlock(&z->lock); in lz_enter_override()
789 struct local_zone* z; in lz_enter_zones() local
794 z= in lz_enter_zones()
799 lock_rw_unlock(&z->lock); in lz_enter_zones()
808 struct local_zone z; in lz_exists() local
809 z.node.key = &z; in lz_exists()
810 z.dclass = LDNS_RR_CLASS_IN; in lz_exists()
811 if(!parse_dname(name, &z.name, &z.namelen, &z.namelabs)) { in lz_exists()
816 if(rbtree_search(&zones->ztree, &z.node)) { in lz_exists()
818 free(z.name); in lz_exists()
822 free(z.name); in lz_exists()
850 struct local_zone* z; in add_empty_default() local
854 if(!(z=lz_enter_zone(zones, name, "static", LDNS_RR_CLASS_IN))) in add_empty_default()
858 if(!lz_enter_rr_into_zone(z, str)) { in add_empty_default()
859 lock_rw_unlock(&z->lock); in add_empty_default()
863 if(!lz_enter_rr_into_zone(z, str)) { in add_empty_default()
864 lock_rw_unlock(&z->lock); in add_empty_default()
867 lock_rw_unlock(&z->lock); in add_empty_default()
874 struct local_zone* z; in local_zone_enter_defaults() local
888 if(!(z=lz_enter_zone(zones, "localhost.", "redirect", in local_zone_enter_defaults()
890 !lz_enter_rr_into_zone(z, in local_zone_enter_defaults()
892 !lz_enter_rr_into_zone(z, in local_zone_enter_defaults()
895 !lz_enter_rr_into_zone(z, in local_zone_enter_defaults()
897 !lz_enter_rr_into_zone(z, in local_zone_enter_defaults()
900 if(z) { lock_rw_unlock(&z->lock); } in local_zone_enter_defaults()
903 lock_rw_unlock(&z->lock); in local_zone_enter_defaults()
908 if(!(z=lz_enter_zone(zones, "127.in-addr.arpa.", "static", in local_zone_enter_defaults()
910 !lz_enter_rr_into_zone(z, in local_zone_enter_defaults()
912 !lz_enter_rr_into_zone(z, in local_zone_enter_defaults()
915 !lz_enter_rr_into_zone(z, in local_zone_enter_defaults()
918 if(z) { lock_rw_unlock(&z->lock); } in local_zone_enter_defaults()
921 lock_rw_unlock(&z->lock); in local_zone_enter_defaults()
926 …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.a… in local_zone_enter_defaults()
928 !lz_enter_rr_into_zone(z, in local_zone_enter_defaults()
930 !lz_enter_rr_into_zone(z, in local_zone_enter_defaults()
933 !lz_enter_rr_into_zone(z, in local_zone_enter_defaults()
936 if(z) { lock_rw_unlock(&z->lock); } in local_zone_enter_defaults()
939 lock_rw_unlock(&z->lock); in local_zone_enter_defaults()
1058 struct local_zone* z = local_zones_lookup(zones, in lz_setup_implicit() local
1060 if(z) { in lz_setup_implicit()
1061 uint8_t* name = memdup(z->name, z->namelen); in lz_setup_implicit()
1062 size_t znamelen = z->namelen; in lz_setup_implicit()
1063 int znamelabs = z->namelabs; in lz_setup_implicit()
1064 enum localzone_type ztype = z->type; in lz_setup_implicit()
1073 z = in lz_setup_implicit()
1081 lock_rw_unlock(&z->lock); in lz_setup_implicit()
1114 struct local_zone* z; in lz_setup_implicit() local
1129 z= in lz_setup_implicit()
1135 lock_rw_unlock(&z->lock); in lz_setup_implicit()
1468 local_data_answer(struct local_zone* z, struct module_env* env, in local_data_answer() argument
1484 key.name = z->name; in local_data_answer()
1485 key.namelen = z->namelen; in local_data_answer()
1486 key.namelabs = z->namelabs; in local_data_answer()
1505 ld = (struct local_data*)rbtree_search(&z->data, &key.node); in local_data_answer()
1605 local_zone_does_not_cover(struct local_zone* z, struct query_info* qinfo, in local_zone_does_not_cover() argument
1611 if(z->type == local_zone_always_transparent || z->type == local_zone_block_a) in local_zone_does_not_cover()
1613 if(z->type != local_zone_transparent in local_zone_does_not_cover()
1614 && z->type != local_zone_typetransparent in local_zone_does_not_cover()
1615 && z->type != local_zone_inform) in local_zone_does_not_cover()
1621 ld = (struct local_data*)rbtree_search(&z->data, &key.node); in local_zone_does_not_cover()
1622 if(z->type == local_zone_transparent || z->type == local_zone_inform) in local_zone_does_not_cover()
1640 local_zones_zone_answer(struct local_zone* z, struct module_env* env, in local_zones_zone_answer() argument
1678 if(z != NULL && z->soa && z->soa_negative) in local_zones_zone_answer()
1680 z->soa_negative, 0, rcode); in local_zones_zone_answer()
1746 if(z != NULL && z->soa && z->soa_negative) in local_zones_zone_answer()
1748 z->soa_negative, 0, rcode); in local_zones_zone_answer()
1761 lz_inform_print(struct local_zone* z, struct query_info* qinfo, in lz_inform_print() argument
1767 dname_str(z->name, zname); in lz_inform_print()
1769 snprintf(txt, sizeof(txt), "%s %s %s@%u", zname, local_zone_type2str(z->type), ip, in lz_inform_print()
1844 struct local_zone* z = NULL; in local_zones_answer() local
1851 (z = local_zones_lookup(view->local_zones, in local_zones_answer()
1854 lock_rw_rdlock(&z->lock); in local_zones_answer()
1855 lzt = z->type; in local_zones_answer()
1858 lock_rw_unlock(&z->lock); in local_zones_answer()
1859 z = NULL; in local_zones_answer()
1861 if(z && (lzt == local_zone_transparent || in local_zones_answer()
1866 local_zone_does_not_cover(z, qinfo, labs)) { in local_zones_answer()
1867 lock_rw_unlock(&z->lock); in local_zones_answer()
1868 z = NULL; in local_zones_answer()
1870 if(view->local_zones && !z && !view->isfirst){ in local_zones_answer()
1874 if(z && verbosity >= VERB_ALGO) { in local_zones_answer()
1876 dname_str(z->name, zname); in local_zones_answer()
1882 if(!z) { in local_zones_answer()
1885 if(!(z = local_zones_tags_lookup(zones, qinfo->qname, in local_zones_answer()
1891 lock_rw_rdlock(&z->lock); in local_zones_answer()
1892 lzt = lz_type(taglist, taglen, z->taglist, z->taglen, in local_zones_answer()
1893 tagactions, tagactionssize, z->type, repinfo, in local_zones_answer()
1894 z->override_tree, &tag, tagname, num_tags); in local_zones_answer()
1896 if(z && verbosity >= VERB_ALGO) { in local_zones_answer()
1898 dname_str(z->name, zname); in local_zones_answer()
1908 lz_inform_print(z, qinfo, &repinfo->client_addr, in local_zones_answer()
1917 && local_data_answer(z, env, qinfo, edns, repinfo, buf, temp, labs, in local_zones_answer()
1919 lock_rw_unlock(&z->lock); in local_zones_answer()
1924 r = local_zones_zone_answer(z, env, qinfo, edns, repinfo, buf, temp, ld, lzt); in local_zones_answer()
1925 lock_rw_unlock(&z->lock); in local_zones_answer()
2003 set_kiddo_parents(struct local_zone* z, struct local_zone* match, in set_kiddo_parents() argument
2009 struct local_zone* p = z; in set_kiddo_parents()
2012 p->dclass == z->dclass && dname_strict_subdomain(p->name, in set_kiddo_parents()
2013 p->namelabs, z->name, z->namelabs)) { in set_kiddo_parents()
2032 struct local_zone* z = local_zone_create(name, len, labs, tp, dclass); in local_zones_add_zone() local
2033 if(!z) { in local_zones_add_zone()
2037 lock_rw_wrlock(&z->lock); in local_zones_add_zone()
2040 z->parent = local_zones_find(zones, name, len, labs, dclass); in local_zones_add_zone()
2043 if(!rbtree_insert(&zones->ztree, &z->node)) { in local_zones_add_zone()
2045 lock_rw_unlock(&z->lock); in local_zones_add_zone()
2046 local_zone_delete(z); in local_zones_add_zone()
2052 set_kiddo_parents(z, z->parent, z); in local_zones_add_zone()
2054 lock_rw_unlock(&z->lock); in local_zones_add_zone()
2055 return z; in local_zones_add_zone()
2058 void local_zones_del_zone(struct local_zones* zones, struct local_zone* z) in local_zones_del_zone() argument
2061 lock_rw_wrlock(&z->lock); in local_zones_del_zone()
2062 set_kiddo_parents(z, z, z->parent); in local_zones_del_zone()
2065 (void)rbtree_delete(&zones->ztree, z); in local_zones_del_zone()
2068 lock_rw_unlock(&z->lock); in local_zones_del_zone()
2069 local_zone_delete(z); in local_zones_del_zone()
2079 struct local_zone* z; in local_zones_add_RR() local
2088 z = local_zones_lookup(zones, rr_name, len, labs, rr_class, rr_type); in local_zones_add_RR()
2089 if(!z) { in local_zones_add_RR()
2090 z = local_zones_add_zone(zones, rr_name, len, labs, rr_class, in local_zones_add_RR()
2092 if(!z) { in local_zones_add_RR()
2099 lock_rw_wrlock(&z->lock); in local_zones_add_RR()
2101 r = lz_enter_rr_into_zone(z, rr); in local_zones_add_RR()
2102 lock_rw_unlock(&z->lock); in local_zones_add_RR()
2123 del_empty_term(struct local_zone* z, struct local_data* d, in del_empty_term() argument
2129 (void)rbtree_delete(&z->data, d); in del_empty_term()
2136 d = local_zone_find_data(z, name, len, labs); in del_empty_term()
2161 struct local_zone* z; in local_zones_del_data() local
2166 z = local_zones_lookup(zones, name, len, labs, dclass, LDNS_RR_TYPE_DS); in local_zones_del_data()
2167 if(z) { in local_zones_del_data()
2168 lock_rw_wrlock(&z->lock); in local_zones_del_data()
2169 d = local_zone_find_data(z, name, len, labs); in local_zones_del_data()
2172 del_empty_term(z, d, name, len, labs); in local_zones_del_data()
2174 lock_rw_unlock(&z->lock); in local_zones_del_data()
2180 z = local_zones_lookup(zones, name, len, labs, dclass, 0); in local_zones_del_data()
2181 if(!z) { in local_zones_del_data()
2186 lock_rw_wrlock(&z->lock); in local_zones_del_data()
2190 d = local_zone_find_data(z, name, len, labs); in local_zones_del_data()
2195 if(query_dname_compare(d->name, z->name) == 0) { in local_zones_del_data()
2196 z->soa = NULL; in local_zones_del_data()
2197 z->soa_negative = NULL; in local_zones_del_data()
2201 del_empty_term(z, d, name, len, labs); in local_zones_del_data()
2204 lock_rw_unlock(&z->lock); in local_zones_del_data()