/
usr
/
share
/
perl5
/
/usr/share/perl5
mkdir
upload
Name
Size
Mode
Actions
B/
-
0755
rm
Class/
-
0755
rm
Config/
-
0755
rm
DBM_Filter/
-
0755
rm
encoding/
-
0755
rm
ExtUtils/
-
0755
rm
File/
-
0755
rm
Getopt/
-
0755
rm
I18N/
-
0755
rm
IPC/
-
0755
rm
Math/
-
0755
rm
Net/
-
0755
rm
overload/
-
0755
rm
Pod/
-
0755
rm
pod/
-
0755
rm
Search/
-
0755
rm
Term/
-
0755
rm
Text/
-
0755
rm
Thread/
-
0755
rm
Tie/
-
0755
rm
Time/
-
0755
rm
Unicode/
-
0755
rm
unicore/
-
0755
rm
URI/
-
0755
rm
User/
-
0755
rm
vendor_perl/
-
0755
rm
warnings/
-
0755
rm
AnyDBM_File.pm
2618
0644
edit
dl
rm
AutoLoader.pm
15797
0644
edit
dl
rm
AutoSplit.pm
19637
0644
edit
dl
rm
autouse.pm
4238
0644
edit
dl
rm
base.pm
10980
0644
edit
dl
rm
Benchmark.pm
31025
0644
edit
dl
rm
blib.pm
2086
0644
edit
dl
rm
bytes.pm
3754
0644
edit
dl
rm
bytes_heavy.pl
758
0644
edit
dl
rm
charnames.pm
20867
0644
edit
dl
rm
CORE.pod
3188
0644
edit
dl
rm
DB.pm
18922
0644
edit
dl
rm
DBM_Filter.pm
14385
0644
edit
dl
rm
deprecate.pm
3079
0644
edit
dl
rm
diagnostics.pm
19038
0644
edit
dl
rm
DirHandle.pm
1556
0644
edit
dl
rm
Dumpvalue.pm
17556
0644
edit
dl
rm
dumpvar.pl
15555
0644
edit
dl
rm
English.pm
4761
0644
edit
dl
rm
feature.pm
17085
0644
edit
dl
rm
fields.pm
9489
0644
edit
dl
rm
FileCache.pm
5572
0644
edit
dl
rm
FileHandle.pm
6784
0644
edit
dl
rm
filetest.pm
4003
0644
edit
dl
rm
FindBin.pm
4561
0644
edit
dl
rm
if.pm
3340
0644
edit
dl
rm
integer.pm
3254
0644
edit
dl
rm
Internals.pod
2576
0644
edit
dl
rm
less.pm
3204
0644
edit
dl
rm
locale.pm
4855
0644
edit
dl
rm
meta_notation.pm
2117
0644
edit
dl
rm
NEXT.pm
18846
0644
edit
dl
rm
overload.pm
53314
0644
edit
dl
rm
overloading.pm
1808
0644
edit
dl
rm
perl5db.pl
316420
0644
edit
dl
rm
PerlIO.pm
10459
0644
edit
dl
rm
Safe.pm
25082
0644
edit
dl
rm
SelectSaver.pm
1076
0644
edit
dl
rm
sigtrap.pm
7606
0644
edit
dl
rm
sort.pm
6081
0644
edit
dl
rm
strict.pm
4738
0644
edit
dl
rm
subs.pm
848
0644
edit
dl
rm
Symbol.pm
4799
0644
edit
dl
rm
Thread.pm
8287
0644
edit
dl
rm
UNIVERSAL.pm
6594
0644
edit
dl
rm
URI.pm
34790
0644
edit
dl
rm
utf8.pm
9116
0644
edit
dl
rm
utf8_heavy.pl
31615
0644
edit
dl
rm
vars.pm
2414
0644
edit
dl
rm
vmsish.pm
4313
0644
edit
dl
rm
warnings.pm
44756
0644
edit
dl
rm
XSLoader.pm
11267
0644
edit
dl
rm
_charnames.pm
33166
0644
edit
dl
rm
Edit:
/usr/share/perl5/filetest.pm
(4003B)
package filetest; our $VERSION = '1.03'; =head1 NAME filetest - Perl pragma to control the filetest permission operators =head1 SYNOPSIS $can_perhaps_read = -r "file"; # use the mode bits { use filetest 'access'; # intuit harder $can_really_read = -r "file"; } $can_perhaps_read = -r "file"; # use the mode bits again =head1 DESCRIPTION This pragma tells the compiler to change the behaviour of the filetest permission operators, C<-r> C<-w> C<-x> C<-R> C<-W> C<-X> (see L<perlfunc>). The default behaviour of file test operators is to use the simple mode bits as returned by the stat() family of system calls. However, many operating systems have additional features to define more complex access rights, for example ACLs (Access Control Lists). For such environments, C<use filetest> may help the permission operators to return results more consistent with other tools. The C<use filetest> or C<no filetest> statements affect file tests defined in their block, up to the end of the closest enclosing block (they are lexically block-scoped). Currently, only the C<access> sub-pragma is implemented. It enables (or disables) the use of access() when available, that is, on most UNIX systems and other POSIX environments. See details below. =head2 Consider this carefully The stat() mode bits are probably right for most of the files and directories found on your system, because few people want to use the additional features offered by access(). But you may encounter surprises if your program runs on a system that uses ACLs, since the stat() information won't reflect the actual permissions. There may be a slight performance decrease in the filetest operations when the filetest pragma is in effect, because checking bits is very cheap. Also, note that using the file tests for security purposes is a lost cause from the start: there is a window open for race conditions (who is to say that the permissions will not change between the test and the real operation?). Therefore if you are serious about security, just try the real operation and test for its success - think in terms of atomic operations. Filetests are more useful for filesystem administrative tasks, when you have no need for the content of the elements on disk. =head2 The "access" sub-pragma UNIX and POSIX systems provide an abstract access() operating system call, which should be used to query the read, write, and execute rights. This function hides various distinct approaches in additional operating system specific security features, like Access Control Lists (ACLs) The extended filetest functionality is used by Perl only when the argument of the operators is a filename, not when it is a filehandle. =head2 Limitation with regard to C<_> Because access() does not invoke stat() (at least not in a way visible to Perl), B<the stat result cache "_" is not set>. This means that the outcome of the following two tests is different. The first has the stat bits of F</etc/passwd> in C<_>, and in the second case this still contains the bits of C</etc>. { -d '/etc'; -w '/etc/passwd'; print -f _ ? 'Yes' : 'No'; # Yes } { use filetest 'access'; -d '/etc'; -w '/etc/passwd'; print -f _ ? 'Yes' : 'No'; # No } Of course, unless your OS does not implement access(), in which case the pragma is simply ignored. Best not to use C<_> at all in a file where the filetest pragma is active! As a side effect, as C<_> doesn't work, stacked filetest operators (C<-f -w $file>) won't work either. This limitation might be removed in a future version of perl. =cut $filetest::hint_bits = 0x00400000; # HINT_FILETEST_ACCESS sub import { if ( $_[1] eq 'access' ) { $^H |= $filetest::hint_bits; } else { die "filetest: the only implemented subpragma is 'access'.\n"; } } sub unimport { if ( $_[1] eq 'access' ) { $^H &= ~$filetest::hint_bits; } else { die "filetest: the only implemented subpragma is 'access'.\n"; } } 1;
Save
cmd:
run