static void client_auth_failed(struct imap_client *client)
{
+ client->common.auth_command_tag = NULL;
+
+ if (client->auth_initializing)
+ return;
+
/* get back to normal client input. */
if (client->io != NULL)
io_remove(&client->io);
client->io = io_add(client->common.fd, IO_READ,
client_input, client);
- client->common.auth_command_tag = NULL;
client_input(client);
}
client->common.auth_command_tag = client->cmd_tag;
client_ref(client);
+ client->auth_initializing = TRUE;
sasl_server_auth_begin(&client->common, IMAP_SERVICE_NAME, mech_name,
init_resp, sasl_callback);
+ client->auth_initializing = FALSE;
if (!client->common.authenticating)
return 1;
unsigned int destroyed:1;
unsigned int greeting_sent:1;
unsigned int id_logged:1;
+ unsigned int auth_initializing:1;
};
void client_destroy(struct imap_client *client, const char *reason);
base64_encode(plain_login->data, plain_login->used, base64);
client_ref(client);
+ client->auth_initializing = TRUE;
sasl_server_auth_begin(&client->common, POP3_SERVICE_NAME, "PLAIN",
str_c(base64), sasl_callback);
+ client->auth_initializing = FALSE;
if (!client->common.authenticating)
return TRUE;
unsigned int login_success:1;
unsigned int auth_connected:1;
+ unsigned int auth_initializing:1;
unsigned int destroyed:1;
};