diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-08-23 06:00:31 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-08-23 06:00:31 +0000 |
commit | 91866217e79574e43e130a462db25a81a976ef61 (patch) | |
tree | bcfdbd826fa9bed6a84553f28d9d67370faa6758 /file.c | |
parent | 3b0216fd901c61f278f5cf46a0f14f86d1f0151f (diff) |
* eval.c (is_defined): should not dump core for "defined?(())".
* eval.c (umethod_bind): recv can be an instance of descender of
oklass if oklass is a Module.
* hash.c (rb_hash_equal): check identiry equality first.
* variable.c (mod_av_set): detect constant overriding for built-in
classes/modules.
* marshal.c (w_object): should retrieve __member__ data from
non-singleton class.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1706 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r-- | file.c | 25 |
1 files changed, 12 insertions, 13 deletions
@@ -394,7 +394,7 @@ group_member(gid) GETGROUPS_T gid; { #if !defined(NT) - if (getgid() == gid || getegid() == gid) + if (getgid() == gid) return Qtrue; # ifdef HAVE_GETGROUPS @@ -426,31 +426,30 @@ eaccess(path, mode) { #ifdef S_IXGRP struct stat st; - static int euid = -1; + int euid; if (rb_sys_stat(path, &st) < 0) return (-1); - if (euid == -1) - euid = geteuid (); - - if (euid == 0) - { + euid = geteuid(); + if (euid == 0) { /* Root can read or write any file. */ - if (mode != X_OK) + if (!(mode & X_OK)) return 0; /* Root can execute any file that has any one of the execute bits set. */ if (st.st_mode & S_IXUGO) return 0; - } + + return -1; + } if (st.st_uid == euid) /* owner */ - mode <<= 6; - else if (group_member (st.st_gid)) - mode <<= 3; + mode <<= 6; + else if (getegid() == st.st_gid || group_member(st.st_gid)) + mode <<= 3; - if (st.st_mode & mode) return 0; + if ((st.st_mode & mode) == mode) return 0; return -1; #else /* !NT */ |