diff --git a/ChangeLog b/ChangeLog index 415b35ca..5133ba7b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ * 2018-12-??: Version 1.5.0 + * ZONEMD rr-type * getdns_query queries for addresses when a query name without a type is given. * RFE #408: Fetching of trust anchors will be retried diff --git a/src/getdns/getdns.h.in b/src/getdns/getdns.h.in index b3ef64e1..5e4873b5 100644 --- a/src/getdns/getdns.h.in +++ b/src/getdns/getdns.h.in @@ -416,6 +416,7 @@ typedef enum getdns_callback_type_t { #define GETDNS_RRTYPE_CDNSKEY 60 #define GETDNS_RRTYPE_OPENPGPKEY 61 #define GETDNS_RRTYPE_CSYNC 62 +#define GETDNS_RRTYPE_ZONEMD 63 #define GETDNS_RRTYPE_SPF 99 #define GETDNS_RRTYPE_UINFO 100 #define GETDNS_RRTYPE_UID 101 diff --git a/src/gldns/rrdef.c b/src/gldns/rrdef.c index 52e9cf3b..9f27a5a1 100644 --- a/src/gldns/rrdef.c +++ b/src/gldns/rrdef.c @@ -150,6 +150,9 @@ static const gldns_rdf_type type_openpgpkey_wireformat[] = { static const gldns_rdf_type type_csync_wireformat[] = { GLDNS_RDF_TYPE_INT32, GLDNS_RDF_TYPE_INT16, GLDNS_RDF_TYPE_NSEC }; +static const gldns_rdf_type type_zonemd_wireformat[] = { + GLDNS_RDF_TYPE_INT32, GLDNS_RDF_TYPE_INT8, GLDNS_RDF_TYPE_INT8, GLDNS_RDF_TYPE_HEX +}; /* nsec3 is some vars, followed by same type of data of nsec */ static const gldns_rdf_type type_nsec3_wireformat[] = { /* GLDNS_RDF_TYPE_NSEC3_VARS, GLDNS_RDF_TYPE_NSEC3_NEXT_OWNER, GLDNS_RDF_TYPE_NSEC*/ @@ -372,7 +375,8 @@ static gldns_rr_descriptor rdata_field_descriptors[] = { {GLDNS_RR_TYPE_OPENPGPKEY, "OPENPGPKEY", 1, 1, type_openpgpkey_wireformat, GLDNS_RDF_TYPE_NONE, GLDNS_RR_NO_COMPRESS, 0 }, /* 62 */ {GLDNS_RR_TYPE_CSYNC, "CSYNC", 3, 3, type_csync_wireformat, GLDNS_RDF_TYPE_NONE, GLDNS_RR_NO_COMPRESS, 0 }, -{GLDNS_RR_TYPE_NULL, "TYPE63", 1, 1, type_0_wireformat, GLDNS_RDF_TYPE_NONE, GLDNS_RR_NO_COMPRESS, 0 }, + /* 63 */ + {GLDNS_RR_TYPE_ZONEMD, "ZONEMD", 4, 4, type_zonemd_wireformat, GLDNS_RDF_TYPE_NONE, GLDNS_RR_NO_COMPRESS, 0 }, {GLDNS_RR_TYPE_NULL, "TYPE64", 1, 1, type_0_wireformat, GLDNS_RDF_TYPE_NONE, GLDNS_RR_NO_COMPRESS, 0 }, {GLDNS_RR_TYPE_NULL, "TYPE65", 1, 1, type_0_wireformat, GLDNS_RDF_TYPE_NONE, GLDNS_RR_NO_COMPRESS, 0 }, {GLDNS_RR_TYPE_NULL, "TYPE66", 1, 1, type_0_wireformat, GLDNS_RDF_TYPE_NONE, GLDNS_RR_NO_COMPRESS, 0 }, diff --git a/src/gldns/rrdef.h b/src/gldns/rrdef.h index ecbf0749..a11984b3 100644 --- a/src/gldns/rrdef.h +++ b/src/gldns/rrdef.h @@ -195,6 +195,7 @@ enum gldns_enum_rr_type GLDNS_RR_TYPE_CDNSKEY = 60, /** RFC 7344 */ GLDNS_RR_TYPE_OPENPGPKEY = 61, /* RFC 7929 */ GLDNS_RR_TYPE_CSYNC = 62, /* RFC 7477 */ + GLDNS_RR_TYPE_ZONEMD = 63, /* draft-wessels-dns-zone-digest */ GLDNS_RR_TYPE_SPF = 99, /* RFC 4408 */ diff --git a/src/rr-dict.c b/src/rr-dict.c index ab0c2b82..79fb7bcc 100644 --- a/src/rr-dict.c +++ b/src/rr-dict.c @@ -613,6 +613,11 @@ static _getdns_rdata_def csync_rdata[] = { { "serial" , GETDNS_RDF_I4 , NULL }, { "flags" , GETDNS_RDF_I2 , NULL }, { "type_bit_maps" , GETDNS_RDF_X , NULL }}; +static _getdns_rdata_def zonemd_rdata[] = { + { "serial" , GETDNS_RDF_I4 , NULL }, + { "digest_type" , GETDNS_RDF_I1 , NULL }, + { "reserved" , GETDNS_RDF_I1 , NULL }, + { "digest" , GETDNS_RDF_X , NULL }}; static _getdns_rdata_def spf_rdata[] = { { "text" , GETDNS_RDF_S_M , NULL }}; static _getdns_rdata_def nid_rdata[] = { @@ -723,9 +728,9 @@ static _getdns_rr_def _getdns_rr_defs[] = { { "TALINK", talink_rdata, ALEN( talink_rdata) }, { "CDS", ds_rdata, ALEN( ds_rdata) }, { "CDNSKEY", dnskey_rdata, ALEN( dnskey_rdata) }, - { "OPENPGPKEY", openpgpkey_rdata, ALEN(openpgpkey_rdata) }, /* 61 - */ - { "CSYNC", csync_rdata, ALEN( csync_rdata) }, /* - 62 */ - { NULL, NULL, 0 }, + { "OPENPGPKEY", openpgpkey_rdata, ALEN(openpgpkey_rdata) }, + { "CSYNC", csync_rdata, ALEN( csync_rdata) }, + { "ZONEMD", zonemd_rdata, ALEN( zonemd_rdata) }, /* - 63 */ { NULL, NULL, 0 }, { NULL, NULL, 0 }, { NULL, NULL, 0 },