Bug #6756

FileUtils.rm_rf がアクセス権のない空ディレクトリを削除しない

Added by Fumiyasu SATOH almost 3 years ago. Updated 11 months ago.

[ruby-dev:45976]
Status:Closed
Priority:Normal
Assignee:Nobuyoshi Nakada
ruby -v:ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux] Backport:

Description

=begin
UNIX の rm コマンドは、(({rm -rf dir})) でアクセス権がない空ディレクトリを
削除しますが、(({FileUtils.rm_rf("dir")})) は削除してくれません。

$ mkdir -m 0 empty-noperm-dir
$ sudo ls -la empty-noperm-dir
合計 8
d--------- 2 fumiyas fumiyas 4096 7月 20 01:10 .
drwxrwxr-x 11 fumiyas fumiyas 4096 7月 20 01:10 ..
$ ruby -v -rfileutils -e 'FileUtils.rm_rf("empty-noperm-dir")'
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
$ sudo ls -la empty-noperm-dir
合計 8
d--------- 2 fumiyas fumiyas 4096 7月 20 01:10 .
drwxrwxr-x 11 fumiyas fumiyas 4096 7月 20 01:10 ..
$ rm -rf empty-noperm-dir
$ sudo ls -la empty-noperm-dir
ls: empty-noperm-dir にアクセスできません: そのようなファイルやディレクトリはありません

この例では指定したディレクトリがアクセス権がない空ディレクトリですが、
サブディレクトリの場合も同じ問題が発生します。

Windows ならしょうがない(私の知る限りアクセス権のないファイルは
削除不可なので)と思うのですが、少なくとも UNIX 系の OS では rm -rf と
同じく削除して欲しいです。
=end

Associated revisions

Revision 47150
Added by Hiroshi SHIBATA 11 months ago

  • lib/fileutils.rb: enable to remove with non-owner directory. [Bug #6756]
  • test/fileutils/test_fileutils.rb: add testcase for #6756.

Revision 47150
Added by Hiroshi SHIBATA 11 months ago

  • lib/fileutils.rb: enable to remove with non-owner directory. [Bug #6756]
  • test/fileutils/test_fileutils.rb: add testcase for #6756.

History

#1 Updated by Yusuke Endoh over 2 years ago

  • Status changed from Open to Assigned
  • Assignee set to Yusuke Endoh

以下のパッチで直りますが、影響無いですかね。make check は通りました。
反対がなさそうならコミットします。が、問題が起きたら revert となります。

diff --git a/lib/fileutils.rb b/lib/fileutils.rb
index 67cc79f..b18ca30 100644
--- a/lib/fileutils.rb
+++ b/lib/fileutils.rb
@@ -1534,6 +1534,7 @@ private
end
end
end
+ ensure
yield self
end

Yusuke Endoh mame@tsg.ne.jp

#2 Updated by Ayumu AIZAWA over 2 years ago

あいざわです

Windows ならしょうがない(私の知る限りアクセス権のないファイルは
削除不可なので)と思うのですが、少なくとも UNIX 系の OS では rm -rf と
同じく削除して欲しいです。

パッチの適用には反対です。
Windowsで実現できないのであればプラットフォームによって同じメソッドで
明らかに異なる結果になるのはありがたくないです。
(他にもそういうのがのあるのかもしれないですが。。。)

#3 Updated by Motohiro KOSAKI over 2 years ago

あいざわです

Windows ならしょうがない(私の知る限りアクセス権のないファイルは
削除不可なので)と思うのですが、少なくとも UNIX 系の OS では rm -rf と
同じく削除して欲しいです。

パッチの適用には反対です。
Windowsで実現できないのであればプラットフォームによって同じメソッドで
明らかに異なる結果になるのはありがたくないです。
(他にもそういうのがのあるのかもしれないですが。。。)

ほとんどすべてのファイル操作はOSのファイルシステムのルールに
縛られてるので、ここだけ挙動を一致させても意味ないと思います。
またUnixの9bitしかない雑なアクセス権コントロールだとワークアラウンドが他にないケースもあるのでしょうがないんじゃないかな

#4 Updated by Yusuke Endoh over 2 years ago

  • Status changed from Assigned to Open
  • Assignee deleted (Yusuke Endoh)
  • Target version set to next minor

まあ一応反対が出たのでコミットしません。

内容的には小崎さんに全面賛成で、「あの環境でできないから」とか言ってたら
File/FileUtils 関係はほとんど何も出来なくなるんじゃないかと思いますが、

まあ今から議論するのは 2.0.0 には遅いので next minor にします。
あと自分で判断できる内容じゃない気がするので担当ははずれておきます。
対応が遅くなってすみません。

Yusuke Endoh mame@tsg.ne.jp

#5 Updated by Koichi Sasada over 2 years ago

  • Assignee set to Nobuyoshi Nakada
  • Target version changed from next minor to 2.1.0

fileutils のメンテナさんは居ないようですが、
http://bugs.ruby-lang.org/projects/ruby/wiki/Maintainers
こういうチケットはどうしておけばいいでしょうか...。

とりあえず nobu に振っておきます。

#6 Updated by Takeyuki FUJIOKA over 2 years ago

これはUNIXの挙動に合わせてもいいと思いました。
なので、
kosaki さんに +1
です。
反対の度合いはどうですか? > ayumin

#7 Updated by Hiroshi SHIBATA over 1 year ago

  • Target version changed from 2.1.0 to current: 2.2.0

#8 Updated by Hiroshi SHIBATA 11 months ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

Applied in changeset r47150.


  • lib/fileutils.rb: enable to remove with non-owner directory. [Bug #6756]
  • test/fileutils/test_fileutils.rb: add testcase for #6756.

Also available in: Atom PDF