Lines Matching refs:rr
40 dns_opt_parse(dns_edns0_t *NONNULL *NULLABLE ret, dns_rr_t *rr)
47 if (rr->type != dns_rrtype_opt) {
50 opt = rr->data.unparsed;
260 dns_rrdata_dump(dns_rr_t *rr, bool dump_to_stderr)
264 dns_rdata_dump_to_buf(rr, outbuf, sizeof(outbuf));
274 dns_rdata_dump_to_buf(dns_rr_t *rr, char *outbuf, size_t bufsize)
297 switch(rr->type) {
301 ((rr->data.key.flags & 0xC000) >> 14 & 3), ((rr->data.key.flags & 0x2000) >> 13) & 1,
302 ((rr->data.key.flags & 0x1000) >> 12) & 1, ((rr->data.key.flags & 0xC00) >> 10) & 3,
303 ((rr->data.key.flags & 0x300) >> 8) & 3, ((rr->data.key.flags & 0xF0) >> 4) & 15,
304 rr->data.key.flags & 15, rr->data.key.protocol, rr->data.key.algorithm);
307 for (unsigned i = 0; i < rr->data.key.len; i++) {
309 snprintf(obp, avail, "%d [%02x", rr->data.key.len, rr->data.key.key[i]);
312 snprintf(obp, avail, " %02x", rr->data.key.key[i]);
320 dns_name_print(rr->data.sig.signer, buf, sizeof(buf));
322 rr->data.sig.type, rr->data.sig.algorithm, rr->data.sig.label,
323 (unsigned long)rr->data.sig.rrttl, (unsigned long)rr->data.sig.expiry,
324 (unsigned long)rr->data.sig.inception, rr->data.sig.key_tag, buf);
326 for (unsigned i = 0; i < rr->data.sig.len; i++) {
328 snprintf(obp, avail, "%d [%02x", rr->data.sig.len, rr->data.sig.signature[i]);
331 snprintf(obp, avail, " %02x", rr->data.sig.signature[i]);
339 dns_name_print(rr->data.srv.name, buf, sizeof(buf));
340 snprintf(outbuf, bufsize, "SRV %d %d %d %s", rr->data.srv.priority, rr->data.srv.weight,
341 rr->data.srv.port, buf);
346 dns_name_print(rr->data.ptr.name, buf, sizeof(buf));
352 dns_name_print(rr->data.cname.name, buf, sizeof(buf));
358 dns_name_print(rr->data.soa.mname, buf, sizeof(buf));
361 dns_name_print(rr->data.soa.rname, buf, sizeof(buf));
362 snprintf(outbuf, bufsize, "%s %u %d %d %d %d", buf, rr->data.soa.serial, rr->data.soa.refresh,
363 rr->data.soa.retry, rr->data.soa.expire, rr->data.soa.minimum);
368 inet_ntop(AF_INET, &rr->data.a, nbuf, sizeof(nbuf));
374 inet_ntop(AF_INET6, &rr->data.aaaa, nbuf, sizeof(nbuf));
382 for (unsigned i = 0; i < rr->data.txt.len; i++) {
383 if (isascii(rr->data.txt.data[i]) && isprint(rr->data.txt.data[i])) {
384 DEPCHAR(rr->data.txt.data[i]);
386 snprintf(obp, avail, "<%x>", rr->data.txt.data[i]);
394 snprintf(outbuf, bufsize, "<rrtype %d>:", rr->type);
396 if (rr->data.unparsed.len == 0) {
400 for (unsigned i = 0; i < rr->data.unparsed.len; i++) {
401 snprintf(obp, avail, " %02x", rr->data.unparsed.data[i]);
412 dns_rdata_parse_data_(dns_rr_t *NONNULL rr, const uint8_t *buf, unsigned *NONNULL offp, unsigned target, uint16_t rdlen,
419 switch(rr->type) {
421 if (!dns_u16_parse(buf, target, offp, &rr->data.key.flags) ||
422 !dns_u8_parse(buf, target, offp, &rr->data.key.protocol) ||
423 !dns_u8_parse(buf, target, offp, &rr->data.key.algorithm)) {
426 rr->data.key.len = (unsigned)(target - *offp);
428 rr->data.key.key = debug_malloc(rr->data.key.len, file, line);
430 rr->data.key.key = malloc(rr->data.key.len);
432 if (!rr->data.key.key) {
435 memcpy(rr->data.key.key, &buf[*offp], rr->data.key.len);
436 *offp += rr->data.key.len;
440 rr->data.sig.start = rrstart;
441 if (!dns_u16_parse(buf, target, offp, &rr->data.sig.type) ||
442 !dns_u8_parse(buf, target, offp, &rr->data.sig.algorithm) ||
443 !dns_u8_parse(buf, target, offp, &rr->data.sig.label) ||
444 !dns_u32_parse(buf, target, offp, &rr->data.sig.rrttl) ||
445 !dns_u32_parse(buf, target, offp, &rr->data.sig.expiry) ||
446 !dns_u32_parse(buf, target, offp, &rr->data.sig.inception) ||
447 !dns_u16_parse(buf, target, offp, &rr->data.sig.key_tag) ||
448 !dns_name_parse_(&rr->data.sig.signer, buf, target, offp, *offp, file, line)) {
453 rr->data.sig.len = target - *offp;
455 rr->data.sig.signature = debug_malloc(rr->data.sig.len, file, line);
457 rr->data.sig.signature = malloc(rr->data.sig.len);
459 if (!rr->data.sig.signature) {
462 memcpy(rr->data.sig.signature, &buf[*offp], rr->data.sig.len);
463 *offp += rr->data.sig.len;
467 if (!dns_u16_parse(buf, target, offp, &rr->data.srv.priority) ||
468 !dns_u16_parse(buf, target, offp, &rr->data.srv.weight) ||
469 !dns_u16_parse(buf, target, offp, &rr->data.srv.port))
479 if (!dns_name_parse_(&rr->data.ptr.name, buf, target, offp, *offp, file, line)) {
485 if (!dns_name_parse_(&rr
488 if (!dns_name_parse_(&rr->data.soa.rname, buf, target, offp, *offp, file, line)) {
491 if (!dns_u32_parse(buf, target, offp, &rr->data.soa.serial) ||
492 !dns_u32_parse(buf, target, offp, &rr->data.soa.refresh) ||
493 !dns_u32_parse(buf, target, offp, &rr->data.soa.retry) ||
494 !dns_u32_parse(buf, target, offp, &rr->data.soa.expire) ||
495 !dns_u32_parse(buf, target, offp, &rr->data.soa.minimum))
506 memcpy(&rr->data.a, &buf[*offp], rdlen);
515 memcpy(&rr->data.aaaa, &buf[*offp], rdlen);
528 rr->data.txt.len = (uint8_t)left;
530 rr->data.txt.data = debug_malloc(rr->data.txt.len, file, line);
532 rr->data.txt.data = malloc(rr->data.txt.len);
534 if (rr->data.txt.data == NULL) {
535 DEBUG("dns_rdata_parse: no memory for TXT RR");
538 memcpy(rr->data.txt.data, &buf[*offp], rr->data.txt.len);
546 rr->data.unparsed.data = debug_malloc(rdlen, file, line);
548 rr->data.unparsed.data = malloc(rdlen);
550 if (rr->data.unparsed.data == NULL) {
553 memcpy(rr->data.unparsed.data, &buf[*offp], rdlen);
555 rr->data.unparsed.len = rdlen;
560 DEBUG("dns_rdata_parse: parse for rrtype %d not fully contained: %u %u", rr->type, target, *offp);
567 dns_rdata_parse_(dns_rr_t *NONNULL rr,
580 return dns_rdata_parse_data_(rr, buf, offp, target, rdlen, rrstart, file, line);
584 dns_rr_parse_(dns_rr_t *NONNULL rr, const uint8_t *buf, unsigned len, unsigned *NONNULL offp, bool rrdata_expected,
587 unsigned rrstart = *offp; // Needed to mark the start of the SIG RR for SIG(0).
589 memset(rr, 0, sizeof(*rr));
590 if (!dns_name_parse_(&rr->name, buf, len, offp, *offp, file, line)) {
594 if (!dns_u16_parse(buf, len, offp, &rr->type)) {
598 if (!dns_u16_parse(buf, len, offp, &rr->qclass)) {
603 if (!dns_u32_parse(buf, len, offp, &rr->ttl)) {
606 if (!dns_rdata_parse_(rr, buf, len, offp, rrstart, file, line)) {
611 DNS_NAME_GEN_SRP(rr->name, name_buf);
614 rr->type, rr->qclass, DNS_NAME_PARAM_SRP(rr->name, name_buf), rrdata_expected ? " rrdata:" : "");
617 rr->type, rr->qclass, DNS_NAME_PARAM_SRP(rr->name, name_buf), rrdata_expected ? " rrdata:" : "");
620 dns_rrdata_dump(rr, dump_stderr);
626 dns_rrdata_free(dns_rr_t *rr)
628 if (rr == NULL) {
631 switch(rr->type) {
637 free(rr->data.key.key);
641 dns_name_free(rr->data.sig.signer);
642 free(rr->data.sig.signature);
649 dns_name_free(rr->data.ptr.name);
651 rr->data.ptr.name = NULL;
656 if (rr->data.soa.mname != NULL) {
657 dns_name_free(rr->data.soa.mname);
659 if (rr->data.soa.rname != NULL) {
660 dns_name_free(rr->data.soa.rname);
665 free(rr->data.txt.data);
667 rr->data.txt.data = NULL;
672 if (rr->data.unparsed.len > 0 && rr->data.unparsed.data != NULL) {
673 free(rr->data.unparsed.data);
675 rr->data.unparsed.data = NULL;
751 ERROR(name " %d RR parse failed.\n", i); \