Daniel,
> I'm tuning up my $sql_select_policy in order to improve functionality
> of amavis on my mail server and I'm struggling with something which
> I'd imagine would be simple. I need to extend this query as follows:
>
> " ... OR alias.goto LIKE ('%RECIPIENT%')"
>
> where RECIPIENT is the individual recipient address for the message
> in question and the % signs are wrapping it in order to treat it as a
> needle in a haystack. I need the same recipient address which
> appears in the first set of single quotes when the %k macro is
> expanded in the typical policy lookup query (per the various README
> examples)...
Here below is a patch to 2.5.1 to provide a placeholder %a, which
is much like the %k, except that it only expands to the exact mail address,
the same as the first entry provided by the %k expansion.
It will enable you to do what you want, for example:
$sql_select_policy =
"SELECT *,users.id FROM users LEFT JOIN policy ON users.policy_id=policy.id".
" WHERE users.email IN (%k) OR alias.goto LIKE concat('%', %a, '%')".
" ORDER BY users.priority DESC";
although I'm not sure if this is really what you want: letting a
world-provided string be interpreted as a SQL pattern looks
like asking for trouble.
Anyway, there may be other legitimate uses of LIKE,
perhaps a: %a LIKE '[EMAIL PROTECTED]' , so her it is:
--- amavisd.orig Thu May 31 14:10:01 2007
+++ amavisd Mon Jun 18 16:07:31 2007
@@ -12088,6 +12088,9 @@
my(@extras_tmp) = !ref $extra_args ? () : @$extra_args;
local($1); my(@pos_args); my($sel_taint) = substr($sel,0,0); # taintedness
- $sel =~ s{ ( %k | \? ) } # substitute %k for keys and ? for each extra arg
- { push(@pos_args, $1 eq '%k' ? @$keys_ref : shift @extras_tmp),
+ $sel =~ s{ ( %k | %a | \? ) } # substitute %k for keys, %a for exact mail
+ # address, and ? for each extra arg
+ { push(@pos_args, $1 eq '%k' ? @$keys_ref
+ : $1 eq '%a' ? $keys_ref->[0] # same as first in %k
+ : shift @extras_tmp),
$1 eq '%k' ? join(',', ('?') x $n) : '?' }gxe;
$sel = untaint($sel) . $sel_taint; # keep original clause taintedness
Mark
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
AMaViS-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/amavis-user
AMaViS-FAQ:http://www.amavis.org/amavis-faq.php3
AMaViS-HowTos:http://www.amavis.org/howto/