1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

ldb:dn: make ldb_dn_compare() self-consistent

We were returning -1 in all these cases:

   ldb_dn_compare(dn, NULL);
   ldb_dn_compare(NULL, dn);
   ldb_dn_compare(NULL, NULL);

which would give strange results in sort, where this is often used.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15625

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
(cherry picked from commit 5fe488d515)
This commit is contained in:
Douglas Bagnall 2024-04-07 15:04:43 +12:00 committed by Jule Anger
parent f3b6ec046a
commit f61aabdb1a

View File

@ -1132,8 +1132,22 @@ int ldb_dn_compare(struct ldb_dn *dn0, struct ldb_dn *dn1)
{
unsigned int i;
int ret;
/*
* If used in sort, we shift NULL and invalid DNs to the end.
*
* If ldb_dn_casefold_internal() fails, that goes to the end too, so
* we end up with:
*
* | normal DNs, sorted | casefold failed DNs | invalid DNs | NULLs |
*/
if (( ! dn0) || dn0->invalid || ! dn1 || dn1->invalid) {
if (dn0 == dn1 || (dn0->invalid && dn1->invalid)) {
return 0;
}
if (dn0 == NULL || dn0->invalid) {
return 1;
}
if (dn1 == NULL || dn1->invalid) {
return -1;
}