unsigned int cmd_finished:1;
unsigned int proxy_sasl_ir:1;
unsigned int proxy_seen_banner:1;
+ unsigned int proxy_wait_auth_continue:1;
unsigned int skip_line:1;
unsigned int id_logged:1;
unsigned int client_ignores_capability_resp_code:1;
} else {
/* master user login without SASL initial response */
str_append(str, "L AUTHENTICATE PLAIN");
+ client->proxy_wait_auth_continue = TRUE;
}
str_append(str, "\r\n");
}
return 0;
} else if (*line == '+') {
/* AUTHENTICATE started. finish it. */
+ if (!imap_client->proxy_wait_auth_continue) {
+ client_log_err(client, t_strdup_printf(
+ "proxy: Unexpected input: %s",
+ str_sanitize(line, 160)));
+ client_proxy_failed(client, TRUE);
+ return -1;
+ }
+ imap_client->proxy_wait_auth_continue = FALSE;
+
str = t_str_new(128);
get_plain_auth(client, str);
str_append(str, "\r\n");
return 0;
} else {
/* tagged reply, shouldn't happen. */
+ client_log_err(client, t_strdup_printf(
+ "proxy: Unexpected input, ignoring: %s",
+ str_sanitize(line, 160)));
return 0;
}
}
imap_client->proxy_sasl_ir = FALSE;
imap_client->proxy_seen_banner = FALSE;
+ imap_client->proxy_wait_auth_continue = FALSE;
}