====== Postfix + dovecot2で大文字を含むローカルユーザーにメールを送る ======
Postfixはローカルユーザー名を小文字化して扱うため、大文字を含むユーザーへのメール配送が出来ないのはよく知られた事実だ(Userをuserとしてpasswdを見るので「userはいない」という結果になる)。
そんなPostfixの事実はどうあれ、大文字を含むローカルユーザーが存在するのも事実であって、メールが送られないのは非常によろしくない。というか自分のアカウントの事なんですけどね。
要するにPostfixでローカルユーザーもcase-sensitiveで扱おうというお話。以上、前置き終わり。
===== 環境 =====
* FreeBSD 9.1-RELEASE-p3
* Postfix 2.10.0
* dovecot 2.2.2
===== Postfixの設定 =====
ローカル配送エージェント(LDA)にdovecotを使うようにする。この際、pipeでユーザー名を小文字化しないようflagsにはuを付けない。
dovecot-cs unix - n n - - pipe
flags=DR user=dovecot:dovecot argv=/usr/local/libexec/dovecot/dovecot-lda -f ${sender} -d ${user}
local_transport = dovecot-cs
dovecot-cs_destination_recipient_limit = 1
local_recipient_mapsは特に弄らなくても問題ないっぽい。
===== dovecotの設定 =====
dovecotをrootで動かす事になるので、セキュリティリスクに注意。本当はLMTPを使うのが最適解。詳細は[[http://wiki2.dovecot.org/LDA|LDA - Dovecot Wik]]のMultiple UIDsを参照の事。
auth_username_format = (空)
今回の最大のハマりポイント。
dovecotはcase-sensitiveと言われており確かにその通りなんだけど、**2.1.0からデフォルトではユーザー名を小文字化するようになった**。2.1.0のリリースノートに下記の一文がある。
> http://www.dovecot.org/list/dovecot-news/2012-February/000213.html
>
* auth_username_format default changed to %Lu. If you really want
case sensitive usernames, set it back to empty.
というわけで、大文字小文字を区別するにはauth_username_formatを空にしてやる必要がある。
dovecot-ldaのパーミッションを変更。
chown root:dovecot /usr/local/libexec/dovecot/dovecot-lda
chmod /usr/local/libexec/dovecot/dovecot-lda
後はPostfix, dovecot共に設定を読み込み直せばローカルユーザーもcase-sensitiveで扱われるようになるハズ。
===== 問題点 =====
local_transportを置き換えるため、/etc/aliasesの設定が無視されるようになる。(エイリアスの解決はPostfixのlocalで行われるため。)
うーむ、これはちょっと困った。
===== 参考サイト =====
* [[http://wiki2.dovecot.org/LDA|LDA - Dovecot Wiki]]
* [[http://wiki2.dovecot.org/LDA/Postfix|LDA/Postfix - Dovecot Wiki]]
* [[http://www.postfix.org/pipe.8.html|Postfix manual - pipe(8)]]