FreeSource : Статьи/SharedFolders

Background

Встала у меня задача организовать в конторе shared folders. Точнее я её себе сам поставил, для решения двух других :) Это:

Так как у меня стоял courier-imap, то конечно заводил это дело я на нём. И на одном из срезов AltLinux Sysiphus

Shared Folders в почтовом клиенте

В почтовом клиенте такие каталоги выглядят следующим образом:
<Имя ящика>
INBOX
shared
spam
blacklist
whitelist

Имя shared в данном случае – общий каталог для всех shared folders, и имеет такое название по той же причине, что и INBOX – стандарт.
Его подкаталог spam – это сам shared folder. Именно это имя и прописывается в index'ных файлах courier'а. Проблема – это каталог, а не реальтный maildir. Чтение и запись возможна только в его подкаталоги – blacklist и whitelist в данном случае.

Натройка

Первым делом я конечно начал с чтения подходящей документации: /usr/share/doc/courier-imap-4.0.3/README.sharedfolders.txt. Прочитал, проникся. Заснул...

Как я понял, есть два механизма работы с shared folders: Virtual shared folders и Filesystem permissions-based shared folders. Когда-то я реализовывал Filesystem permissions-based shared folders, так как это оказалось наиболее просто: они организовываются в ящиках пользователей. Сейчас же сделал менее понятный (и усыпляющий :)) вариант.

Какой механизм поиска shared folders?

И вот здесь я так и не понял существующую в alt linux документацию: механизм поиска Virtual shared folders по документу /usr/share/doc/courier-imap-4.0.3/README.sharedfolders.txt следующий:
<name> <system userid> <system groupid> <virtual home directory> <maildir path relative to the virtual home directory> <optionally, account options>
где name – имя пользователя, под которым imap сервер будет читать этот folder,
system userid, system groupid – его системные идентификаторы,
virtual home directory – каталог, где будут находится эти folder'ы,
maildir path relative to the virtual home directory – сам shared folder.

Оказывается, courier под altlinux глубоко наплевал на указанные в документации пути к index'у каталогов, и только через strace я выяснил, что 
  1. ему нужен файл /etc/courier-imap/maildirshared, и больше ничего похожего на shared folder либо index он не и не пытается искать.
  2. этот файл имеет немного другой формат:
<foldername> <folderpath>

Для приведенного выше примера это будет строка
spam /var/spool/mail/shared/spam/
maildir'ом folderpath (e.g. /var/spool/mail/shared/spam/) как ящиком пользоваться не получится – это просто контейнер для общих каталогов.

Непоредственная настройка

Поэтому для создания shared folder вида shared.spam.blacklist (в imap нотации) нам надо:
  1. создать /var/spool/mail/shared/ или где там у вас будет это валяться:
  2. создать /etc/courier-imap/maildirshared и вписать в него
  3. важно создать maildir подкаталог нашего фолдера:
  4. проследить за правами – пользователь, от которого работает courier должен иметь права туда писать, а courier всегда делает смену uid/gid на залогиневшегося пользователя, каким виртуальным он не был.

Повторяю, пользоваться каталогом shared.folder как ящиком не получится – courier, или IMAPv4 – я так и не разобрался – такого не позволяет. Этот каталог – контейнер и указывается на серверной стороне.

В принципе всё.

Диагностика

Сочувствую, но courier я так и не заставил выдавать мне более-менее подробную информация. Поэтому диагностику я проводил через strace.
  1. То есть, ищем процесс imapd, работающий от вашего пользователя, и смотрим его pid. Этот процесс появляется только, если вы уже проверяете почту. Если же нет, то его не будет. По крайнере мере с вашим пользователем. Если это так, тогда ищем pid процесса courier-imapd.
  2. натравливаем на полученный pid strace (натравливать от root'а):
    Здесь -p – подключится к pid'у, -f – следовать за fork'нувшимися процессами, что нам нужно, если imapd не был запущен, зато был courier-imapd – последний запустит imapd, который и будет искать shared folders. А без -f strace этот fork не будет проверять.
  3. Читаем. Или ищем строчки с /var/spool/mail/shared/ и его подкаталогами и смотрим, что нам выдала функция open.

Кстати, благодаря strace я таже выяснил, что процесс imapd считывает /etc/courier-imap/maildirshared почти при каждом обращении к нему :)

Ссылок на эту страницу нет