« | »

2008年11月24日

mysql対応、openssl対応のDovecotのコンパイル@Sun Studio 12@Solaris10 U6 spac

MTAであるpostfixがsmtp認証を実現するための外部機能として、以前まではCyrus SASLを選択するしかなかったのだが、バージョン2.3からDovecot SASLなるものに対応していることを最近知った。
ということで、その時初めて知ったDovecotについて調べてみると、どうやら単なる認証機能を提供するSASLではなく、pop3とimapを提供するMDAであるらしい。
ユーザーデーターベースとして、UNIXシステムの実ユーザーに対する認証からpam、LDAP、Mysqlなどに対応し、それらの複数を同時に実装できるのが何よりも良い感じである。
メジャーで事実上標準的なMDAであるQpopperとかCourier-IMAPより歴史的には浅いけど、Postfixと連携させて使うことを前提に、しかも実ユーザーでなく、仮想ユーザーでの運用も追加して考えれば良い選択であろう。
これでメールサーバーのMTAの部分とMDAの部分が実ユーザーだけでなくMysql上のDBにある仮想ユーザーも加えて運用させることができた。
以下でSolaris10 U6 spac版にgccを使わずSun Studio 12のコンパイラで実装した手順を書いてみる。


コンパイラオプションで最適化コードとヘッダ、ライブラリ検索パスとランパスを指定、
コンフィグオプションは以下の通り、
mysqlサポート、opensslサポートを追加、それぞれ/usr/local/mysql/ /usr/sfw/にインストールされているものとする。

export CFLAGS="-native -mt"
export CPPFLAGS="-I/usr/sfw/include/openssl -I/usr/local/mysql/include/mysql"
export LDFLAGS="-L/usr/local/mysql/lib/mysql -L/usr/sfw/lib -R/usr/local/mysql/lib/mysql -R/usr/sfw/lib"
./configure --prefix=/usr/local/dovecot --with-mysql --with-ssl=openssl --disable-ipv6 && dmake

普段、土偶はSUNのC++の最適化オプションは「-native -mt -fast」を利用しているが、コンパイラオプションに「-fast」をつけると、コンパイルは通るものの、出来たバイナリはpop接続すると

Nov xx xx:32:55 host dovecot: [ID 762087 mail.info] Dovecot v1.1.6 starting up
Nov x xx:32:55 host dovecot: [ID 107833 mail.crit] Panic: file istream.c: line 84: assertion failed: (stream->eof)
Nov xx xx:32:55 host dovecot: [ID 398108 mail.error] Raw backtrace: 0x26894 -> 0x29a94 -> 0x3111c -> 0x2f2f0 -> 0x27a24 -> 0x27b24
-> 0x22c64 -> 0x22ebc -> 0x1f02c -> 0x15a88

って感じのエラーを吐いて落ちてしまう。
SUNのドキュメントには「IEEE 標準の浮動小数点演算を使用しているプログラムには、-fast を指定しないでください。計算結果が違ったり、プログラムが途中で終了する、あるいは予期しない SIGFPE シグナルが発生する可能性があります。」って書いてあるのでそれだろうか?
RSA暗号の強度は因数分解の難しさがである上に、複合化するにはガウスの時計計算機とフェルマーの小定理を使うので計算結果が狂うということだろうか?とにかく-fastオプションでなく、-native -mtオプションだけだとちゃんと動作した。
で、confファイルはこんな感じのものが認証に関わる部分、
dovecot.conf

mail_location = maildir:~/Maildir
#ユーザーデータベースとパスワードデータベースに外部DBを、指定した外部ファイルで指定、
#postfixのスプールディレクトリにユーザーとグループを指定してSASLソケットを提供
auth default {
  mechanisms = plain login
  userdb sql {
   args = /usr/local/dovecot/etc/dovecot-mysql.conf
  }
  passdb sql {
   args = /usr/local/dovecot/etc/dovecot-mysql.conf
  }
  passdb pam {
  }
  passdb passwd {
  }
  userdb passwd {
  }
  socket listen {
   client {
    path = /var/spool/postfix/private/auth
    mode = 0660
    user = postfix
    group = postfix
   }
  }
}

dovecot-mysql.conf
でDBのやらそのクエリを指定する。

driver = mysql
connect = host=ホスト名 dbname=DB名 user=ユーザーt password=パスワード
#パスワードのハッシュ方式を指定 MD5-CRYPTとかPLAINとかが使える。
default_pass_scheme =CRYPT
#ユーザーDBの参照クエリ
# %uでユーザー名を指定され、
# カラム名homeにMaildirのあるディレクトリ、(一般的にはホームディレクトリやね)
# uidにuid gidにgidが得られるようなクエリを指定する。
user_query = SELECT mailrootdir AS home ,uid ,gid FROM table WHERE username="%u" and mailuse='1'
#パスワードDBの参照クエリ
# %uでユーザー名を指定され、
#カラム名usetとしてユーザー名が、
#カラム名passwordとして指定した方式でハッシュ化済のパスワードが得られるようなクエリを指定する。
password_query = SELECT username AS user ,password FROM table WHERE username='%u' and mailuse='1'

Trackback URL

Comment & Trackback

No comments.

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>