• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/unbound/iterator/

Lines Matching refs:rrset

46 #include "services/cache/rrset.h"
61 /** remove rrset, update loop variables */
64 struct rrset_parse* prev, struct rrset_parse** rrset)
67 && (*rrset)->dname_len <= LDNS_MAX_DOMAINLEN) {
69 dname_pkt_copy(pkt, buf, (*rrset)->dname);
71 (*rrset)->type, ntohs((*rrset)->rrset_class));
74 prev->rrset_all_next = (*rrset)->rrset_all_next;
75 else msg->rrset_first = (*rrset)->rrset_all_next;
76 if(msg->rrset_last == *rrset)
79 switch((*rrset)->section) {
85 msgparse_bucket_remove(msg, *rrset);
86 *rrset = (*rrset)->rrset_all_next;
109 /** get additional name from rrset RR, return false if no name present */
111 get_additional_name(struct rrset_parse* rrset, struct rr_parse* rr,
116 switch(rrset->type) {
152 struct rrset_parse* rrset)
159 if(!has_additional(rrset->type))
161 for(rr = rrset->rr_first; rr; rr = rr->next) {
162 if(get_additional_name(rrset, rr, &nm, &nmlen, pkt)) {
165 LDNS_RR_TYPE_A, rrset->rrset_class, 0);
168 LDNS_RR_TYPE_A, rrset->rrset_class);
175 rrset->rrset_class, 0);
177 nmlen, LDNS_RR_TYPE_AAAA, rrset->rrset_class);
187 parse_get_cname_target(struct rrset_parse* rrset, uint8_t** sname,
191 if(rrset->rr_count != 1) {
193 verbose(VERB_ALGO, "Found CNAME rrset with "
194 "size > 1: %u", (unsigned)rrset->rr_count);
196 rrset->rr_count = 1;
197 rrset->size = rrset->rr_first->size;
198 for(sig=rrset->rrsig_first; sig; sig=sig->next)
199 rrset->size += sig->size;
200 rrset->rr_last = rrset->rr_first;
201 rrset->rr_first->next = NULL;
203 if(rrset->rr_first->size < sizeof(uint16_t)+1)
205 *sname = rrset->rr_first->ttl_data + sizeof(uint32_t)
207 *snamelen = rrset->rr_first->size - sizeof(uint16_t);
209 if(rrset->rr_first->outside_packet) {
250 /** synthesize a CNAME rrset */
254 struct rrset_parse* rrset, struct rrset_parse* prev,
274 cn->section = rrset->section;
275 cn->rrset_class = rrset->rrset_class;
341 struct rrset_parse* rrset;
342 for(rrset = msg->rrset_first; rrset; rrset = rrset->rrset_all_next)
343 if(rrset->type == LDNS_RR_TYPE_SOA &&
344 rrset->section == LDNS_SECTION_AUTHORITY)
366 struct rrset_parse* rrset, *prev, *nsset=NULL;
376 /* walk through the parse packet rrset list, keep track of previous
379 rrset = msg->rrset_first;
380 while(rrset && rrset->section == LDNS_SECTION_ANSWER) {
381 if(rrset->type == LDNS_RR_TYPE_DNAME &&
382 pkt_strict_sub(pkt, sname, rrset->dname)) {
383 /* check if next rrset is correct CNAME. else,
385 struct rrset_parse* nx = rrset->rrset_all_next;
388 if(rrset->rr_count != 1) {
389 verbose(VERB_ALGO, "Found DNAME rrset with "
391 (unsigned)rrset->rr_count);
394 if(!synth_cname(sname, snamelen, rrset, alias,
409 prev = rrset;
410 rrset = nx;
415 /* synth a CNAME rrset */
417 aliaslen, region, msg, rrset, rrset, nx, pkt);
424 rrset = nx;
430 if(dname_pkt_compare(pkt, sname, rrset->dname) != 0) {
432 pkt, msg, prev, &rrset);
437 if(rrset->type == LDNS_RR_TYPE_CNAME) {
438 struct rrset_parse* nx = rrset->rrset_all_next;
456 parse_get_cname_target(rrset, &t, &tlen, pkt) &&
466 msg->rrset_last = rrset;
467 rrset->rrset_all_next =
469 nx->rrset_all_next = rrset;
471 * is other rrset removal code after
477 if(!parse_get_cname_target(rrset, &sname, &snamelen, pkt))
479 prev = rrset;
480 rrset = rrset->rrset_all_next;
483 while(rrset && rrset->section ==
486 rrset->dname) == 0) {
487 prev = rrset;
488 rrset = rrset->rrset_all_next;
496 qinfo->qtype != rrset->type) {
498 pkt, msg, prev, &rrset);
502 /* Mark the additional names from relevant rrset as OK. */
505 if(dname_pkt_compare(pkt, qinfo->qname, rrset->dname) == 0)
506 mark_additional_rrset(pkt, msg, rrset);
508 prev = rrset;
509 rrset = rrset->rrset_all_next;
513 while(rrset && rrset->section == LDNS_SECTION_AUTHORITY) {
514 if(rrset->type==LDNS_RR_TYPE_DNAME ||
515 rrset->type==LDNS_RR_TYPE_CNAME ||
516 rrset->type==LDNS_RR_TYPE_A ||
517 rrset->type==LDNS_RR_TYPE_AAAA) {
519 "RRset:", pkt, msg, prev, &rrset);
523 if(rrset->type==LDNS_RR_TYPE_NS) {
525 if(!sub_of_pkt(pkt, qinfo->qname, rrset->dname)) {
527 "RRset:", pkt, msg, prev, &rrset);
540 "RRset:", pkt, msg, prev, &rrset);
544 nsset = rrset;
547 "RRset:", pkt, msg, prev, &rrset);
553 if(rrset->type==LDNS_RR_TYPE_DS &&
555 dname_pkt_compare(pkt, qinfo->qname, rrset->dname) == 0) {
556 rrset->section = LDNS_SECTION_ANSWER;
557 msg->ancount = rrset->rr_count + rrset->rrsig_count;
564 msg->rrset_first = rrset;
565 msg->rrset_last = rrset;
566 rrset->rrset_all_next = NULL;
569 mark_additional_rrset(pkt, msg, rrset);
570 prev = rrset;
571 rrset = rrset->rrset_all_next;
578 while(rrset && rrset->section == LDNS_SECTION_ADDITIONAL) {
580 if(rrset->type==LDNS_RR_TYPE_A ||
581 rrset->type==LDNS_RR_TYPE_AAAA)
583 if((rrset->flags & RRSET_SCRUB_OK)) {
585 rrset->flags &= ~RRSET_SCRUB_OK;
588 "RRset:", pkt, msg, prev, &rrset);
592 if(rrset->type==LDNS_RR_TYPE_DNAME ||
593 rrset->type==LDNS_RR_TYPE_CNAME ||
594 rrset->type==LDNS_RR_TYPE_NS) {
596 "RRset:", pkt, msg, prev, &rrset);
599 prev = rrset;
600 rrset = rrset->rrset_all_next;
608 * The rrset is stored in the cache but removed from the message.
614 * @param rrset: to store.
618 struct rrset_parse* rrset)
629 if(!parse_copy_decompress_rrset(pkt, msg, rrset, NULL, k)) {
643 * @param rrset: the NSEC rrset
647 static int sanitize_nsec_is_overreach(struct rrset_parse* rrset,
653 log_assert(rrset->type == LDNS_RR_TYPE_NSEC);
654 for(rr = rrset->rr_first; rr; rr = rr->next) {
691 struct rrset_parse* rrset, *prev;
693 rrset = msg->rrset_first;
698 if(rrset && rrset->type == LDNS_RR_TYPE_DNAME &&
699 rrset->section == LDNS_SECTION_ANSWER &&
700 pkt_strict_sub(pkt, qinfo->qname, rrset->dname) &&
701 pkt_sub(pkt, rrset->dname, zonename)) {
702 prev = rrset; /* DNAME allowed to stay in answer section */
703 rrset = rrset->rrset_all_next;
713 while(rrset && rrset->section == LDNS_SECTION_ANSWER) {
714 if(dname_pkt_compare(pkt, qinfo->qname, rrset->dname) != 0) {
715 if(has_additional(rrset->type)) del_addi = 1;
717 "RRset:", pkt, msg, prev, &rrset);
720 prev = rrset;
721 rrset = rrset->rrset_all_next;
732 rrset = msg->rrset_first;
733 while(rrset) {
736 if( (rrset->type == LDNS_RR_TYPE_A ||
737 rrset->type == LDNS_RR_TYPE_AAAA)) {
741 /* also do not remove entire rrset, unless all records
743 if(priv_rrset_bad(ie->priv, pkt, rrset)) {
744 remove_rrset(NULL, pkt, msg, prev, &rrset);
756 if(!pkt_sub(pkt, rrset->dname, zonename)) {
758 rrset->type == LDNS_RR_TYPE_NS &&
759 rrset->section == LDNS_SECTION_AUTHORITY &&
762 sub_of_pkt(pkt, zonename, rrset->dname)) {
763 /* noerror, nodata and this NS rrset is above
771 rrset->type == LDNS_RR_TYPE_A ||
772 rrset->type == LDNS_RR_TYPE_AAAA)) {
776 store_rrset(pkt, msg, env, rrset);
778 "poison RRset:", pkt, msg, prev, &rrset);
781 if(has_additional(rrset->type)) del_addi = 1;
783 "poison RRset:", pkt, msg, prev, &rrset);
787 if(del_addi && rrset->section == LDNS_SECTION_ADDITIONAL) {
789 "poison reference RRset:", pkt, msg, prev, &rrset);
793 if(rrset->type == LDNS_RR_TYPE_NSEC &&
794 sanitize_nsec_is_overreach(rrset, zonename)) {
796 "RRset:", pkt, msg, prev, &rrset);
799 prev = rrset;
800 rrset = rrset->rrset_all_next;