23 February '2006 - 23:47 | 技術動向 mod_auth_ldap のバカ
mod_auth_ldap 関係で、時間をすごく無駄にしてしまった。 気分を共有できる人と一緒に酒を飲みたいので、できれば被害者が増えて欲しいのだけれど、知ってたなら書いとけよって言われるのは困るので、書いておく。でも、これを見つけられずに被害にあう人が増えますように。まず、何をしようとしたかというと Subversion の認証にLDAP 認証を試してみたかった。svn+ssh を使って PAM 経由の LDAP 認証を利用しているのだけれど、どう考えても svn+ssh://svn.example.com/var/svn/projects/repos よりも https://projects.example.com/repos の方が短くて覚えやすいから、そのうち暇なときに apache2 を使う方式で試してみようと思っていた。Trac 用に apache2 自体はすでに入ってるから、あんまり時間もかからないだろう。
で、今日、DirectFB を使って開発していたマシンのディスクがたまたま吹っ飛んで、その開発環境が復旧できるまで少し暇になったんで、ちょいと試してみることにした。mod_auth_ldap を。
何はともあれ /usr/portage/net-www/ を覗いてみたら、mod_auth_ldap/ を発見。ほほほ。portage にあるなら、楽勝。
さっそく emerge -pv mod_auth_ldap で確認して、さくっとインスコ。+ssl ってのがなかったのが気になったけれど、面倒なので気づかなかったことにした。
/etc/conf.d/apache2 を編集して、/etc/init.d/apache2 restart して、適当にテストディレクトリを掘って、.htaccess に書く書式をぐぐって調べてみる。
ぜんぜん違う二つのタイプの書式があるみたいだけど、どっちがどっちか分からないので、トライ&エラーで試してみる。で、ブラウザで見てみると、ちゃんと認証ダイアログが表示された。よしよし、書式は分かった。が、認証は通らない。書式に書くべきフィルタとかが間違ってるのだろう。いろいろ試してみる。が一向に動く気配がない。
何がおきているかを確認するために、LDAP サーバの方のログをみてみると、LDAP サーバにアクセスしている気配がない。むむ。
LDAP_Server ldaps://ldap.example.com:636/
って書き方が実は間違っているのかも知れないと思い、試しに
LDAP_Server ldap.example.com
LDAP_Port 636
って書いてみたら、今度はちゃんとアクセスが来た。が、期待されるクエリを発行してない。つまり、素のまま 636 にアクセスしちゃってる。ldaps じゃないといけないので、やっぱり ldaps:// って書いてみるのだけれど、そうするとアクセスがこない。つまり ldaps:// は理解されてない。
うーむ。+ssl ってなかったのがやっぱり敗因だった気がしてきた。
+ssl にならなかった理由が分からないので、一応、/usr/portage/net-www/mod_auth_ldap/mod_auth_ldap-3.3.ebuild を確認して、USE=ssl が無視されていることを理解。そもそも見てない、と。
+ssl にするために、ebuild の書き方でも勉強するチャンスかなと思いきや、とりあえず実際のブツを自分でコンパイルして使えることを確認してみようと思い立つ。/usr/portage/distfiles/ を見てみたら mod_auth_ldap3.3.tar.gz があったので、そいつだ。
さくっとモジュールをコンパイルして、できあがったやつで試してみたが、やっぱり ldaps:// は使えない。と、ここでこのモジュールが 2004年のもんだということに気づく。これは最新版じゃないかも知れない。最新版を探してみよう。
とりあえず mod_auth_ldap-3.3.ebuild を見てみたら、http://www.muquit.com/muquit/software/mod_auth_ldap/mod_auth_ldap3.3.tar.gz から持ってきたらしいので、念のためにそれをちゃんとダウンロードできるのを確認する。と、Not Found と言われた。むむ、確認できない。なんだ、それ。まあ、distfiles にブツが存在しているってことは、たぶん SRC_URI からもってこれなかったらミラーサイトに取り行くような仕組みになっているのだろう。よく分からんけど、中の人、ご苦労様。
で、そこにないってことはどういうことなのかと、とりあえず http://www.muquit.com/muquit/software/mod_auth_ldap/ を覗いてみたら、おぉ、README3.4.txt なるものを発見。3.3 より新しいのが出て 3.3 は捨てられたってことだな。
一応、README3.4.txt を読んでみた。
Changes in v3.4
===============
* Support for OpenDLAP ldaps:// is added.
なーんだ。実は 3.4 から使えるようになった機能だったのか。なっとく。
と同時に
ldaps:// is a hack and not a standard, StartTLS is part of LDAPv3.
って書いてあるのを発見。勉強になった。今後は ldaps を使うのを止めるようにしなくては。
ま、それはともかく、とりあえず 3.4 をダウンロードして ldaps:// が使えることを確認しよう。と思いきや、何度確認しても、mod_auth_ldap3.4.tar.gz と思しきものが存在しない。バージョン3系列では、あるのは mod_auth_ldap3.05.tar.gz だけだ。え、もしかして、3.05 が最新ってこと?
試しにダウンロードして、中に入ってた README3.05.txt を見てみたら、
v3.04
* Support for OpenDLAP ldaps:// is added.
だって。なんだよ、3.4 は 3.04 になったのか。紛らわしすぎる。
まあ、よく考えてみると、たぶん 3.05 を 3.0.5 と脳内変換してたのが敗因なんだろうけれど、3.05 が 3.4 よりも新しいなんて、簡単には気づかない。
ここで、あらためて README3.07.txt の存在に気がつく。ガーソ… orz
しかたない、mod_auth_ldap3.07.tar.gz を使うことにしよう… と思いきや、そんなものはまたしても存在していない。うーむ。
気を取り直して、もう一度よく確認してみたら、mm_mod_auth_ldap3.07.tar.gz というのが見つかった。別物だと思いたかったが、ダウンロードして確認してみたら、それが最新だった。WTF。一体、なんなんですか、貴方たちは。
つまり、まとめるとこういうことである。
1. mod_auth_ldap3.3.tar.gz を探すも見当たらない。
2. README3.4.txt を発見。
3. mod_auth_ldap3.4.tar.gz を探すも見当たらない。
4. 代わりに mod_auth_ldap3.05.tar.gz を発見。
5. 中身を確認して、それが 3.4 よりも新しいことを発見。
6. README3.07.txt を発見。
7. mod_auth_ldap3.07.tar.gz を探すも見当たらない。
8. 代わりに mm_mod_auth_ldap3.07.tar.gz を発見。
9. 中身を確認して、それが最新版であることを発見。
うーむ。
README3.07.txt をよく読んでみたら、apache2 には同じ名前のモジュールがあることを知って、名前を変更したらしい。ははあ…。mod_auth_ldap には二つの系統が存在していたわけか。ぜんぜん違う書式が存在しているわけだ。とほほ。
ていうか、そもそも apache2 を +ldap で入れていれば mod_auth_ldap ももれなくインスコされていたって寸法なんだろうか。どういう骨折り損なんだ、これは orz