mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
HINFO not downcased any more
git-svn-id: file:///svn/unbound/trunk@1410 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
4eb2bdf2b1
commit
865852d3f7
3 changed files with 6 additions and 70 deletions
|
|
@ -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.
|
||||||
|
|
|
||||||
4
testdata/test_signatures.12
vendored
4
testdata/test_signatures.12
vendored
|
|
@ -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=
|
||||||
|
|
|
||||||
|
|
@ -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 */
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue