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:
parent
f3b6ec046a
commit
f61aabdb1a
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user