1 /**
2  * Compare an RR to a RRset. An RR and an RRset compare true if the name, type,
3  * and class match.
4  *
5  * This function does a case-insensitive name comparison.
6  *
7  * \param[in] rr the RR to compare
8  * \param[in] rrset the RRset to compare
9  *
10  * \return true if the RR could be part of the RRset, false otherwise
11  */
12 
13 bool
wdns_compare_rr_rrset(const wdns_rr_t * rr,const wdns_rrset_t * rrset)14 wdns_compare_rr_rrset(const wdns_rr_t *rr, const wdns_rrset_t *rrset)
15 {
16 	if (rr->name.len == rrset->name.len &&
17 	    rr->rrtype == rrset->rrtype &&
18 	    rr->rrclass == rrset->rrclass)
19 	{
20 		wdns_name_t name_rr;
21 		wdns_name_t name_rrset;
22 
23 		name_rr.len = rr->name.len;
24 		name_rr.data = alloca(name_rr.len);
25 		memcpy(name_rr.data, rr->name.data, name_rr.len);
26 		wdns_downcase_name(&name_rr);
27 
28 		name_rrset.len = rrset->name.len;
29 		name_rrset.data = alloca(name_rrset.len);
30 		memcpy(name_rrset.data, rrset->name.data, name_rrset.len);
31 		wdns_downcase_name(&name_rrset);
32 
33 		return (memcmp(name_rr.data, name_rrset.data, name_rr.len) == 0);
34 	}
35 
36 	return (false);
37 }
38