You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by fe...@apache.org on 2006/07/10 02:35:04 UTC
svn commit: r420382 - in /spamassassin/trunk/lib/Mail/SpamAssassin:
DBBasedAddrList.pm Locker/Flock.pm Locker/UnixNFSSafe.pm Plugin/AWL.pm
Author: felicity
Date: Sun Jul 9 17:35:04 2006
New Revision: 420382
URL: http://svn.apache.org/viewvc?rev=420382&view=rev
Log:
bug 4935: fix issue where auto-whitelist db lock file gets the wrong set of permissions
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/DBBasedAddrList.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Locker/Flock.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/DBBasedAddrList.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/DBBasedAddrList.pm?rev=420382&r1=420381&r2=420382&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/DBBasedAddrList.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/DBBasedAddrList.pm Sun Jul 9 17:35:04 2006
@@ -55,8 +55,6 @@
'locked_file' => ''
};
- my $path;
-
my @order = split (' ', $main->{conf}->{auto_whitelist_db_modules});
my $dbm_module = Mail::SpamAssassin::Util::first_available_module (@order);
if (!$dbm_module) {
@@ -64,43 +62,38 @@
$main->{conf}->{auto_whitelist_db_modules}."\n";
}
- my $umask = umask 0;
- if(defined($main->{conf}->{auto_whitelist_path})) # if undef then don't worry -- empty hash!
- {
- $path = $main->sed_path ($main->{conf}->{auto_whitelist_path});
+ # if undef then don't worry -- empty hash!
+ if (defined($main->{conf}->{auto_whitelist_path})) {
+ my $path = $main->sed_path($main->{conf}->{auto_whitelist_path});
+ my ($mod1, $mod2);
if ($main->{locker}->safe_lock
- ($path, 30, $main->{conf}->{auto_whitelist_file_mode}))
+ ($path, 30, $main->{conf}->{auto_whitelist_file_mode}))
{
$self->{locked_file} = $path;
- $self->{is_locked} = 1;
- dbg("auto-whitelist: tie-ing to DB file of type $dbm_module R/W in $path");
- tie %{$self->{accum}},$dbm_module,$path,
- O_RDWR|O_CREAT, #open rw w/lock
- (oct ($main->{conf}->{auto_whitelist_file_mode}) & 0666)
- or goto failed_to_tie;
-
- } else {
+ $self->{is_locked} = 1;
+ ($mod1, $mod2) = ('R/W', O_RDWR | O_CREAT);
+ }
+ else {
$self->{is_locked} = 0;
- dbg("auto-whitelist: tie-ing to DB file of type $dbm_module R/O in $path");
- tie %{$self->{accum}},$dbm_module,$path,
- O_RDONLY, #open ro w/o lock
- (oct ($main->{conf}->{auto_whitelist_file_mode}) & 0666)
- or goto failed_to_tie;
+ ($mod1, $mod2) = ('R/O', O_RDONLY);
}
+
+ dbg("auto-whitelist: tie-ing to DB file of type $dbm_module $mod1 in $path");
+
+ if (! tie %{ $self->{accum} }, $dbm_module, $path, $mod2,
+ oct($main->{conf}->{auto_whitelist_file_mode}) ) {
+ my $err = $!; # might get overwritten later
+ if ($self->{is_locked}) {
+ $self->{main}->{locker}->safe_unlock($self->{locked_file});
+ $self->{is_locked} = 0;
+ }
+ die "auto-whitelist: cannot open auto_whitelist_path $path: $err\n";
+ }
}
- umask $umask;
bless ($self, $class);
return $self;
-
-failed_to_tie:
- umask $umask;
- if ($self->{is_locked}) {
- $self->{main}->{locker}->safe_unlock ($self->{locked_file});
- $self->{is_locked} = 0;
- }
- die "auto-whitelist: cannot open auto_whitelist_path $path: $!\n";
}
###########################################################################
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Locker/Flock.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Locker/Flock.pm?rev=420382&r1=420381&r2=420382&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Locker/Flock.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Locker/Flock.pm Sun Jul 9 17:35:04 2006
@@ -51,13 +51,14 @@
my @stat;
$max_retries ||= 30;
- $mode ||= 0700;
+ $mode ||= 0600;
+ $mode = oct $mode if $mode =~ /^0/; # accept number or string
my $lock_file = "$path.mutex";
- my $umask = umask (oct($mode) ^ 0700);
+ my $umask = umask(~$mode);
my $fh = new IO::File();
- if (!$fh->open ("$lock_file", O_RDWR|O_CREAT)) {
+ if (!$fh->open ($lock_file, O_RDWR|O_CREAT)) {
umask $umask; # just in case
die "locker: safe_lock: cannot create lockfile $lock_file: $!\n";
}
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm?rev=420382&r1=420381&r2=420382&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm Sun Jul 9 17:35:04 2006
@@ -60,7 +60,8 @@
my @stat;
$max_retries ||= 30;
- $mode ||= 0700;
+ $mode ||= 0600;
+ $mode = oct $mode if $mode =~ /^0/; # accept number or string
my $lock_file = "$path.lock";
my $hname = Mail::SpamAssassin::Util::fq_hostname();
@@ -70,7 +71,7 @@
# keep this for unlocking
$self->{lock_tmp} = $lock_tmp;
- my $umask = umask (oct($mode) ^ 0700);
+ my $umask = umask(~$mode);
if (!open(LTMP, ">$lock_tmp")) {
umask $umask; # just in case
die "locker: safe_lock: cannot create tmp lockfile $lock_tmp for $lock_file: $!\n";
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm?rev=420382&r1=420381&r2=420382&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm Sun Jul 9 17:35:04 2006
@@ -235,7 +235,7 @@
type => $Mail::SpamAssassin::Conf::CONF_TYPE_STRING
});
-=item auto_whitelist_file_mode (default: 0700)
+=item auto_whitelist_file_mode (default: 0600)
The file mode bits used for the automatic-whitelist directory or file.
@@ -248,7 +248,7 @@
push (@cmds, {
setting => 'auto_whitelist_file_mode',
is_admin => 1,
- default => '0700',
+ default => '0600',
type => $Mail::SpamAssassin::Conf::CONF_TYPE_NUMERIC
});