You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2009/09/20 19:57:50 UTC

svn commit: r817067 - in /spamassassin/trunk: MANIFEST lib/Mail/SpamAssassin/DBBasedAddrList.pm lib/Mail/SpamAssassin/Locker/Flock.pm lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm lib/Mail/SpamAssassin/Plugin/AWL.pm t/db_awl_perms.t

Author: jm
Date: Sun Sep 20 17:57:49 2009
New Revision: 817067

URL: http://svn.apache.org/viewvc?rev=817067&view=rev
Log:
bug 6173: fix incorrect mode bits when creating lock files for AWL

Added:
    spamassassin/trunk/t/db_awl_perms.t   (with props)
Modified:
    spamassassin/trunk/MANIFEST
    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/MANIFEST
URL: http://svn.apache.org/viewvc/spamassassin/trunk/MANIFEST?rev=817067&r1=817066&r2=817067&view=diff
==============================================================================
--- spamassassin/trunk/MANIFEST (original)
+++ spamassassin/trunk/MANIFEST Sun Sep 20 17:57:49 2009
@@ -515,3 +515,4 @@
 t/whitelist_to.t
 t/zz_cleanup.t
 t/spamd_whitelist_leak.t
+t/db_awl_perms.t

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/DBBasedAddrList.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/DBBasedAddrList.pm?rev=817067&r1=817066&r2=817067&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/DBBasedAddrList.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/DBBasedAddrList.pm Sun Sep 20 17:57:49 2009
@@ -60,13 +60,15 @@
 	$main->{conf}->{auto_whitelist_db_modules}."\n";
   }
 
+  my $umask = umask ~ (oct($main->{conf}->{auto_whitelist_file_mode}));
+
   # 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;
@@ -80,10 +82,10 @@
     dbg("auto-whitelist: tie-ing to DB file of type $dbm_module $mod1 in $path");
 
     ($self->{is_locked} && $dbm_module eq 'DB_File') and
-            Mail::SpamAssassin::Util::avoid_db_file_locking_bug ($path);
+            Mail::SpamAssassin::Util::avoid_db_file_locking_bug($path);
 
     if (! tie %{ $self->{accum} }, $dbm_module, $path, $mod2,
-            oct($main->{conf}->{auto_whitelist_file_mode}) )
+            oct($main->{conf}->{auto_whitelist_file_mode}) & 0666)
     {
       my $err = $!;   # might get overwritten later
       if ($self->{is_locked}) {
@@ -93,6 +95,7 @@
       die "auto-whitelist: cannot open auto_whitelist_path $path: $err\n";
     }
   }
+  umask $umask;
 
   bless ($self, $class);
   return $self;

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Locker/Flock.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Locker/Flock.pm?rev=817067&r1=817066&r2=817067&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Locker/Flock.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Locker/Flock.pm Sun Sep 20 17:57:49 2009
@@ -53,8 +53,9 @@
   my @stat;
 
   $max_retries ||= 30;
-  $mode ||= 0600;
-  $mode = oct $mode;
+  $mode ||= "0700";
+  $mode = (oct $mode) & 0666;
+  dbg ("locker: mode is $mode");
 
   my $lock_file = "$path.mutex";
   my $umask = umask(~$mode);

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm?rev=817067&r1=817066&r2=817067&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Locker/UnixNFSSafe.pm Sun Sep 20 17:57:49 2009
@@ -62,8 +62,9 @@
   my @stat;
 
   $max_retries ||= 30;
-  $mode ||= 0600;
-  $mode = oct $mode if $mode =~ /^0/;   # accept number or string
+  $mode ||= "0700";
+  $mode = (oct $mode) & 0666;
+  dbg ("locker: mode is $mode");
 
   my $lock_file = "$path.lock";
   my $hname = Mail::SpamAssassin::Util::fq_hostname();

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm?rev=817067&r1=817066&r2=817067&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/AWL.pm Sun Sep 20 17:57:49 2009
@@ -253,7 +253,7 @@
 		type => $Mail::SpamAssassin::Conf::CONF_TYPE_STRING
 	       });
 
-=item auto_whitelist_file_mode		(default: 0600)
+=item auto_whitelist_file_mode		(default: 0700)
 
 The file mode bits used for the automatic-whitelist directory or file.
 
@@ -266,7 +266,7 @@
   push (@cmds, {
 		setting => 'auto_whitelist_file_mode',
 		is_admin => 1,
-		default => '0600',
+		default => '0700',
 		type => $Mail::SpamAssassin::Conf::CONF_TYPE_NUMERIC
 	       });
 

Added: spamassassin/trunk/t/db_awl_perms.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/db_awl_perms.t?rev=817067&view=auto
==============================================================================
--- spamassassin/trunk/t/db_awl_perms.t (added)
+++ spamassassin/trunk/t/db_awl_perms.t Sun Sep 20 17:57:49 2009
@@ -0,0 +1,34 @@
+#!/usr/bin/perl
+
+use lib '.'; use lib 't';
+use SATest; sa_t_init("db_awl_perms");
+use Test; BEGIN { plan tests => 4 };
+use IO::File;
+
+# ---------------------------------------------------------------------------
+# bug 6173
+
+tstprefs ("
+        $default_cf_lines
+        use_auto_whitelist 1
+        auto_whitelist_path ./log/user_state/awl
+        auto_whitelist_file_mode 0755
+        lock_method flock
+");
+
+unlink "log/user_state/awl";
+unlink "log/user_state/awl.mutex";
+umask 022;
+sarun("--debug --add-addr-to-whitelist whitelist_test\@example.org",
+      \&patterns_run_cb);
+
+system "ls -l log/user_state";          # for the logs
+
+my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size) = stat "log/user_state/awl";
+ok (($mode & 0777) == 0644);
+
+($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size) = stat "log/user_state/awl.mutex";
+ok (($mode & 0777) == 0644);
+
+ok unlink 'log/user_state/awl';
+ok unlink 'log/user_state/awl.mutex';

Propchange: spamassassin/trunk/t/db_awl_perms.t
------------------------------------------------------------------------------
    svn:executable = *