This bug causes editing of a schema definition to fail. The error message reads: ``` ldap_modify: Other (e.g., implementation specific) error (80) additional info: olcObjectClasses: ObjectClass not found: "idmPerson" Error at: cn={8}yyy,cn=schema,cn=config ```
The reason for this is the sorting of the values. ## Example This definition is only correct in exactly this order, because `idmStudent` builds on `idmPerson`: ``` olcObjectClasses: {3}( 1.3.6.1.4.1.xxxx.1 NAME 'idmPerson' SUP top AUXILIARY MUST ( uid $ givenName ) ) ... olcObjectClasses: {11}( 1.3.6.1.4.1.xxxx.2 NAME 'idmStudent' SUP idmPerson AUXILIARY MAY ( mtr ) ) ``` Sorting turns it into: ``` olcObjectClasses: {11}( 1.3.6.1.4.1.xxxx.2 NAME 'idmStudent' SUP idmPerson AUXILIARY MAY ( mtr ) ) ... olcObjectClasses: {3}( 1.3.6.1.4.1.xxxx.1 NAME 'idmPerson' SUP top AUXILIARY MUST ( uid $ givenName ) ) ``` And that then leads to described error. ## Conclusion: There seems to be no valid reason why the values are sorted. Attribute values should be taken in *exactly* the order in which they are entered in `vi`. ## Patch: This patch ensures that reordering no longer takes place and fixes the problem in the case shown above. ``` diff --git a/ldapvi/diff.c b/ldapvi/diff.c index e2787a3..42de566 100644 --- a/ldapvi/diff.c +++ b/ldapvi/diff.c @@ -29,8 +29,8 @@ compare_ptr_arrays(GPtrArray *a, GPtrArray *b, int i = 0; int j = 0; - qsort(a->pdata, a->len, sizeof(void *), cmp); - qsort(b->pdata, b->len, sizeof(void *), cmp); +// qsort(a->pdata, a->len, sizeof(void *), cmp); +// qsort(b->pdata, b->len, sizeof(void *), cmp); while (i < a->len && j < b->len) { void *ax = g_ptr_array_index(a, i); ```