Perl5.8.9のsuidperlにバグがあるらしい
自宅サーバのハードウェアグレードアップをしたついでにFreeBSD7.1を新規インストールした。
FreeBSD7.1のPortsに載っかってるPerlは5.8.9だったのだが*1、
こいつをインストールした後suidperlを使っているスクリプトを走らせてみたところ
suidperl needs (suid) fd script
といったエラーログと共にスクリプトがたたき落とされるようになった。
こういうときはGoogle先生の出番である……件の文言で調べてみた結果、どうやらバグがあるらしい事が解った。
> in perl.c in release 5.8.9, line 3727 is if (*suidscript) {
> should be if (*suidscript != 1) {suidscript is a bool* so comparison with 1 is not sound
Elsewhere in patch 33168, C
http://www.gossamer-threads.com/lists/perl/porters/234548is replaced by C so I suspect the test is just inverted
if (*suidscript) {
should be if (!*suidscript) {
どうやら実行しようとしているスクリプトがsuidなスクリプトかどうかのフラグ判定を間違えているらしい。
早速/usr/ports/lang/perl5.8/work/perl-5.8.9/perl.cをこの情報に従って書き換えて再インストールを試みることにした。
これにて正常通り稼働……している……と思う。もう少し使い込んでから結論を出す予定。
*1:6系では5.8.8_1だった。最近5.8.9に更新されたらしい