shared: port dns_name_compare_func() to make use of ascii_strcasecmp_nn()

This way we become compatible with DNS names with embedded NUL bytes.
This commit is contained in:
Lennart Poettering 2016-01-13 20:20:52 +01:00
parent f6fbd9c21f
commit 34361485a8
1 changed files with 11 additions and 5 deletions

View File

@ -521,7 +521,7 @@ int dns_name_compare_func(const void *a, const void *b) {
y = (const char *) b + strlen(b);
for (;;) {
char la[DNS_LABEL_MAX+1], lb[DNS_LABEL_MAX+1];
char la[DNS_LABEL_MAX], lb[DNS_LABEL_MAX];
if (x == NULL && y == NULL)
return 0;
@ -531,8 +531,15 @@ int dns_name_compare_func(const void *a, const void *b) {
if (r < 0 || q < 0)
return r - q;
k = dns_label_undo_idna(la, r, la, sizeof(la));
w = dns_label_undo_idna(lb, q, lb, sizeof(lb));
if (r > 0)
k = dns_label_undo_idna(la, r, la, sizeof(la));
else
k = 0;
if (q > 0)
w = dns_label_undo_idna(lb, q, lb, sizeof(lb));
else
w = 0;
if (k < 0 || w < 0)
return k - w;
if (k > 0)
@ -540,8 +547,7 @@ int dns_name_compare_func(const void *a, const void *b) {
if (w > 0)
q = w;
la[r] = lb[q] = 0;
r = strcasecmp(la, lb);
r = ascii_strcasecmp_nn(la, r, lb, q);
if (r != 0)
return r;
}