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