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 AMaViS-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/amavis-user AMaViS-FAQ:http://www.amavis.org/amavis-faq.php3 AMaViS-HowTos:http://www.amavis.org/howto/