]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-imap-client: Ask CAPABILITY again after STARTTLS
authorTimo Sirainen <tss@iki.fi>
Fri, 31 May 2013 23:56:57 +0000 (02:56 +0300)
committerTimo Sirainen <tss@iki.fi>
Fri, 31 May 2013 23:56:57 +0000 (02:56 +0300)
src/lib-imap-client/imapc-connection.c

index 11331b16f9c3f58d77c640e4ab3d53f2c905a338..3229885b39f7deb3ed06b94a45321ad4ba61287e 100644 (file)
@@ -115,6 +115,8 @@ struct imapc_connection {
        unsigned int idle_plus_waiting:1;
 };
 
+static void imapc_connection_capability_cb(const struct imapc_command_reply *reply,
+                                          void *context);
 static int imapc_connection_output(struct imapc_connection *conn);
 static int imapc_connection_ssl_init(struct imapc_connection *conn);
 static void imapc_command_free(struct imapc_command *cmd);
@@ -752,6 +754,7 @@ imapc_connection_starttls_cb(const struct imapc_command_reply *reply,
                             void *context)
 {
        struct imapc_connection *conn = context;
+       struct imapc_command *cmd;
 
        if (reply->state != IMAPC_COMMAND_STATE_OK) {
                imapc_connection_input_error(conn, "STARTTLS failed: %s",
@@ -761,8 +764,13 @@ imapc_connection_starttls_cb(const struct imapc_command_reply *reply,
 
        if (imapc_connection_ssl_init(conn) < 0)
                imapc_connection_disconnect(conn);
-       else
-               imapc_connection_authenticate(conn);
+       else {
+               /* get updated capabilities */
+               cmd = imapc_connection_cmd(conn, imapc_connection_capability_cb,
+                                          conn);
+               imapc_command_set_flags(cmd, IMAPC_COMMAND_FLAG_PRELOGIN);
+               imapc_command_send(cmd, "CAPABILITY");
+       }
 }
 
 static void imapc_connection_starttls(struct imapc_connection *conn)