LWP で https + authorization_basic を使うと セグメンテーション違反する件
最終的な結合試験中に見つかった不具合なんですが、Crypt::SSLeay + openssl-0.9.8a でセグメンテーションフォルトします。多くの場合、デフォルトで rpm されている openssl-0.9.7 系では問題が発生しないようです。
あまり深追いをしていないのですが、セグメンテーションフォルトっていうエラーなので、Perl スクリプトではなくて、XS の C で描かれた部分だろうなぁ〜と思ってます。恐らく Crypt::SSLeay の SSLeay.xs のどこかが openssl-0.9.8a に非対応なのでしょう。
LWP で Crypt::SSLeay を使っているところは、 HTTPS.pm / https10.pm 内です。例えば、openssl-0.9.8a を入れている場合、こんなスクリプトはセグメンテーションフォルトします。
use strict; use LWP::UserAgent; use HTTP::Request::Common; use HTTP::Cookies; my $ua = LWP::UserAgent->new; $ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)'); $ua->timeout(30); $cookie_jar = HTTP::Cookies->new(file => 'cokkie.txt', autosave => 1, ignore_discard => 1); $ua->cookie_jar($cookie_jar); $user_id = 'testis'; $user_pw = 'testpw'; my $request = HTTP::Request::Common::GET('https://testsite.com/testfile.html'); $request->authorization_basic($user_id, $user_pw); my $result = $ua->request($request); die "Failed to Authentication.." unless($result->is_success); print $result->content;
このスクリプトは単純にベーシック認証がかかったサイトに https でアクセスするってだけのものです。よく使うパターンの一つでもありますが、
の部分でセグメンテーションフォルトします。見つけるのにえらい苦労しましたので、情報までに記事にしておくことにしました。原因特定は後になってなので、Perl から CPAN までモジュールを全て再インストールするという無駄な行為をして自滅してしまいました。
Perl モジュールのインストールも OS のライブラリを update していると急に make が通らなくなったり(GDとかさぁ・・・)して苦労しますね。インストールメモにはバッドノウハウばかりです・・・。
最近の教訓 → 新しい物好きも如何なモノかと・・・。
コメントやシェアをお願いします!