You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by mm...@apache.org on 2010/03/11 15:28:00 UTC

svn commit: r921869 - in /spamassassin/trunk: lib/Mail/SpamAssassin.pm lib/Mail/SpamAssassin/BayesStore/DBM.pm lib/Mail/SpamAssassin/Dns.pm lib/Mail/SpamAssassin/Util.pm spamd/spamd.raw

Author: mmartinec
Date: Thu Mar 11 14:28:00 2010
New Revision: 921869

URL: http://svn.apache.org/viewvc?rev=921869&view=rev
Log:
Bug 6373: avoid user checks for win32;
plus: import a sub am_running_on_windows() where it is
more heavily used, reducing the clutter in calls

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/BayesStore/DBM.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm
    spamassassin/trunk/spamd/spamd.raw

Modified: spamassassin/trunk/lib/Mail/SpamAssassin.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin.pm?rev=921869&r1=921868&r2=921869&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin.pm Thu Mar 11 14:28:00 2010
@@ -75,7 +75,7 @@ use Mail::SpamAssassin::PerMsgStatus;
 use Mail::SpamAssassin::Message;
 use Mail::SpamAssassin::PluginHandler;
 use Mail::SpamAssassin::DnsResolver;
-use Mail::SpamAssassin::Util qw(untaint_var);
+use Mail::SpamAssassin::Util qw(untaint_var am_running_on_windows);
 use Mail::SpamAssassin::Util::ScopedTimer;
 
 use Errno qw(ENOENT EACCES);
@@ -423,7 +423,7 @@ sub create_locker {
   elsif ($m eq 'nfssafe') { $class = 'UnixNFSSafe'; }
   else {
     # OS-specific defaults
-    if (Mail::SpamAssassin::Util::am_running_on_windows()) {
+    if (am_running_on_windows()) {
       $class = 'Win32';
     } else {
       $class = 'UnixNFSSafe';
@@ -1955,7 +1955,7 @@ sub expand_name ($) {
   my ($self, $name) = @_;
   my $home = $self->{user_dir} || $ENV{HOME} || '';
 
-  if (Mail::SpamAssassin::Util::am_running_on_windows()) {
+  if (am_running_on_windows()) {
     my $userprofile = $ENV{USERPROFILE} || '';
 
     return $userprofile if ($userprofile && $userprofile =~ m/^[a-z]\:[\/\\]/oi);

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/BayesStore/DBM.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/BayesStore/DBM.pm?rev=921869&r1=921868&r2=921869&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/BayesStore/DBM.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/BayesStore/DBM.pm Thu Mar 11 14:28:00 2010
@@ -34,7 +34,7 @@ BEGIN {
 }
 
 use Mail::SpamAssassin;
-use Mail::SpamAssassin::Util qw(untaint_var);
+use Mail::SpamAssassin::Util qw(untaint_var am_running_on_windows);
 use Mail::SpamAssassin::BayesStore;
 use Mail::SpamAssassin::Logger;
 
@@ -458,7 +458,7 @@ sub _upgrade_db {
     # it to be interrupted.
     local $SIG{'INT'} = 'IGNORE';
     local $SIG{'TERM'} = 'IGNORE';
-    local $SIG{'HUP'} = 'IGNORE' if (!Mail::SpamAssassin::Util::am_running_on_windows());
+    local $SIG{'HUP'} = 'IGNORE' if !am_running_on_windows();
 
     # older versions used scancount, so kill the stupid little file ...
     my $msgc = $path.'_msgcount';
@@ -553,7 +553,7 @@ sub _upgrade_db {
     # it to be interrupted.
     local $SIG{'INT'} = 'IGNORE';
     local $SIG{'TERM'} = 'IGNORE';
-    local $SIG{'HUP'} = 'IGNORE' if (!Mail::SpamAssassin::Util::am_running_on_windows());
+    local $SIG{'HUP'} = 'IGNORE' if !am_running_on_windows();
 
     # now rename in the new one.  Try several extensions
     for my $ext ($self->DB_EXTENSIONS) {
@@ -766,7 +766,7 @@ sub token_expiration {
     {
       local $SIG{'INT'} = 'IGNORE';
       local $SIG{'TERM'} = 'IGNORE';
-      local $SIG{'HUP'} = 'IGNORE' if (!Mail::SpamAssassin::Util::am_running_on_windows());
+      local $SIG{'HUP'} = 'IGNORE' if !am_running_on_windows();
 
       # now rename in the new one.  Try several extensions
       for my $ext ($self->DB_EXTENSIONS) {
@@ -1258,7 +1258,7 @@ sub _sync_journal_trapped {
   {
     local $SIG{'INT'} = 'IGNORE';
     local $SIG{'TERM'} = 'IGNORE';
-    local $SIG{'HUP'} = 'IGNORE' if (!Mail::SpamAssassin::Util::am_running_on_windows());
+    local $SIG{'HUP'} = 'IGNORE' if !am_running_on_windows();
 
     # retire the journal, so we can update the db files from it in peace.
     # TODO: use locking here
@@ -1828,7 +1828,7 @@ sub restore_database {
 
   local $SIG{'INT'} = 'IGNORE';
   local $SIG{'TERM'} = 'IGNORE';
-  local $SIG{'HUP'} = 'IGNORE' if (!Mail::SpamAssassin::Util::am_running_on_windows());
+  local $SIG{'HUP'} = 'IGNORE' if !am_running_on_windows();
 
   untie %new_toks;
   untie %new_seen;

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm?rev=921869&r1=921868&r2=921869&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Dns.pm Thu Mar 11 14:28:00 2010
@@ -29,7 +29,7 @@ use Mail::SpamAssassin::Conf;
 use Mail::SpamAssassin::PerMsgStatus;
 use Mail::SpamAssassin::AsyncLoop;
 use Mail::SpamAssassin::Constants qw(:ip);
-use Mail::SpamAssassin::Util qw(untaint_var);
+use Mail::SpamAssassin::Util qw(untaint_var am_running_on_windows);
 
 use File::Spec;
 use IO::Socket;
@@ -635,7 +635,7 @@ sub is_dns_available {
 
   # Check version numbers - runtime check only
   if (defined $Net::DNS::VERSION) {
-    if (Mail::SpamAssassin::Util::am_running_on_windows()) {
+    if (am_running_on_windows()) {
       if ($Net::DNS::VERSION < 0.46) {
 	warn("dns: Net::DNS version is $Net::DNS::VERSION, but need 0.46 for Win32");
 	return $IS_DNS_AVAILABLE;

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm?rev=921869&r1=921868&r2=921869&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm Thu Mar 11 14:28:00 2010
@@ -58,7 +58,7 @@ BEGIN {
   @ISA = qw(Exporter);
   @EXPORT = ();
   @EXPORT_OK = qw(&local_tz &base64_decode &untaint_var &untaint_file_path
-                  &exit_status_str &proc_status_ok);
+                  &exit_status_str &proc_status_ok &am_running_on_windows);
 }
 
 use Mail::SpamAssassin;
@@ -1555,7 +1555,7 @@ sub helper_app_pipe_open_unix {
 
 sub trap_sigalrm_fully {
   my ($handler) = @_;
-  if ($] < 5.008 || Mail::SpamAssassin::Util::am_running_on_windows()) {
+  if ($] < 5.008 || am_running_on_windows()) {
     # signals are always unsafe on perl older than 5.008, just use %SIG
     # Bug 6359, no POSIX::SIGALRM on Windows, just use %SIG
     $SIG{ALRM} = $handler;

Modified: spamassassin/trunk/spamd/spamd.raw
URL: http://svn.apache.org/viewvc/spamassassin/trunk/spamd/spamd.raw?rev=921869&r1=921868&r2=921869&view=diff
==============================================================================
--- spamassassin/trunk/spamd/spamd.raw (original)
+++ spamassassin/trunk/spamd/spamd.raw Thu Mar 11 14:28:00 2010
@@ -89,7 +89,8 @@ 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 exit_status_str);
+use Mail::SpamAssassin::Util qw(untaint_var exit_status_str
+                                am_running_on_windows);
 use Mail::SpamAssassin::Timeout;
 
 use Getopt::Long;
@@ -445,8 +446,7 @@ my $log_facility = $opt{'syslog'} || 'ma
 my $log_socket = lc($opt{'syslog-socket'});
 
 if (!defined $log_socket || $log_socket eq '') {
-  $log_socket =
-    Mail::SpamAssassin::Util::am_running_on_windows() ? 'none' : 'unix';
+  $log_socket = am_running_on_windows() ? 'none' : 'unix';
 }
 
 # This is the default log file; it can be changed on the command line
@@ -1354,16 +1354,17 @@ sub handle_setuid_to_user {
   if ($spamtest->{paranoid}) {
     die("spamd: in paranoid mode, still running as root: closing connection");
   }
-  warn("spamd: still running as root: user not specified with -u, "
-       . "not found, or set to root, falling back to nobody\n");
+  if (!am_running_on_windows()) {
+    warn("spamd: still running as root: user not specified with -u, "
+         . "not found, or set to root, falling back to nobody\n");
 
-  my ($name, $pwd, $uid, $gid, $quota, $comment, $gcos, $dir, $etc) =
-      getpwnam('nobody');
+    my ($name, $pwd, $uid, $gid, $quota, $comment, $gcos, $dir, $etc) =
+        getpwnam('nobody');
   
-  $) = "$gid $gid";                   # eGID
-  $> = $uid;                          # eUID
-  if (!defined($uid) || ($> != $uid and $> != ($uid - 2**32))) {
-    die("spamd: setuid to nobody failed");
+    $) = "$gid $gid";                   # eGID
+    $> = $uid;                          # eUID
+    if (!defined($uid) || ($> != $uid and $> != ($uid - 2**32))) {
+      die("spamd: setuid to nobody failed");
   }
 
   $spamtest->signal_user_changed(
@@ -1372,6 +1373,7 @@ sub handle_setuid_to_user {
       user_dir => $dir
     }
   );
+  }
 }
 
 sub parse_body {
@@ -1500,7 +1502,9 @@ sub check {
   }
 
   return 0 unless do_user_handling();
-  if ($> == 0) { die "spamd: still running as root! dying"; }
+  if ($> == 0 && !am_running_on_windows()) {
+	die "spamd: still running as root! dying";
+  }
 
   my $resp = "EX_OK";
 
@@ -1696,7 +1700,9 @@ sub dotell {
   my $compress_zlib = $hdrs->{compress_zlib};
 
   return 0 unless do_user_handling();
-  if ($> == 0) { die "spamd: still running as root! dying"; }
+  if ($> == 0 && !am_running_on_windows()) {
+	die "spamd: still running as root! dying";
+  }
 
   if (!$opt{tell}) {
     service_unavailable_error("TELL commands are not enabled, set the --allow-tell switch.");
@@ -2097,7 +2103,7 @@ sub handle_user_setuid_basic {
     $suidto = $opt{'username'};
   }
   my ($name, $pwd, $uid, $gid, $quota, $comment, $gcos, $suiddir, $etc) =
-      getpwnam($suidto);
+      am_running_on_windows() ? ('nobody') : getpwnam($suidto);
 
   if (!defined $uid) {
       my $errmsg = "spamd: handle_user unable to find user: '$suidto'\n";