Do you use Mac OS X' Address Book and want to share the contact data with other (non-Mac) machines on your network? Do you have an odd MS-Outlook (Express), Thunderbird, etc. that you'd like to feed with contacts? If so, this is for you. There are all sorts of workarounds for the above (e.g. use Mac OS X Address Book in Thunderbird 2 (on the same machine!)), but since I have an OpenLDAP directory server anyway, I chose to try ABxLDAP. ABxLDAP is a program which copies contacts from your Mac OS X' Address Book to an LDAP directory server. It consists of a preferences pane and a small App. The preferences pane is where I configure access to the LDAP server as well as the schema I want to use (inetOrgPerson, mozillaAB, Microsoft contact or, preferred, abxldapPerson). I chose abxldapPerson as a schema, because it works best for me: the mozilla schema supplied in the ABxLDAP package is syntactically broken, inetOrgPerson doesn't map sufficient fields, and the Microsoft schema is proprietary and hard to get at. Synchronization with the LDAP server running on my Mac started as soon as I enabled ABxLDAP, but I got an error-popup such as this one: Unfortunately, the text of the error-message isn't precise enough, but a glance at my OpenLDAP logfile showed me what was going on:
conn=29 op=273 ADD dn="cn=Jane Jolie,o=mens.de" conn=29 op=273 RESULT tag=105 err=21 text=c: value #0 invalid per syntax
Note how it says that the attribute
c (country) has an invalid syntax. The
reason is that some of my address book entries contain, say "Germany" or "USA"
as a country instead of the two-letter "DE" or "US". After I'd fixed
those, the synchronization completed successfully, and I can query my server
for any entry:
$ ldapsearch -LLL -x -b o=mens.de sn=jolie dn: cn=Jane Jolie,o=mens.de jpegPhoto:: /9j/4AAQSkZJRgABAQAAAQABAAD/....AA ..... AaABNhY3NwQVBQTp/s1uiAd64R/9a31NZw2Nq8feP//Z givenName: Jane labeledURI: jj.example.org telephoneNumber: +49 555 6302547 mail: email@example.com c: US sn: Jolie objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: abxldapPerson cn: Jane Jolie description: Actress displayName: Jane Jolie
ABxLDAP has an Address book browser that is usable, though nothing to rave about: Whenever I change an entry in my Mac's address book, ABxLDAP starts synchronizing the whole address book, instead of simply modifying the entry I just touched. In order to do so, it attempts to add all entries once again:
op=333 ADD dn="cn=Jane Jolie,o=mens.de" op=333 RESULT tag=105 err=68 text= op=334 MOD dn="cn=Jane Jolie,o=mens.de" op=334 MOD attr=jpegPhoto givenName labeledURI telephoneNumber mail c sn objectClass cn description displayName op=334 RESULT tag=103 err=0 text=
Notice how an ADD operation for Jane Jolie is attempted, but that returns
error 0x44 (decimal 68), which is defined as
that, the program modifies the entry and replaces (LDAP MODify) the entry's
attributes. I didn't change Jane's entry, but look what happened:
createTimestamp: 20090822192143Z modifyTimestamp: 20090822194504Z
That's a shame, because these unmodified contacts cause the LDAP server on my
Mac to replicate the changes off to my network LDAP server. It doesn't hurt me
(I don't have thousands and thousands of contacts), but it could have been
implemented in a more cleaner way. ABxLDAP's documentation is ok: it
explains briefly how to change field mappings (which works), but unfortunately
doesn't tell me how I can map other Address Book fields (spouse, child, etc.)
because the field names don't show up anywhere (not on the console either).
It might be that these fields are not supported by ABxLDAP. Adding those fields would require a code change.
Whaddaya mean by "it might be"? Don't you know?
Please not that ABxLDAP is not freeware.
The people who bring us ABxLDAP also have a program called addressbookserver with which
you can synchronise your Address Book with others on the same network as well as over the internet. Contacts are synchronised with your own instance of Address Book Server
However, addressbookserver apparently
should be installed on a centrally accessible Mac. The client goes on every Mac, whose Address Book you would like to synchronise
Since I don't have a "centrally accessible Mac", this program is not for me. Continue reading on ABxLDAP gets better and better.