imapsieve environment variables missing?

Stephan Bosch stephan at rename-it.nl
Mon Dec 5 21:42:33 UTC 2016


Op 12/5/2016 om 10:25 PM schreef MRob:
> On 2016-12-05 07:22, Stephan Bosch wrote:
>> Op 5-12-2016 om 16:10 schreef MRob:
>>> On 2016-12-05 06:13, Stephan Bosch wrote:
>>>> Op 5-12-2016 om 14:32 schreef MRob:
>>>>
>>>> Could you show me your full script? I am mainly interested in the
>>>> require statements involved.
>>>
>>> I don't know how I managed to compile only using direct access of
>>> ${imap.user} before since now I get an unknown namespace error on my
>>> test script.
>>>
>>> But doing it this way compiles:
>>>
>>> require ["environment", "variables", "vnd.dovecot.debug"];
>>>
>>> if environment :matches "imap.user" "*" {
>>>   set "u" "${1}"; }
>>> debug_log "Found username: \${u}";
>>> if environment :matches "name" "*" {
>>>   set "n" "${1}"; }
>>> debug_log "Found product name: \${n}";
>>>
>>> The output is:
>>>
>>> DEBUG: Found username:
>>> DEBUG: Found product name: Pigeonhole Sieve
>>
>> - For the "imap.user" environment item, you need to add:
>>
>> require "imapsieve";
>
> Hmm, I had tried that and get this:
>
> error: require command: unknown Sieve capability `imapsieve'
>
> I've already got imapsieve working (per above output, which was
> triggered by a COPY action) so it clearly is installed and configured.
>
>> This also means that this script will only run from IMAP.
>
> Seems as though it won't compile outside of IMAP either :)

Not if you're not using the sieve_imapsieve plugin for the Sieve
interpreter (sieve_plugins = sieve_imapsieve).

> - For the "${imap.user}" variable, you need to add:
>>
>> require "vnd.dovecot.environment";
>>
>> This implicitly requires "environment", so that could be removed.
>>
>> It is all in the specifications. :)
>
> You're saying that to access the new imap. namespace vars for
> imapsieve that vnd.dovecot.environment is required? I don't find
> anything in the specifications that say this.
>
> The RFC says those vars MUST be made available, so presumably it would
> be referring to the RFC-standard environment extension and not some
> vendor specific one.
>
> Of course it's easy to work with that if this is how it's been built,
> but as noted above I can't get it to compile anyway. Though what's the
> point of trying to figure out imap.user or imap.email if I'm required
> to use vnd.dovecot.environment which already has "username"? :)

The standard "environment" extension [1] does not register a variables
namespace [2] for environment items. So, using a "${env.imap.user}"
variable requires the Dovecot-specific "vnd.dovecot.environment"
extension [3]. In contrast, the normal alternative for this variable
using the "imap.user" environment item will work once the "imapsieve"
extension [4] is require'd. That is a bit cumbersome though, since you
need to put that in a variable with a statement like: if environment
:matches "imap.user" "*" { set "imap_user" "${1}"; }. The standard [1]
provides no alternative.

Relevant specifications:

[1] http://tools.ietf.org/html/rfc5183/
[2] http://tools.ietf.org/html/rfc5229/
[3]
https://raw.githubusercontent.com/dovecot/pigeonhole/master/doc/rfc/spec-bosch-sieve-dovecot-environment.txt
[4] https://tools.ietf.org/html/rfc6785

Regards,

Stephan.





More information about the dovecot mailing list