melib/imap: send password as byte literal on LOGIN

Concerns #125

Escape IMAP passwords properly https://git.meli.delivery/meli/meli/issues/125
pull/144/head
Manos Pitsidianakis 2022-01-10 15:51:27 +02:00
parent ce2068d36b
commit d4b690d5d3
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
1 changed files with 6 additions and 7 deletions

View File

@ -376,23 +376,22 @@ impl ImapStream {
_ => { _ => {
ret.send_command( ret.send_command(
format!( format!(
r#"LOGIN "{}" "{}""#, r#"LOGIN "{}" {{{}}}"#,
&server_conf &server_conf
.server_username .server_username
.replace(r#"\"#, r#"\\"#) .replace(r#"\"#, r#"\\"#)
.replace('"', r#"\""#) .replace('"', r#"\""#)
.replace('{', r#"\{"#) .replace('{', r#"\{"#)
.replace('}', r#"\}"#), .replace('}', r#"\}"#),
&server_conf &server_conf.server_password.as_bytes().len()
.server_password
.replace(r#"\"#, r#"\\"#)
.replace('"', r#"\""#)
.replace('{', r#"\{"#)
.replace('}', r#"\}"#)
) )
.as_bytes(), .as_bytes(),
) )
.await?; .await?;
// wait for "+ Ready for literal data" reply
ret.wait_for_continuation_request().await?;
ret.send_literal(server_conf.server_password.as_bytes())
.await?;
} }
} }
let tag_start = format!("M{} ", (ret.cmd_id - 1)); let tag_start = format!("M{} ", (ret.cmd_id - 1));