Lines Matching refs:ta

118 	struct trust_anchor* ta = (struct trust_anchor*)elem;
119 if(!ta) return;
120 if(ta->autr) {
121 autr_point_delete(ta);
124 lock_basic_destroy(&ta->lock);
125 free(ta->name);
126 p = ta->keylist;
133 assembled_rrset_delete(ta->ds_rrset);
134 assembled_rrset_delete(ta->dnskey_rrset);
135 free(ta);
227 struct trust_anchor* ta = (struct trust_anchor*)malloc(
229 if(!ta)
231 memset(ta, 0, sizeof(*ta));
232 ta->node.key = ta;
233 ta->name = memdup(name, namelen);
234 if(!ta->name) {
235 free(ta);
238 ta->namelabs = namelabs;
239 ta->namelen = namelen;
240 ta->dclass = dclass;
241 lock_basic_init(&ta->lock);
250 rbtree_insert(anchors->tree, &ta->node);
255 return ta;
260 anchor_find_key(struct trust_anchor* ta, uint8_t* rdata, size_t rdata_len,
264 for(k = ta->keylist; k; k = k->next) {
308 struct trust_anchor* ta;
317 ta = anchor_find(anchors, name, namelabs, namelen, dclass);
318 if(!ta) {
319 ta = anchor_new_ta(anchors, name, namelabs, namelen, dclass, 1);
320 if(!ta)
322 lock_basic_lock(&ta->lock);
325 lock_basic_unlock(&ta->lock);
326 return ta;
329 if(anchor_find_key(ta, rdata, rdata_len, type)) {
330 lock_basic_unlock(&ta->lock);
331 return ta;
335 lock_basic_unlock(&ta->lock);
340 ta->numDS++;
341 else ta->numDNSKEY++;
342 k->next = ta->keylist;
343 ta->keylist = k;
344 lock_basic_unlock(&ta->lock);
345 return ta;
360 struct trust_anchor* ta;
361 if(!(ta=anchor_store_new_key(anchors, rr,
371 return ta;
383 struct trust_anchor* ta;
390 ta = anchor_store_new_key(anchors, nm, LDNS_RR_TYPE_DS,
393 return ta;
400 struct trust_anchor* ta;
411 if(!(ta=anchor_store_new_rr(anchors, rr, len, dname_len))) {
415 return ta;
430 struct trust_anchor* ta = NULL, *tanew;
467 if(onlyone && ta && ta != tanew) {
475 ta = tanew;
480 if(!onlyone && !ta) return (struct trust_anchor*)1;
481 return ta;
853 * @param ta: trust anchor.
859 assemble_it(struct trust_anchor* ta, size_t num, uint16_t type)
869 pkey->rk.dname = memdup(ta->name, ta->namelen);
875 pkey->rk.dname_len = ta->namelen;
877 pkey->rk.rrset_class = htons(ta->dclass);
915 for(tk = ta->keylist; tk; tk = tk->next) {
930 * @param ta: trust anchor
934 anchors_assemble(struct trust_anchor* ta)
936 if(ta->numDS > 0) {
937 ta->ds_rrset = assemble_it(ta, ta->numDS, LDNS_RR_TYPE_DS);
938 if(!ta->ds_rrset)
941 if(ta->numDNSKEY > 0) {
942 ta->dnskey_rrset = assemble_it(ta, ta->numDNSKEY,
944 if(!ta->dnskey_rrset)
952 * @param ta: trust anchor
956 anchors_ds_unsupported(struct trust_anchor* ta)
959 for(i=0; i<ta->numDS; i++) {
960 if(!ds_digest_algo_is_supported(ta->ds_rrset, i) ||
961 !ds_key_algo_is_supported(ta->ds_rrset, i))
969 * @param ta: trust anchor
973 anchors_dnskey_unsupported(struct trust_anchor* ta)
976 for(i=0; i<ta->numDNSKEY; i++) {
977 if(!dnskey_algo_is_supported(ta->dnskey_rrset, i) ||
978 !dnskey_size_is_supported(ta->dnskey_rrset, i))
992 struct trust_anchor* ta;
996 ta=(struct trust_anchor*)rbtree_first(anchors->tree);
997 while((rbnode_type*)ta != RBTREE_NULL) {
998 next = (struct trust_anchor*)rbtree_next(&ta->node);
999 lock_basic_lock(&ta->lock);
1000 if(ta->autr || (ta->numDS == 0 && ta->numDNSKEY == 0)) {
1001 lock_basic_unlock(&ta->lock);
1002 ta = next; /* skip */
1005 if(!anchors_assemble(ta)) {
1007 lock_basic_unlock(&ta->lock);
1011 nods = anchors_ds_unsupported(ta);
1012 nokey = anchors_dnskey_unsupported(ta);
1016 ta->name, LDNS_RR_TYPE_DS, ta->dclass);
1021 ta->name, LDNS_RR_TYPE_DNSKEY, ta->dclass);
1023 if(nods == ta->numDS && nokey == ta->numDNSKEY) {
1025 dname_str(ta->name, b);
1035 (void)rbtree_delete(anchors->tree, &ta->node);
1036 lock_basic_unlock(&ta->lock);
1037 anchors_delfunc(&ta->node, NULL);
1038 ta = next;
1041 lock_basic_unlock(&ta->lock);
1042 ta = next;
1196 struct trust_anchor *ta;
1202 RBTREE_FOR(ta, struct trust_anchor*, anchors->tree) {
1203 lock_basic_lock(&ta->lock);
1204 s += sizeof(*ta) + ta->namelen;
1206 for(k = ta->keylist; k; k = k->next) {
1209 s += assembled_rrset_get_mem(ta->ds_rrset);
1210 s += assembled_rrset_get_mem(ta->dnskey_rrset);
1211 if(ta->autr) {
1213 s += sizeof(*ta->autr);
1214 if(ta->autr->file)
1215 s += strlen(ta->autr->file);
1216 for(p = ta->autr->keys; p; p=p->next) {
1220 lock_basic_unlock(&ta->lock);
1245 /* no other contents in new ta, because it is insecure point */
1256 struct trust_anchor* ta;
1262 if(!(ta=(struct trust_anchor*)rbtree_search(anchors->tree, &key))) {
1268 lock_basic_lock(&ta->lock);
1270 if(ta->keylist || ta->autr || ta->numDS || ta->numDNSKEY) {
1272 lock_basic_unlock(&ta->lock);
1278 (void)rbtree_delete(anchors->tree, &ta->node);
1283 lock_basic_unlock(&ta->lock);
1284 anchors_delfunc(&ta->node, NULL);
1299 anchor_list_keytags(struct trust_anchor* ta, uint16_t* list, size_t num)
1302 if(ta->numDS == 0 && ta->numDNSKEY == 0)
1304 if(ta->numDS != 0 && ta->ds_rrset) {
1306 ta->ds_rrset->entry.data;
1309 list[ret++] = ds_get_keytag(ta->ds_rrset, i);
1312 if(ta->numDNSKEY != 0 && ta->dnskey_rrset) {
1314 ta->dnskey_rrset->entry.data;
1317 list[ret++] = dnskey_calc_keytag(ta->dnskey_rrset, i);
1368 struct trust_anchor* ta, *next;
1370 ta=(struct trust_anchor*)rbtree_first(anchors->tree);
1371 while((rbnode_type*)ta != RBTREE_NULL) {
1372 next = (struct trust_anchor*)rbtree_next(&ta->node);
1373 lock_basic_lock(&ta->lock);
1374 if(ta->numDS != 0 || ta->numDNSKEY != 0) {
1377 return ta;
1379 lock_basic_unlock(&ta->lock);
1380 ta = next;