Dovecot + postfixadmin+sql, авторизация только по имени пользователя

Связка dovecot+postfixadmin уже достаточно давно и успешно используется многими системными администраторами. У данной связки имеется одна широко известная особенность, которая в некоторых случаях является недостатком, ибо иногда может доставить массу неприятностей. Эта особенность заключается в том, что при авторизации в такой почтовой системе необходимо указывать в качестве имени пользователя полный EMail адрес. Автор не собирается подвергать критике такой подход, поскольку имя пользователя в виде полного EMail совершенно необходимо: postfixadmin может работать с несколькими доменами и при совпадении имен пользователей в разных доменах будет полнейшая неразбериха.

Однако, автору было совершенно необходимо оставить старый способ авторизации в связи с тем, что его абоненты уже давно пользуются почтой и у всех в параметрах авторизации указывается только имя пользователя, и столь глобальные изменения приведут к перегрузке телефонных линий и нервной системы сотрудников техподдержки. Результаты поиска в интернете по данной теме не принесли каких-либо значимых результатов, однако есть, пусть и не очень большое, количество людей, задавшихся подобной целью. Правда, ни одного настоящего решения проблемы не нашлось, если не считать различного рода костылей.

Автору удалось найти достаточно простой способ обойти вышеописанную особенность. Оказывается, можно достичь желаемого результата, причем сохраняя стандартный для postfixadmin+dovecot+sql способ авторизации, и не ограничивая почтовый сервис единственным доменом. Исходные данные системы: net-mail/dovecot-2.0.19; www-apps/postfixadmin-2.3.5; dev-db/mysql-5.1.62-r1. Итак, что необходимо сделать:

1. Если есть необходимость авторизации только по имени пользователя, то следовательно, есть некий "домен по умолчанию".
Этот домен будет использоваться в sql-запросе при авторизации. Пользователи всех остальных доменов, которые могут быть в дальнейшем добавлены в сервис, смогут нормально пользоваться почтой, авторизуясь по полному EMail адресу.

2. В таблице 'mailbox' из postfixadmin почтовый адрес записан в трех полях: username (полный адрес), local_part (имя пользователя) и domain (домен). Если в sql-запросе при авторизации указывать local_part вместо username, переменная dovecot 'domain' останется пустой. Значит, такой способ не подходит, ибо некрасиво. В sql-запросе авторизации нужно обязательно брать домен из соответствующего поля в переменную domain.

3. Запрос должен быть сделан с использованием условий. Если в имени пользователя есть символ '@', производить авторизацию по полю username, если нет, то по полю local_part, причем в последнем случае выборку проводить с проверкой на соответствие домену по умолчанию.

Ниже приводится пример такого запроса. Это простой запрос, показывающий суть конструкции. Пусть домен по умолчанию будет "domain.ru"

password_query = SELECT IF('%u' REGEXP '@',`username`,`local_part`) AS `user`, `password`, `domain` FROM `mailbox` WHERE IF('%u' REGEXP '@',`username`='%u',`local_part`='%u' AND `domain`='domain.ru') AND `active`='1'

При таком запросе, для клиента домена по умолчанию сохраняется возможность авторизоваться по чистому имени пользователя, равно как и использовать новый способ авторизации с полным адресом. Для всех остальных пользователей будет нормально использоваться стандартный для dovecot+postfixadmin+sql способ авторизации.

Как говорится, и овцы сыты, и волки целы :)

Спасибо, заюзал при переходе

Спасибо, заюзал при переходе ;)

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".