aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Changelog7
-rw-r--r--lib/Net/IMAP/InterIMAP.pm6
2 files changed, 9 insertions, 4 deletions
diff --git a/Changelog b/Changelog
index 84a62b6..d429932 100644
--- a/Changelog
+++ b/Changelog
@@ -69,6 +69,13 @@ interimap (0.5) upstream;
the 'foreign_keys' PRAGMA during a transaction is a documented no-op).
- interimap: fix handling of mod-sequence values greater or equal than
2 << 63.
+ - libinterimap: use directories relative to $HOME for the XDG
+ environment variables default values. Previously getpwuid() was
+ called to determine the user's home directory, while the XDG
+ specification explicitely mentions $HOME. Conveniently our docs
+ always mentioned ~/, which on POSIX-compliant systems expands to the
+ value of the variable HOME. (Cf. Shell and Utilities volume of
+ POSIX.1-2017, sec. 2.6.1.)
-- Guilhem Moulin <guilhem@fripost.org> Fri, 10 May 2019 00:58:14 +0200
diff --git a/lib/Net/IMAP/InterIMAP.pm b/lib/Net/IMAP/InterIMAP.pm
index 19895c4..aacc8e7 100644
--- a/lib/Net/IMAP/InterIMAP.pm
+++ b/lib/Net/IMAP/InterIMAP.pm
@@ -92,11 +92,9 @@ sub xdg_basedir($$$$) {
return $path if $path =~ /\A\//;
my $basedir = $ENV{$xdg_variable};
- unless (defined $basedir) {
- my @getent = getpwuid($>);
- $basedir = $getent[7] ."/". $default;
- }
+ $basedir = ($ENV{HOME} // "") ."/". $default unless defined $basedir;
die "No such directory: ", $basedir unless -d $basedir;
+
$basedir .= "/".$subdir;
$basedir =~ /\A(\/\p{Print}+)\z/ or die "Insecure $basedir";
$basedir = $1;