Logo address

第1.0版/1.1版との主な違い

目次

2002/08/24
1.1版は1.0版を Plan9 4ed に移植しただけで仕様上の違いは存在しない。
以下に 1.2版と1.0版の違いを載せます。

HTTPS のサポート

Pegasus 1.2 版では HTTPS がサポートされています。但し Plan9 第4版には以下に述べる問題点があり、factotum にパッチをあてる必要があります。

Plan9 の第4版では TLS がサポートされました。TLS を使用すると容易に HTTPS が実現するのですが、factotum の現在の仕様では TLS は hostowner のプロセスしか使えません。この場合実際のサービスをどのユーザの名前で行うかに関しては3つの選択肢があります。

  1. hostowner の権限のままサービスを行う。
    これは危険であり採用しずらい。
  2. none に変身してサービスを行う。
    実際に HTTPS が必要になるのは CGI を使っての書き込みです。none の権限で書き込みアクセスを許すのは抵抗がある。
  3. ユーザ web に変身してサービスを行う。
    HTTPS の要求がある度に認証サーバに web のパスワードを知っている事を証明しなくてはならない。これはレスポンスを悪くするとともに、httpd のメモリの中に web のパスワードを持つことを意味し、危険である。(認証が終了後直ちに消すとしても、どこかに残っているかもしれない。)
筆者にはどれも不満なので、factotum にパッチをあてることにしました。
方法についてはパッチの充て方 を参照して下さい。

これによってユーザ web として HTTPS のサービスが行われ、HTTP との整合性がとれます。

実行ハンドラの {$target}

Pegasus 1.0 では {/etc/handler} の中に
	# path    mimetype    ramfs    execpath arg ...
	*.http         -         0       $target
	*.html      text/html    1       $target
	*.dx_html   text/html    0       /bin/dx
の最後の行のように {$target} が無い場合には、{/bin/dx} の後に {$target} を付加して解釈したのですが、これは廃止します。{$target} が必要なら省略しないで書いて下さい。
ですから次のように書きます。
	# path    mimetype    ramfs    execpath arg ...
	*.http         -         0       $target
	*.html      text/html    1       $target
	*.dx_html   text/html    0       /bin/dx $target

namespace.cgi による名前空間の編成の時期

Pegasus 1.0 では CGI が実行される直前に {namespace.cgi} が参照されていました。
そのために実行ハンドラの中にユーザ定義のハンドラを使用できませんでした。(これはむしろバグと言った方がよいですね。)
Pegasus 1.2 ではハンドラを判定する段階で {namespace.cgi} を参照する事にしたので実行ハンドラの中にユーザ定義のハンドラが使用できるようになりました。

httpd の起動オプション

サーバモードで
	-a が廃止になり、代わりに -p が導入されました。
	-c が追加され HTTPS が使えるようになりました。
	-f が追加されました。

httpd のライブラリのバグ

Pegasus 1.0 はライブラリのバグのために、非常に混雑した際どい状況(例えば1秒間に10人程度の混み具合)で、httpd が無限ループに陥る事がありました。Plan9 第4版の httpd ライブラリでこのバグがとれているかもしれません。(あるいはまだ残っているかもしれません。)