2004-03-22 7309歩

λ [Mac] Safari IPv6

Safariってタブブラウザだったのか! (今さら気付いた)

IPv6サポートは、DNSに両方のエントリがある場合はIPv4優先でIPv4で接続失敗したら失敗で終了、というのがデフォルトの動作。 IPv6優先にする方法はmacosxhintsに書いてあった。

  • ターミナルから defaults write com.apple.Safari IncludeDebugMenu 1 と入れてDebugメニューを有効にする
  • Debugメニューの Supported Protocols にある http: (Simple Loader) のチェックを外す

これでSafariから http://www.kame.net の亀が踊る。

…けど再起動したら戻ってしまった。デフォルトの動作を変える方法はどうやるんだ。

λ FreeRADIUS 外部プログラムによる認証

オライリーのRADIUS本は、 FreeRADIUSベースで説明をしている役に立つ本だった。 が、外部プログラムによる認証については結局何も触れられていない。ソースとにらめっこしながら外部プログラムによる認証の実験をした。

今回は認証するだけなので、認証に成功した場合にユーザによってRADIUS属性を追加したりするような処理はしない。 位置的にはPAPやCHAPと同じような処理をさせる設定にした。

radiusd.confに以下の部分を追加。

modules {
      ...
      exec hogeauth {
              wait = yes
              program = "/local/bin/hogeauth"
              input_pairs = request
      }
}
authenticate {
      ...
      Auth-Type HOGEAUTH {
              hogeauth
      }
}

usersの先頭に以下の部分を追加。

DEFAULT Auth-Type := HOGEAUTH
      Service-Type = Framed-User,
      Framed-Protocol = PPP,
      Framed-IP-Address = 255.255.255.254,
      Framed-IP-Netmask = 255.255.255.255,
      Idle-Timeout = 3600
      Fall-Through = Yes (失敗した場合に別の認証方式も試す場合)

/local/bin/hogeauthはとりあえずリクエストの内容をログに取るだけ。

#!/usr/bin/perl
open OFP,">>/tmp/hogeauth.log";
foreach $var (sort(keys(%ENV))) {
    $val = $ENV{$var};
    $val =~ s|\n|\\n|g;
    print OFP "${var}\t${val}\n";
}
print OFP "\n";
close OFP;
exit(0); # success
# exit(1); # fail

取ったログを調べると、以下のようにクオートされた文字列が渡されていた。

USER_NAME	"id"
USER_PASSWORD	"password"

というわけでこのような場合の外部プログラムの仕様は以下のようになっているようだ。

  • 環境変数 USER_NAME にダブルクオートに囲まれたユーザ名が入っている
  • 環境変数 USER_PASSWORD にダブルクオートに囲まれたパスワードが入っている
  • これらの値としてダブルクオートが含まれていても、余分なエスケープは行われない。単純に両端のダブルクオートを外せばよい。
  • 返り値が0なら成功、0以外なら失敗
  • 標準出力等への出力は無視される
  • ある瞬間に実行されるのは1プロセスのみ。リクエストはキューイングされていて順番にやってくる。(捌き切れないとどんどん溜まる)

Apacheにおけるmod_perlみたいなのもある。rlm_perl Documentation

[]