On Aug 14, 2009, at 9:18 AM, Emmanuel Lecharny wrote:
Hi guys,
a short question about the way OpenLDAP (last version) exposes the entryUUID during replication. UUID is supposed to be binary :
RFC 4530 :
*2.1 UUID Syntax*
A Universally Unique Identifier (UUID) [RFC4122 http://www.apps.ietf.org/rfc/rfc4122.html] is a 16-octet (128- bit) value that identifies an object. The ASN.1 [X.680] type UUID is defined to represent UUIDs as follows:
UUID ::= OCTET STRING (SIZE(16)) -- constrained to an UUID [RFC4122 <http://www.apps.ietf.org/rfc/rfc4122.html
]
RFC 4530 then says:
In LDAP, UUID values are encoded using the [ASCII] character string representation described in [RFC4122]. For example, "597ae2f6-16a6-1027-98f4-d28b5365dc14".
That is, the LDAP encoding of the UUID type is the [ASCII] character string representation. (Much like the LDAP encoding of an INTEGER typer is a character string representation.)
But this is about transferring attribute/assertion values of the UUID syntax, such as values of the entryUUID attribute.
When the UUID is transfered in the Syncrepl cookies, it's as a String, not as a byte[] (with a format like xxx-yyyy-zzzz, kindof). Is there any reason not to transfer the UUID as a byte[] ?
Syncrepl is built upon LDAP Content Sync, RFC 4533, carries syncUUID values in entryUUID fields. This field ought to be transferred as 16- type long OCTET STRING. The string representation discussed in RFC 4530 is not applicable. That is, the on the wire encoding of a entryUUID field in LDAP sync is not the same as the encoding of the entryUUID attribute.
When LDAP sync was originally implemented, this is the way it was (IIRC). If the RFC 4533 LDAP string encoding, or other string encoding, is being used, I would consider it to be a bug.
-- Kurt