You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by si...@apache.org on 2015/10/13 21:11:23 UTC
svn commit: r1708487 - /spamassassin/branches/3.4/spamd/spamd.raw
Author: sidney
Date: Tue Oct 13 19:11:23 2015
New Revision: 1708487
URL: http://svn.apache.org/viewvc?rev=1708487&view=rev
Log:
bug 7251: merge from trunk - temp dir creation all using Util::secure_tmpdir() instead of duplicating code and possibly introducing bugs
Modified:
spamassassin/branches/3.4/spamd/spamd.raw
Modified: spamassassin/branches/3.4/spamd/spamd.raw
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.4/spamd/spamd.raw?rev=1708487&r1=1708486&r2=1708487&view=diff
==============================================================================
--- spamassassin/branches/3.4/spamd/spamd.raw (original)
+++ spamassassin/branches/3.4/spamd/spamd.raw Tue Oct 13 19:11:23 2015
@@ -245,7 +245,7 @@ use Mail::SpamAssassin::NetSet;
use Mail::SpamAssassin::SubProcBackChannel;
use Mail::SpamAssassin::SpamdForkScaling qw(:pfstates);
use Mail::SpamAssassin::Logger qw(:DEFAULT log_message);
-use Mail::SpamAssassin::Util qw(untaint_var untaint_file_path
+use Mail::SpamAssassin::Util qw(untaint_var untaint_file_path secure_tmpdir
exit_status_str am_running_on_windows);
use Mail::SpamAssassin::Timeout;
@@ -3033,33 +3033,27 @@ sub ip_is_allowed {
sub preload_modules_with_tmp_homedir {
- # set $ENV{HOME} in /tmp while we compile and preload everything.
- # File::Spec->tmpdir uses TMPDIR, TMP, TEMP, C:/temp, /tmp etc.
- my $tmpdir = File::Spec->tmpdir();
- if ( !$tmpdir ) {
- die "spamd: cannot find writable tmp dir, set TMP or TMPDIR in environment";
- }
+ # set $ENV{HOME} in a temp directory while we compile and preload everything.
+ my $tmphome = secure_tmpdir();
- # If TMPDIR isn't set, File::Spec->tmpdir() will set it to undefined.
+ # If TMPDIR isn't set, File::Spec->tmpdir() called by secure_tmpdir() may set it to undefined.
# that then breaks other things ...
+ # If this is really necessary shouldn't secure_tmpdir() be doing it?
delete $ENV{'TMPDIR'} if ( !defined $ENV{'TMPDIR'} );
- my $tmphome = File::Spec->catdir( $tmpdir, "spamd-$$-init" );
- $tmphome = untaint_file_path($tmphome);
-
my $tmpsadir = File::Spec->catdir( $tmphome, ".spamassassin" );
dbg("spamd: Preloading modules with HOME=$tmphome");
- # bug 5379: spamd won't start if the temp preloading dir exists;
- # be sure to remove it just in case
+ if (!-d $tmphome) {
+ die "spamd: cannot create temp directory $tmphome: $!";
+ }
+
+ # bug 5379: spamd won't start if the temp preloading dir exists; check if exists and remove it
+ # This check should be unnecessary now that $tmphome created using File::Temp, but leave it just in case
if (-d $tmpsadir) {
rmdir( $tmpsadir ) or die "spamd: $tmpsadir not empty: $!";
}
- if (-d $tmphome) {
- rmdir( $tmphome ) or die "spamd: $tmphome not empty: $!";
- }
- mkdir( $tmphome, 0700 ) or die "spamd: cannot create $tmphome: $!";
mkdir( $tmpsadir, 0700 ) or die "spamd: cannot create $tmpsadir: $!";
$ENV{HOME} = $tmphome;