From: Tanaka Akira Date: 2009-11-07T01:11:56+09:00 Subject: [ruby-dev:39654] Re: [Feature:trunk] Dir instance methods for relative path In article <4AF03BC0.6090104@airemix.jp>, "NARUSE, Yui" writes: > そもそも、根本的に openat の API って実装の都合が出過ぎていませんかね。 > C 言語の関数ならばともかく、Ruby の API としては、 > もうちょっとユースケースベースの API にしないと使われない気がします。 > (使うべき人が使う API でいいやと割り切るという考えもあるでしょうが) 良く使うものに最適化した API はもちろん重要ですが、できるこ とをなんでもできる API もまた重要です。 なんでもできるのに良く使うものに最適化してある、というのがい ちばんですが。 In article <4AF305C2.8080007@airemix.jp>, "NARUSE, Yui" writes: >>>> ./ruby -v -e 'p open(["ext", "extmk.rb"]){|f|f.gets}}' >>>> ./ruby -v -e 'p open([dir, "extmk.rb"]){|f|f.gets}}' >>> を許すなら join の手間が省けるので使ってくれるかなぁ。 >> >> 手間は省けますが、symlink attackには無意味です。 > > いや、open 内で join するのではなくて、 > open の中で ext を開いてから openat で extmk.rb を開いたり、 > dir から openat で extmk.rb を開くという話です。 symlink attack を防ぐためには ext を開いた結果が意図したもの であることを確認しないといけないので、そういう話ならセキュリ ティ的な効果はありませんね。 配列の第一要素が Dir (や IO) のときに、その fd を openat の dirfd に渡すという話ならセキュリティ的な意味はあると思います。 まぁ、その配列の形式は pathname に素直に入れられないという問 題があるんですが、それを除けば悪くはないと思います。 -- [田中 哲][たなか あきら][Tanaka Akira]