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:33:22 UTC

svn commit: r420381 - in /spamassassin/branches/3.1/lib/Mail/SpamAssassin: DBBasedAddrList.pm Locker/Flock.pm Locker/UnixNFSSafe.pm Plugin/AWL.pm

Author: felicity
Date: Sun Jul  9 17:33:22 2006
New Revision: 420381

URL: http://svn.apache.org/viewvc?rev=420381&view=rev
Log:
bug 4935: fix issue where auto-whitelist db lock file gets the wrong set of permissions

Modified:
    spamassassin/branches/3.1/lib/Mail/SpamAssassin/DBBasedAddrList.pm
    spamassassin/branches/3.1/lib/Mail/SpamAssassin/Locker/Flock.pm
    spamassassin/branches/3.1/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm
    spamassassin/branches/3.1/lib/Mail/SpamAssassin/Plugin/AWL.pm

Modified: spamassassin/branches/3.1/lib/Mail/SpamAssassin/DBBasedAddrList.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.1/lib/Mail/SpamAssassin/DBBasedAddrList.pm?rev=420381&r1=420380&r2=420381&view=diff
==============================================================================
--- spamassassin/branches/3.1/lib/Mail/SpamAssassin/DBBasedAddrList.pm (original)
+++ spamassassin/branches/3.1/lib/Mail/SpamAssassin/DBBasedAddrList.pm Sun Jul  9 17:33:22 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/branches/3.1/lib/Mail/SpamAssassin/Locker/Flock.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.1/lib/Mail/SpamAssassin/Locker/Flock.pm?rev=420381&r1=420380&r2=420381&view=diff
==============================================================================
--- spamassassin/branches/3.1/lib/Mail/SpamAssassin/Locker/Flock.pm (original)
+++ spamassassin/branches/3.1/lib/Mail/SpamAssassin/Locker/Flock.pm Sun Jul  9 17:33:22 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/branches/3.1/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.1/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm?rev=420381&r1=420380&r2=420381&view=diff
==============================================================================
--- spamassassin/branches/3.1/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm (original)
+++ spamassassin/branches/3.1/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm Sun Jul  9 17:33:22 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/branches/3.1/lib/Mail/SpamAssassin/Plugin/AWL.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.1/lib/Mail/SpamAssassin/Plugin/AWL.pm?rev=420381&r1=420380&r2=420381&view=diff
==============================================================================
--- spamassassin/branches/3.1/lib/Mail/SpamAssassin/Plugin/AWL.pm (original)
+++ spamassassin/branches/3.1/lib/Mail/SpamAssassin/Plugin/AWL.pm Sun Jul  9 17:33:22 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
 	       });