mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Rationalise hostname_cmp()
This commit is contained in:
102
src/dnssec.c
102
src/dnssec.c
@@ -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 (c1 == 0)
|
|
||||||
{
|
{
|
||||||
rc = (c2 == 0) ? 0 : -1;
|
if (ca == ea)
|
||||||
|
{
|
||||||
|
if (cb == eb)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c2 == 0)
|
if (cb == eb)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
ac = (unsigned char) *ca++;
|
||||||
|
bc = (unsigned char) *cb++;
|
||||||
|
|
||||||
|
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 (sa == a)
|
||||||
{
|
{
|
||||||
rc = 1;
|
if (sb == b)
|
||||||
break;
|
return 0;
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c1 >= 'A' && c1 <= 'Z')
|
if (sb == b)
|
||||||
c1 += 'a' - 'A';
|
return 1;
|
||||||
if (c2 >= 'A' && c2 <= 'Z')
|
|
||||||
c2 += 'a' - 'A';
|
|
||||||
|
|
||||||
if (c1 != c2)
|
ea = sa--;
|
||||||
{
|
eb = sb--;
|
||||||
if (c1 < c2)
|
|
||||||
rc = -1;
|
|
||||||
else
|
|
||||||
rc = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc == 0)
|
|
||||||
{
|
|
||||||
if (pa == a && pb != b)
|
|
||||||
rc = 1;
|
|
||||||
|
|
||||||
if (pa != a && pb == b)
|
|
||||||
rc = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sa)
|
|
||||||
*sa = sac;
|
|
||||||
|
|
||||||
if (sb)
|
|
||||||
*sb = sbc;
|
|
||||||
|
|
||||||
if ((pa == a && pb == b) || rc != 0)
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
sa = pa, sac = *sa, *sa = 0;
|
|
||||||
sb = pb, sbc = *sb, *sb = 0;
|
|
||||||
|
|
||||||
pa--;
|
|
||||||
pb--;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user