lost global address book on schema update
Sebastian Birnbach <[email protected]> Fri, 19 Aug 2016 13:15:39 +0200
| Newsgroups | gmane.comp.horde.turba |
|---|---|
| Message-ID | <CACTNBFP-VtL9CdHcgxR4b41B7YL8LqC27b3aJHYFW0zVrUQR2Q@mail.gmail.com> |
Dear all, I just updated my db schemas for all the applications I updated a couple of weeks ago. Upon this, many things stopped working. I needed to introduce a bunch of new permissions to get most applications going again. However, I still have serious trouble with Turba. The global address book does not show up anymore, for any user. I can see that the data is still in the mySQL database but access from Horde is off. I am using a configuration where everybody is working on a global addressbook (living in the local mySQL database). Private databases are disabled by setting use_shares in backends.local.php to false. I enclose the backends.local.php file for reference. I rarely touch the horde configuration so I may be overlooking something very basic or very stupid. Any help is much appreciated! Kind regards Sebastian -- turba mailing list Frequently Asked Questions: http://wiki.horde.org/FAQ To unsubscribe, mail: [email protected]
backends.local.php
(application/x-httpd-php, 17.7 KB)
<?php /** * This file is where you specify the sources of contacts available to users * at your installation. It contains a large number of EXAMPLES. Please * remove or comment out those examples that YOU DON'T NEED. There are a * number of properties that you can set for each server, including: * * EDITABLE LOCAL COPY * * Example backends.local.php configuration file that enables the LDAP address * book and adds a composite field to the SQL address book: * * <?php * $cfgSources['localldap']['disabled'] = false; * $cfgSources['localldap']['params']['server'] = 'localhost'; * $cfgSources['localldap']['params']['root'] = 'cn=contacts,dc=horde,dc=org'; * $cfgSources['localldap']['params']['bind_dn'] = 'cn=admin,ou=users,dc=horde,dc=org'; * $cfgSources['localldap']['params']['bind_password'] = 'somesecret'; * $cfgSources['localsql']['map']['homeAddress'] = array( * 'fields' => array( * 'homeStreet', * 'homePostalCode', * 'homeCity', * 'homeCountry' * ), * 'format' => "%s\n%s %s\n%s" * ); * * Properties that can be set for each server: * * disabled: (boolean) If true, the config entry is disabled. * * title: (string) This is the common (user-visible) name that you want * displayed in the contact source drop-down box. * * type: (string) The types 'ldap', 'sql', 'kolab', 'imsp', 'group', * 'favourites' and 'prefs' are currently supported. Kolab address books * can be used with any IMAP server that supports METADATA. * Preferences-based address books are not intended for production * installs unless you really know what you're doing - they are not * searchable, and they won't scale well if a user has a large number of * entries. * * params: (array) These are the connection parameters specific to the contact * source. * * General settings: * - charset: (string) The character set that the backend stores * data in. Many LDAP servers use utf-8. Database servers * typically use iso-8859-1. * - filter: (string) Filter your result based on certain condition * in SQL and LDAP backends. A filter can be specified to * avoid some unwanted data. For example, if the source is * an external SQL database, to select records with the * delete flag = 0: 'filter' => 'deleted=0'. * Don't enclose 'filter' in brackets - this will done * automatically. Also keep in mind that a full filter * line will be built from 'filter' and 'objectclass' * parameters. * * Settings that only apply to LDAP servers: * - bind_dn: (string) Only applies to LDAP servers which do not * allow anonymous connections. Active Directory servers * do not allow it by default, so before using one as a * Turba source, you must create a "rightless" user, * which is only allowed to connect to the server, and * set the 'bind_dn' parameter like * '[email protected]' (not * 'cn=rightless,dc=example,dc=com'). * - bind_password: (string) Only applies to LDAP servers which do * not allow anonymous connection. You should set * this to the cleartext password for the user * specified in 'bind_dn'. * - checkrequired: (boolean) If true, consult the LDAP schema for * any attributes that are required by the given * objectclass(es). Required attributes will be * provided automatically if the * 'checkrequired_string' parameter is present. * - checksyntax: (boolean) If present, inspect the LDAP schema for * particular attributes by the type defined in the * corresponding schema. * - deref: (integer) One of: * - LDAP_DEREF_NEVER * - LDAP_DEREF_SEARCHING * - LDAP_DEREF_FINDING * - LDAP_DEREF_ALWAYS * This setting tells the LDAP server when to dereference * aliases. See http://www.php.net/ldap for more * information. * - dn: (array) Defines the list of LDAP attributes that build a * valid DN. * - objectclass: (array) Defines a list of objectclasses that * contacts must belong to, and that new objects will * be created with. * - referrals: (integer) Either 0 or 1. See the LDAP documentation * about the corresponding parameter REFERRALS. Windows * 2003 Server requires that you set this parameter to * 0. * - root: (string) Defines the base DN where to start the search * (i.e. dc=example,dc=com). * - scope: (string) Can be set to 'one' to search one level of the * LDAP directory, or 'sub' to search all levels. 'one' * will work for most setups and should be much faster. * However we default to 'sub' for backwards compatibility. * - sizelimit: (integer) Limit the search to this number of * entries. Empty value or 0 means no limit. Keep in * mind that servers can impose their own search * limits. * - tls: (boolean) If true, try to use a TLS connection to the * server. * - version: (integer) Specifies LDAP server version: either 2 or * 3. Active Directory servers require version 3. * * map: (array) A list of mappings from the Turba attribute names (keys) to * the attribute names by which they are known in this contact * source (values). * * Turba also supports composite fields. A composite field is * defined by mapping the field name to an array containing a * list of component fields and a format string (similar to a * printf() format string; however, note that positioned * parameters like %1$s will NOT work). * * 'attribute' defines where the composed value is saved, and is * optional. * * 'parse' defines a list of format strings and field names that * should be used for splitting up composite fields, in the order * of precedence, and is optional. * * An example: * ... * 'name' => array( * 'fields' => array('firstname', 'lastname'), * 'format' => '%s %s', * 'attribute' => 'object_name' * ), * 'firstname' => 'object_firstname', * 'lastname' => 'object_lastname', * ... * * Standard Turba attributes are: * - __key: [REQUIRED] A backend-specific ID for the entry (any * value as long as it is unique inside that source). * - __members: Serialized PHP array with list of Group * members. * - __owner: User name of the contact's owner * - __type: Either 'Object' or 'Group' * - __uid: Globally unique ID of the entry (used for * synchronizing and must be able to be set to any * value). * * More Turba attributes are defined in config/attributes.php. * * tabs: (array) All fields can be grouped into tabs with this optional entry. * This list is multidimensional hash; keys are the tab titles. * * Example: * 'tabs' => array( * 'Addresses' => array( * 'homeAddress', * 'workAddress' * ), * 'Names' => array( * 'firstname', * 'lastname', * 'alias' * ) * ); * * search: (array) A list of Turba attribute names that can be searched for * this source. * * strict: (array) A list of native field/attribute names that must always be * matched exactly in a search. * * approximate: (array) Only applies to LDAP servers. If set, should be an * array of native field/attribute names to search * "approximately" (for example, "S▒nchez", "Sanchez", and * "Sanch▒z" will all match a search string of "sanchez"). * * export: (boolean) If true, this source will appear on the Export menu, * allowing users to export the contacts to a CSV (etc.) file. * * browse: (boolean) If true, this source will be browseable via the Browse * menu item, and empty searches against the source will return all * contacts. * * use_shares: (boolean) If true, Horde_Share functionality will be enabled * for this source - allowing users to share their personal * address books as well as to create new ones. * * Since Turba only supports having one backend configured for * creating new shares, use the 'shares' configuration option to * specify which backend will be used for creating new shares. All * permission checking will be done against Horde_Share, but note * that any 'extended' permissions (such as max_contacts) will * still be enforced. Also note that the backend driver must have * support for using this. Supported: SQL, IMAP/Kolab, and IMSP. * * all_shares: (boolean) If true (and 'use_shares' is true) the corresponding * source will be assumed to handle all shares that are not * explicitly assigned to another source. Supported: IMAP/Kolab. * * list_name_field: (string) Taken as the field to store contact list names * in. This is required when using a composite field as the * 'name' field. * * alternative_name: (string) Taken as the field to use an alternative in case * the name field is empty. */ /** * A local address book in an SQL database. This implements a private * per-user address book. Sharing of this source with other users may be * accomplished by enabling Horde_Share for this source by setting * 'use_shares' => true. * * Be sure to create a turba_objects table in your Horde database from the * schema in turba/scripts/db/turba.sql if you use this source. */ $cfgSources['localsql'] = array( // ENABLED by default 'disabled' => false, 'title' => _("Shared Address Books"), 'type' => 'sql', 'params' => array( // The default connection details are pulled from the Horde-wide SQL // connection configuration. // To use another DB connection, you must provide configuration // information here - for example, //'sql' => array( // 'persistent' => false, // 'username' => 'horde', // 'password' => 'secret', // 'socket' => '/var/run/mysqld/mysqld.sock', // 'protocol' => 'unix', // 'database' => 'horde', // 'charset' => 'utf-8', // 'ssl' => false, // 'splitread' => false, // 'phptype' => 'mysql' //), 'table' => 'turba_objects' ), 'map' => array( '__key' => 'object_id', //'__owner' => 'owner_id', // removed 2015-04-24 to permit all-users-access '__type' => 'object_type', '__members' => 'object_members', '__uid' => 'object_uid', 'firstname' => 'object_firstname', 'lastname' => 'object_lastname', //'middlenames' => 'object_middlenames', 'namePrefix' => 'object_nameprefix', 'nameSuffix' => 'object_namesuffix', 'name' => array('fields' => array('namePrefix', 'firstname', 'lastname', 'nameSuffix'), 'format' => '%s %s %s, %s', 'parse' => array( array('fields' => array('firstname', 'lastname'), 'format' => '%s %s'), array('fields' => array('firstname', 'lastname'), 'format' => '%s %s'))), // This is a shorter version of a "name" composite field which only // consists of the first name and last name. // 'name' => array('fields' => array('firstname', 'lastname'), // 'format' => '%s %s'), //'alias' => 'object_alias', //'yomifirstname' => 'object_yomifirstname', //'yomilastname' => 'object_yomilastname', //'birthday' => 'object_bday', //'anniversary' => 'object_anniversary', //'spouse' => 'object_spouse', //'photo' => 'object_photo', //'phototype' => 'object_phototype', 'homeStreet' => 'object_homestreet', //'homePOBox' => 'object_homepob', 'homeCity' => 'object_homecity', //'homeProvince' => 'object_homeprovince', 'homePostalCode' => 'object_homepostalcode', 'homeCountry' => 'object_homecountry', 'homeAddress' => array('fields' => array('homeStreet', 'homePostalCode', 'homeCity', 'homeCountry'), 'format' => "%s\n%s %s\n%s"), 'workStreet' => 'object_workstreet', 'workPOBox' => 'object_workpob', 'workCity' => 'object_workcity', //'workProvince' => 'object_workprovince', 'workPostalCode' => 'object_workpostalcode', 'workCountry' => 'object_workcountry', 'workAddress' => array('fields' => array('workStreet', 'workPostalCode', 'workCity', 'workCountry'), 'format' => "%s\n%s %s\n%s"), //'otherStreet' => 'object_otherstreet', //'otherPOBox' => 'object_otherpob', //'otherCity' => 'object_othercity', //'otherProvince' => 'object_otherprovince', //'otherPostalCode' => 'object_otherpostalcode', //'otherCountry' => 'object_othercountry', /*'otherAddress' => array('fields' => array('otherStreet', 'otherCity', 'otherProvince', 'otherPostalCode'), 'format' => "%s\n%s, %s %s"), */ 'department' => 'object_department', 'manager' => 'object_manager', 'assistant' => 'object_assistant', 'timezone' => 'object_tz', //'email' => 'object_email', 'homeEmail' => 'object_homeemail', 'workEmail' => 'object_workemail', 'homePhone' => 'object_homephone', 'homePhone2' => 'object_homephone2', // * 'homeFax' => 'object_homefax', 'workPhone' => 'object_workphone', 'workPhone2' => 'object_workphone2', // * 'cellPhone' => 'object_cellphone', //'carPhone' => 'object_carphone', //'radioPhone' => 'object_radiophone', //'companyPhone' => 'object_companyphone', 'assistPhone' => 'object_assistantphone', // * 'fax' => 'object_fax', //'pager' => 'object_pager', 'title' => 'object_title', 'role' => 'object_role', 'company' => 'object_company', 'logo' => 'object_logo', 'logotype' => 'object_logotype', 'notes' => 'object_notes', 'website' => 'object_url', //'freebusyUrl' => 'object_freebusyurl', //'pgpPublicKey' => 'object_pgppublickey', //'smimePublicKey' => 'object_smimepublickey', //'imaddress' => 'object_imaddress', //'imaddress2' => 'object_imaddress2', //'imaddress3' => 'object_imaddress3' ), 'tabs' => array( _("Personal") => array('namePrefix', 'name', 'firstname', 'lastname', 'workPhone', 'fax', 'workEmail'), _("Communications") => array('homeEmail', 'homePhone', 'homePhone2', 'carPhone', 'radioPhone', 'companyPhone', 'assistPhone', 'cellPhone'), _("Location") => array('homeStreet', 'homeCity', 'homePostalCode', 'homeCountry', 'homeAddress', 'workStreet', 'workPOBox', 'workCity', 'workPostalCode', 'workCountry', 'workAddress', 'timezone'), _("Organization") => array('title', 'role', 'company', 'department', 'logo', 'manager'), _("Other") => array('notes', 'website'), ), 'search' => array( 'name', 'email', 'company' ), 'strict' => array( 'object_id', 'owner_id', 'object_type', 'object_uid' ), 'export' => true, 'browse' => true, 'use_shares' => false, 'list_name_field' => 'lastname', 'alternative_name' => 'company', );