Commit dbf72123 authored by Simon Kelley's avatar Simon Kelley

Rationalise hostname_cmp()

parent c979fa04
...@@ -951,78 +951,64 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char ...@@ -951,78 +951,64 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
/* 4034 6.1 */ /* 4034 6.1 */
static int hostname_cmp(const char *a, const char *b) static int hostname_cmp(const char *a, const char *b)
{ {
char *sa = NULL, *pa = (char *)a + strlen(a); char *sa, *ea, *ca, *sb, *eb, *cb;
char *sb = NULL, *pb = (char *)b + strlen(b); unsigned char ac, bc;
char *ca, *cb;
char sac = 0, sbc = 0; sa = ea = (char *)a + strlen(a);
int rc; sb = eb = (char *)b + strlen(b);
while (1) while (1)
{ {
while (pa != a && *pa != '.') while (sa != a && *(sa-1) != '.')
pa--; sa--;
while (pb != b && *pb != '.')
pb--;
ca = *pa == '.' ? pa+1 : pa; while (sb != b && *(sb-1) != '.')
cb = *pb == '.' ? pb+1 : pb; sb--;
while (1) { ca = sa;
unsigned char c1 = (unsigned char) *ca++; cb = sb;
unsigned char c2 = (unsigned char) *cb++;
if (c1 == 0) while (1)
{ {
rc = (c2 == 0) ? 0 : -1; if (ca == ea)
break;
}
if (c2 == 0)
{ {
rc = 1; if (cb == eb)
break; break;
}
if (c1 >= 'A' && c1 <= 'Z') return -1;
c1 += 'a' - 'A'; }
if (c2 >= 'A' && c2 <= 'Z')
c2 += 'a' - 'A';
if (c1 != c2) if (cb == eb)
{ return 1;
if (c1 < c2)
rc = -1;
else
rc = 1;
break; ac = (unsigned char) *ca++;
} bc = (unsigned char) *cb++;
}
if (rc == 0) if (ac >= 'A' && ac <= 'Z')
{ ac += 'a' - 'A';
if (pa == a && pb != b) if (bc >= 'A' && bc <= 'Z')
rc = 1; bc += 'a' - 'A';
if (pa != a && pb == b) if (ac > bc)
rc = -1; return -1;
else if (ac != bc)
return 1;
} }
if (sa)
*sa = sac;
if (sb) if (sa == a)
*sb = sbc; {
if (sb == b)
return 0;
if ((pa == a && pb == b) || rc != 0) return -1;
return rc; }
sa = pa, sac = *sa, *sa = 0; if (sb == b)
sb = pb, sbc = *sb, *sb = 0; return 1;
pa--; ea = sa--;
pb--; eb = sb--;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment