From 865852d3f7e4af5761cea2467a8a2d8c8c56132c Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Tue, 6 Jan 2009 14:49:26 +0000 Subject: [PATCH] HINFO not downcased any more git-svn-id: file:///svn/unbound/trunk@1410 be551aaa-1e26-0410-a405-d3ace91eadb9 --- doc/Changelog | 2 ++ testdata/test_signatures.12 | 4 +-- validator/val_sigcrypt.c | 70 ++----------------------------------- 3 files changed, 6 insertions(+), 70 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 5ebf27f8b..c417b3e83 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -6,6 +6,8 @@ queries with different type could get nxdomain. Now queries with a different name get resolved normally, with different type get a correct NOERROR/NODATA answer. + - HINFO no longer downcased for validation, making unbound compatible + with bind and ldns. 5 January 2009: Wouter - fixup getaddrinfo failure handling for remote control port. diff --git a/testdata/test_signatures.12 b/testdata/test_signatures.12 index 0f168e60c..eb4d594ab 100644 --- a/testdata/test_signatures.12 +++ b/testdata/test_signatures.12 @@ -27,7 +27,7 @@ ENTRY_END ; HINFO record signed with ldns, HINFO in uppercase, signature uppercase ENTRY_BEGIN SECTION QUESTION -bogus.jelte.nlnetlabs.nl. IN HINFO +jelte.nlnetlabs.nl. IN HINFO SECTION ANSWER jelte.nlnetlabs.nl. 3600 IN HINFO "Jelte" "Machine van" jelte.nlnetlabs.nl. 3600 IN RRSIG HINFO 5 3 3600 20090203100022 20090106100022 48885 jelte.nlnetlabs.nl. eRig3NjIIgBTmQiN7AREmplgiY6OOtVwCNZgF5UAoYFAE1K1tl5WLqe9 FmTcVtaNUzFdgYv+TD93NNYdV0uxJkr+rS2sSykGf9OIlxevFm+rW2ya 4/Y+5GIN77eN9q9/6ULQRdsX3p8w1fhloiDXk+tgCaw+cJJElMEE1Avw 2dY= @@ -47,7 +47,7 @@ ENTRY_END ; (signer canonicalised) ENTRY_BEGIN SECTION QUESTION -jelte.nlnetlabs.nl. IN HINFO +bogus.jelte.nlnetlabs.nl. IN HINFO SECTION ANSWER jelte.nlnetlabs.nl. 3600 IN HINFO "Jelte" "Machine van" jelte.nlnetlabs.nl. 3600 IN RRSIG HINFO 5 3 3600 20090203105558 20090106105558 48885 jelte.nlnetlabs.nl. UwFKSqH9oau3nCdJ4i6iYamo2izgMCKy1K8ec0IkhniUONKaIGiRNz8/ QrLAeBHhMnLQYNV/GBprNjvnPyYLG/6bWYUBxvP6pCG4oDEmNY7QF9di I6So5Ycv0ZWaYoT/NYStUj1fLNZ4xCdNXVLA7Oi5PRMeOvPQIvMG3hHK Ja0= diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c index ce21f932d..708afebb3 100644 --- a/validator/val_sigcrypt.c +++ b/validator/val_sigcrypt.c @@ -551,57 +551,6 @@ struct canon_rr { size_t rr_idx; }; -/** - * Compare HINFO rrsets. For them, the string length bytes are not lowercased, - * but the string contents are lowercased. - * - * This routine works for any 'all STR' RR type. It works similar to the - * compare_byfield routine, but stripped down, and modified to lowercase - * STR fields. - * - * @param d: rrset data - * @param i: first RR to compare - * @param j: first RR to compare - * @return comparison code. - */ -static int -canonical_compare_hinfo(struct packed_rrset_data* d, size_t i, size_t j) -{ - uint8_t* di = d->rr_data[i]+2; /* ptr to current rdata byte */ - uint8_t* dj = d->rr_data[j]+2; - size_t ilen = d->rr_len[i]-2; /* length left in rdata */ - size_t jlen = d->rr_len[j]-2; - size_t strlen_i = 0; - size_t strlen_j = 0; - while(ilen > 0 && jlen > 0) { - /* compare this pair of bytes */ - if( ((strlen_i)?(uint8_t)tolower((int)*di):*di) - != ((strlen_j)?(uint8_t)tolower((int)*dj):*dj) - ) { - if(((strlen_i)?(uint8_t)tolower((int)*di):*di) - < ((strlen_j)?(uint8_t)tolower((int)*dj):*dj)) - return -1; - return 1; - } - ilen --; - jlen --; - /* read length byte of the string in rdata if strlen=0 */ - if(strlen_i == 0) { - strlen_i = (size_t)*di; - } else strlen_i--; - if(strlen_j == 0) { - strlen_j = (size_t)*dj; - } else strlen_j--; - di++; - dj++; - } - if(ilen == 0 && jlen == 0) - return 0; - if(ilen == 0) - return -1; - return 1; -} - /** * Compare two RR for canonical order, in a field-style sweep. * @param d: rrset data @@ -807,11 +756,7 @@ canonical_compare(struct ub_packed_rrset_key* rrset, size_t i, size_t j) log_assert(desc->_minimum == desc->_maximum); return canonical_compare_byfield(d, desc, i, j); - /* This RR type is special, as the contents of text fields - * is lowercased. */ - case LDNS_RR_TYPE_HINFO: - return canonical_compare_hinfo(d, i, j); - + case LDNS_RR_TYPE_HINFO: /* no longer downcased */ case LDNS_RR_TYPE_NSEC: case LDNS_RR_TYPE_RRSIG: default: @@ -957,18 +902,6 @@ canonicalize_rdata(ldns_buffer* buf, struct ub_packed_rrset_key* rrset, query_dname_tolower(datstart + dname_valid(datstart, len-2)); return; - case LDNS_RR_TYPE_HINFO: - /* lowercase text records */ - len -= 2; - if(len < (size_t)datstart[0]+1) - return; - lowercase_text_field(datstart); - len -= (size_t)datstart[0]+1; /* and skip the 1st */ - datstart += (size_t)datstart[0]+1; - if(len < (size_t)datstart[0]+1) - return; - lowercase_text_field(datstart); - return; case LDNS_RR_TYPE_RT: case LDNS_RR_TYPE_AFSDB: case LDNS_RR_TYPE_KX: @@ -1028,6 +961,7 @@ canonicalize_rdata(ldns_buffer* buf, struct ub_packed_rrset_key* rrset, /* do not canonicalize NSEC rdata name, compat with bug * from bind 9.4 signer, where it does not do so */ case LDNS_RR_TYPE_NSEC: /* type starts with the name */ + case LDNS_RR_TYPE_HINFO: /* not downcased */ /* A6 not supported */ default: /* nothing to do for unknown types */