summaryrefslogtreecommitdiffstats
path: root/file.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-11-22 08:37:11 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-11-22 08:37:11 +0000
commite4b3d833e07b1022c0a047199af0fa08f75b7ba2 (patch)
tree79c8f89350c30c8f9914bd238b855d9a7163d53f /file.c
parenta4482bf86399fb88e2352d9cf431e8623814b556 (diff)
downloadruby-e4b3d833e07b1022c0a047199af0fa08f75b7ba2.tar.gz
ruby-e4b3d833e07b1022c0a047199af0fa08f75b7ba2.tar.xz
ruby-e4b3d833e07b1022c0a047199af0fa08f75b7ba2.zip
* file.c (test_grpowned, rb_stat_grpowned): should honor
supplementary group IDs. [ruby-core:09546] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@11302 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r--file.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/file.c b/file.c
index 6018862d1..b99de7465 100644
--- a/file.c
+++ b/file.c
@@ -789,7 +789,7 @@ static int
group_member(GETGROUPS_T gid)
{
#ifndef _WIN32
- if (getgid() == gid)
+ if (getgid() == gid || getegid() == gid)
return Qtrue;
# ifdef HAVE_GETGROUPS
@@ -849,7 +849,7 @@ eaccess(const char *path, int mode)
if (st.st_uid == euid) /* owner */
mode <<= 6;
- else if (getegid() == st.st_gid || group_member(st.st_gid))
+ else if (group_member(st.st_gid))
mode <<= 3;
if ((st.st_mode & mode) == mode) return 0;
@@ -1330,7 +1330,7 @@ test_grpowned(VALUE obj, VALUE fname)
struct stat st;
if (rb_stat(fname, &st) < 0) return Qfalse;
- if (st.st_gid == getegid()) return Qtrue;
+ if (group_member(st.st_gid)) return Qtrue;
#endif
return Qfalse;
}
@@ -3651,7 +3651,7 @@ static VALUE
rb_stat_grpowned(VALUE obj)
{
#ifndef _WIN32
- if (get_stat(obj)->st_gid == getegid()) return Qtrue;
+ if (group_member(get_stat(obj)->st_gid)) return Qtrue;
#endif
return Qfalse;
}