Адресная книга LDAP с дополнительными полями в Roundcube
Поставил на работе себе Roundcube в качестве Mail клента. Удобно — из любой машинки внутрисети по WEB имею доступ к своей почте 🙂 Установка самого Roundcube совсем тривиальная. Опишу очень коротко. Действуем по схеме:
- Скачать последнюю версию из офсайта: http://www.roundcube.net/download Рекомендую качать версию stable — она гарантированно рабочая! За остальное никто не ручается 🙂
- Розпаковать туда куда вам нужно.
- Настроить apache
- Установить Roundcube. Действовать согласно описанию из файлика INSTALL который есть в архиве с roundcube.
В результате проделанного выше программка у нас уже стоит — осталось только чуть настроить! Я установил себе roundcube в /opt/rouncube/ далее это будет видно 🙂
Прога у меня заработала после всего выше проделанного без каких бы то ни было проблем. Все отлично. Читаем почту … отправляем. Рулим сообщениями, папками, подписями и тд. Все очень удобно и шустро. Есть адресная книга … но локальная! А захотелось всетаки LDAP-ную книгу 🙂 Вот тут и начались танцы с бубном. Менял много чего в файлике main.inc.php для того чтобы настроить саму связь с сервером LDAP и поля которые одтуда надо брать. Итак, что имеем:
Работающий roundcube версии 3.1 а хотим ничего не сломав получить еще и LDAP Address Book 🙂 желательно с автодополнением.
Пользователь ldapuser@my.domain с паролем 123. Доменный пользователь, которому достаточно дать права только на чтение LDAP и все! Это может быть просто технический пользователь … специально созданный для таких задач 🙂
LDAP Server — controller.my.domain
Приведу изначальный вид конфига main.inc.php чтобы понять откуда надо двигаться в настройке. Вот часть которая нас интуресует:
// example further below. if you would like to test, simply uncomment the example.
$rcmail_config['ldap_public'] = array();
//
// If you are going to use LDAP for individual address books, you will need to
// set 'user_specific' to true and use the variables to generate the appropriate DNs to access it.
//
// The recommended directory structure for LDAP is to store all the address book entries
// under the users main entry, e.g.:
//
// o=root
// ou=people
// uid=user@domain
// mail=contact@contactdomain
//
// So the base_dn would be uid=%fu,ou=people,o=root
// The bind_dn would be the same as based_dn or some super user login.
/*
* example config for Verisign directory
*
$rcmail_config['ldap_public']['Verisign'] = array(
'name' => 'Verisign.com',
'hosts' => array('directory.verisign.com'),
'port' => 389,
'use_tls' => false,
'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
// %fu - The full username provided, assumes the username is an email
// address, uses the username_domain value if not an email address.
// %u - The username prior to the '@'.
// %d - The domain name after the '@'.
'base_dn' => '',
'bind_dn' => '',
'bind_pass' => '',
'writable' => false, // Indicates if we can write to the LDAP directory or not.
// If writable is true then these fields need to be populated:
// LDAP_Object_Classes, required_fields, LDAP_rdn
'LDAP_Object_Classes' => array("top", "inetOrgPerson"), // To create a new contact these are the object classes to specify (or any other classes you wish to use).
'required_fields' => array("cn", "sn", "mail"), // The required fields needed to build a new contact as required by the object classes (can include additional fields not required by the object classes).
'LDAP_rdn' => 'mail', // The RDN field that is used for new entries, this field needs to be one of the search_fields, the base of base_dn is appended to the RDN to insert into the LDAP directory.
'ldap_version' => 3, // using LDAPv3
'search_fields' => array('mail', 'cn'), // fields to search in
'name_field' => 'cn', // this field represents the contact's name
'email_field' => 'mail', // this field represents the contact's e-mail
'surname_field' => 'sn', // this field represents the contact's last name
'firstname_field' => 'gn', // this field represents the contact's first name
'sort' => 'cn', // The field to sort the listing by.
'scope' => 'sub', // search mode: sub|base|list
'filter' => '', // used for basic listing (if not empty) and will be used with search queries. example: status=act
'fuzzy_search' => true); // server allows wildcard search
*/
// An ordered array of the ids of the addressbooks that should be searched
// when populating address autocomplete fields server-side. ex: array('sql','Verisign');
$rcmail_config['autocomplete_addressbooks'] = array('sql');
Теперь все это дело надо настроить под наши нужды. Привожу свой рабочий кусок конфига, уже даже с допольнительными полями для моб. телефона, рабочего телефона, названия компании и должности. Вот:
'name' => 'WORK',
'hosts' => array('controller.my.domain'),
'port' => 389,
'use_tls' => false,
'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
// %fu - The full username provided, assumes the username is an email
// address, uses the username_domain value if not an email address.
// %u - The username prior to the '@'.
// %d - The domain name after the '@'.
'base_dn' => 'ou="Domain Users", dc=my, dc=domain',
'bind_dn' => 'ldapuser@my.domain',
'bind_pass' => '123',
'writable' => false, // Indicates if we can write to the LDAP directory or not.
// If writable is true then these fields need to be populated:
'ldap_version' => 3, // using LDAPv3
'search_fields' => array('mail', 'cn'), // fields to search in
'name_field' => 'cn', // this field represents the contact's name
'email_field' => 'mail', // this field represents the contact's e-mail
'surname_field' => 'sn', // this field represents the contact's last name
'firstname_field' => 'gn', // this field represents the contact's first name
'phone_field' => 'telephoneNumber', // telephone
'mobile_field' => 'mobile', //added by black_13 (mobile number)
'company_field' => 'company', //added by black_13 (company)
'title_field' => 'title',
'sort' => 'cn', // The field to sort the listing by.
'scope' => 'sub', // search mode: sub|base|list
'filter' => '(&(mail=*))', // used for basic listing (if not empty) and will be used with search queries. example: status=act
'fuzzy_search' => true); // server allows wildcard search
// An ordered array of the ids of the addressbooks that should be searched
// when populating address autocomplete fields server-side. ex: array('sql','Verisign');
$rcmail_config['autocomplete_addressbooks'] = array('sql','WORK');
После того как поправили вот таким образом и сохранили, пробуем перезайти в roundcube Теперь если зайти в Контакты (справа вверху) у нас должно появиться еще одна группа с названием WORK. Выбираем ее и видим список контактов взятых с LDAP. Но дополнительные поля пока что отображаться не будут … только cn, mail, sn и gn. Чтобы отобразились допольнительные поля нужно сделать следующее. Правим конфиг /opt/rouncube/program/localization/ru_RU/labels.inc Точнее добавляем туда несколько строк, я добавил в конец, перед ?> вот такое:
$labels['phone'] = 'Городской телефон';
$labels['company'] = 'Компания';
$labels['title'] = 'Должность';
Дальше, переходим в папку /opt/rouncube/program/steps/addressbook/ и открываем для редактирования файл show.inc В нем находим строчку:
Меняем на
В нужной вам последовательности.
Тоже самое повторяем с конфигами save.inc. Находим строчку:
И меняем на
Повторяем этот же финт с файликом edit.inc Правим строчку:
до вида:
На этом настройка закончена 🙂 Вот скриншот того что получилось:
Чуток пришлось в GIMP помазать скрин — чтобы палива поменьше было, но вобщем результат налицо 🙂 Посути никто нас не заставляет ограничиваться только этими полями. Просто мне они показались важными. Вы можете настроить под себя отображение нужных вам полей и их последовательность.
Главное что мы усвоили как это настраивается 🙂 За сим все … удачи!
Мне как раз предстоит настроить это дело. У Вас уже ldap был настроен или вы его устанавливали после Круглокуба? Если можно выложите конфиг ladp. Спасибо!
Домен на Win 2008 R2 настроен 🙂
появилась папка WORK, но внутри пусто((
вот здесь:
‘bind_dn’ => ‘ldapuser@my.domain’,
‘bind_pass’ => ‘123’,
написал пользователя, под которым захожу в phpldapadmin, верно?
bind_dn — имя пользователя которому розрешено читать ldap
bind_pass — его доменный пароль
у меня домен на 2003, все сделал по вашей статье, в адрессной книге пусто =( в логах тоже пусто, юзер есть в АД под которым чтение происходит. Что еще можно посмотреть?
Можно попробовать просто php скриптом протестить работу php + ldap Возможно всетаки какаято лажа в этой связке. Готовых скриптов в инете навалом, обычно только user/pass свой подставить надо.
а у меня в файлах из /opt/rouncube/program/steps/addressbook/ нету таких секций. Как тогда заставить круглокуб отображать необходимые мне поля?