From: "U.Nakamura" Date: 2002-09-07T02:14:14+09:00 Subject: [ruby-dev:18212] Re: [ruby-list:35875] Unsecure world writeabledir の警告 こんにちは、なかむら(う)です。 At Sep.06,2002 23:40:07, wrote in '[ruby-dev:18210] Re: [ruby-list:35875] Unsecure world writeabledir の警告' > > (1) 0を返す > > (2) process.cのsecurity()でDOSISHでは例外を投げなくする > > (3) やっぱり、[ruby-list:35877]での指摘のように、stat()の方 > > をどうにかする > > * この場合、NTFSのような一応権限チェック可能なファイルシ > > ステムでも同様にすべき? チェックすべき? > > (4) その他 > > > > どうも、(1)や(2)は、なんだかなぁ、という気がします。 > > (3)がいいのかなあ。 やっぱりそういう気がしますね。 > ちょっと実験してみたら、msvcrt.dllのstat()はNTFS上でアクセス > 権をいろいろ設定しても常に0777とゾロ目で、ファイルシステムを > チェックする必要もないようです。 > > rb_w32_stat()でstatした結果を > st.st_mode &= ~022; > とするだけでいいんじゃないかな? というわけで、パッチです。 file.cも戻してみましたが、 * 戻さなくてもいいような気もする * 戻すとしても、他のDOSISH platformは? Cygwinとdjgppは大丈夫、なんですよね ってなところでまた判断つきかねてたり(よわい)。 Index: file.c =================================================================== RCS file: /home/cvs/ruby/file.c,v retrieving revision 1.113 diff -u -1 -p -r1.113 file.c --- file.c 2002/09/06 08:59:38 1.113 +++ file.c 2002/09/06 17:08:38 @@ -2345,3 +2345,2 @@ is_absolute_path(path) -#ifndef DOSISH static int @@ -2385,3 +2384,2 @@ path_check_1(path) } -#endif @@ -2391,3 +2389,2 @@ rb_path_check(path) { -#ifndef DOSISH char *p0, *p, *pend; @@ -2411,3 +2408,2 @@ rb_path_check(path) } -#endif return 1; Index: win32/win32.c =================================================================== RCS file: /home/cvs/ruby/win32/win32.c,v retrieving revision 1.65 diff -u -1 -p -r1.65 win32.c --- win32/win32.c 2002/08/28 08:56:18 1.65 +++ win32/win32.c 2002/09/06 17:08:39 @@ -2508,2 +2508,3 @@ rb_w32_stat(const char *path, struct sta int len; + int ret; @@ -2523,4 +2524,9 @@ rb_w32_stat(const char *path, struct sta strcat(buf1, "."); - if (_fullpath(buf2, buf1, MAXPATHLEN)) - return stat(buf2, st); + if (_fullpath(buf2, buf1, MAXPATHLEN)) { + ret = stat(buf2, st); + if (ret == 0) { + st->st_mode &= ~022; + } + return ret; + } else それでは。 -- U.Nakamura