From 330705066b03f6ce0bc08a4bbfc5d2418038c68d Mon Sep 17 00:00:00 2001 From: Brian Wellington Date: Thu, 25 Jan 2001 20:14:42 +0000 Subject: [PATCH] Wrap inet_ntop() and use that in the _totext() functions. The wrapper calls inet_ntop() and copies the output (but not the trailing null) into the buffer. --- lib/dns/rdata.c | 18 +++++++++++++++++- lib/dns/rdata/hs_4/a_1.c | 11 +++-------- lib/dns/rdata/in_1/a6_38.c | 14 +++++--------- lib/dns/rdata/in_1/a_1.c | 11 +++-------- lib/dns/rdata/in_1/aaaa_28.c | 11 +++-------- lib/dns/rdata/in_1/wks_11.c | 10 +++------- 6 files changed, 34 insertions(+), 41 deletions(-) diff --git a/lib/dns/rdata.c b/lib/dns/rdata.c index c1934f9ec6..8aa595f231 100644 --- a/lib/dns/rdata.c +++ b/lib/dns/rdata.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: rdata.c,v 1.141 2001/01/09 21:51:20 bwelling Exp $ */ +/* $Id: rdata.c,v 1.142 2001/01/25 20:14:36 bwelling Exp $ */ #include #include @@ -107,6 +107,9 @@ name_length(dns_name_t *name); static isc_result_t str_totext(const char *source, isc_buffer_t *target); +static isc_result_t +inet_totext(int af, isc_region_t *src, isc_buffer_t *target); + static isc_boolean_t buffer_empty(isc_buffer_t *source); @@ -1469,6 +1472,19 @@ str_totext(const char *source, isc_buffer_t *target) { return (ISC_R_SUCCESS); } +static isc_result_t +inet_totext(int af, isc_region_t *src, isc_buffer_t *target) { + char tmpbuf[64]; + + /* Note - inet_ntop doesn't do size checking on its input. */ + if (inet_ntop(af, src->base, tmpbuf, sizeof(tmpbuf)) == NULL) + return (ISC_R_NOSPACE); + if (strlen(tmpbuf) > isc_buffer_availablelength(target)) + return (ISC_R_NOSPACE); + isc_buffer_putstr(target, tmpbuf); + return (ISC_R_SUCCESS); +} + static isc_boolean_t buffer_empty(isc_buffer_t *source) { return((source->current == source->active) ? ISC_TRUE : ISC_FALSE); diff --git a/lib/dns/rdata/hs_4/a_1.c b/lib/dns/rdata/hs_4/a_1.c index 4c33538263..a2928f1770 100644 --- a/lib/dns/rdata/hs_4/a_1.c +++ b/lib/dns/rdata/hs_4/a_1.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: a_1.c,v 1.21 2001/01/09 21:54:58 bwelling Exp $ */ +/* $Id: a_1.c,v 1.22 2001/01/25 20:14:38 bwelling Exp $ */ /* reviewed: Thu Mar 16 15:58:36 PST 2000 by brister */ @@ -62,13 +62,8 @@ totext_hs_a(ARGS_TOTEXT) { UNUSED(tctx); - isc_buffer_availableregion(target, ®ion); - if (inet_ntop(AF_INET, rdata->data, - (char *)region.base, region.length) == NULL) - return (ISC_R_NOSPACE); - - isc_buffer_add(target, strlen((char *)region.base)); - return (ISC_R_SUCCESS); + dns_rdata_toregion(rdata, ®ion); + return (inet_totext(AF_INET, ®ion, target)); } static inline isc_result_t diff --git a/lib/dns/rdata/in_1/a6_38.c b/lib/dns/rdata/in_1/a6_38.c index 2367ab544f..4888267a56 100644 --- a/lib/dns/rdata/in_1/a6_38.c +++ b/lib/dns/rdata/in_1/a6_38.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: a6_38.c,v 1.40 2001/01/09 21:55:00 bwelling Exp $ */ +/* $Id: a6_38.c,v 1.41 2001/01/25 20:14:39 bwelling Exp $ */ /* draft-ietf-ipngwg-dns-lookups-03.txt */ @@ -86,8 +86,7 @@ fromtext_in_a6(ARGS_FROMTEXT) { static inline isc_result_t totext_in_a6(ARGS_TOTEXT) { - isc_region_t tr; - isc_region_t sr; + isc_region_t sr, ar; unsigned char addr[16]; unsigned char prefixlen; unsigned char octets; @@ -115,12 +114,9 @@ totext_in_a6(ARGS_TOTEXT) { memcpy(&addr[octets], sr.base, 16 - octets); mask = 0xff >> (prefixlen % 8); addr[octets] &= mask; - isc_buffer_availableregion(target, &tr); - if (inet_ntop(AF_INET6, addr, - (char *)tr.base, tr.length) == NULL) - return (ISC_R_NOSPACE); - - isc_buffer_add(target, strlen((char *)tr.base)); + ar.base = addr; + ar.length = sizeof(addr); + RETERR(inet_totext(AF_INET6, &ar, target)); isc_region_consume(&sr, 16 - octets); } diff --git a/lib/dns/rdata/in_1/a_1.c b/lib/dns/rdata/in_1/a_1.c index 9770a41387..1cd0dc69b4 100644 --- a/lib/dns/rdata/in_1/a_1.c +++ b/lib/dns/rdata/in_1/a_1.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: a_1.c,v 1.42 2001/01/09 21:55:03 bwelling Exp $ */ +/* $Id: a_1.c,v 1.43 2001/01/25 20:14:40 bwelling Exp $ */ /* Reviewed: Thu Mar 16 16:52:50 PST 2000 by bwelling */ @@ -64,13 +64,8 @@ totext_in_a(ARGS_TOTEXT) { UNUSED(tctx); - isc_buffer_availableregion(target, ®ion); - if (inet_ntop(AF_INET, rdata->data, - (char *)region.base, region.length) == NULL) - return (ISC_R_NOSPACE); - - isc_buffer_add(target, strlen((char *)region.base)); - return (ISC_R_SUCCESS); + dns_rdata_toregion(rdata, ®ion); + return (inet_totext(AF_INET, ®ion, target)); } static inline isc_result_t diff --git a/lib/dns/rdata/in_1/aaaa_28.c b/lib/dns/rdata/in_1/aaaa_28.c index 7fab3ca901..a25e8cec26 100644 --- a/lib/dns/rdata/in_1/aaaa_28.c +++ b/lib/dns/rdata/in_1/aaaa_28.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: aaaa_28.c,v 1.32 2001/01/09 21:55:05 bwelling Exp $ */ +/* $Id: aaaa_28.c,v 1.33 2001/01/25 20:14:41 bwelling Exp $ */ /* Reviewed: Thu Mar 16 16:52:50 PST 2000 by bwelling */ @@ -64,13 +64,8 @@ totext_in_aaaa(ARGS_TOTEXT) { REQUIRE(rdata->rdclass == 1); REQUIRE(rdata->length == 16); - isc_buffer_availableregion(target, ®ion); - if (inet_ntop(AF_INET6, rdata->data, - (char *)region.base, region.length) == NULL) - return (ISC_R_NOSPACE); - - isc_buffer_add(target, strlen((char *)region.base)); - return (ISC_R_SUCCESS); + dns_rdata_toregion(rdata, ®ion); + return (inet_totext(AF_INET6, ®ion, target)); } static inline isc_result_t diff --git a/lib/dns/rdata/in_1/wks_11.c b/lib/dns/rdata/in_1/wks_11.c index f8de952107..1baef05195 100644 --- a/lib/dns/rdata/in_1/wks_11.c +++ b/lib/dns/rdata/in_1/wks_11.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: wks_11.c,v 1.39 2001/01/09 21:55:21 bwelling Exp $ */ +/* $Id: wks_11.c,v 1.40 2001/01/25 20:14:42 bwelling Exp $ */ /* Reviewed: Fri Mar 17 15:01:49 PST 2000 by explorer */ @@ -137,7 +137,6 @@ fromtext_in_wks(ARGS_FROMTEXT) { static inline isc_result_t totext_in_wks(ARGS_TOTEXT) { isc_region_t sr; - isc_region_t tr; unsigned short proto; char buf[sizeof "65535"]; unsigned int i, j; @@ -146,13 +145,10 @@ totext_in_wks(ARGS_TOTEXT) { REQUIRE(rdata->type == 11); REQUIRE(rdata->rdclass == 1); - REQUIRE(rdata->length != 0); + REQUIRE(rdata->length >= 5); dns_rdata_toregion(rdata, &sr); - isc_buffer_availableregion(target, &tr); - if (inet_ntop(AF_INET, sr.base, (char *)tr.base, tr.length) == NULL) - return (ISC_R_NOSPACE); - isc_buffer_add(target, strlen((char *)tr.base)); + RETERR(inet_totext(AF_INET, &sr, target)); isc_region_consume(&sr, 4); proto = uint8_fromregion(&sr);