[turba] Extend LDAP-example (was: turba, ldap and activesync)

Hanns Mattes hanns at hannsmattes.de
Tue Feb 7 11:57:56 UTC 2012


Hi,

I'm extending the provided example for a personal ldap-addressbook (and
try to keep it "activesyncable"). I've added some attributes and
changed some mappings:

,----[ from backends.local.php ]
| $_ldap_uid = $GLOBALS['registry']->getAuth();
| $_ldap_basedn = 'dc=example,dc=com';
| // get the domain-part
| $trenner = explode("@", $_ldap_uid);
| $_ldap_domain = $trenner[1];
| $cfgSources['personal_ldap'] = array(
|     // Disabled by default
|     'disabled' => false,
|     'title' => _("Adressenverzeichnis"),
|     'type' => 'ldap',
|     'params' => array(
|         'server' => 'ldap://ldap.example.com',
|         'tls' => false,
|         'root' => 'ou=' . $_ldap_uid . ',ou=horde_adressen,' . $_ldap_basedn,
|         'bind_dn' => 'uid=' . $_ldap_uid . ',ou=' . $_ldap_domain . ',ou=virtualmail,' . $_ldap_basedn,
|         'bind_password' => $GLOBALS['registry']->getAuthCredential('password'),
| 
|         'dn' => array('uid'),
| 
| // Added evolutionPerson to get attributes birthDate and spouseName
|         'objectclass' => array('top',
|                                'person',
|                                'turbaContact',
|                                'inetOrgPerson',
|                                'calEntry',
|                                'organizationalPerson',
| 			       'evolutionPerson'),
|         'scope' => 'sub',
|         'charset' => 'utf-8',
|         'version' => 3
|     ),
|     'map' => array(
|         '__key' => 'dn',
|         '__uid' => 'uid',
| 
|         // From horde.schema:
|         '__type' => 'turbaType',
|         '__members' => 'turbaMembers',
| 
|         'name' => 'cn',
| //        'name' => array('fields' => array('firstname', 'lastname'),
| //                       'format' => '%s %s'),
| 	'firstname' => 'givenName',
|         'lastname' => 'sn',
|         'nickname' => 'displayName',
|         'email' => 'mail',
|         'title' => 'title',
|         'company' => 'o',
|         'office' => 'roomNumber',
|         'department' => 'ou',
|         'businessCategory' => 'businesscategory',
| //        'workAddress' => 'postaladdress',
|         'workPostalCode' => 'postalcode',
| 	'workStreet' => 'street',
| 	'workCity' => 'l',
|         'workPhone' => 'telephonenumber',
|         'fax' => 'facsimiletelephonenumber',
|         'homeAddress' => 'homepostaladdress',
|         'homePhone' => 'homephone',
|         'cellPhone' => 'mobile',
| //      Abuse seeAlso to populate imaddress
| 	'imaddress' => 'seeAlso',
|         'notes' => 'description',
| 	'category' => 'category',
| 	// From evolutionPerson
| 	'spouse' => 'spouseName',
| 	'birthday' => 'birthDate',
| 	'photo' => 'photo',
|         // Evolution interopt attributes: (those that do not require the
|         // evolution.schema)
|         'website' => 'labeledURI',
| 
|         // These are not stored on the LDAP server.
|         'pgpPublicKey' => 'object_pgppublickey',
|         'smimePublicKey' => 'object_smimepublickey',
| 
|         // From rfc2739.schema:
|         'freebusyUrl' => 'calFBURL',
|     ),
| 
|     'tabs' => array(
|         _("Personal") => array('firstname', 'lastname',
|                                'name', 'alias',
|                                'birthday', 'spouse'),
|         _("Location") => array('homeAddress', 'workStreet', 'workPOBox',
|                                'workCity', 'workProvince', 'workPostalCode',
|                                'workCountry', 'workAddress', 'timezone'),
|         _("Communications") => array('email', 'homePhone', 'workPhone',
|                                      'cellPhone', 'fax', 'imaddress'),
|         _("Organization") => array('title', 'role', 'company', 'department'),
|         _("Other") => array('category', 'photo', 'notes', 'website', 'freebusyUrl',
|                             'pgpPublicKey', 'smimePublicKey'),
|     ),
| 
| 
|     'search' => array(
|         'name',
|         'email',
|         'businessCategory',
|         'title',
|         'homePhone',
|         'workPhone',
|         'cellPhone',
|         'homeAddress'
|     ),
|     'strict' => array(
|         'dn',
|     ),
|     'approximate' => array(
|         'cn',
|     ),
|     'export' => true,
|     'browse' => true,
| );
`----

So far - without extensive testing - it's working for me. But I do have
to enter name Information twice:

        'name' => 'cn',
        'lastname' => 'sn',

'cn' is necessary, though identical to 'sn' in my configuration. If I do
something like 

       'name' => array('fields' => array('firstname', 'lastname'),
                      'format' => '%s %s'),

'name' is constructed in the desired way, but I don't know, how to pass it
to the 'cn'-attribute.

Any advice?

Regards Hanns


More information about the turba mailing list