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/02 15:00:47 UTC
svn commit: r918042 - /spamassassin/branches/3.3/spamd/spamd.raw
Author: mmartinec
Date: Tue Mar 2 14:00:47 2010
New Revision: 918042
URL: http://svn.apache.org/viewvc?rev=918042&view=rev
Log:
Bug 6340: Impossible to find user home directory of VPOPMAIL alias
Modified:
spamassassin/branches/3.3/spamd/spamd.raw
Modified: spamassassin/branches/3.3/spamd/spamd.raw
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.3/spamd/spamd.raw?rev=918042&r1=918041&r2=918042&view=diff
==============================================================================
--- spamassassin/branches/3.3/spamd/spamd.raw (original)
+++ spamassassin/branches/3.3/spamd/spamd.raw Tue Mar 2 14:00:47 2010
@@ -2158,21 +2158,36 @@
$vptimer->run(sub {
my $vpopusername = $username;
- local $1;
- do {
- my $vpopusername_tainted = `$vpopdir/bin/valias \Q$vpopusername\E`;
+ my @aliases = split(/\n/, `$vpopdir/bin/valias \Q$vpopusername\E`);
+ while (@aliases) {
+ my $vpopusername_tainted = shift(@aliases);
+ local $1;
if ($vpopusername_tainted =~ /.+ -> &?(.+)/) {
$vpopusername = untaint_var($1);
- } else {
- die "failed to resolve vpopmail user/alias '$username' using vuserinfo/valias";
+ if ($vpopusername =~ s{(/.+)/Maildir/}{$1}) {
+ # this is the path to a real mailbox
+ $userdir = $vpopusername;
+ } elsif ($vpopusername =~ /\@/) {
+ # this is a forward to another e-mail address
+ $vpopusername =~ s{.+ -> (.+)}{$1};
+ $vpopusername_tainted = `$vpopdir/bin/vuserinfo -d \Q$vpopusername\E`;
+ if ($? == 0 && $vpopusername_tainted ne '') {
+ $userdir = untaint_var($vpopusername_tainted);
+ } else {
+ unshift(@aliases,
+ split(/\n/, `$vpopdir/bin/valias \Q$vpopusername\E`));
+ }
+ }
+ last if defined $userdir;
}
- } until (($userdir = `$vpopdir/bin/vuserinfo -d \Q$vpopusername\E`) && $? == 0);
- $userdir =~ s{.+ -> (/.+)/Maildir/}{$1};
+ }
});
if ($vptimer->timed_out()) {
+ dbg("spamd: timed out resolving vpopmail user/alias '%s'", $username);
undef $userdir;
- die "failed to resolve vpopmail user/alias '$username' in time ($vpoptimeout seconds)";
+ } elsif (!defined($userdir)) {
+ dbg("spamd: failed to resolve vpopmail user/alias '%s'", $username);
} else {
chomp($userdir);
}