]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
added even more esoteric rr types to wire2host and host2str
authorJelte Jansen <jeltejan@NLnetLabs.nl>
Fri, 4 Feb 2005 10:53:30 +0000 (10:53 +0000)
committerJelte Jansen <jeltejan@NLnetLabs.nl>
Fri, 4 Feb 2005 10:53:30 +0000 (10:53 +0000)
host2str.c
ldns/rdata.h
ldns/rr.h
rr.c
wire2host.c

index 0c31bd91e7c6d44b542cd2d76cee13e8e8de1317..7e0c9605fe11e172fce650b2ed761eaf91bfdcdf 100644 (file)
@@ -19,6 +19,7 @@
 #include <netdb.h>
 
 #include <ldns/host2str.h>
+#include <ldns/wire2host.h>
 
 #include <util.h>
 
@@ -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;
index 3487cd45be393db9bfdd8f1d9ec8b86ae8344530..c4589fb5cab15c5e75020420fb00a09465973a2f 100644 (file)
@@ -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;
 
index 20d9e1ba70962ebde42d6984681f0791a95e88ba..f318c0feee12d40c3179af1f298a10841fe09973 100644 (file)
--- 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 c89feb0a62adbfc8ef4c48246687929b0b929858..6b44e5849c3261e6ae5b926790faaf6437268432 100644 (file)
--- 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 */
index 5a3d9c35508f27cbf094563cde0275f852c01a00..4023c4d8edb1e5563d9be1d7834cd00b653326f2 100644 (file)
@@ -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