2 # Test for File::Temp - Security levels
4 # Some of the security checking will not work on all platforms
5 # Test a simple open in the cwd and tmpdir foreach of the
9 BEGIN { plan tests => 13 }
14 # Set up END block - this needs to happen before we load
15 # File::Temp since this END block must be evaluated after the
16 # END block configured by File::Temp
17 my @files; # list of files to remove
18 END { foreach (@files) { ok( !(-e $_) )} }
20 use File::Temp qw/ tempfile unlink0 /;
23 # The high security tests must currently be skipped on some platforms
26 $^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'os2' || $^O eq 'dos' || $^O eq 'mpeix' || $^O eq 'MacOS'
29 # Can not run high security tests in perls before 5.6.0
30 my $skipperl = ($] < 5.006 ? 1 : 0 );
32 # Determine whether we need to skip things and why
35 $skip = "Skip Not supported on this platform";
37 $skip = "Skip Perl version must be v5.6.0 for these tests";
41 print "# We will be skipping some tests : $skip\n" if $skip;
43 # start off with basic checking
45 File::Temp->safe_level( File::Temp::STANDARD );
47 print "# Testing with STANDARD security...\n";
53 File::Temp->safe_level( File::Temp::MEDIUM )
56 print "# Testing with MEDIUM security...\n";
58 # Now we need to start skipping tests
59 &test_security($skip);
63 File::Temp->safe_level( File::Temp::HIGH )
66 print "# Testing with HIGH security...\n";
68 &test_security($skip);
72 # Subroutine to open two temporary files.
73 # one is opened in the current dir and the other in the temp dir
77 # Read in the skip flag
80 # If we are skipping we need to simply fake the correct number
81 # of tests -- we dont use skip since the tempfile() commands will
82 # fail with MEDIUM/HIGH security before the skip() command would be run
88 # plus we need an end block so the tests come out in the right order
89 eval q{ END { skip($skip,1); skip($skip,1) } 1; } || die;
95 my $template = "tmpXXXXX";
96 my ($fh1, $fname1) = eval { tempfile ( $template,
97 DIR => File::Spec->tmpdir,
102 if (defined $fname1) {
103 print "# fname1 = $fname1\n";
105 push(@files, $fname1); # store for end block
106 } elsif (File::Temp->safe_level() != File::Temp::STANDARD) {
108 my $skip2 = "Skip: " . File::Spec->tmpdir() . " possibly insecure: $@. " .
109 "See INSTALL under 'make test'";
111 # plus we need an end block so the tests come out in the right order
112 eval q{ END { skip($skip2,1); } 1; } || die;
118 if ( $< < File::Temp->top_system_uid() ){
119 skip("Skip Test inappropriate for root", 1);
120 eval q{ END { skip($skip,1); } 1; } || die;
123 my ($fh2, $fname2) = eval { tempfile ($template, UNLINK => 1 ); };
124 if (defined $fname2) {
125 print "# fname2 = $fname2\n";
127 push(@files, $fname2); # store for end block
129 } elsif (File::Temp->safe_level() != File::Temp::STANDARD) {
131 my $skip2 = "Skip: current directory possibly insecure: $@. " .
132 "See INSTALL under 'make test'";
134 # plus we need an end block so the tests come out in the right order
135 eval q{ END { skip($skip2,1); } 1; } || die;