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 2022/09/22 09:53:19 UTC

svn commit: r1904206 - in /spamassassin/trunk/lib/Mail: SpamAssassin.pm SpamAssassin/Util.pm

Author: sidney
Date: Thu Sep 22 09:53:19 2022
New Revision: 1904206

URL: http://svn.apache.org/viewvc?rev=1904206&view=rev
Log:
Bug 8050 - Fix global_state_dir on Windows

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin.pm?rev=1904206&r1=1904205&r2=1904206&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin.pm Thu Sep 22 09:53:19 2022
@@ -1969,29 +1969,29 @@ sub get_and_create_userstate_dir {
 # used by dns_block_rule state files etc
 sub set_global_state_dir {
   my ($self) = @_;
-
-  my $prev = '';
-  if ($self->{home_dir_for_helpers}) {
-    my $dir = File::Spec->catdir($self->{home_dir_for_helpers}, ".spamassassin");
-    $self->test_global_state_dir($dir);
-    $prev = $dir;
-  }
-  if (!$self->{global_state_dir}) {
-    my $home = (Mail::SpamAssassin::Util::portable_getpwuid ($>))[7];
-    # home_dir_for_helpers default == home, skip if checked already..
-    if ($home && $home ne $prev) {
-      my $dir = File::Spec->catdir($home, ".spamassassin");
-      $self->test_global_state_dir($dir);
-    }
+  # try home_dir_for_helpers
+  my $helper_dir = $self->{home_dir_for_helpers} || '';
+  if ($helper_dir) {
+    my $dir = File::Spec->catdir($helper_dir, ".spamassassin");
+    return if $self->test_global_state_dir($dir);
   }
-  if (!$self->{global_state_dir}) {
-    $self->test_global_state_dir($self->{LOCAL_STATE_DIR});
+  # try user home (if different from helper home)
+  my $home;
+  if (am_running_on_windows()) {
+    # Windows has a special folder for common appdata (Bug 8050)
+    $home = Mail::SpamAssassin::Util::common_application_data_directory();
+  } else {
+    $home = (Mail::SpamAssassin::Util::portable_getpwuid ($>))[7];
   }
-  if (!$self->{global_state_dir}) {
-    # fallback to userstate
-    $self->{global_state_dir} = $self->get_and_create_userstate_dir();
-    dbg("config: global_state_dir falled back to userstate_dir");
+  if ($home && $home ne $helper_dir) {
+    my $dir = File::Spec->catdir($home, ".spamassassin");
+    return if $self->test_global_state_dir($dir);
   }
+  # try LOCAL_STATE_DIR
+  return if $self->test_global_state_dir($self->{LOCAL_STATE_DIR});
+  # fallback to userstate
+  $self->{global_state_dir} = $self->get_and_create_userstate_dir();
+  dbg("config: global_state_dir set to userstate_dir: $self->{global_state_dir}");
 }
 
 sub test_global_state_dir {

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm?rev=1904206&r1=1904205&r2=1904206&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Util.pm Thu Sep 22 09:53:19 2022
@@ -85,6 +85,7 @@ use constant RUNNING_ON_WINDOWS => ($^O
 # These are only defined as stubs on Windows (see bugs 6798 and 6470).
 BEGIN {
   if (RUNNING_ON_WINDOWS) {
+    require Win32;
     no warnings 'redefine';
 
     # See the section on $? at
@@ -1068,6 +1069,13 @@ sub _fake_getpwuid {
 }
 
 ###########################################################################
+# Get a platform specific directory for application data
+# Just used for Windows for now
+sub common_application_data_directory {
+  return Win32::GetFolderPath(Win32::CSIDL_COMMON_APPDATA()) if (RUNNING_ON_WINDOWS);
+}
+
+###########################################################################
 
 # Given a string, extract an IPv4 address from it.  Required, since
 # we currently have no way to portably unmarshal an IPv4 address from