Project

General

Profile

Actions

Bug #6756

closed

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

Added by fumiyas (Fumiyasu SATOH) over 11 years ago. Updated over 9 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
Backport:
[ruby-dev:45976]

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

Updated by mame (Yusuke Endoh) over 11 years ago

  • Status changed from Open to Assigned
  • Assignee set to mame (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

Updated by ayumin (Ayumu AIZAWA) over 11 years ago

あいざわです

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

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

Updated by kosaki (Motohiro KOSAKI) over 11 years ago

あいざわです

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

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

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

Updated by mame (Yusuke Endoh) about 11 years ago

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

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

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

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

--
Yusuke Endoh

Updated by ko1 (Koichi Sasada) about 11 years ago

  • Assignee set to nobu (Nobuyoshi Nakada)
  • Target version changed from 2.6 to 2.1.0

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

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

Updated by xibbar (Takeyuki FUJIOKA) about 11 years ago

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

Updated by hsbt (Hiroshi SHIBATA) about 10 years ago

  • Target version changed from 2.1.0 to 2.2.0

Updated by hsbt (Hiroshi SHIBATA) over 9 years 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.
    [ruby-dev:45976] [Bug #6756]
  • test/fileutils/test_fileutils.rb: add testcase for #6756.
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0