2003年11月14日

SQL認証でOpenSSLを使う

先日苦労したProFTPdですが、syslogを見ると
proftpd[18375]: XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX) - mod_sql/4.10: error: no SQLAuthTypes configured
といったエラーが残ってます。

まぁ、確かにSQLAuthTypes を設定してないのでどんなのが設定できるかなと調べてみると

  • SQLAuthTypes [ [OpenSSL]] [ [Crypt]] [ [Backend]] [ [Plaintext]] [ [Empty]]
おっ、OpenSSL使えるじゃん。
じゃぁ、とりあえず、それにしておくかと思いやってみるとProFTPd自体が起動しない(;´д`)ノ

なんでやねんと、思ってよく見てみると

OpenSSL: allows passwords in the database to be of the form '{digestname}hashedvalue'. This check is only available if you define 'HAVE_OPENSSL' when you compile proftd and you link with the OpenSSL 'crypto' library.
コンパイルから必要ですか・・・_| ̄|○

なんで、パッケージのリビルドを断行
で、下記のサイトを参考にconfigure周りを書き換える。

  •   CFLAGS=-DHAVE_OPENSSL LIBS=-lcrypto ./configure \
        --with-modules=mod_sql:mod_sql_mysql \
        --with-includes=/usr/local/mysql/include/mysql:/usr/local/openssl/include \
        --with-libraries=/usr/local/mysql/lib/mysql:/usr/local/openssl/lib
そしてリビルド・・・失敗(;´д`)ノ

どうもLIBS=-lcrypto をセットしてMakeすると元からあるLIBSの中身が消えてしまうのでうまく走らないらしい・・・
試しに外すと今度はSSL関係の関数がundefined referenceだと怒られる。

どうすれば良いんだろうとぐぐってみたら、

  • mod_sql で OpenSSL

    ちゅーか、ソースのコメントにも crypto 使えって書いてあるのに何で crypt なのさー!こんなんバグじゃん。おかげで要らん苦労しちゃったよ…。

このバグがまだ直ってないらしい・・・

ProFTPdも相当おざなりだなぁ・・・

上記のサイトのパッチは使えないし、ソース追っかけるのもおっくうなんで、下のパッチをspecに組み込んで再度挑戦することに。

diff -cr proftpd-1.2.9.org/Makefile.in proftpd-1.2.9/Makefile.in
*** proftpd-1.2.9.org/Makefile.in       Tue Nov 11 19:45:00 2003
--- proftpd-1.2.9/Makefile.in   Tue Nov 11 19:53:08 2003
***************
*** 50,56 ****


  proftpd$(EXEEXT): lib src modules dirs
! 	$(CC) $(LDFLAGS) -o $@ $(BUILD_PROFTPD_OBJS) $(LIBS)

  ftpcount$(EXEEXT): utils
  	$(CC) $(LDFLAGS) -o $@ $(BUILD_FTPCOUNT_OBJS)
--- 50,56 ----


  proftpd$(EXEEXT): lib src modules dirs
! 	$(CC) $(LDFLAGS) -o $@ $(BUILD_PROFTPD_OBJS) $(LIBS) -lcrypto

  ftpcount$(EXEEXT): utils
  	$(CC) $(LDFLAGS) -o $@ $(BUILD_FTPCOUNT_OBJS)
すると今度は無事ビルド成功( ̄▽ ̄)ノ で、早速インストールして「SQLAuthTypes OpenSSL」をproftpd.confに追加してみたら無事動作しました( ̄▽ ̄)ノ

Posted by Takuchan at 2003年11月14日 09:08 | トラックバック(0)