Timo Sirainen tss@iki.fi wrote:
Without modifications the only way to pass data is via the plugin { mail_filter } parameters, such as the %u expanding to username in the example.
I hacked an additional %variable (I used %q) into a copy of mail-user.c:mail_user_var_expand_table () (and called this modified version instead of the original, in the same place it is normally called), and moved my data collection around in imap/main.c:settings_var_expand() so that my info was available at the time mail_user->var_expand_table is populated.
This appears to be working thus far. If I iterate over that table, my custom variable is present and has a correct key, value, and long_key before client_create() is called.
But when I put %q into the mail_filter config like so:
mail_plugins = $mail_plugins mail_filter
plugin { mail_filter = mail-filter %q foo %u mail_filter_out = mail-filter-out %u }
... and restart Dovecot, I find that the filter script is only being passed 2 arguments, the constant "foo" in the above and the username. The %q does not appear to be getting replaced; it's just skipped over. It's not even passing an empty string in its place.
Am I modifying the correct var_expand_table here? Is there any step I've missed in making the new variable get substituted properly? lib/var-expand.c doesn't appear to require anything else, but I may have missed something...
Any help appreciated,
Charles