parsed = true;
break;
case DNS_T_CNAME:
- /* Skip cname records */
- p += datalen;
- *remain -= datalen;
+ if (! rdns_parse_labels (resolver, in, &elt->content.cname.name, &p,
+ rep, remain, true)) {
+ rdns_info ("invalid labels in CNAME record; domain %s", rep->requested_name);
+ return -1;
+ }
+ parsed = true;
break;
default:
rdns_info ("unexpected RR type: %d; domain %s", type, rep->requested_name);
RDNS_REQUEST_INVALID = -1,
RDNS_REQUEST_A = 1,
RDNS_REQUEST_NS = 2,
+ RDNS_REQUEST_CNAME = 5,
RDNS_REQUEST_SOA = 6,
RDNS_REQUEST_PTR = 12,
RDNS_REQUEST_MX = 15,
uint16_t datalen;
uint8_t *data;
} tlsa;
+ struct {
+ char *name;
+ } cname;
};
struct rdns_reply_entry {
free (entry->content.soa.mname);
free (entry->content.soa.admin);
break;
+ case RDNS_REQUEST_CNAME:
+ free(entry->content.cname.name);
+ break;
default:
break;
}