会社のサーバで ruby-1.8.2 + hiki-0.8.2 の組み合わせが動いているのだが、サーバのリプレース予定があり、リプレースついでに、ruby-1.8.6 + hiki-0.8.6 の組み合わせに置き換えることを検討。
HikiFarmが作る.cgiや.confを一斉に置換し、動かしたところ、問題なさげに動いた。ひとまず安心し、無意識のうちに「編集」をクリックしたところ、
wrong number of arguments (1 for 0) (ArgumentError) /var/www/apps/hiki/hiki/storage.rb:46:in `initialize' /var/www/apps/hiki/hiki/storage.rb:46:in `new' /var/www/apps/hiki/hiki/storage.rb:46:in `md5hex' /var/www/apps/hiki/hiki/command.rb:306:in `cmd_edit' /var/www/apps/hiki/hiki/command.rb:76:in `dispatch' /usr/lib/ruby/1.8/timeout.rb:56:in `timeout' /var/www/apps/hiki/hiki/command.rb:71:in `dispatch' /var/www/apps/hiki/hiki.cgi:32 /var/www/apps/hiki/hiki/storage.rb:14:in `open_db' /var/www/apps/hiki/hiki.cgi:30 /var/www/html/hikifarm/test/index.cgi:5:in `load' /var/www/html/hikifarm/test/index.cgi:5
とエラー発生。すんなりいかないようだ。
ソースを見たところ
Digest::MD5::new( s || '' ).hexdigest
とある。どうやら、ruby-1.8.6 では、これが気に入らないらしい。 hiki の CVS HEAD を見たところ、同じ部分は
Digest::MD5::hexdigest( s || '' )
となっていたので、書き換えたところ、無事動いた。
会社のサーバで ruby-1.8.2 + kagemai-0.8.6 の組み合わせが動いているのだが、サーバのリプレース予定があり、リプレースついでに、ruby-1.8.6 + kagemai-0.8.6 の組み合わせに置き換えることを検討。
各.cgiや.confを書き換え、動かしたところ、
Following errors occurred. Please contact administrator. Insecure: can't intern tainted string (SecurityError)
とエラー発生。いったいどこで…
どこでエラーが発生しているかは、cgiを直接起動すればわかるだろうと、シェル上から
echo '' | ruby ./guest.cgi
としたところ、果たして、
/var/www/var/kagemai/lib/kagemai/message_bundle.rb:69:in `intern': Insecure: can't intern tainted string (SecurityError)
とエラーメッセージが。message_bundle.rbの69行目は
@messages[key.intern] = message
とある。どうやら、key.internが気に入らない模様。taint 文字列の intern が SecurityError 例外が発生するように変更されたことが原因らしい。
message_bundle.rb の65行目
key = key.to_s.strip
に相当する部分が、影舞の stable-0_8 ブランチでは
key = key.to_s.strip.untaint
となっているので、このように書き換え、再度実行。
しかし、またまた同じエラーが。まだ、untaintが足りないらしい…
今度は
/var/www/var/kagemai/lib/kagemai/reporttype.rb:174:in `intern': Insecure: can't intern tainted string (SecurityError)
とあった。
reporttype.rbの174行目は
attr_u[key.intern.to_s.untaint] = value.dup.untaint
となっている。
attr_u[key.untaint.intern.to_s.untaint] = value.dup.untaint
に書き換えたところ
Following errors occurred. Please contact administrator. can't modify frozen object (TypeError)
となるので、
attr_u[key.dup.untaint.intern.to_s.untaint] = value.dup.untaint
と変更したところ、ようやく動いた。
install_ja.rb を使ってインストールしようとすると、hiki-0.8.6と同様、Digest::MD5::new() で引っかかる。同様に Digest::MD5::hexdigest() に書き換える必要がある。
*Messages* の更新情報取得には、antenna.lirs もしくは index.rdfをご利用ください。 豪傑アンテナ の LIRSからも取得可能です。