From: Miek Gieben Date: Mon, 24 Jan 2005 10:24:25 +0000 (+0000) Subject: B64 define in buffer X-Git-Tag: release-0.50~542 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=19976c16ff3ce197cd90d7d4dd5a969a5f505208;p=thirdparty%2Fldns.git B64 define in buffer added _frm_data to rdf_new to copy pointer contents moved to new function in str2host --- diff --git a/Makefile.in b/Makefile.in index 478541ab..f3dfdc1a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -22,7 +22,7 @@ LINTFLAGS = +quiet +posixlib -weak -warnposix -unrecog -Din_addr_t=uint32_t -Du_ LIBDNS_SOURCES = rdata.c util.c rr.c packet.c wire2host.c \ host2str.c buffer.c str2host.c resolver.c \ - net.c + net.c LIBDNS_HEADERS = ldns/error.h \ ldns/packet.h \ ldns/prototype.h \ diff --git a/ldns/buffer.h b/ldns/buffer.h index 136e22c7..e75afdbf 100644 --- a/ldns/buffer.h +++ b/ldns/buffer.h @@ -19,6 +19,8 @@ #include "util.h" +#define B64BUFSIZE 65535 /* Buffer size for b64 conversion */ + typedef struct buffer ldns_buffer; struct buffer diff --git a/ldns/error.h b/ldns/error.h index 1dfaf266..39673d67 100644 --- a/ldns/error.h +++ b/ldns/error.h @@ -28,7 +28,8 @@ enum ldns_enum_status LDNS_STATUS_INT_EXP, LDNS_STATUS_INVALID_IP4, LDNS_STATUS_INVALID_IP6, - LDNS_STATUS_INVALID_STR + LDNS_STATUS_INVALID_STR, + LDNS_STATUS_INVALID_B64 }; typedef enum ldns_enum_status ldns_status; diff --git a/ldns/rdata.h b/ldns/rdata.h index 835670f6..7f009260 100644 --- a/ldns/rdata.h +++ b/ldns/rdata.h @@ -111,7 +111,9 @@ void ldns_rdf_set_type(ldns_rdf *, ldns_rdf_type); void ldns_rdf_set_data(ldns_rdf *, void *); ldns_rdf_type ldns_rdf_get_type(ldns_rdf *); ldns_rdf *ldns_rdf_new(uint16_t, ldns_rdf_type, void *); +ldns_rdf *ldns_rdf_new_frm_data(uint16_t, ldns_rdf_type, void *); uint8_t *ldns_rdf_data(ldns_rdf *); void ldns_rdf_free(ldns_rdf *); +void ldns_rdf_free_data(ldns_rdf *); #endif /* !_LDNS_RDATA_H */ diff --git a/libdns.vim b/libdns.vim index a418c78c..289909d1 100644 --- a/libdns.vim +++ b/libdns.vim @@ -62,6 +62,7 @@ syn keyword ldnsMacro LDNS_STATUS_ERR syn keyword ldnsMacro LDNS_STATUS_INVALID_IP4 syn keyword ldnsMacro LDNS_STATUS_INVALID_IP6 syn keyword ldnsMacro LDNS_STATUS_INVALID_STR +syn keyword ldnsMacro LDNS_STATUS_INVALID_B64 " ldns/resolver.h syn keyword ldnsType ldns_resolver diff --git a/rdata.c b/rdata.c index 784eb2ed..0a0e7c4b 100644 --- a/rdata.c +++ b/rdata.c @@ -74,13 +74,54 @@ ldns_rdf_new(uint16_t s, ldns_rdf_type t, void *d) if (!rd) { return NULL; } - ldns_rdf_set_size(rd, s); ldns_rdf_set_type(rd, t); ldns_rdf_set_data(rd, d); return rd; } +/** + * Allocate a new rdf structure and fill it. + * This function _does_ copy the contents from + * the buffer, unlinke ldns_rdf_new() + * \param[in] s size of the buffer + * \param[in] t type of the rdf + * \param[in] d pointer to the buffer to be copied + * \return the new rdf structure or NULL on failure + */ +ldns_rdf * +ldns_rdf_new_frm_data(uint16_t s, ldns_rdf_type t, void *buf) +{ + ldns_rdf *rd; + rd = MALLOC(ldns_rdf); + if (!rd) { + return NULL; + } + ldns_rdf_set_size(rd, s); + ldns_rdf_set_type(rd, t); + memcpy(rd->_data, buf, s); + return rd; +} + +/** + * free a rdf structure _and_ free the + * data. rdf should be created with _new_frm_data + * \param[in] rd the rdf structure to be freed + * \return void + */ +void +ldns_rdf_free_data(ldns_rdf *rd) +{ + FREE(rd->_data); + FREE(rd); +} + +/** + * Free a rdf structure leave the + * data pointer intact + * \param[in] rd the pointer to be freed + * \return void + */ void ldns_rdf_free(ldns_rdf *rd) { diff --git a/str2host.c b/str2host.c index ac6a708b..6db0e604 100644 --- a/str2host.c +++ b/str2host.c @@ -221,6 +221,15 @@ ldns_str2rdf_apl(ldns_rdf **rd, const uint8_t* str) ldns_status ldns_str2rdf_b64(ldns_rdf **rd, const uint8_t* str) { + uint8_t buffer[B64BUFSIZE]; + int i; + + i = b64_pton(str, buffer, B64BUFSIZE); + if (-1 == i) { + return LDNS_STATUS_INVALID_B64; + } else { + *rd = ldns_rdf_new_frm_data(i, LDNS_RDF_TYPE_B64, buffer); + } return LDNS_STATUS_OK; }