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.