]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix representation of types GPOS and RESINFO, add rdf type for
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Mon, 17 Mar 2025 15:38:17 +0000 (16:38 +0100)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Mon, 17 Mar 2025 15:38:17 +0000 (16:38 +0100)
doc/Changelog
sldns/rrdef.c
sldns/rrdef.h
sldns/str2wire.c
sldns/str2wire.h
sldns/wire2str.c
sldns/wire2str.h
testdata/test_ldnsrr.c3

index bff18592a7c30f4fb02df80bf8731c0a6568b5c7..912faef122960e3a4ae358ac23af4a15be1b84bb 100644 (file)
@@ -1,3 +1,7 @@
+17 March 2025: Wouter
+       - Fix representation of types GPOS and RESINFO, add rdf type for
+         unquoted str.
+
 16 March 2025: Yorgos
        - Fix 'unbound-control flush_negative' when reporting removed data;
          reported by David 'eqvinox' Lamparter.
index 9b4d50f446dbea1f343ebf2b98d777e111c5c97b..2ccb875d4238de53c68138b93297e51ae49659d6 100644 (file)
@@ -86,7 +86,7 @@ static const sldns_rdf_type type_px_wireformat[] = {
        LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_DNAME
 };
 static const sldns_rdf_type type_gpos_wireformat[] = {
-       LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_STR
+       LDNS_RDF_TYPE_UNQUOTED, LDNS_RDF_TYPE_UNQUOTED, LDNS_RDF_TYPE_UNQUOTED
 };
 static const sldns_rdf_type type_aaaa_wireformat[] = { LDNS_RDF_TYPE_AAAA };
 static const sldns_rdf_type type_loc_wireformat[] = { LDNS_RDF_TYPE_LOC };
@@ -621,7 +621,7 @@ static sldns_rr_descriptor rdata_field_descriptors[] = {
 {(enum sldns_enum_rr_type)0, "TYPE260", 1, 1, type_0_wireformat, LDNS_RDF_TYPE_NONE, LDNS_RR_NO_COMPRESS, 0 },
 
        /* 261 */
-       {LDNS_RR_TYPE_RESINFO,  "RESINFO", 1, 0, NULL, LDNS_RDF_TYPE_STR, LDNS_RR_NO_COMPRESS, 0 },
+       {LDNS_RR_TYPE_RESINFO,  "RESINFO", 1, 0, NULL, LDNS_RDF_TYPE_UNQUOTED, LDNS_RR_NO_COMPRESS, 0 },
 
 /* split in array, no longer contiguous */
 
index 5c60748194c84851cf88e91a39037fff2c90d00c..24abec622e1f6c36f9784d70d4746ed69bf394ff 100644 (file)
@@ -343,6 +343,9 @@ enum sldns_enum_rdf_type
         /** 8 * 8 bit hex numbers separated by dashes. For EUI64. */
         LDNS_RDF_TYPE_EUI64,
 
+       /** Character string without quotes. */
+       LDNS_RDF_TYPE_UNQUOTED,
+
         /** A non-zero sequence of US-ASCII letters and numbers in lower case.
          *  For CAA.
          */
index b3f5e97984a196b6c60c7fdd6202489294d7550e..becd6d3855c9b81528e9f8611af6d80a5fc78652 100644 (file)
@@ -365,7 +365,8 @@ static int
 sldns_rdf_type_maybe_quoted(sldns_rdf_type rdf_type)
 {
        return  rdf_type == LDNS_RDF_TYPE_STR ||
-               rdf_type == LDNS_RDF_TYPE_LONG_STR;
+               rdf_type == LDNS_RDF_TYPE_LONG_STR ||
+               rdf_type == LDNS_RDF_TYPE_UNQUOTED;
 }
 
 /** see if rdata is quoted */
@@ -1719,6 +1720,8 @@ int sldns_str2wire_rdf_buf(const char* str, uint8_t* rd, size_t* len,
                return sldns_str2wire_eui48_buf(str, rd, len);
        case LDNS_RDF_TYPE_EUI64:
                return sldns_str2wire_eui64_buf(str, rd, len);
+       case LDNS_RDF_TYPE_UNQUOTED:
+               return sldns_str2wire_unquoted_buf(str, rd, len);
        case LDNS_RDF_TYPE_TAG:
                return sldns_str2wire_tag_buf(str, rd, len);
        case LDNS_RDF_TYPE_LONG_STR:
@@ -2776,6 +2779,11 @@ int sldns_str2wire_eui64_buf(const char* str, uint8_t* rd, size_t* len)
        return LDNS_WIREPARSE_ERR_OK;
 }
 
+int sldns_str2wire_unquoted_buf(const char* str, uint8_t* rd, size_t* len)
+{
+       return sldns_str2wire_str_buf(str, rd, len);
+}
+
 int sldns_str2wire_tag_buf(const char* str, uint8_t* rd, size_t* len)
 {
        size_t slen = strlen(str);
index 5e4d146d3092b0b113596a0a1c00ad0dfcb6231f..db6528a2f9bff0cebc81cf9db532ca7640d61c1d 100644 (file)
@@ -551,6 +551,15 @@ int sldns_str2wire_eui48_buf(const char* str, uint8_t* rd, size_t* len);
  */
 int sldns_str2wire_eui64_buf(const char* str, uint8_t* rd, size_t* len);
 
+/**
+ * Convert rdf of type LDNS_RDF_TYPE_UNQUOTED from string to wireformat.
+ * @param str: the text to convert for this rdata element.
+ * @param rd: rdata buffer for the wireformat.
+ * @param len: length of rd buffer on input, used length on output.
+ * @return 0 on success, error on failure.
+ */
+int sldns_str2wire_unquoted_buf(const char* str, uint8_t* rd, size_t* len);
+
 /**
  * Convert rdf of type LDNS_RDF_TYPE_TAG from string to wireformat.
  * @param str: the text to convert for this rdata element.
index 29177b53509cee7f752728f98eb9cd31d73b95e8..f43b47168204da95211c9123d23e93daa70e180b 100644 (file)
@@ -1344,6 +1344,8 @@ int sldns_wire2str_rdf_scan(uint8_t** d, size_t* dlen, char** s, size_t* slen,
                return sldns_wire2str_eui48_scan(d, dlen, s, slen);
        case LDNS_RDF_TYPE_EUI64:
                return sldns_wire2str_eui64_scan(d, dlen, s, slen);
+       case LDNS_RDF_TYPE_UNQUOTED:
+               return sldns_wire2str_unquoted_scan(d, dlen, s, slen);
        case LDNS_RDF_TYPE_TAG:
                return sldns_wire2str_tag_scan(d, dlen, s, slen);
        case LDNS_RDF_TYPE_LONG_STR:
@@ -2047,6 +2049,25 @@ int sldns_wire2str_eui64_scan(uint8_t** d, size_t* dl, char** s, size_t* sl)
        return w;
 }
 
+int sldns_wire2str_unquoted_scan(uint8_t** d, size_t* dl, char** s, size_t* sl)
+{
+       int w = 0;
+       size_t i, len;
+       if(*dl < 1) return -1;
+       len = **d;
+       if(*dl < 1+len) return -1;
+       (*d)++;
+       (*dl)--;
+       for(i=0; i<len; i++) {
+               if(isspace((unsigned char)(*d)[i]))
+                       w += sldns_str_print(s, sl, "\\%c", (char)(*d)[i]);
+               else    w += str_char_print(s, sl, (*d)[i]);
+       }
+       (*d)+=len;
+       (*dl)-=len;
+       return w;
+}
+
 int sldns_wire2str_tag_scan(uint8_t** d, size_t* dl, char** s, size_t* sl)
 {
        size_t i, n;
index a7c58b85a5fbe9144d356808f684a8dab34031f5..772268b249c92b54cbd9fd98077ad85433f93687 100644 (file)
@@ -919,6 +919,19 @@ int sldns_wire2str_eui48_scan(uint8_t** data, size_t* data_len, char** str,
 int sldns_wire2str_eui64_scan(uint8_t** data, size_t* data_len, char** str,
        size_t* str_len);
 
+/**
+ * Scan wireformat UNQUOTED field to string, with user buffers.
+ * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
+ * @param data: wireformat data.
+ * @param data_len: length of data buffer.
+ * @param str: string buffer.
+ * @param str_len: length of string buffer.
+ * @return number of characters (except null) needed to print.
+ *     Can return -1 on failure.
+ */
+int sldns_wire2str_unquoted_scan(uint8_t** data, size_t* data_len, char** str,
+       size_t* str_len);
+
 /**
  * Scan wireformat TAG field to string, with user buffers.
  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
index 3adb7b5069ff95735878fd3f5a2400f93bd7c411..0ce9340dfc3138c0ea781779df90c89a71795abf 100644 (file)
@@ -169,7 +169,7 @@ dname03.types-signed.wb.sidnlabs.nl.        3600    IN      NSEC    gpos.types-signed.wb.sidnlabs.
 07646E616D6530330C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00CFCE6808CE405CC73016F9685E75C161BEAA5869D2A6C9B584F4C22BD0CFE199C44F2F8C68BC7CEEF64DAEA444A78C9BB78271C487CD3A76885F757E5D98CEC0B35D173FE21040453AA59C34A6155199A9E1D8FACC67A36646021298D2F9CAEE31E2E022AB152BF32981795D796FC5532F017A091FD7928996BA1E5EF2E665DC
 dname03.types-signed.wb.sidnlabs.nl.   3600    IN      RRSIG   NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. z85oCM5AXMcwFvloXnXBYb6qWGnSpsm1hPTCK9DP4ZnETy+MaLx87vZNrqREp4ybt4JxxIfNOnaIX3V+XZjOwLNdFz/iEEBFOqWcNKYVUZmp4dj6zGejZkYCEpjS+cruMeLgIqsVK/MpgXldeW/FUy8Begkf15KJlroeXvLmZdw= ;{id = 62298}
 0467706F730C74797065732D7369676E6564027762087369646E6C616273026E6C00001B00010000003C00120532332E36370532332E36370532332E3637
-gpos.types-signed.wb.sidnlabs.nl.      60      IN      GPOS    "23.67" "23.67" "23.67"
+gpos.types-signed.wb.sidnlabs.nl.      60      IN      GPOS    23.67 23.67 23.67
 0467706F730C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0049CBABEED1B9089695C552489294378669AE1B934A81076F364E3D3E68F239E34AC106D4554F009A39A7813B1C8E02076B0A0737DACE4CCC7BF3CD20F4DFF9C19934DAAD81F23FB743C89CA941387CFC6B1506525634206D4918FA9CBE9707A88B25B0F6FF10E295551E4643488EA87FE7E051BD9E6D8AEF42F01574BB56BEE4
 gpos.types-signed.wb.sidnlabs.nl.      60      IN      RRSIG   GPOS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. Scur7tG5CJaVxVJIkpQ3hmmuG5NKgQdvNk49PmjyOeNKwQbUVU8AmjmngTscjgIHawoHN9rOTMx7880g9N/5wZk02q2B8j+3Q8icqUE4fPxrFQZSVjQgbUkY+py+lweoiyWw9v8Q4pVVHkZDSI6of+fgUb2ebYrvQvAVdLtWvuQ= ;{id = 62298}
 0467706F730C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002B0568696E666F0C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000100003
@@ -859,7 +859,7 @@ type26.types-signed.wb.sidnlabs.nl. 3600    IN      NSEC    type27.types-signed.wb.sidnlabs
 067479706532360C74797065732D7369676E6564027762087369646E6C616273026E6C00002E000100000E1000AF002F080500000E1052EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C00B37F1C2B73BB1D6A5EE4A53E2E9E8F893F0A4E20FD62BC7C1C56D2A40D59AC7CD25157555FC677BB9DCAA76C3F07710B381DBB61EEF2A8896A67F1AF40107DFC5BD74B62593ACFFBE407DEA015E12D72294725BDC7B8218FDC5E991A5676CC9BAC59B8A2D743F3A3A479226167D54973C7DAE32267D2AD6DE873CC8ABDCFA07E
 type26.types-signed.wb.sidnlabs.nl.    3600    IN      RRSIG   NSEC 8 5 3600 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. s38cK3O7HWpe5KU+Lp6PiT8KTiD9Yrx8HFbSpA1ZrHzSUVdVX8Z3u53Kp2w/B3ELOB27Ye7yqIlqZ/GvQBB9/FvXS2JZOs/75AfeoBXhLXIpRyW9x7ghj9xemRpWdsybrFm4otdD86OkeSJhZ9VJc8fa4yJn0q1t6HPMir3PoH4= ;{id = 62298}
 067479706532370C74797065732D7369676E6564027762087369646E6C616273026E6C00001B00010000003C00120532332E36370532332E36370532332E3637
-type27.types-signed.wb.sidnlabs.nl.    60      IN      GPOS    "23.67" "23.67" "23.67"
+type27.types-signed.wb.sidnlabs.nl.    60      IN      GPOS    23.67 23.67 23.67
 067479706532370C74797065732D7369676E6564027762087369646E6C616273026E6C00002E00010000003C00AF001B08050000003C52EC3900524963DCF35A0C74797065732D7369676E6564027762087369646E6C616273026E6C0013BF8CA0C46CABE234D3A0D55A9D4D2A30449E21A25E889DBAE3499A2C567B8F652C2CB2F67A83767D6B5963205F7FBF83A79318E702C558E30688507E062029FCF4EBD2EC5DEE7DFEB6C3C2F326131920401A05444AAA326CC9D118139C43A4A0DC834ECE3ECF883DAC78B03031F15432A5ACD4331587F43B22176CBA0A6E14
 type27.types-signed.wb.sidnlabs.nl.    60      IN      RRSIG   GPOS 8 5 60 20140201000000 20130930114324 62298 types-signed.wb.sidnlabs.nl. E7+MoMRsq+I006DVWp1NKjBEniGiXoiduuNJmixWe49lLCyy9nqDdn1rWWMgX3+/g6eTGOcCxVjjBohQfgYgKfz069LsXe59/rbDwvMmExkgQBoFREqqMmzJ0RgTnEOkoNyDTs4+z4g9rHiwMDHxVDKlrNQzFYf0OyIXbLoKbhQ= ;{id = 62298}
 067479706532370C74797065732D7369676E6564027762087369646E6C616273026E6C00002F000100000E10002C067479706532380C74797065732D7369676E6564027762087369646E6C616273026E6C000006000000100003