なかだです。

At Tue, 19 Feb 2002 16:40:15 +0900,
matz / ruby-lang.org (Yukihiro Matsumoto) wrote:
> |stickyなディレクトリにあるファイルは所有者以外は削除/変更不可な
> |ので、親ディレクトリについてはsticky bitが立っていたらo+wでも構
> |わないというところでどうでしょうか。PATHに含まれるディレクトリ
> |自身は、今まで通りstickyは関係なし。
> 
> う、私が考えていたよりも条件が複雑ですね。わかりました。
> そうしましょう。

なんか条件がヘンでは。親ディレクトリにsticky bitが立ってるとき
に、警告を出さずにエラーになるようになってますが。

$ ls -ld /tmp /tmp/echo /tmp/x /tmp/x/echo 
drwxrwxrwt   12 root     root            0  2月 19 17:00 /tmp/
-rwxr-xr-x    2 nobu     nakada       6812  2月 19 16:32 /tmp/echo*
drwxr-xr-x    2 nobu     nakada          0  2月 19 16:59 /tmp/x/
-rwxr-xr-x    2 nobu     nakada       6812  2月 19 16:32 /tmp/x/echo*
$ PATH=/tmp ./miniruby -we '$SAFE=1;system "echo"'
-e:1: warning: Unsecure world writeable dir /tmp , mode 041777
-e:1:in `system': Insecure PATH - echo (SecurityError)
        from -e:1
$ PATH=/tmp/x ./miniruby -we '$SAFE=1;system "echo"'
-e:1:in `system': Insecure PATH - echo (SecurityError)
        from -e:1


Index: file.c =================================================================== RCS file: /cvs/ruby/src/ruby/file.c,v Retrieving revision 1.91 diff -u -2 -p -r1.91 file.c --- file.c 2002/02/19 07:47:05 1.91 +++ file.c 2002/02/19 07:56:56 @@ -2308,9 +2308,10 @@ path_check_1(path) # define S_IWOTH 002 #endif - if (stat(p0, &st) == 0 && S_ISDIR(st.st_mode) && (st.st_mode & S_IWOTH)) { + if (stat(p0, &st) == 0 && S_ISDIR(st.st_mode) && (st.st_mode & S_IWOTH) #ifdef S_ISVTX - if (!p || !(st.st_mode & S_ISVTX)) + && (!p || !(st.st_mode & S_ISVTX)) #endif - rb_warn("Unsecure world writeable dir %s , mode 0%o", p0, st.st_mode); + ) { + rb_warn("Unsecure world writeable dir %s , mode 0%o", p0, st.st_mode); if (p) *p = '/'; return 0;
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦