Назад | Перейти на главную страницу

Фильтр exim, как установить режим каталога в созданном каталоге

Я использую exim4 в Debian 8. Я использую maildir. у меня есть Фильтр Exim файл, который пытается хранить входящую почту в папках, названных по их домену.

Проблема в том, что когда Exim создает новый каталог, разрешения равны 700, но они должны быть 770.

Маршрутизатор:

v_user_filters:
  driver = redirect
  domains = dsearch;/etc/exim4/virtual_domains
  local_parts = lsearch;/etc/exim4/virtual_domains/$domain/passwords
  user = virtual
  group = virtual
  check_owner = false
  file = /home/virtual/$domain/$local_part/filter.forward
  no_verify
  no_expn
  check_ancestor
  allow_filter
  forbid_smtp_code = true
  directory_transport = address_directory
  file_transport = address_file
  pipe_transport = address_pipe
  reply_transport = address_reply

Транспорт:

address_file:
  driver = appendfile
  delivery_date_add
  envelope_to_add
  return_path_add
  directory_mode = 0770

Обратите внимание directory_mode который по-видимому Является ли это:

Если appendfile создает какие-либо каталоги в результате опции create_directory, их режим определяется этой опцией.

Фильтр:

# exim filter
# File by domain.

if ${sg{${sg{$reply_address}{^.*?@}{}}}{>\$}{}} matches "^[a-zA-Z0-9-](\.[a-zA-Z
then
    # This horrible regex substitution:
    # inner sg: strip off everything from beginning of reply_address to and incl @
    # middle sg: strip off trailing > if found
    # outer sg: convert dots to - since dots mean sub-folders and we don't want example/com we want example-com 
    save /home/virtual/$domain/$local_part/.${sg{${sg{${sg{$reply_address}{^.*?@
    finish
endif

Проблема в том, что когда Exim создает новый каталог, разрешения равны 700, но они должны быть 770.

Нет, они этого не делают.

Ваша проблема в том, что серверы exim и POP / IMAP имеют разные эффективные идентификаторы UID. Таким образом, вы помещаете их обоих в одну группу и хотите, чтобы они сотрудничали через один и тот же GID.

Есть менее сложный подход с большим количеством преимуществ. Используйте LDA из пакета POP / IMAP. В случае dovecot Там есть deliver утилита, которая может быть вызвана из транспорта eximʻa:

begin transports
local:
  driver          = pipe
  user            = dovenull
  command         = /path/dovecot/deliver -d $local_part@$domain -f $sender_address
  temp_errors     = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
  envelope_to_add
  return_path_add
  delivery_date_add
  log_output


begin routers
. . . . .
local_user:
  driver    = accept
  domains = dsearch;/etc/exim4/virtual_domains
  local_parts = lsearch;/etc/exim4/virtual_domains/$domain/passwords
  transport = local
. . . . .

Теперь все сообщения для локальных пользователей будут доставляться LDA dovecot в место, указанное mail_location = maildir:/var/mail/%d/%n

Если вам нужна дополнительная фильтрация / сортировка, вы должны использовать sieve вместо фильтров eximʻa.