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