Index: spamd/spamd.raw =================================================================== --- spamd/spamd.raw (Revision 667845) +++ spamd/spamd.raw (Arbeitskopie) @@ -2084,6 +2084,30 @@ if ($prefsfrom eq $suidto) { $userdir = $suiddir; # reuse the already-looked-up info + } elsif ( $opt{'vpopmail'} ) { + # + # If vpopmail config enabled then set $userdir to virtual homedir + # + my $vpopdir = $suiddir; # This should work with common vpopmail setups + $userdir = `$vpopdir/bin/vuserinfo -d \Q$username\E`; + if ($? != 0) { + # + # If vuserinfo failed $username could be an alias + # + $userdir = `$vpopdir/bin/valias \Q$username\E`; + if ($? == 0) { + if ($userdir =~ /.+ -> &(.+)/) { + # + # another alias - it could point to an alias again, but we'll try to resolve it only once + # + $userdir = `$vpopdir/bin/vuserinfo -d \Q$1\E`; + } + $userdir =~ s,.+ -> (/.+)/Maildir/,$1,; + } else { + undef($userdir); + } + } + chomp($userdir); } else { $userdir = (getpwnam($prefsfrom))[7]; } @@ -2108,25 +2132,6 @@ sub handle_user_set_user_prefs { my ($dir, $username) = @_; - # If vpopmail config enabled then set $dir to virtual homedir - # - if ( $opt{'vpopmail'} ) { - my $vpopdir = $dir; - $dir = `$vpopdir/bin/vuserinfo -d \Q$username\E`; - if ($? != 0) { - # - # If vuserinfo failed $username could be an alias - # - $dir = `$vpopdir/bin/valias \Q$username\E`; - if ($? == 0 && $dir !~ /.+ -> &/) { - $dir =~ s,.+ -> (/.+)/Maildir/,$1,; - } else { - undef($dir); - } - } - chomp($dir); - } - # don't do this if we weren't passed a directory if ($dir) { my $cf_file = $dir . "/.spamassassin/user_prefs";