In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/b595cd4b73a6e1bd45865d6446c34d4019c740d1?hp=91152fc19d1c59a1213e39f74ac8a80f4a015f5e>
- Log ----------------------------------------------------------------- commit b595cd4b73a6e1bd45865d6446c34d4019c740d1 Author: Reini Urban <rur...@x-ray.at> Date: Mon Jan 11 20:24:32 2010 +0000 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 <h.m.br...@xs4all.nl> ----------------------------------------------------------------------- Summary of changes: doio.c | 4 ++++ t/op/stat.t | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) 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"); } -- Perl5 Master Repository