package CGITempFile;
sub find_tempdir {
$SL = $CGI::SL;
$MAC = $CGI::OS eq 'MACINTOSH';
my ($vol) = $MAC ? MacPerl::Volumes() =~ /:(.*)/ : "";
unless (defined $TMPDIRECTORY) {
@TEMP=("${SL}usr${SL}tmp","${SL}var${SL}tmp",
"C:${SL}temp","${SL}tmp","${SL}temp",
"${vol}${SL}Temporary Items",
"${SL}WWW_ROOT", "${SL}SYS\$SCRATCH",
"C:${SL}system${SL}temp");
if( $CGI::OS eq 'WINDOWS' ){
# PeterH: These evars may not exist if this is invoked within a service and untainting
# is in effect - with 'use warnings' the undefined array entries causes Perl to die
unshift(@TEMP,$ENV{TEMP}) if defined $ENV{TEMP};
unshift(@TEMP,$ENV{TMP}) if defined $ENV{TMP};
unshift(@TEMP,$ENV{WINDIR} . $SL . 'TEMP') if defined $ENV{WINDIR};
}
unshift(@TEMP,$ENV{'TMPDIR'}) if defined $ENV{'TMPDIR'};
# this feature was supposed to provide per-user tmpfiles, but
# it is problematic.
# unshift(@TEMP,(getpwuid($<))[7].'/tmp') if $CGI::OS eq 'UNIX';
# Rob: getpwuid() is unfortunately UNIX specific. On brain dead OS'es this
# : can generate a 'getpwuid() not implemented' exception, even though
# : it's never called. Found under DOS/Win with the DJGPP perl port.
# : Refer to getpwuid() only at run-time if we're fortunate and have UNIX.
# unshift(@TEMP,(eval {(getpwuid($>))[7]}).'/tmp') if $CGI::OS eq 'UNIX' and $> != 0;
for (@TEMP) {
do {$TMPDIRECTORY = $_; last} if -d $_ && -w _;
}
}
$TMPDIRECTORY = $MAC ? "" : "." unless $TMPDIRECTORY;
}
####
#!/usr/bin/perl -w
# ^-- change as needed
use strict;
use CGI qw(header);
print CGI::header('text/plain'),CGITempFile->find_tempdir();
####
#!/usr/bin/perl -T
# ^-- change as needed
use strict;
BEGIN {
$ENV{'TMPDIR'}='/home/mralbert/cgitemp';
# ^-- change as needed
}
use CGI ...
####
order deny,allow
deny from all