From: Jelte Jansen Date: Fri, 4 Feb 2005 10:53:30 +0000 (+0000) Subject: added even more esoteric rr types to wire2host and host2str X-Git-Tag: release-0.50~446 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb63048aea633abcbf66f6b6b80d9df68d61e58e;p=thirdparty%2Fldns.git added even more esoteric rr types to wire2host and host2str --- diff --git a/host2str.c b/host2str.c index 0c31bd91..7e0c9605 100644 --- a/host2str.c +++ b/host2str.c @@ -19,6 +19,7 @@ #include #include +#include #include @@ -573,6 +574,72 @@ ldns_rdf2buffer_str_todo(ldns_buffer *output, ldns_rdf *rdf) return ldns_rdf2buffer_str_hex(output, rdf); } +ldns_status +ldns_rdf2buffer_str_ipseckey(ldns_buffer *output, ldns_rdf *rdf) +{ + /* wire format from + http://www.ietf.org/internet-drafts/draft-ietf-ipseckey-rr-12.txt + */ + uint8_t *data = ldns_rdf_data(rdf); + uint8_t precedence; + uint8_t gateway_type; + uint8_t algorithm; + + ldns_rdf *gateway; + uint8_t *gateway_data; + + size_t public_key_size; + uint8_t *public_key_data; + ldns_rdf *public_key; + + size_t offset = 0; + ldns_status status; + + + precedence = data[0]; + gateway_type = data[1]; + algorithm = data[2]; + offset = 3; + + switch (gateway_type) { + case 0: + /* no gateway */ + break; + case 1: + gateway_data = XMALLOC(uint8_t, 4); + memcpy(gateway_data, &data[offset], 4); + gateway = ldns_rdf_new(4, LDNS_RDF_TYPE_A, gateway_data); + break; + case 2: + gateway_data = XMALLOC(uint8_t, 16); + memcpy(gateway_data, &data[offset], 16); + gateway = ldns_rdf_new(16, LDNS_RDF_TYPE_AAAA, gateway_data); + break; + case 3: + status = ldns_wire2dname(&gateway, data, ldns_rdf_size(rdf), &offset); + break; + default: + /* error? */ + break; + } + + public_key_size = ldns_rdf_size(rdf) - offset; + public_key_data = XMALLOC(uint8_t, public_key_size); + memcpy(public_key_data, &data[offset], public_key_size); + public_key = ldns_rdf_new(public_key_size, LDNS_RDF_TYPE_B64, public_key_data); + + ldns_buffer_printf(output, "%u %u %u ", precedence, gateway_type, + algorithm); + (void) ldns_rdf2buffer_str(output, gateway); + ldns_buffer_printf(output, " "); + (void) ldns_rdf2buffer_str(output, public_key); + + ldns_rdf_free(gateway); + ldns_rdf_free(public_key); + + return ldns_buffer_status(output); +} + /** * Returns string representation of the specified rdf * Data is not static @@ -648,6 +715,9 @@ ldns_rdf2buffer_str(ldns_buffer *buffer, ldns_rdf *rdf) case LDNS_RDF_TYPE_NSAP: res = ldns_rdf2buffer_str_nsap(buffer, rdf); break; + case LDNS_RDF_TYPE_IPSECKEY: + res = ldns_rdf2buffer_str_ipseckey(buffer, rdf); + break; case LDNS_RDF_TYPE_SERVICE: /* XXX todo */ break; diff --git a/ldns/rdata.h b/ldns/rdata.h index 3487cd45..c4589fb5 100644 --- a/ldns/rdata.h +++ b/ldns/rdata.h @@ -64,7 +64,9 @@ enum ldns_enum_rdf_type /** well known services */ LDNS_RDF_TYPE_WKS, /** NSAP */ - LDNS_RDF_TYPE_NSAP + LDNS_RDF_TYPE_NSAP, + /** IPSECKEY */ + LDNS_RDF_TYPE_IPSECKEY }; typedef enum ldns_enum_rdf_type ldns_rdf_type; diff --git a/ldns/rr.h b/ldns/rr.h index 20d9e1ba..f318c0fe 100644 --- a/ldns/rr.h +++ b/ldns/rr.h @@ -95,28 +95,42 @@ enum ldns_enum_rr_type LDNS_RR_TYPE_RT = 21, /** RFC1706 */ LDNS_RR_TYPE_NSAP = 22, + /** RFC1348 */ + LDNS_RR_TYPE_NSAP_PTR = 23, /** 2535typecode */ LDNS_RR_TYPE_SIG = 24, /** 2535typecode */ LDNS_RR_TYPE_KEY = 25, /** RFC2163 */ LDNS_RR_TYPE_PX = 26, + /** RFC1712 */ + LDNS_RR_TYPE_GPOS = 27, /** ipv6 address */ LDNS_RR_TYPE_AAAA = 28, /** LOC record RFC1876 */ LDNS_RR_TYPE_LOC = 29, /** 2535typecode */ LDNS_RR_TYPE_NXT = 30, + /** draft-ietf-nimrod-dns-01.txt */ + LDNS_RR_TYPE_EID = 31, + /** draft-ietf-nimrod-dns-01.txt */ + LDNS_RR_TYPE_NIMLOC = 32, /** SRV record RFC2782 */ LDNS_RR_TYPE_SRV = 33, + /** http://www.jhsoft.com/rfc/af-saa-0069.000.rtf */ + LDNS_RR_TYPE_ATMA = 34, /** RFC2915 */ LDNS_RR_TYPE_NAPTR = 35, /** RFC2230 */ LDNS_RR_TYPE_KX = 36, /** RFC2538 */ LDNS_RR_TYPE_CERT = 37, + /** RFC2874 */ + LDNS_RR_TYPE_A6 = 38, /** RFC2672 */ LDNS_RR_TYPE_DNAME = 39, + /** dnsind-kitchen-sink-02.txt */ + LDNS_RR_TYPE_SINK = 40, /** Pseudo OPT record... */ LDNS_RR_TYPE_OPT = 41, /** RFC3123 */ @@ -125,11 +139,18 @@ enum ldns_enum_rr_type LDNS_RR_TYPE_DS = 43, /** SSH Key Fingerprint */ LDNS_RR_TYPE_SSHFP = 44, + /** draft-richardson-ipseckey-rr-11.txt */ + LDNS_RR_TYPE_IPSECKEY = 45, /** draft-ietf-dnsext-dnssec-25 */ LDNS_RR_TYPE_RRSIG = 46, LDNS_RR_TYPE_NSEC = 47, LDNS_RR_TYPE_DNSKEY = 48, + LDNS_RR_TYPE_UINFO = 100, + LDNS_RR_TYPE_UID = 101, + LDNS_RR_TYPE_GID = 102, + LDNS_RR_TYPE_UNSPEC = 103, + LDNS_RR_TYPE_TSIG = 250, LDNS_RR_TYPE_IXFR = 251, LDNS_RR_TYPE_AXFR = 252, diff --git a/rr.c b/rr.c index c89feb0a..6b44e584 100644 --- a/rr.c +++ b/rr.c @@ -319,6 +319,9 @@ static const ldns_rdf_type type_rt_wireformat[] = { static const ldns_rdf_type type_nsap_wireformat[] = { LDNS_RDF_TYPE_NSAP }; +static const ldns_rdf_type type_nsap_ptr_wireformat[] = { + LDNS_RDF_TYPE_STR +}; static const ldns_rdf_type type_sig_wireformat[] = { LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_TIME, LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT16, @@ -330,14 +333,28 @@ static const ldns_rdf_type type_key_wireformat[] = { static const ldns_rdf_type type_px_wireformat[] = { LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_DNAME }; +static const ldns_rdf_type type_gpos_wireformat[] = { + LDNS_RDF_TYPE_STR, + LDNS_RDF_TYPE_STR, + LDNS_RDF_TYPE_STR +}; static const ldns_rdf_type type_aaaa_wireformat[] = { LDNS_RDF_TYPE_AAAA }; static const ldns_rdf_type type_loc_wireformat[] = { LDNS_RDF_TYPE_LOC }; static const ldns_rdf_type type_nxt_wireformat[] = { LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_UNKNOWN }; +static const ldns_rdf_type type_eid_wireformat[] = { + LDNS_RDF_TYPE_HEX +}; +static const ldns_rdf_type type_nimloc_wireformat[] = { + LDNS_RDF_TYPE_HEX +}; static const ldns_rdf_type type_srv_wireformat[] = { LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME }; +static const ldns_rdf_type type_atma_wireformat[] = { + LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_HEX +}; static const ldns_rdf_type type_naptr_wireformat[] = { LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_DNAME }; @@ -347,7 +364,11 @@ static const ldns_rdf_type type_kx_wireformat[] = { static const ldns_rdf_type type_cert_wireformat[] = { LDNS_RDF_TYPE_CERT, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_ALG, LDNS_RDF_TYPE_B64 }; +static const ldns_rdf_type type_a6_wireformat[] = { LDNS_RDF_TYPE_DNAME }; static const ldns_rdf_type type_dname_wireformat[] = { LDNS_RDF_TYPE_DNAME }; +static const ldns_rdf_type type_sink_wireformat[] = { LDNS_RDF_TYPE_INT8, + LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_B64 +}; static const ldns_rdf_type type_apl_wireformat[] = { LDNS_RDF_TYPE_APL }; @@ -357,6 +378,9 @@ static const ldns_rdf_type type_ds_wireformat[] = { static const ldns_rdf_type type_sshfp_wireformat[] = { LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_HEX }; +static const ldns_rdf_type type_ipseckey_wireformat[] = { + LDNS_RDF_TYPE_IPSECKEY +}; static const ldns_rdf_type type_rrsig_wireformat[] = { LDNS_RDF_TYPE_TYPE, LDNS_RDF_TYPE_ALG, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_B64 @@ -422,7 +446,7 @@ static ldns_rr_descriptor rdata_field_descriptors[] = { /* 22 */ {LDNS_RR_TYPE_NSAP, "NSAP", 1, 1, type_nsap_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 23 */ - { 23, NULL, 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, + {LDNS_RR_TYPE_NSAP_PTR, "NSAP-PTR", 1, 1, type_nsap_ptr_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 24 */ {LDNS_RR_TYPE_SIG, "SIG", 9, 9, type_sig_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 25 */ @@ -430,7 +454,7 @@ static ldns_rr_descriptor rdata_field_descriptors[] = { /* 26 */ {LDNS_RR_TYPE_PX, "PX", 3, 3, type_px_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 27 */ - { 27, NULL, 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, + {LDNS_RR_TYPE_GPOS, "GPOS", 1, 1, type_gpos_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 28 */ {LDNS_RR_TYPE_AAAA, "AAAA", 1, 1, type_aaaa_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 29 */ @@ -438,13 +462,13 @@ static ldns_rr_descriptor rdata_field_descriptors[] = { /* 30 */ {LDNS_RR_TYPE_NXT, "NXT", 2, 2, type_nxt_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 31 */ - { 31, NULL, 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, + {LDNS_RR_TYPE_EID, "EID", 1, 1, type_eid_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 32 */ - { 32, NULL, 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, + {LDNS_RR_TYPE_NIMLOC, "NIMLOC", 1, 1, type_nimloc_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 33 */ {LDNS_RR_TYPE_SRV, "SRV", 4, 4, type_srv_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 34 */ - { 34, NULL, 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, + {LDNS_RR_TYPE_ATMA, "ATMA", 1, 1, type_atma_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 35 */ {LDNS_RR_TYPE_NAPTR, "NAPTR", 6, 6, type_naptr_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 36 */ @@ -452,11 +476,11 @@ static ldns_rr_descriptor rdata_field_descriptors[] = { /* 37 */ {LDNS_RR_TYPE_CERT, "CERT", 4, 4, type_cert_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 38 */ - { 38, NULL, 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, + {LDNS_RR_TYPE_A6, "A6", 1, 1, type_a6_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 39 */ {LDNS_RR_TYPE_DNAME, "DNAME", 1, 1, type_dname_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 40 */ - { 40, NULL, 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, + {LDNS_RR_TYPE_SINK, "SINK", 1, 1, type_sink_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 41 */ {LDNS_RR_TYPE_OPT, "OPT", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 42 */ @@ -466,7 +490,7 @@ static ldns_rr_descriptor rdata_field_descriptors[] = { /* 44 */ {LDNS_RR_TYPE_SSHFP, "SSHFP", 3, 3, type_sshfp_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 45 */ - { 45, NULL, 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, + {LDNS_RR_TYPE_IPSECKEY, "IPSECKEY", 1, 1, type_ipseckey_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 46 */ {LDNS_RR_TYPE_RRSIG, "RRSIG", 9, 9, type_rrsig_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS }, /* 47 */ diff --git a/wire2host.c b/wire2host.c index 5a3d9c35..4023c4d8 100644 --- a/wire2host.c +++ b/wire2host.c @@ -316,6 +316,7 @@ ldns_wire2rdf(ldns_rr *rr, const uint8_t *wire, case LDNS_RDF_TYPE_LOC: case LDNS_RDF_TYPE_WKS: case LDNS_RDF_TYPE_NSAP: + case LDNS_RDF_TYPE_IPSECKEY: case LDNS_RDF_TYPE_NONE: /* * Read to end of rr rdata