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

s4-schema: fixed the sorting of schema attributes

another case of unsigned int subtracting breaking sorts. This one
surfaced now as attributeID_id now can be larger than 2^31
This commit is contained in:
Andrew Tridgell 2009-12-21 23:36:23 +11:00
parent ec7dc6a619
commit 0c362597c0

View File

@ -180,13 +180,19 @@ op_error:
return LDB_ERR_OPERATIONS_ERROR;
}
static int uint32_cmp(uint32_t c1, uint32_t c2)
{
if (c1 == c2) return 0;
return c1 > c2 ? 1 : -1;
}
static int dsdb_compare_class_by_lDAPDisplayName(struct dsdb_class **c1, struct dsdb_class **c2)
{
return strcasecmp((*c1)->lDAPDisplayName, (*c2)->lDAPDisplayName);
}
static int dsdb_compare_class_by_governsID_id(struct dsdb_class **c1, struct dsdb_class **c2)
{
return (*c1)->governsID_id - (*c2)->governsID_id;
return uint32_cmp((*c1)->governsID_id, (*c2)->governsID_id);
}
static int dsdb_compare_class_by_governsID_oid(struct dsdb_class **c1, struct dsdb_class **c2)
{
@ -203,7 +209,7 @@ static int dsdb_compare_attribute_by_lDAPDisplayName(struct dsdb_attribute **a1,
}
static int dsdb_compare_attribute_by_attributeID_id(struct dsdb_attribute **a1, struct dsdb_attribute **a2)
{
return (*a1)->attributeID_id - (*a2)->attributeID_id;
return uint32_cmp((*a1)->attributeID_id, (*a2)->attributeID_id);
}
static int dsdb_compare_attribute_by_attributeID_oid(struct dsdb_attribute **a1, struct dsdb_attribute **a2)
{
@ -211,7 +217,7 @@ static int dsdb_compare_attribute_by_attributeID_oid(struct dsdb_attribute **a1,
}
static int dsdb_compare_attribute_by_linkID(struct dsdb_attribute **a1, struct dsdb_attribute **a2)
{
return (*a1)->linkID - (*a2)->linkID;
return uint32_cmp((*a1)->linkID, (*a2)->linkID);
}
/*