pecl_httpのhttp_redirect()でspr-itunes

あるサーバのOSを、Fedora 8 から Fedora 11 に変更しました。
すると、pecl_httpのhttp_redirect()をすると、リダイレクト先として示されるURIのschemeが spr-itunes になってしまいました。

Redirecting to
<a href="spr-itunes://localhost.localdomain/foo.html">
spr-itunes://localhost.localdomain/foo.html</a>.

当然正しくリダイレクトされません。

ネットで検索するとPECLの Bug #16533 http_redirect fails に同様の現象はあるのですが、OSを入れ替えたら発生しなくなったとかで、解決はしていませんでした。

いろいろ調べたところ、どうも、/etc/services に、

spr-itunes      0/tcp   spl-itunes      # Shirt Pocket netTunes

があると駄目なようです。この行をコメントアウトするとリダイレクト先URIのschemeは http になります。

pecl_httpのソースコードを見てみると、ポート番号0はgetservbyport()で引けないことを前提にポート番号0をフラグ的に使用しており、引けなかったときは http にするというコードになっていました。もともとポート番号0は reserved であり、この前提で良いのかもしれません。でも、Fedora 11の/etc/servicesには上記定義がはいっています。

PECLのバグなのか、それともservicesにport 0が入っているのがバグなのかわからなかったのですが、Bug #16533にコメントとして現象をポストしたところ1時間半ほどでFIXされたようです。まだダウンロードはできないのですができるようになったら、/etc/services のコメントをはずそうと思います。

spr-itunes 0/tcp spl-itunes # Shirt Pocket netTunes
とは何かわからないのですが、spr-itunesで検索してみるとポート番号0がservicesに定義されていることにより、他にもいくつか混乱がでていたようです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA