diff options
| author | 2020-02-24 17:44:44 +0000 | |
|---|---|---|
| committer | 2020-02-24 17:44:44 +0000 | |
| commit | a5525167054636a82bee514483e4960c1cecdefe (patch) | |
| tree | ec7dce89c36be06e583609c296f9491c2c9c2717 /usr.bin/dig/lib/dns/rdata.c | |
| parent | We only need to free cname, ns, soa and tsig structs. (diff) | |
| download | wireguard-openbsd-a5525167054636a82bee514483e4960c1cecdefe.tar.xz wireguard-openbsd-a5525167054636a82bee514483e4960c1cecdefe.zip | |
We only need to fill a wire format buffer from soa and tsig structs.
OK jsg
Diffstat (limited to 'usr.bin/dig/lib/dns/rdata.c')
| -rw-r--r-- | usr.bin/dig/lib/dns/rdata.c | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/usr.bin/dig/lib/dns/rdata.c b/usr.bin/dig/lib/dns/rdata.c index 848b21d34c7..9677ecba6d2 100644 --- a/usr.bin/dig/lib/dns/rdata.c +++ b/usr.bin/dig/lib/dns/rdata.c @@ -14,7 +14,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: rdata.c,v 1.19 2020/02/24 17:43:52 florian Exp $ */ +/* $Id: rdata.c,v 1.20 2020/02/24 17:44:44 florian Exp $ */ /*! \file */ @@ -635,28 +635,56 @@ dns_rdata_tofmttext(dns_rdata_t *rdata, dns_name_t *origin, } isc_result_t -dns_rdata_fromstruct(dns_rdata_t *rdata, dns_rdataclass_t rdclass, - dns_rdatatype_t type, void *source, +dns_rdata_fromstruct_soa(dns_rdata_t *rdata, dns_rdataclass_t rdclass, + dns_rdatatype_t type, dns_rdata_soa_t *soa, isc_buffer_t *target) { isc_result_t result = ISC_R_NOTIMPLEMENTED; isc_buffer_t st; isc_region_t region; - isc_boolean_t use_default = ISC_FALSE; unsigned int length; - REQUIRE(source != NULL); + REQUIRE(soa != NULL); if (rdata != NULL) { REQUIRE(DNS_RDATA_INITIALIZED(rdata)); REQUIRE(DNS_RDATA_VALIDFLAGS(rdata)); } st = *target; + result = fromstruct_soa(rdclass, type, soa, target); - FROMSTRUCTSWITCH + length = isc_buffer_usedlength(target) - isc_buffer_usedlength(&st); + if (result == ISC_R_SUCCESS && length > DNS_RDATA_MAXLENGTH) + result = ISC_R_NOSPACE; - if (use_default) - (void)NULL; + if (rdata != NULL && result == ISC_R_SUCCESS) { + region.base = isc_buffer_used(&st); + region.length = length; + dns_rdata_fromregion(rdata, rdclass, type, ®ion); + } + if (result != ISC_R_SUCCESS) + *target = st; + return (result); +} + +isc_result_t +dns_rdata_fromstruct_tsig(dns_rdata_t *rdata, dns_rdataclass_t rdclass, + dns_rdatatype_t type, dns_rdata_any_tsig_t *tsig, + isc_buffer_t *target) +{ + isc_result_t result = ISC_R_NOTIMPLEMENTED; + isc_buffer_t st; + isc_region_t region; + unsigned int length; + + REQUIRE(tsig != NULL); + if (rdata != NULL) { + REQUIRE(DNS_RDATA_INITIALIZED(rdata)); + REQUIRE(DNS_RDATA_VALIDFLAGS(rdata)); + } + + st = *target; + result = fromstruct_any_tsig(rdclass, type, tsig, target); length = isc_buffer_usedlength(target) - isc_buffer_usedlength(&st); if (result == ISC_R_SUCCESS && length > DNS_RDATA_MAXLENGTH) |
