Hi!

I wonder: Is the output of slapcat expected to be stable (assuming the database 
did not change)? I know that LDAP attributes are considered to be sets that 
have no implicit ordering, but diff-wise it would be rather nice to have a 
stable output ordering.
Here is an example of non-stable output ordering (sdiff output, only first 18 
columns for confidentiality):

# sdiff b0 b1

dn: olcDatabase={1                                              dn: 
olcDatabase={1
objectClass: olcDa                                              objectClass: 
olcDa
objectClass: olcHd                                              objectClass: 
olcHd
olcDatabase: {1}hd                                              olcDatabase: 
{1}hd
olcDbDirectory: /v                                              olcDbDirectory: 
/v
olcSuffix: dc=sap,                                              olcSuffix: 
dc=sap,
olcAccess: {0}to *                                            <
olcAccess: {1}to d                                            <
olcAccess: {2}to a                                            <
olcAccess: {3}to a                                            <
olcAccess: {4}to a                                            <
olcAccess: {5}to *                                            <
olcLimits: {0}dn.e                                              olcLimits: 
{0}dn.e
olcRootDN: cn=Admi                                              olcRootDN: 
cn=Admi
olcRootPW: {SSHA}y                                              olcRootPW: 
{SSHA}y
olcSecurity: ssf=1                                              olcSecurity: 
ssf=1
olcSyncrepl: {0}ri                                              olcSyncrepl: 
{0}ri
olcSyncrepl: {1}ri                                              olcSyncrepl: 
{1}ri
olcSyncrepl: {2}ri                                              olcSyncrepl: 
{2}ri
olcUpdateRef: ldap                                              olcUpdateRef: 
ldap
olcUpdateRef: ldap                                              olcUpdateRef: 
ldap
olcUpdateRef: ldap                                              olcUpdateRef: 
ldap
olcMirrorMode: TRU                                              olcMirrorMode: 
TRU
olcDbCacheSize: 10                                              olcDbCacheSize: 
10
olcDbCheckpoint: 1                                              
olcDbCheckpoint: 1
olcDbConfig: {0}se                                              olcDbConfig: 
{0}se
olcDbConfig: {1}se                                              olcDbConfig: 
{1}se
olcDbConfig: {2}se                                              olcDbConfig: 
{2}se
olcDbConfig: {3}se                                              olcDbConfig: 
{3}se
olcDbConfig: {4}se                                              olcDbConfig: 
{4}se
olcDbConfig: {5}se                                              olcDbConfig: 
{5}se
olcDbIDLcacheSize:                                              
olcDbIDLcacheSize:
olcDbIndex: object                                              olcDbIndex: 
object
olcDbIndex: uidNum                                              olcDbIndex: 
uidNum
olcDbIndex: gidNum                                              olcDbIndex: 
gidNum
olcDbIndex: member                                              olcDbIndex: 
member
olcDbIndex: member                                              olcDbIndex: 
member
olcDbIndex: cn eq,                                              olcDbIndex: cn 
eq,
olcDbIndex: uid eq                                              olcDbIndex: uid 
eq
olcDbIndex: sn eq,                                              olcDbIndex: sn 
eq,
olcDbIndex: givenN                                              olcDbIndex: 
givenN
olcDbIndex: entryU                                              olcDbIndex: 
entryU
olcDbIndex: entryC                                              olcDbIndex: 
entryC
olcDbIndex: ipServ                                              olcDbIndex: 
ipServ
olcDbIndex: ipServ                                              olcDbIndex: 
ipServ
olcDbIndex: roleOc                                              olcDbIndex: 
roleOc
olcDbIndex: mail e                                              olcDbIndex: 
mail e
olcDbIndex: displa                                              olcDbIndex: 
displa
olcDbIndex: modify                                              olcDbIndex: 
modify
structuralObjectCl                                              
structuralObjectCl
entryUUID: db3ffe4                                              entryUUID: 
db3ffe4
creatorsName: cn=c                                              creatorsName: 
cn=c
createTimestamp: 2                                              
createTimestamp: 2
entryCSN: 20170706                                            | olcAccess: 
{0}to *
                                                              > olcAccess: 
{1}to d
                                                              > olcAccess: 
{2}to a
                                                              > olcAccess: 
{3}to a
                                                              > olcAccess: 
{4}to a
                                                              > olcAccess: 
{5}to *
                                                              > entryCSN: 
20200114
modifiersName: cn=                                              modifiersName: 
cn=
modifyTimestamp: 2                                              
modifyTimestamp: 2

So is the order of output given by some hash functions in slapcat, or is it the 
order in which the database returns the attributes?
What would I have to do to sort the attribute types in the same order as they 
are listed in the schema (one possible stable output)?

Regards,
Ulrich

Reply via email to