use Test;
BEGIN { plan tests => 13 }
use strict;
use File::Spec;
my @files; END { foreach (@files) { ok( !(-e $_) )} }
use File::Temp qw/ tempfile unlink0 /;
ok(1);
my $skipplat = ( (
$^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'os2' || $^O eq 'dos' || $^O eq 'mpeix' || $^O eq 'MacOS'
) ? 1 : 0 );
my $skipperl = ($] < 5.006 ? 1 : 0 );
my $skip = 0;
if ($skipplat) {
$skip = "Skip Not supported on this platform";
} elsif ($skipperl) {
$skip = "Skip Perl version must be v5.6.0 for these tests";
}
print "# We will be skipping some tests : $skip\n" if $skip;
File::Temp->safe_level( File::Temp::STANDARD );
print "# Testing with STANDARD security...\n";
&test_security(0);
File::Temp->safe_level( File::Temp::MEDIUM )
unless $skip;
print "# Testing with MEDIUM security...\n";
&test_security($skip);
File::Temp->safe_level( File::Temp::HIGH )
unless $skip;
print "# Testing with HIGH security...\n";
&test_security($skip);
exit;
sub test_security {
my $skip = shift;
if ($skip) {
skip($skip,1);
skip($skip,1);
eval q{ END { skip($skip,1); skip($skip,1) } 1; } || die;
return;
}
my $template = "tmpXXXXX";
my ($fh1, $fname1) = eval { tempfile ( $template,
DIR => File::Spec->tmpdir,
UNLINK => 1,
);
};
if (defined $fname1) {
print "# fname1 = $fname1\n";
ok( (-e $fname1) );
push(@files, $fname1); } elsif (File::Temp->safe_level() != File::Temp::STANDARD) {
chomp($@);
my $skip2 = "Skip: " . File::Spec->tmpdir() . " possibly insecure: $@. " .
"See INSTALL under 'make test'";
skip($skip2, 1);
eval q{ END { skip($skip2,1); } 1; } || die;
} else {
ok(0);
}
if ( $< < File::Temp->top_system_uid() ){
skip("Skip Test inappropriate for root", 1);
eval q{ END { skip($skip,1); } 1; } || die;
return;
}
my ($fh2, $fname2) = eval { tempfile ($template, UNLINK => 1 ); };
if (defined $fname2) {
print "# fname2 = $fname2\n";
ok( (-e $fname2) );
push(@files, $fname2); close($fh2);
} elsif (File::Temp->safe_level() != File::Temp::STANDARD) {
chomp($@);
my $skip2 = "Skip: current directory possibly insecure: $@. " .
"See INSTALL under 'make test'";
skip($skip2, 1);
eval q{ END { skip($skip2,1); } 1; } || die;
} else {
ok(0);
}
}