static inline isc_result_t totext_uri(ARGS_TOTEXT) { isc_region_t region; unsigned short priority, weight; char buf[sizeof("65000 ")]; UNUSED(tctx); REQUIRE(rdata->type == 256); REQUIRE(rdata->length != 0); dns_rdata_toregion(rdata, ®ion); /* * Priority */ priority = uint16_fromregion(®ion); isc_region_consume(®ion, 2); sprintf(buf, "%u ", priority); RETERR(str_totext(buf, target)); /* * Weight */ weight = uint16_fromregion(®ion); isc_region_consume(®ion, 2); sprintf(buf, "%u ", weight); RETERR(str_totext(buf, target)); /* * Target URI */ RETERR(multitxt_totext(®ion, target)); return (ISC_R_SUCCESS); }
static inline isc_result_t totext_ch_a(ARGS_TOTEXT) { isc_region_t region; dns_name_t name; dns_name_t prefix; isc_boolean_t sub; char buf[sizeof("0177777")]; isc_uint16_t addr; REQUIRE(rdata->type == 1); REQUIRE(rdata->rdclass == dns_rdataclass_ch); /* 3 */ REQUIRE(rdata->length != 0); dns_name_init(&name, NULL); dns_name_init(&prefix, NULL); dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&name, ®ion); isc_region_consume(®ion, name_length(&name)); addr = uint16_fromregion(®ion); sub = name_prefix(&name, tctx->origin, &prefix); RETERR(dns_name_totext(&prefix, sub, target)); sprintf(buf, "%o", addr); /* note octal */ RETERR(str_totext(" ", target)); return (str_totext(buf, target)); }
static inline isc_result_t totext_openpgpkey(ARGS_TOTEXT) { isc_region_t sr; REQUIRE(rdata->type == dns_rdatatype_openpgpkey); REQUIRE(rdata->length != 0); dns_rdata_toregion(rdata, &sr); /* * Keyring */ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext("( ", target)); if ((tctx->flags & DNS_STYLEFLAG_NOCRYPTO) == 0) { if (tctx->width == 0) /* No splitting */ RETERR(isc_base64_totext(&sr, 60, "", target)); else RETERR(isc_base64_totext(&sr, tctx->width - 2, tctx->linebreak, target)); } else RETERR(str_totext("[omitted]", target)); if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" )", target)); return (ISC_R_SUCCESS); }
isc_result_t isc_hex_totext(isc_region_t *source, int wordlength, const char *wordbreak, isc_buffer_t *target) { char buf[3]; unsigned int loops = 0; if (wordlength < 2) wordlength = 2; memset(buf, 0, sizeof(buf)); while (source->length > 0) { buf[0] = hex[(source->base[0] >> 4) & 0xf]; buf[1] = hex[(source->base[0]) & 0xf]; RETERR(str_totext(buf, target)); isc_region_consume(source, 1); loops++; if (source->length != 0 && (int)((loops + 1) * 2) >= wordlength) { loops = 0; RETERR(str_totext(wordbreak, target)); } } return (ISC_R_SUCCESS); }
static inline isc_result_t totext_lp(ARGS_TOTEXT) { isc_region_t region; dns_name_t name; dns_name_t prefix; isc_boolean_t sub; char buf[sizeof("64000")]; unsigned short num; REQUIRE(rdata->type == dns_rdatatype_lp); REQUIRE(rdata->length != 0); dns_name_init(&name, NULL); dns_name_init(&prefix, NULL); dns_rdata_toregion(rdata, ®ion); num = uint16_fromregion(®ion); isc_region_consume(®ion, 2); sprintf(buf, "%u", num); RETERR(str_totext(buf, target)); RETERR(str_totext(" ", target)); dns_name_fromregion(&name, ®ion); sub = name_prefix(&name, tctx->origin, &prefix); return (dns_name_totext(&prefix, sub, target)); }
static inline isc_result_t totext_caa(ARGS_TOTEXT) { isc_region_t region; isc_uint8_t flags; char buf[256]; UNUSED(tctx); REQUIRE(rdata->type == 257); REQUIRE(rdata->length >= 3U); REQUIRE(rdata->data != NULL); dns_rdata_toregion(rdata, ®ion); /* * Flags */ flags = uint8_consume_fromregion(®ion); sprintf(buf, "%u ", flags); RETERR(str_totext(buf, target)); /* * Tag */ RETERR(txt_totext(®ion, ISC_FALSE, target)); RETERR(str_totext(" ", target)); /* * Value */ RETERR(multitxt_totext(®ion, target)); return (ISC_R_SUCCESS); }
static inline isc_result_t totext_in_dhcid (ARGS_TOTEXT) { isc_region_t sr; char buf[sizeof (" ; 64000 255 64000")]; size_t n; REQUIRE (rdata->type == 49); REQUIRE (rdata->rdclass == 1); REQUIRE (rdata->length != 0); dns_rdata_toregion (rdata, &sr); if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR (str_totext ("( " /*) */ , target)); RETERR (isc_base64_totext (&sr, tctx->width - 2, tctx->linebreak, target)); if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) { RETERR (str_totext ( /* ( */ " )", target)); if (rdata->length > 2) { n = snprintf (buf, sizeof (buf), " ; %u %u %u", sr.base[0] * 256 + sr.base[1], sr.base[2], rdata->length - 3); INSIST (n < sizeof (buf)); RETERR (str_totext (buf, target)); } } return (ISC_R_SUCCESS); }
static inline isc_result_t totext_l64(ARGS_TOTEXT) { isc_region_t region; char buf[sizeof("xxxx:xxxx:xxxx:xxxx")]; unsigned short num; REQUIRE(rdata->type == 106); REQUIRE(rdata->length == 10); UNUSED(tctx); dns_rdata_toregion(rdata, ®ion); num = uint16_fromregion(®ion); isc_region_consume(®ion, 2); sprintf(buf, "%u", num); RETERR(str_totext(buf, target)); RETERR(str_totext(" ", target)); sprintf(buf, "%x:%x:%x:%x", region.base[0]<<8 | region.base[1], region.base[2]<<8 | region.base[3], region.base[4]<<8 | region.base[5], region.base[6]<<8 | region.base[7]); return (str_totext(buf, target)); }
static inline isc_result_t totext_cert(ARGS_TOTEXT) { isc_region_t sr; char buf[sizeof("64000 ")]; unsigned int n; REQUIRE(rdata->type == 37); REQUIRE(rdata->length != 0); UNUSED(tctx); dns_rdata_toregion(rdata, &sr); /* * Type. */ n = uint16_fromregion(&sr); isc_region_consume(&sr, 2); RETERR(dns_cert_totext((dns_cert_t)n, target)); RETERR(str_totext(" ", target)); /* * Key tag. */ n = uint16_fromregion(&sr); isc_region_consume(&sr, 2); sprintf(buf, "%u ", n); RETERR(str_totext(buf, target)); /* * Algorithm. */ RETERR(dns_secalg_totext(sr.base[0], target)); isc_region_consume(&sr, 1); /* * Cert. */ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" (", target)); RETERR(str_totext(tctx->linebreak, target)); if (tctx->width == 0) /* No splitting */ RETERR(isc_base64_totext(&sr, 60, "", target)); else RETERR(isc_base64_totext(&sr, tctx->width - 2, tctx->linebreak, target)); if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" )", target)); return (ISC_R_SUCCESS); }
static isc_result_t dns_mnemonic_totext(unsigned int value, isc_buffer_t *target, struct tbl *table) { int i = 0; char buf[sizeof("4294967296")]; while (table[i].name != NULL) { if (table[i].value == value) { return (str_totext(table[i].name, target)); } i++; } snprintf(buf, sizeof(buf), "%u", value); return (str_totext(buf, target)); }
static inline isc_result_t totext_nsec3param(ARGS_TOTEXT) { isc_region_t sr; unsigned int i, j; unsigned char hash; unsigned char flags; char buf[sizeof("65535 ")]; isc_uint32_t iterations; REQUIRE(rdata->type == dns_rdatatype_nsec3param); REQUIRE(rdata->length != 0); UNUSED(tctx); dns_rdata_toregion(rdata, &sr); hash = uint8_fromregion(&sr); isc_region_consume(&sr, 1); flags = uint8_fromregion(&sr); isc_region_consume(&sr, 1); iterations = uint16_fromregion(&sr); isc_region_consume(&sr, 2); sprintf(buf, "%u ", hash); RETERR(str_totext(buf, target)); sprintf(buf, "%u ", flags); RETERR(str_totext(buf, target)); sprintf(buf, "%u ", iterations); RETERR(str_totext(buf, target)); j = uint8_fromregion(&sr); isc_region_consume(&sr, 1); INSIST(j <= sr.length); if (j != 0) { i = sr.length; sr.length = j; RETERR(isc_hex_totext(&sr, 1, "", target)); sr.length = i - j; } else RETERR(str_totext("-", target)); return (ISC_R_SUCCESS); }
isc_result_t dns_rdataclass_tounknowntext(dns_rdataclass_t rdclass, isc_buffer_t *target) { char buf[sizeof("CLASS65535")]; snprintf(buf, sizeof(buf), "CLASS%u", rdclass); return (str_totext(buf, target)); }
static inline isc_result_t totext_rp(ARGS_TOTEXT) { isc_region_t region; dns_name_t rmail; dns_name_t email; dns_name_t prefix; isc_boolean_t sub; REQUIRE(rdata->type == dns_rdatatype_rp); REQUIRE(rdata->length != 0); dns_name_init(&rmail, NULL); dns_name_init(&email, NULL); dns_name_init(&prefix, NULL); dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&rmail, ®ion); isc_region_consume(®ion, rmail.length); dns_name_fromregion(&email, ®ion); isc_region_consume(®ion, email.length); sub = name_prefix(&rmail, tctx->origin, &prefix); RETERR(dns_name_totext(&prefix, sub, target)); RETERR(str_totext(" ", target)); sub = name_prefix(&email, tctx->origin, &prefix); return (dns_name_totext(&prefix, sub, target)); }
static inline isc_result_t totext_naptr(ARGS_TOTEXT) { isc_region_t region; dns_name_t name; dns_name_t prefix; isc_boolean_t sub; char buf[sizeof("64000")]; unsigned short num; REQUIRE(rdata->type == dns_rdatatype_naptr); REQUIRE(rdata->length != 0); dns_name_init(&name, NULL); dns_name_init(&prefix, NULL); dns_rdata_toregion(rdata, ®ion); /* * Order. */ num = uint16_fromregion(®ion); isc_region_consume(®ion, 2); sprintf(buf, "%u", num); RETERR(str_totext(buf, target)); RETERR(str_totext(" ", target)); /* * Preference. */ num = uint16_fromregion(®ion); isc_region_consume(®ion, 2); sprintf(buf, "%u", num); RETERR(str_totext(buf, target)); RETERR(str_totext(" ", target)); /* * Flags. */ RETERR(txt_totext(®ion, ISC_TRUE, target)); RETERR(str_totext(" ", target)); /* * Service. */ RETERR(txt_totext(®ion, ISC_TRUE, target)); RETERR(str_totext(" ", target)); /* * Regexp. */ RETERR(txt_totext(®ion, ISC_TRUE, target)); RETERR(str_totext(" ", target)); /* * Replacement. */ dns_name_fromregion(&name, ®ion); sub = name_prefix(&name, tctx->origin, &prefix); return (dns_name_totext(&prefix, sub, target)); }
static inline isc_result_t totext_opt(ARGS_TOTEXT) { isc_region_t r; isc_region_t or; isc_uint16_t option; isc_uint16_t length; char buf[sizeof("64000 64000")]; /* * OPT records do not have a text format. */ REQUIRE(rdata->type == 41); dns_rdata_toregion(rdata, &r); while (r.length > 0) { option = uint16_fromregion(&r); isc_region_consume(&r, 2); length = uint16_fromregion(&r); isc_region_consume(&r, 2); sprintf(buf, "%u %u", option, length); RETERR(str_totext(buf, target)); INSIST(r.length >= length); if (length > 0) { if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" (", target)); RETERR(str_totext(tctx->linebreak, target)); or = r; or.length = length; if (tctx->width == 0) /* No splitting */ RETERR(isc_base64_totext(&or, 60, "", target)); else RETERR(isc_base64_totext(&or, tctx->width - 2, tctx->linebreak, target)); isc_region_consume(&r, length); if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" )", target)); } if (r.length > 0) RETERR(str_totext(" ", target)); } return (ISC_R_SUCCESS); }
static inline isc_result_t totext_sshfp(ARGS_TOTEXT) { isc_region_t sr; char buf[sizeof("64000 ")]; unsigned int n; REQUIRE(rdata->type == 44); REQUIRE(rdata->length != 0); UNUSED(tctx); dns_rdata_toregion(rdata, &sr); /* * Algorithm. */ n = uint8_fromregion(&sr); isc_region_consume(&sr, 1); sprintf(buf, "%u ", n); RETERR(str_totext(buf, target)); /* * Digest type. */ n = uint8_fromregion(&sr); isc_region_consume(&sr, 1); sprintf(buf, "%u", n); RETERR(str_totext(buf, target)); /* * Digest. */ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" (", target)); RETERR(str_totext(tctx->linebreak, target)); if (tctx->width == 0) /* No splitting */ RETERR(isc_hex_totext(&sr, 0, "", target)); else RETERR(isc_hex_totext(&sr, tctx->width - 2, tctx->linebreak, target)); if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" )", target)); return (ISC_R_SUCCESS); }
static inline isc_result_t totext_in_nsap(ARGS_TOTEXT) { isc_region_t region; char buf[sizeof("xx")]; REQUIRE(rdata->type == 22); REQUIRE(rdata->rdclass == 1); REQUIRE(rdata->length != 0); UNUSED(tctx); dns_rdata_toregion(rdata, ®ion); RETERR(str_totext("0x", target)); while (region.length != 0) { sprintf(buf, "%02x", region.base[0]); isc_region_consume(®ion, 1); RETERR(str_totext(buf, target)); } return (ISC_R_SUCCESS); }
static inline isc_result_t totext_l32(ARGS_TOTEXT) { isc_region_t region; char buf[sizeof("65000")]; unsigned short num; REQUIRE(rdata->type == 105); REQUIRE(rdata->length == 6); UNUSED(tctx); dns_rdata_toregion(rdata, ®ion); num = uint16_fromregion(®ion); isc_region_consume(®ion, 2); sprintf(buf, "%u", num); RETERR(str_totext(buf, target)); RETERR(str_totext(" ", target)); return (inet_totext(AF_INET, ®ion, target)); }
isc_result_t isc_base64_totext(isc_region_t *source, int wordlength, const char *wordbreak, isc_buffer_t *target) { char buf[5]; unsigned int loops = 0; if (wordlength < 4) wordlength = 4; memset(buf, 0, sizeof(buf)); while (source->length > 2) { buf[0] = base64[(source->base[0]>>2)&0x3f]; buf[1] = base64[((source->base[0]<<4)&0x30)| ((source->base[1]>>4)&0x0f)]; buf[2] = base64[((source->base[1]<<2)&0x3c)| ((source->base[2]>>6)&0x03)]; buf[3] = base64[source->base[2]&0x3f]; RETERR(str_totext(buf, target)); isc_region_consume(source, 3); loops++; if (source->length != 0 && (int)((loops + 1) * 4) >= wordlength) { loops = 0; RETERR(str_totext(wordbreak, target)); } } if (source->length == 2) { buf[0] = base64[(source->base[0]>>2)&0x3f]; buf[1] = base64[((source->base[0]<<4)&0x30)| ((source->base[1]>>4)&0x0f)]; buf[2] = base64[((source->base[1]<<2)&0x3c)]; buf[3] = '='; RETERR(str_totext(buf, target)); isc_region_consume(source, 2); } else if (source->length == 1) {
static inline isc_result_t totext_hinfo(ARGS_TOTEXT) { isc_region_t region; UNUSED(tctx); REQUIRE(rdata->type == 13); REQUIRE(rdata->length != 0); dns_rdata_toregion(rdata, ®ion); RETERR(txt_totext(®ion, ISC_TRUE, target)); RETERR(str_totext(" ", target)); return (txt_totext(®ion, ISC_TRUE, target)); }
static inline isc_result_t generic_totext_txt(ARGS_TOTEXT) { isc_region_t region; UNUSED(tctx); dns_rdata_toregion(rdata, ®ion); while (region.length > 0) { RETERR(txt_totext(®ion, ISC_TRUE, target)); if (region.length > 0) RETERR(str_totext(" ", target)); } return (ISC_R_SUCCESS); }
static inline isc_result_t totext_isdn(ARGS_TOTEXT) { isc_region_t region; REQUIRE(rdata->type == 20); REQUIRE(rdata->length != 0); UNUSED(tctx); dns_rdata_toregion(rdata, ®ion); RETERR(txt_totext(®ion, target)); if (region.length == 0) return (ISC_R_SUCCESS); RETERR(str_totext(" ", target)); return (txt_totext(®ion, target)); }
static inline isc_result_t totext_eui64(ARGS_TOTEXT) { char buf[sizeof("xx-xx-xx-xx-xx-xx-xx-xx")]; REQUIRE(rdata->type == 109); REQUIRE(rdata->length == 8); UNUSED(tctx); (void)snprintf(buf, sizeof(buf), "%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x", rdata->data[0], rdata->data[1], rdata->data[2], rdata->data[3], rdata->data[4], rdata->data[5], rdata->data[6], rdata->data[7]); return (str_totext(buf, target)); }
static inline isc_result_t totext_spf(ARGS_TOTEXT) { isc_region_t region; UNUSED(tctx); REQUIRE(rdata->type == 99); dns_rdata_toregion(rdata, ®ion); while (region.length > 0) { RETERR(txt_totext(®ion, target)); if (region.length > 0) RETERR(str_totext(" ", target)); } return (ISC_R_SUCCESS); }
static inline isc_result_t totext_tlsa(ARGS_TOTEXT) { isc_region_t sr; char buf[sizeof("64000 ")]; unsigned int n; REQUIRE(rdata->type == dns_rdatatype_tlsa); REQUIRE(rdata->length != 0); UNUSED(tctx); dns_rdata_toregion(rdata, &sr); /* * Certificate Usage. */ n = uint8_fromregion(&sr); isc_region_consume(&sr, 1); sprintf(buf, "%u ", n); RETERR(str_totext(buf, target)); /* * Selector. */ n = uint8_fromregion(&sr); isc_region_consume(&sr, 1); sprintf(buf, "%u ", n); RETERR(str_totext(buf, target)); /* * Matching type. */ n = uint8_fromregion(&sr); isc_region_consume(&sr, 1); sprintf(buf, "%u", n); RETERR(str_totext(buf, target)); /* * Certificate Association Data. */ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" (", target)); RETERR(str_totext(tctx->linebreak, target)); if (tctx->width == 0) /* No splitting */ RETERR(isc_hex_totext(&sr, 0, "", target)); else RETERR(isc_hex_totext(&sr, tctx->width - 2, tctx->linebreak, target)); if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" )", target)); return (ISC_R_SUCCESS); }
static inline isc_result_t totext_gpos(ARGS_TOTEXT) { isc_region_t region; int i; REQUIRE(rdata->type == dns_rdatatype_gpos); REQUIRE(rdata->length != 0); UNUSED(tctx); dns_rdata_toregion(rdata, ®ion); for (i = 0; i < 3; i++) { RETERR(txt_totext(®ion, ISC_TRUE, target)); if (i != 2) RETERR(str_totext(" ", target)); } return (ISC_R_SUCCESS); }
isc_result_t dns_rdataclass_totext(dns_rdataclass_t rdclass, isc_buffer_t *target) { char buf[sizeof("CLASS65535")]; switch (rdclass) { case dns_rdataclass_any: return (str_totext("ANY", target)); case dns_rdataclass_chaos: return (str_totext("CH", target)); case dns_rdataclass_hs: return (str_totext("HS", target)); case dns_rdataclass_in: return (str_totext("IN", target)); case dns_rdataclass_none: return (str_totext("NONE", target)); case dns_rdataclass_reserved0: return (str_totext("RESERVED0", target)); default: snprintf(buf, sizeof(buf), "CLASS%u", rdclass); return (str_totext(buf, target)); } }
isc_result_t dns_rdataclass_totext(dns_rdataclass_t rdclass, isc_buffer_t *target) { switch (rdclass) { case dns_rdataclass_any: return (str_totext("ANY", target)); case dns_rdataclass_chaos: return (str_totext("CH", target)); case dns_rdataclass_hs: return (str_totext("HS", target)); case dns_rdataclass_in: return (str_totext("IN", target)); case dns_rdataclass_none: return (str_totext("NONE", target)); case dns_rdataclass_reserved0: return (str_totext("RESERVED0", target)); default: return (dns_rdataclass_tounknowntext(rdclass, target)); } }
static inline isc_result_t totext_keydata(ARGS_TOTEXT) { isc_region_t sr; char buf[sizeof("64000")]; unsigned int flags; unsigned char algorithm; unsigned long when; REQUIRE(rdata->type == 65533); REQUIRE(rdata->length != 0); dns_rdata_toregion(rdata, &sr); /* refresh timer */ when = uint32_fromregion(&sr); isc_region_consume(&sr, 4); RETERR(dns_time32_totext(when, target)); RETERR(str_totext(" ", target)); /* add hold-down */ when = uint32_fromregion(&sr); isc_region_consume(&sr, 4); RETERR(dns_time32_totext(when, target)); RETERR(str_totext(" ", target)); /* remove hold-down */ when = uint32_fromregion(&sr); isc_region_consume(&sr, 4); RETERR(dns_time32_totext(when, target)); RETERR(str_totext(" ", target)); /* flags */ flags = uint16_fromregion(&sr); isc_region_consume(&sr, 2); sprintf(buf, "%u", flags); RETERR(str_totext(buf, target)); RETERR(str_totext(" ", target)); /* protocol */ sprintf(buf, "%u", sr.base[0]); isc_region_consume(&sr, 1); RETERR(str_totext(buf, target)); RETERR(str_totext(" ", target)); /* algorithm */ algorithm = sr.base[0]; sprintf(buf, "%u", algorithm); isc_region_consume(&sr, 1); RETERR(str_totext(buf, target)); /* No Key? */ if ((flags & 0xc000) == 0xc000) return (ISC_R_SUCCESS); /* key */ if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" (", target)); RETERR(str_totext(tctx->linebreak, target)); RETERR(isc_base64_totext(&sr, tctx->width - 2, tctx->linebreak, target)); if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0) RETERR(str_totext(tctx->linebreak, target)); else if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" ", target)); if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(")", target)); if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0) { isc_region_t tmpr; RETERR(str_totext(" ; key id = ", target)); dns_rdata_toregion(rdata, &tmpr); /* Skip over refresh, addhd, and removehd */ isc_region_consume(&tmpr, 12); sprintf(buf, "%u", dst_region_computeid(&tmpr, algorithm)); RETERR(str_totext(buf, target)); } return (ISC_R_SUCCESS); }
static inline isc_result_t totext_nsec3(ARGS_TOTEXT) { isc_region_t sr; unsigned int i, j; unsigned char hash; unsigned char flags; char buf[sizeof("TYPE65535")]; isc_uint32_t iterations; REQUIRE(rdata->type == dns_rdatatype_nsec3); REQUIRE(rdata->length != 0); dns_rdata_toregion(rdata, &sr); /* Hash */ hash = uint8_fromregion(&sr); isc_region_consume(&sr, 1); sprintf(buf, "%u ", hash); RETERR(str_totext(buf, target)); /* Flags */ flags = uint8_fromregion(&sr); isc_region_consume(&sr, 1); sprintf(buf, "%u ", flags); RETERR(str_totext(buf, target)); /* Iterations */ iterations = uint16_fromregion(&sr); isc_region_consume(&sr, 2); sprintf(buf, "%u ", iterations); RETERR(str_totext(buf, target)); /* Salt */ j = uint8_fromregion(&sr); isc_region_consume(&sr, 1); INSIST(j <= sr.length); if (j != 0) { i = sr.length; sr.length = j; RETERR(isc_hex_totext(&sr, 1, "", target)); sr.length = i - j; } else RETERR(str_totext("-", target)); if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" (", target)); RETERR(str_totext(tctx->linebreak, target)); /* Next hash */ j = uint8_fromregion(&sr); isc_region_consume(&sr, 1); INSIST(j <= sr.length); i = sr.length; sr.length = j; RETERR(isc_base32hexnp_totext(&sr, 1, "", target)); sr.length = i - j; if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) == 0) RETERR(str_totext(" ", target)); RETERR(typemap_totext(&sr, tctx, target)); if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0) RETERR(str_totext(" )", target)); return (ISC_R_SUCCESS); }