oh wow - ignore my last message about sievec & environment. As the
output says, it's just a warning... it is not blocking the compilation
of the sieve script as I originally thought.
moving on:
The compiled script is now being used as a sieve_before entry. The LDA
is erroring on the result, something that I'll continue to
investigate. The "failed to open" message below isn't correct - a
trace shows the compiled .sieve being opened and read by the process;
but I get that there is an error in interpreting & using the compiled
script.
The extdata .dict file is not opened by the deliver process.
I'm going to continue investigating. some info below if anyone's
interested:
<script>
require ["vacation", "variables", "vnd.dovecot.extdata"];
vacation :subject "${extdata.vacation_subject}"
"${extdata.vacation_message}";
</script>
<compile script>
# /usr/local/bin/sievec -P sieve_extdata
/usr/local/etc/dovecot/sieve/before.sv
/usr/local/etc/dovecot/sieve/before.sieve
Warning: sieve: extdata: no dict uri specified, extension is
unconfigured (sieve_extdata_dict_uri is not set).
# echo $?
0
</compile script>
<logs>
2010-01-12T08:41:08.005962+00:00 node001 dovecot: auth(default):
ldap([email protected]): user search: base=o=services scope=subtree
filter=([email protected])
fields=homeDirectory,mailStoreDirectory,mailQuota
2010-01-12T08:41:08.006457+00:00 node001 dovecot: auth(default):
ldap([email protected]): result:
homeDirectory(home)=/services/vmail/home/1000000
mailQuota(quota_rule)=maildir:storage=5M
mailStoreDirectory(mail)=maildir:/services/vmail/mail/1000000/
2010-01-12T08:41:08.006477+00:00 node001 dovecot: auth(default): master
out:
user#0111#[email protected]#011home=/services/vmail/home/1000000#011quota_rule=maildir:storage=5M#011mail=maildir:/services/vmail/mail/1000000/
2010-01-12T08:41:08.012161+00:00 node001 dovecot:
deliver([email protected]): sieve: before: line 1: unexpected
character(s) starting with 0xbe
2010-01-12T08:41:08.012556+00:00 node001 dovecot:
deliver([email protected]): sieve: before: line 1: unexpected unknown
characters found at (the presumed) end of file
2010-01-12T08:41:08.012987+00:00 node001 dovecot:
deliver([email protected]): sieve: before: parse failed
2010-01-12T08:41:08.013380+00:00 node001 dovecot:
deliver([email protected]): sieve: failed to open script
/usr/local/etc/dovecot/sieve/before.sieve
2010-01-12T08:41:08.860595+00:00 node001 dovecot:
deliver([email protected]):
msgid=<[email protected]>: saved mail to INBOX
</logs>
<dovecot config>
plugin:
sieve_plugin_dir: /usr/local/lib/dovecot/sieve
sieve_plugins: sieve_extdata
sieve_extdata_dict_uri: file:/usr/local/etc/dovecot/extdata.dict
sieve_before: /usr/local/etc/dovecot/sieve/before.sieve
quota: maildir
sieve: ~/.dovecot.sieve
sieve_dir: ~/sieve
$ cat /usr/local/etc/dovecot/extdata.dict
priv/vacation_subject
I am the subject.
priv/vacation_message
I ame the message.
</config>
Cheers,
-Martin Foster
Le 12-Jan-10 16:25, Martin F. Foster a écrit :
I have the extdata plugin compiled, and am now trying to make a global
sieve script to test it. I'm running into problems when using sievec
to compile the script - I'm not getting the plugin's variables that
are provided in dovecot.conf's plugin {}. I added a few
sieve_sys_warning messages to track the calls to sieve_setting_get()
<output>
/usr/local/bin/sievec -d -P sieve_extdata
/usr/local/etc/dovecot/sieve/before.sv
Warning: sieve: sieve_setting_get: req: 'sieve_max_script_size' res:
'(null)'
Warning: sieve: sieve_setting_get: req: 'sieve_max_actions' res: '(null)'
Warning: sieve: sieve_setting_get: req: 'sieve_max_redirects' res:
'(null)'
Warning: sieve: sieve_setting_get: req: 'sieve_subaddress_sep' res:
'(null)'
Warning: sieve: sieve_setting_get: req: 'recipient_delimiter' res:
'(null)'
Warning: sieve: sieve_setting_get: req: 'sieve_plugin_dir' res: '(null)'
Warning: sieve: sieve_setting_get: req: 'sieve_plugins' res: '(null)'
Warning: sieve: sieve_setting_get: req: 'sieve_extdata_dict_uri' res:
'(null)'
Warning: sieve: extdata: no dict uri specified, extension is
unconfigured (sieve_extdata_dict_uri is not set).
* Required extensions:
0: vacation (9)
1: variables (17)
2: vnd.dovecot.extdata (29)
* Main program (block: 1):
00000000: EXTENSIONS [3]:
00000001: vacation
00000002: variables
00000003: SCOPE [0] (end: 00000008)
00000008: vnd.dovecot.extdata
00000009: VACATION
0000000a: (source line: 3)
0000000d: subject: VAR ${extdata.vacation_subject}
00000023: reason: VAR ${extdata.vacation_message}
00000038: handle: STR[77]
"${extdata.vacation_message}${extdata.vacation_subject}<default-from><NO-MIME>"
00000088: [End of code]
</output>
I'm new to dovecot's internals, it looks like it just needs some
environment variables provided, but I'm puzzled as to how this is to
be done.
I've traced it through sievec.c -> sieve_tool_sieve_env ->
sieve_tool_get_setting -> getenv() call.
More info:
1. I've traced the process, there's no attempt to open or stat any
dovecot.conf
2. using tip dovecot-1.2, dovecot-1.2-sieve,
pigeonhole-sieve-extdata. I pulled+updated & rebuilt and confirmed
the above behaviour just prior to sending this message.
3. The test scripts run because the test framework uses the
test_config mechanism to provide sieve_extdata_dict_uri.
Any hints on how to get the dovecot.conf data to sievec?
Thanks,
-Martin Foster