--- /usr/sbin/spamd.orig 2009-06-23 23:54:09.422157997 +0200 +++ /usr/sbin/spamd.orig 2009-06-24 00:00:26.866158305 +0200 @@ -2152,13 +2152,33 @@ my $domain = ''; if ( $safename =~ /^(.*)\@(.*)$/ ) { $localpart = $1; $domain = $2; } - $dir =~ s/\%u/${safename}/g; - $dir =~ s/\%l/${localpart}/g; - $dir =~ s/\%d/${domain}/g; - $dir =~ s/\%\%/\%/g; + # Do userdir lookup exim-style. + # If a config for the full address exists, use that one + # else look for a domain default + if ($dir=~/%x/) { + ($userdir=$dir)=~s/%x/${safename}/g; + + $prefsfile=$userdir.'/user_prefs'; + if (-f $prefsfile) { + $dir = $userdir; - $userdir = $dir; - $prefsfile = $dir . '/user_prefs'; + } else { + $dir =~ s/%x/${domain}/g; + + $prefsfile = $dir.'/user_prefs'; + $userdir = $dir; + } + + # Use the normal escaping + } else { + $dir =~ s/\%u/${safename}/g; + $dir =~ s/\%l/${localpart}/g; + $dir =~ s/\%d/${domain}/g; + $dir =~ s/\%\%/\%/g; + + $userdir = $dir; + $prefsfile = $dir . '/user_prefs'; + } # Log that the default configuration is being used for a user. info("spamd: using default config for $username: $prefsfile");