Exim 过滤器如何在创建的目录上设置目录模式

Exim 过滤器如何在创建的目录上设置目录模式

我在 Debian 8 上使用 exim4。我使用 maildir。我有一个进出口过滤器该文件尝试将收到的邮件存储在以其域命名的文件夹中。

问题是,当 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

答案1

问题是,当 Exim 创建新目录时,权限为 700,但实际需要的是 770。

不,他们没有。

您的问题是 exim 和 POP/IMAP 服务器具有不同的有效 UID。因此,您将它们放在同一个组中,并希望它们通过相同的 GID 进行协作。

有一种不太复杂的方法,但有很多好处。使用 POP/IMAP 包中的 LDA。如果有dovecot可以deliver从 exim 的传输中调用的实用程序:

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
. . . . .

现在,所有本地用户的消息都将通过 dovecot 的 LDA 传递到以下位置:mail_location = maildir:/var/mail/%d/%n

如果您想要进一步过滤/排序,则必须使用sieveexim 的过滤器。

相关内容