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 != '.') while (sb != b && *(sb-1) != '.')
pb--; sb--;
ca = *pa == '.' ? pa+1 : pa; ca = sa;
cb = *pb == '.' ? pb+1 : pb; cb = sb;
while (1) { while (1)
unsigned char c1 = (unsigned char) *ca++; {
unsigned char c2 = (unsigned char) *cb++; if (ca == ea)
{
if (c1 == 0) if (cb == eb)
{ break;
rc = (c2 == 0) ? 0 : -1;
break; return -1;
} }
if (c2 == 0) if (cb == eb)
{ return 1;
rc = 1;
break; ac = (unsigned char) *ca++;
} bc = (unsigned char) *cb++;
if (c1 >= 'A' && c1 <= 'Z')
c1 += 'a' - 'A';
if (c2 >= 'A' && c2 <= 'Z')
c2 += 'a' - 'A';
if (c1 != c2)
{
if (c1 < c2)
rc = -1;
else
rc = 1;
break; if (ac >= 'A' && ac <= 'Z')
} ac += 'a' - 'A';
} if (bc >= 'A' && bc <= 'Z')
bc += 'a' - 'A';
if (ac > bc)
return -1;
else if (ac != bc)
return 1;
}
if (rc == 0)
if (sa == a)
{ {
if (pa == a && pb != b) if (sb == b)
rc = 1; return 0;
if (pa != a && pb == b) return -1;
rc = -1;
} }
if (sa) if (sb == b)
*sa = sac; return 1;
if (sb)
*sb = sbc;
if ((pa == a && pb == b) || rc != 0) ea = sa--;
return rc; eb = sb--;
sa = pa, sac = *sa, *sa = 0;
sb = pb, sbc = *sb, *sb = 0;
pa--;
pb--;
} }
} }
......
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