I believe this is only possible using Zimbra's internal GAL (AFAIK). You can technically sync to Active Directory (using a GAL sync account) and then modify the GAL from the GAL sync account (via ZimbraAdmin) -- however, it's worth noting that any changes will be overwritten when the account synchronizes with AD again...

The photos DO show and CAN be added via your GAL Sync Account, but they'll be removed after your external GAL resyncs w/ AD/OpenLDAP. I'm hoping a Zimbra staff member might tell me I'm wrong (because I'd really love to map this attribute, too), but I haven't been able to find a Zimbra LDAP attribute to map jpegPhoto or thumbnailPhoto (AD) to...

So there is no other idea. Mapping works fine, but zimbra can't work with data in the photo/jpegPhoto item and displays them as raw data to the Other section. Is GAL photo display supported from external LDAP?

I have found Contacs are saved in the mysql DB and photos are stored like email in store folder, like email attachement.

Alas, defining a map (binary) jpegPhoto=photo just pastes the base64-encoded photo, which is probably what you meant by "a bunch of jibberish in your contact entries." But clearly the infrastructure is 90% there now.

It's possible that I missed some combination or missed the flush cache/force sync (zmprov fc all;zmgsautil forceSync -a gal_sync@example.com -n external), but I don't think any of them work. They definitely do affect processing -- sometimes I see binary gunk in mailbox.log's complaints about inability to index binary data, sometimes I see base64 encoding, and sometimes I see what could be a mktemp filename.

Looks like the only thing to do today is slurp down LDAP on my own and use ModifyContactRequest SOAP calls to shove jpeg's into the galsync account's contacts.