ABxLDAP gets better and better
When I wrote about Accessing Mac OS X AddressBook via LDAP on your network, Alex Hartner of addressbookserver.com took my gripes about the missing additional fields I wanted copied to my LDAP directory seriously, and he has updated Address Book X LDAP (ABxLDAP) accordingly.
Some of the fields I was interested in where the spouse and child values of Mac OS X' AddressBook.

I can now map these fields in ABxLDAP and have them copied over to my LDAP server (I use OpenLDAP, of course.)
What I did was to think up some names of attribute types, which I then added to the ABxLDAP LDAP schema file. The file is supplied by ABxLDAP, and it is appropriately named abxldap.schema. The attributes I added are:
attributeType ( 1.3.6.1.4.1.23214.1.18
NAME 'abBirthday'
DESC 'Birthday'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
attributeType ( 1.3.6.1.4.1.23214.1.19
NAME 'relatedSpouse'
DESC 'Spouse'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
attributeType ( 1.3.6.1.4.1.23214.1.20
NAME 'relatedChild'
DESC 'Spouse'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
(Note: In the example above, you see the OID Arc number 23214 which is provided by and belongs to ABxLDAP. Don't hijack somebody else's OIDs — they may be in use. I'm using that here just as an example — I actually use my own OID arc.)
I then added these additional attributes to the object class definition for the abxldapPerson a little bit further down in the same file:
objectclass (
1.3.6.1.4.1.23214.2.1
NAME 'abxldapPerson'
DESC 'AddressBook4LDAP Person'
SUP inetOrgPerson
STRUCTURAL
MAY ( middleName $ nickName $ homeMail $ workimaim $ homeimaim $
workStreet $ workCity $ workState $ workPostalCode $ workCountry $
homeStreet $ homeCity $ homeState $ homePostalCode $ homeCountry $
c $ otherMail $ personalTitle $ abCardType $ labeledURI $ abBirthday $
relatedSpouse $ relatedChild )
)
Next I located the file where ABxLDAP maps Address Book values to LDAP attribute types (this is well described in ABxLDAP's documentation). I modified the file /Library/Application Support/ABxLDAP/com.j2anywhere.ABxLDAP.LDAPMAP.plist with a text editor and added the following lines to the end of the file (just before the closing </dict> tag). Here is the XML snippet I added:
<!-- begin JPM --> <key>displayAs</key> <string>abCardType</string> <key>Url:home page</key> <string>labeledURI</string> <key>Url:work</key> <string>labeledURI</string> <key>birthday</key> <string>abBirthday</string> <key>relatedName:spouse</key> <string>relatedSpouse</string> <key>relatedName:child</key> <string>relatedChild</string> </dict>
After disabling ABxLDAP in preferences and re-enabling it, the synchronization starts up, and a few seconds later I see the values in my LDAP directory. If I do an ldapsearch for Jane, I see:
dn: cn=Jane Jolie,o=mens.de labeledURI: jj.example.org abCardType: person description: Actress telephoneNumber: +49 555 6302547 mail: jane.jolie@example.org relatedChild: Maczia c: US givenName: Jane abBirthday: 1969-07-10 12:00:00 +0000 objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: abxldapPerson sn: Jolie displayName: Jane Jolie cn: Jane Jolie
Very nice indeed; just what I wanted. ABxLDAP is getting better and better.
Alex has pointed out once again, that he considers their Address Book and Calendar Server to be a far better product, and it probably is, due to the synchronization features it carries. Unfortunately, I haven't as yet had time to experiment with it, but I will as soon as possible.
