HINFO not downcased any more

git-svn-id: file:///svn/unbound/trunk@1410 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
Wouter Wijngaards 2009-01-06 14:49:26 +00:00
parent 4eb2bdf2b1
commit 865852d3f7
3 changed files with 6 additions and 70 deletions

View file

@ -6,6 +6,8 @@
queries with different type could get nxdomain. Now queries queries with different type could get nxdomain. Now queries
with a different name get resolved normally, with different type with a different name get resolved normally, with different type
get a correct NOERROR/NODATA answer. get a correct NOERROR/NODATA answer.
- HINFO no longer downcased for validation, making unbound compatible
with bind and ldns.
5 January 2009: Wouter 5 January 2009: Wouter
- fixup getaddrinfo failure handling for remote control port. - fixup getaddrinfo failure handling for remote control port.

View file

@ -27,7 +27,7 @@ ENTRY_END
; HINFO record signed with ldns, HINFO in uppercase, signature uppercase ; HINFO record signed with ldns, HINFO in uppercase, signature uppercase
ENTRY_BEGIN ENTRY_BEGIN
SECTION QUESTION SECTION QUESTION
bogus.jelte.nlnetlabs.nl. IN HINFO jelte.nlnetlabs.nl. IN HINFO
SECTION ANSWER SECTION ANSWER
jelte.nlnetlabs.nl. 3600 IN HINFO "Jelte" "Machine van" 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= 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) ; (signer canonicalised)
ENTRY_BEGIN ENTRY_BEGIN
SECTION QUESTION SECTION QUESTION
jelte.nlnetlabs.nl. IN HINFO bogus.jelte.nlnetlabs.nl. IN HINFO
SECTION ANSWER SECTION ANSWER
jelte.nlnetlabs.nl. 3600 IN HINFO "Jelte" "Machine van" 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= jelte.nlnetlabs.nl. 3600 IN RRSIG HINFO 5 3 3600 20090203105558 20090106105558 48885 jelte.nlnetlabs.nl. UwFKSqH9oau3nCdJ4i6iYamo2izgMCKy1K8ec0IkhniUONKaIGiRNz8/ QrLAeBHhMnLQYNV/GBprNjvnPyYLG/6bWYUBxvP6pCG4oDEmNY7QF9di I6So5Ycv0ZWaYoT/NYStUj1fLNZ4xCdNXVLA7Oi5PRMeOvPQIvMG3hHK Ja0=

View file

@ -551,57 +551,6 @@ struct canon_rr {
size_t rr_idx; 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. * Compare two RR for canonical order, in a field-style sweep.
* @param d: rrset data * @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); log_assert(desc->_minimum == desc->_maximum);
return canonical_compare_byfield(d, desc, i, j); return canonical_compare_byfield(d, desc, i, j);
/* This RR type is special, as the contents of text fields case LDNS_RR_TYPE_HINFO: /* no longer downcased */
* is lowercased. */
case LDNS_RR_TYPE_HINFO:
return canonical_compare_hinfo(d, i, j);
case LDNS_RR_TYPE_NSEC: case LDNS_RR_TYPE_NSEC:
case LDNS_RR_TYPE_RRSIG: case LDNS_RR_TYPE_RRSIG:
default: default:
@ -957,18 +902,6 @@ canonicalize_rdata(ldns_buffer* buf, struct ub_packed_rrset_key* rrset,
query_dname_tolower(datstart + query_dname_tolower(datstart +
dname_valid(datstart, len-2)); dname_valid(datstart, len-2));
return; 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_RT:
case LDNS_RR_TYPE_AFSDB: case LDNS_RR_TYPE_AFSDB:
case LDNS_RR_TYPE_KX: 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 /* do not canonicalize NSEC rdata name, compat with bug
* from bind 9.4 signer, where it does not do so */ * 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_NSEC: /* type starts with the name */
case LDNS_RR_TYPE_HINFO: /* not downcased */
/* A6 not supported */ /* A6 not supported */
default: default:
/* nothing to do for unknown types */ /* nothing to do for unknown types */