Apacheで使うDigest認証ファイルをPerlで作る

mod_auth_digestでDigest認証を使う場合、Apache付属のhtdigestコマンドを使ってパスワードファイルを作成する。mod_auth_basicでBasic認証を使うときに、htpasswdコマンドを使うのと同じだね。
さて、htdigestコマンドを使えば良いことなんだけど、CGIをインタフェースにユーザ管理画面を提供しようと思うと、インタラクティブなインタフェースしか持っていないhtdigestコマンドはどうにも扱いにくい。expectで書くのもなんだかバカらしいというか。
そこで、PerlスクリプトでDigest認証用のファイルを作ることにしたよ。

use Digest::MD5;
$htdigest = &get_htdigest($user, $realm, $pass);
sub get_htdigest() {
    my $user = $_[0];
    my $relm = $_[1];
    my $pass = $_[2];
    my $ctx = Digest::MD5->new;
    $ctx->add ("$user:$relm:$pass");
    return "$user:$relm:" . $ctx->hexdigest;
}

Apacheが使うDigest認証ファイルは、コロン(:)区切りで、ユーザ名:レルム:認証情報、という形式をしている。認証情報は、ユーザ名:レルム:生パスワード、という文字列のMD5ハッシュだ。Digest::MD5モジュールはたぶん標準モジュールだから追加のインストールは不要。たったこれだけのことでDigest認証用のファイル(の1行)が出来た。expect使ってまで標準コマンドを使う必要はないってことだね。

ちなみにDigest認証を使う場合、IE限定でmethod=GETなCGIがうまく動かない不具合があるので注意が必要。
http://d.hatena.ne.jp/inuz/20060511/p1