Hi Andrew,

We understand the reasons for your inquiry as to the exact content and format 
of the LDAP attribute prefixMap.  We’d like to propose that we explain the 
content and format of the attribute in this mail, and after that, discuss 
whether it belongs in the documentation.  

As you’ve no doubt already determined, prefixMap is related to the ‘Prefix 
Table’ documented in MS-DRSR and used in ATTRTYP-to-OID conversion; it’s also 
documented in MS-DRSR (section 5.16.4.)  The prefixMap attribute itself though 
serves no purpose in the context of "replication-protocol" beyond locally 
storing the state necessary for a replication partner to decompress an 
implementation-specific means of representing OIDs.  The attribute itself is 
never requested or written over-the-wire by any Windows implementation nor is 
it necessary for a partner DC to know how the map is stored.  DRSR does not 
reference the attribute by name or refer to where the map is maintained in any 
more general sense; it only provides the necessary detail to define how the 
OIDs are decompressed to their native form on the partner DC.  

More specifically – prefixMap is a cache of the parts of the Prefix Table that 
relate to user-defined attributes (which is a subset of the whole Prefix Table 
used in MS-DRSR.)  Theoretically, this structure could have been built on the 
fly and not cached.  Certainly this cache could have been stored somewhere 
else, besides in an attribute of the directory, e.g. on a protocol-inaccessible 
area in memory or on disk (i.e. not in abstract state).  We certainly didn’t 
envisage any need or value in a client reading it or writing it – we would have 
included the entire Prefix Table were that the case.  So if we don’t want any 
client to ever read or write it then “why is it an attribute?”.  Basically, 
because it was a convenient place for our implementation to locally store it – 
our directory implementation IS a handy place to store things.  Plus, for the 
purposes of debugging our implementation, being able to read 
implementation-specific values via LDAP is very practical (since we read 
everything else that way too).

Anyway, the prefixMap structure contains user-defined attribute info for 
ATTRTYP-to-OID conversion.  This means e.g. for Windows 2008 R2 it does not 
contain the ATTRTYP-to-OID conversion info for the first 39 attributes in the 
Prefix Table as used by MS-DRSR, just the ‘rest’ of them.  When this attribute 
has a value, it is stored as a binary blob with the following formatting:

1. First 4 bytes are a DWORD showing the total number of prefixes represented 
in the map.  That is, the number of elements in the series of data structures 
described below.

2. Next 4 bytes are a DWORD showing the total size of the binary blob, 
including both these first 8 bytes and any remaining bytes representing OID 
prefixes.

3. Following these first 8 bytes is a series of variable length data 
structures, each element in the series representing a single mapping between an 
OID prefix and the internal WORD value representing the prefix.  The WORD is 
used as the high-word of a DWORD holding an internal attribute type.  These 
internal attribute types are not useful via LDAP, they are used only in the 
replication protocol. Each element of the series has this format:
        - First 2 bytes are a WORD holding the internal WORD value.
        - Next 2 bytes are a WORD holding the length of the actual OID prefix.  
Call this value N.
        - Next N bytes are the BER encoding of the OID prefix.

Please let me know if this answers your question. If yes, I'll consider this 
issue resolved.

Regards,
Obaid Farooqi
Sr. Support Escalation Engineer | Microsoft


                
-----Original Message-----
From: Andrew Bartlett [mailto:[email protected]]
Sent: Tuesday, December 15, 2009 1:39 AM
To: Obaid Farooqi
Cc: [email protected]; [email protected]
Subject: RE: Structure of prefixMap over LDAP
 
On Tue, 2009-12-15 at 06:22 +0000, Obaid Farooqi wrote:
> Hi Andrew:
> In an effort to fully understand your goals, please explain what you 
> are looking  to achieve through the addition of documentation that 
> defines the internal structure of the prefixMap attribute.
 
As a start: 
 
The ability to generate a matching prefixMap attribute, should any client 
request it.  The ability to verify prefixMap values over DRS and LDAP to 
confirm consistency.  The ability to include prefixMap values in comparison 
tests we may make between AD and Samba4.  An understanding of how the contents 
of this attribute interacts with msDs-intID and other prefix mapping 
functionality. 
 
Finally, I'm simply looking to ensure that the documentation set explains the 
format of every value (generated or otherwise) in AD, so we don't have to come 
back to this later. 
 
Thanks,
 
Andrew Bartlett
 
--
Andrew Bartlett                                http://samba.org/~abartlet/ 
Authentication Developer, Samba Team           http://samba.org Samba 
Developer, Cisco Inc.
 
_______________________________________________
cifs-protocol mailing list
[email protected]
https://lists.samba.org/mailman/listinfo/cifs-protocol

Reply via email to