diff --git a/bin/tests/system/rrchecker/tests_rrchecker.py b/bin/tests/system/rrchecker/tests_rrchecker.py index f425b83b91..0bdde9ea4a 100644 --- a/bin/tests/system/rrchecker/tests_rrchecker.py +++ b/bin/tests/system/rrchecker/tests_rrchecker.py @@ -101,6 +101,7 @@ import pytest "UINFO", "UNSPEC", "URI", + "WALLET", "WKS", "X25", "ZONEMD", diff --git a/lib/dns/rdata/generic/wallet_262.c b/lib/dns/rdata/generic/wallet_262.c new file mode 100644 index 0000000000..bff33e423c --- /dev/null +++ b/lib/dns/rdata/generic/wallet_262.c @@ -0,0 +1,170 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +#ifndef RDATA_GENERIC_WALLET_262_C +#define RDATA_GENERIC_WALLET_262_C + +#define RRTYPE_WALLET_ATTRIBUTES (0) + +static isc_result_t +fromtext_wallet(ARGS_FROMTEXT) { + REQUIRE(type == dns_rdatatype_wallet); + + return (generic_fromtext_txt(CALL_FROMTEXT)); +} + +static isc_result_t +totext_wallet(ARGS_TOTEXT) { + REQUIRE(rdata != NULL); + REQUIRE(rdata->type == dns_rdatatype_wallet); + + return (generic_totext_txt(CALL_TOTEXT)); +} + +static isc_result_t +fromwire_wallet(ARGS_FROMWIRE) { + REQUIRE(type == dns_rdatatype_wallet); + + return (generic_fromwire_txt(CALL_FROMWIRE)); +} + +static isc_result_t +towire_wallet(ARGS_TOWIRE) { + REQUIRE(rdata->type == dns_rdatatype_wallet); + + UNUSED(cctx); + + return (mem_tobuffer(target, rdata->data, rdata->length)); +} + +static int +compare_wallet(ARGS_COMPARE) { + isc_region_t r1; + isc_region_t r2; + + REQUIRE(rdata1->type == rdata2->type); + REQUIRE(rdata1->rdclass == rdata2->rdclass); + REQUIRE(rdata1->type == dns_rdatatype_wallet); + + dns_rdata_toregion(rdata1, &r1); + dns_rdata_toregion(rdata2, &r2); + return (isc_region_compare(&r1, &r2)); +} + +static isc_result_t +fromstruct_wallet(ARGS_FROMSTRUCT) { + REQUIRE(type == dns_rdatatype_wallet); + + return (generic_fromstruct_txt(CALL_FROMSTRUCT)); +} + +static isc_result_t +tostruct_wallet(ARGS_TOSTRUCT) { + dns_rdata_wallet_t *wallet = target; + + REQUIRE(rdata->type == dns_rdatatype_wallet); + REQUIRE(wallet != NULL); + + wallet->common.rdclass = rdata->rdclass; + wallet->common.rdtype = rdata->type; + ISC_LINK_INIT(&wallet->common, link); + + return (generic_tostruct_txt(CALL_TOSTRUCT)); +} + +static void +freestruct_wallet(ARGS_FREESTRUCT) { + dns_rdata_wallet_t *wallet = source; + + REQUIRE(wallet != NULL); + REQUIRE(wallet->common.rdtype == dns_rdatatype_wallet); + + generic_freestruct_txt(source); +} + +static isc_result_t +additionaldata_wallet(ARGS_ADDLDATA) { + REQUIRE(rdata->type == dns_rdatatype_wallet); + + UNUSED(rdata); + UNUSED(owner); + UNUSED(add); + UNUSED(arg); + + return (ISC_R_SUCCESS); +} + +static isc_result_t +digest_wallet(ARGS_DIGEST) { + isc_region_t r; + + REQUIRE(rdata->type == dns_rdatatype_wallet); + + dns_rdata_toregion(rdata, &r); + + return ((digest)(arg, &r)); +} + +static bool +checkowner_wallet(ARGS_CHECKOWNER) { + REQUIRE(type == dns_rdatatype_wallet); + + UNUSED(name); + UNUSED(type); + UNUSED(rdclass); + UNUSED(wildcard); + + return (true); +} + +static bool +checknames_wallet(ARGS_CHECKNAMES) { + REQUIRE(rdata->type == dns_rdatatype_wallet); + + UNUSED(rdata); + UNUSED(owner); + UNUSED(bad); + + return (true); +} + +static int +casecompare_wallet(ARGS_COMPARE) { + return (compare_wallet(rdata1, rdata2)); +} + +isc_result_t +dns_rdata_wallet_first(dns_rdata_wallet_t *wallet) { + REQUIRE(wallet != NULL); + REQUIRE(wallet->common.rdtype == dns_rdatatype_wallet); + + return (generic_txt_first(wallet)); +} + +isc_result_t +dns_rdata_wallet_next(dns_rdata_wallet_t *wallet) { + REQUIRE(wallet != NULL); + REQUIRE(wallet->common.rdtype == dns_rdatatype_wallet); + + return (generic_txt_next(wallet)); +} + +isc_result_t +dns_rdata_wallet_current(dns_rdata_wallet_t *wallet, + dns_rdata_wallet_string_t *string) { + REQUIRE(wallet != NULL); + REQUIRE(wallet->common.rdtype == dns_rdatatype_wallet); + + return (generic_txt_current(wallet, string)); +} +#endif /* RDATA_GENERIC_WALLET_262_C */ diff --git a/lib/dns/rdata/generic/wallet_262.h b/lib/dns/rdata/generic/wallet_262.h new file mode 100644 index 0000000000..ca552ca427 --- /dev/null +++ b/lib/dns/rdata/generic/wallet_262.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +/* */ +#pragma once + +typedef struct dns_rdata_txt_string dns_rdata_wallet_string_t; + +typedef struct dns_rdata_txt dns_rdata_wallet_t; + +/* + * ISC_LANG_BEGINDECLS and ISC_LANG_ENDDECLS are already done + * via rdatastructpre.h and rdatastructsuf.h. + */ + +isc_result_t +dns_rdata_wallet_first(dns_rdata_wallet_t *); + +isc_result_t +dns_rdata_wallet_next(dns_rdata_wallet_t *); + +isc_result_t +dns_rdata_wallet_current(dns_rdata_wallet_t *, dns_rdata_wallet_string_t *); diff --git a/tests/dns/rdata_test.c b/tests/dns/rdata_test.c index 0d7fe0304f..f61c7ea400 100644 --- a/tests/dns/rdata_test.c +++ b/tests/dns/rdata_test.c @@ -2449,6 +2449,18 @@ ISC_RUN_TEST_IMPL(sshfp) { dns_rdatatype_sshfp, sizeof(dns_rdata_sshfp_t)); } +ISC_RUN_TEST_IMPL(wallet) { + text_ok_t text_ok[] = { TEXT_VALID_CHANGED("cid-example wid-example", + "\"cid-example\" " + "\"wid-example\""), + /* + * Sentinel. + */ + TEXT_SENTINEL() }; + check_rdata(text_ok, NULL, NULL, false, dns_rdataclass_in, + dns_rdatatype_wallet, sizeof(dns_rdata_rkey_t)); +} + /* * WKS tests. * @@ -3153,6 +3165,7 @@ ISC_TEST_ENTRY(nxt) ISC_TEST_ENTRY(rkey) ISC_TEST_ENTRY(resinfo) ISC_TEST_ENTRY(sshfp) +ISC_TEST_ENTRY(wallet) ISC_TEST_ENTRY(wks) ISC_TEST_ENTRY(zonemd)