static inline isc_result_t fromtext_txt(ARGS_FROMTEXT) { isc_token_t token; int strings; REQUIRE(type == 16); UNUSED(type); UNUSED(rdclass); UNUSED(origin); UNUSED(options); UNUSED(callbacks); strings = 0; if ((options & DNS_RDATA_UNKNOWNESCAPE) != 0) { isc_textregion_t r; DE_CONST("#", r.base); r.length = 1; RETERR(txt_fromtext(&r, target)); strings++; } for (;;) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_qstring, ISC_TRUE)); if (token.type != isc_tokentype_qstring && token.type != isc_tokentype_string) break; RETTOK(txt_fromtext(&token.value.as_textregion, target)); strings++; } /* Let upper layer handle eol/eof. */ isc_lex_ungettoken(lexer, &token); return (strings == 0 ? ISC_R_UNEXPECTEDEND : ISC_R_SUCCESS); }
static inline isc_result_t fromtext_isdn(ARGS_FROMTEXT) { isc_token_t token; REQUIRE(type == 20); UNUSED(type); UNUSED(rdclass); UNUSED(origin); UNUSED(options); UNUSED(callbacks); /* ISDN-address */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_qstring, ISC_FALSE)); RETTOK(txt_fromtext(&token.value.as_textregion, target)); /* sa: optional */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_qstring, ISC_TRUE)); if (token.type != isc_tokentype_string && token.type != isc_tokentype_qstring) { isc_lex_ungettoken(lexer, &token); return (ISC_R_SUCCESS); } RETTOK(txt_fromtext(&token.value.as_textregion, target)); return (ISC_R_SUCCESS); }
static inline isc_result_t fromtext_spf(ARGS_FROMTEXT) { isc_token_t token; int strings; REQUIRE(type == 99); UNUSED(type); UNUSED(rdclass); UNUSED(origin); UNUSED(options); UNUSED(callbacks); strings = 0; for (;;) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_qstring, ISC_TRUE)); if (token.type != isc_tokentype_qstring && token.type != isc_tokentype_string) break; RETTOK(txt_fromtext(&token.value.as_textregion, target)); strings++; } /* Let upper layer handle eol/eof. */ isc_lex_ungettoken(lexer, &token); return (strings == 0 ? ISC_R_UNEXPECTEDEND : ISC_R_SUCCESS); }
static inline isc_result_t fromtext_gpos (ARGS_FROMTEXT) { isc_token_t token; int i; REQUIRE (type == 27); UNUSED (type); UNUSED (rdclass); UNUSED (origin); UNUSED (options); UNUSED (callbacks); for (i = 0; i < 3; i++) { RETERR (isc_lex_getmastertoken (lexer, &token, isc_tokentype_qstring, ISC_FALSE)); RETTOK (txt_fromtext (&token.value.as_textregion, target)); } return (ISC_R_SUCCESS); }
static inline isc_result_t fromtext_x25(ARGS_FROMTEXT) { isc_token_t token; unsigned int i; REQUIRE(type == dns_rdatatype_x25); UNUSED(type); UNUSED(rdclass); UNUSED(origin); UNUSED(options); UNUSED(callbacks); RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_qstring, ISC_FALSE)); if (token.value.as_textregion.length < 4) RETTOK(DNS_R_SYNTAX); for (i = 0; i < token.value.as_textregion.length; i++) if (!isdigit(token.value.as_textregion.base[i] & 0xff)) RETTOK(ISC_R_RANGE); RETTOK(txt_fromtext(&token.value.as_textregion, target)); return (ISC_R_SUCCESS); }
static inline isc_result_t fromtext_naptr(ARGS_FROMTEXT) { isc_token_t token; dns_name_t name; isc_buffer_t buffer; unsigned char *regex; REQUIRE(type == dns_rdatatype_naptr); UNUSED(type); UNUSED(rdclass); UNUSED(callbacks); /* * Order. */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number, ISC_FALSE)); if (token.value.as_ulong > 0xffffU) RETTOK(ISC_R_RANGE); RETERR(uint16_tobuffer(token.value.as_ulong, target)); /* * Preference. */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number, ISC_FALSE)); if (token.value.as_ulong > 0xffffU) RETTOK(ISC_R_RANGE); RETERR(uint16_tobuffer(token.value.as_ulong, target)); /* * Flags. */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_qstring, ISC_FALSE)); RETTOK(txt_fromtext(&token.value.as_textregion, target)); /* * Service. */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_qstring, ISC_FALSE)); RETTOK(txt_fromtext(&token.value.as_textregion, target)); /* * Regexp. */ regex = isc_buffer_used(target); RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_qstring, ISC_FALSE)); RETTOK(txt_fromtext(&token.value.as_textregion, target)); RETTOK(txt_valid_regex(regex)); /* * Replacement. */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, ISC_FALSE)); dns_name_init(&name, NULL); buffer_fromregion(&buffer, &token.value.as_region); origin = (origin != NULL) ? origin : dns_rootname; RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); return (ISC_R_SUCCESS); }