こんにちは、なかむら(う)です。

At Sep.08,2002 00:07:09, <eban / os.rim.or.jp> wrote in
    '[ruby-dev:18221] Re: [ruby-list:35875] Unsecure world writeabledir の警告'
> > * 戻すとしても、他のDOSISH platformは?
> >    Cygwinとdjgppは大丈夫、なんですよね
> 
> CygwinはNTFSならntsecで制御可能なので問題ないはず。
> djgppはstat()のソースを見ると
> 
> /* Under MS-DOS, file access permissions are shared by all, except for
>    Write permission. */
> #define READ_ACCESS     (S_IRUSR | S_IRGRP | S_IROTH)
> #define WRITE_ACCESS    S_IWUSR
> #define EXEC_ACCESS     (S_IXUSR | S_IXGRP | S_IXOTH)
> 
> となってました。つまりgroupとotherのwrite permissionは触らな
> いというポリシー。というわけで絶対にそのビットが立つことはないです。
> あとはOS/2とX68Kですね。面倒だから戻さないほうがいいかも。

悩みどころですね。
うーむ、とりあえず、今回は戻さないでおきましょう。


> > @@ -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
> 
> 022ってのもなんだし
>  +	    st->st_mode &= ~(S_IWGRP|S_IWOTH)
> としたほうがいいかなと思ったらそんなマクロは存在しないし。

VC++だとS_IWRITE(0200)しか定義されてないみたいです。

... あ、これがFile#readable?とかFile#writable?なんかが常に
trueを返す理由なのか。
win32/win32.hで定義した方がいいような気もしますね。


それでは。
-- 
U.Nakamura <usa / osb.att.ne.jp>