ManageSieve: authenticate "EXTERNAL" not behaving correctly
Marc Weustink
m.weustink at cuperus.nl
Wed Nov 1 16:17:18 EET 2017
Stephan Bosch wrote:
> Op 10/26/2017 om 1:32 PM schreef Marc Weustink:
>> Hi,
>>
>> I've enabled client certificate authentication for imap and
>> managesieve. When I use Thunderbird with the sieve plugin it tries to
>> login, but times out.
>>
>> Initially I reported this to the sieve plugin, but we came to the
>> conclusion that it managesieve is misbehaving.
>>
>> https://github.com/thsmi/sieve/issues/94
>>
>> Thunderbird (win10-64) 52.4.0 (32bit)
>> Sieve 0.2.3k
>> Dovecot (Ubuntu 16.04.3 LTS) 2.2.33.1-1 (sid)
>>
>>
>> What happens is the following (p=plugin sends m=managesieve sends)
>>
>> p:authenticate "EXTERNAL" ""
>> m:""
>>
>> The response is unexpected. According to RFC 5804 an empty
>> challenge/response is sent as an empty string. So I would expect:
>>
>> p:authenticate "EXTERNAL" ""
>> m:OK "Logged in."
>>
>>
>>
>> With the use of gnutls-cli I could reproduce (c=I send m=managesieve
>> sends)
>> gnutls-cli --starttls --x509keyfile marc_mail.key --x509certfile
>> marc_mail.crt -p sieve 172.17.1.4
>>
>> ...
>> m:OK "TLS negotiation successful."
>> c:authenticate "EXTERNAL" ""
>> m:""
>> c:""
>> m:OK "Logged in."
>>
>>
>> However if I try the "imap" syntax (rfc4959) I get logged in at once
>>
>> ...
>> m:OK "TLS negotiation successful."
>> c:authenticate "EXTERNAL" "="
>> m:OK "Logged in."
>>
>> Note that this is an imap only extention, "=" is an invalid base64
>> encoding.
>
> Will get back on this later.
>
> Regards,
>
> Stephan.
>
With the attached patch I could hac/workaround it
Marc
-------------- next part --------------
diff -U 5 dovecot-2.2.33.1/pigeonhole/src/managesieve-login/client-authenticate.c dovecot-2.2.33.1~mwe/pigeonhole/src/managesieve-login/client-authenticate.c
--- dovecot-2.2.33.1/pigeonhole/src/managesieve-login/client-authenticate.c 2017-11-01 15:06:28.000000000 +0100
+++ dovecot-2.2.33.1~mwe/pigeonhole/src/managesieve-login/client-authenticate.c 2017-11-01 14:55:43.869493098 +0100
@@ -306,12 +306,20 @@
return 1;
}
if ( ret == 0 ) return 0;
- init_response = ( client->auth_response == NULL ? NULL :
- t_strdup(str_c(client->auth_response)) );
+
+ if ( client->auth_response == NULL ) {
+ init_response = NULL;
+ } else if (( strncasecmp(client->auth_mech_name, "EXTERNAL", 8) == 0 ) && ( str_len( client->auth_response ) == 0 )) {
+ /* MWE: hack/workaround to pass empty response */
+ init_response = t_strdup("=");
+ } else {
+ init_response = t_strdup(str_c(client->auth_response));
+ }
+
msieve_client->auth_mech_name_parsed = FALSE;
if ( (ret=client_auth_begin
(client, t_strdup(client->auth_mech_name), init_response)) < 0 )
return ret;
More information about the dovecot
mailing list