From: Reini Urban Date: Mon, 11 Jan 2010 20:24:32 +0000 (+0000) Subject: CYG23-544-stat X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b595cd4b73a6e1bd45865d6446c34d4019c740d1;p=p5sagit%2Fp5-mst-13.2.git CYG23-544-stat Stable cygwin patch for root filetests (gid 0 root <= gid 544 Administrators). On cygwin check for the Administrators group (544) which has root rights regarding -r filetests. Signed-off-by: H.Merijn Brand --- diff --git a/doio.c b/doio.c index 168c10e..87f2da0 100644 --- a/doio.c +++ b/doio.c @@ -1918,7 +1918,11 @@ Perl_cando(pTHX_ Mode_t mode, bool effective, register const Stat_t *statbufp) return (mode & statbufp->st_mode) ? TRUE : FALSE; #else /* ! DOSISH */ +# ifdef __CYGWIN__ + if (ingroup(544,effective)) { /* member of Administrators */ +# else if ((effective ? PL_euid : PL_uid) == 0) { /* root is special */ +# endif if (mode == S_IXUSR) { if (statbufp->st_mode & 0111 || S_ISDIR(statbufp->st_mode)) return TRUE; diff --git a/t/op/stat.t b/t/op/stat.t index 5167655..bc05112 100644 --- a/t/op/stat.t +++ b/t/op/stat.t @@ -27,10 +27,15 @@ $Is_DGUX = $^O eq 'dgux'; $Is_MPRAS = $^O =~ /svr4/ && -f '/etc/.relid'; $Is_Rhapsody= $^O eq 'rhapsody'; -$Is_Dosish = $Is_Dos || $Is_OS2 || $Is_MSWin32 || $Is_NetWare || $Is_Cygwin; +$Is_Dosish = $Is_Dos || $Is_OS2 || $Is_MSWin32 || $Is_NetWare; $Is_UFS = $Is_Darwin && (() = `df -t ufs . 2>/dev/null`) == 2; +if ($Is_Cygwin) { + require Win32; + Win32->import; +} + my($DEV, $INO, $MODE, $NLINK, $UID, $GID, $RDEV, $SIZE, $ATIME, $MTIME, $CTIME, $BLKSIZE, $BLOCKS) = (0..12); @@ -163,10 +168,10 @@ SKIP: { my $olduid = $>; eval { $> = 1; }; skip "Can't test -r or -w meaningfully if you're superuser", 2 - if $> == 0; + if ($Is_Cygwin ? Win32::IsAdminUser : $> == 0); SKIP: { - skip "Can't test -r meaningfully?", 1 if $Is_Dos || $Is_Cygwin; + skip "Can't test -r meaningfully?", 1 if $Is_Dos; ok(!-r $tmpfile, " -r"); }