Windows上でCPANモジュールを書いていた人は要注意

詳細については下記メーリングリストのスレッドを追っていただくとして、問題の概要と、当面の解決策となりそうなことのみ書いておきますと、

1) 通常Windows上でnmake distしてtarballをつくると、EUMM(というか、ExtUtils::Manifest)内部で(Perlの)chmod処理が入っているにもかかわらず、各ファイルのパーミッションは777になります。

2) これをCPAN(正確にはスモーカー)からインストールしようとすると、特定の環境ではworld-writableなファイルがあるということでセキュリティアラートを出す――らしいのですね。

3) それが現実的なセキュリティホールにつながるかどうかはまったくの別問題として、その状況を憂慮したPAUSEの管理者が、world-writableなパーミッションを持つファイルを含む場合はPAUSEのインデックスに登録するのを拒否するようにプログラムを変更。

4) その結果、Windowsユーザは現状、cygwinを入れたうえで、EU::Manifestの_manicopy_chmodを修正。Perl組み込みのchmodを使うのではなく、system関数などでcygwinのchmodを呼び出し、あらかじめ644(ないし664)にパーミッションを変更したあと、cygwin(ないしwin/dos用の)gnu tarで固めるか、こちらは検証していませんがArchive::Tar経由で同じようなことをするようコードを書き換える必要ができた模様。

現状どこまで厳しいチェックが入っているか確認していないので、もしかするとFile::Pathにも手を加えて、ディレクトリ作成時にもバーミッションを落とす処理を追加する必要があるかもしれません。

もちろん非Win32モジュールならまともな*nix環境にコードをチェックアウトしてからtarballに固めるという選択肢もありますが、なんにしても面倒なことになったのはたしかなようです。