From 8817cf5116729e24e258f5c3319c60424bd23f99 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Fri, 24 Jan 2020 12:32:45 +0100 Subject: [PATCH 1/3] don't make me think --- src/securejoin.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/securejoin.rs b/src/securejoin.rs index 31a8f6685..ccf5b0555 100644 --- a/src/securejoin.rs +++ b/src/securejoin.rs @@ -635,7 +635,7 @@ pub(crate) fn handle_securejoin_handshake( let cond = { let bob = context.bob.read().unwrap(); let scan = bob.qr_scan.as_ref(); - scan.is_none() || join_vg && scan.unwrap().state != LotState::QrAskVerifyGroup + scan.is_none() || (join_vg && scan.unwrap().state != LotState::QrAskVerifyGroup) }; if cond { warn!( From c54e211147a51f7433534015e8e347b1b82719f5 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Fri, 24 Jan 2020 12:50:26 +0100 Subject: [PATCH 2/3] do not delete handshake messages maybe belonging to secure-joins on other devices --- src/securejoin.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/securejoin.rs b/src/securejoin.rs index ccf5b0555..bf3ab2c4b 100644 --- a/src/securejoin.rs +++ b/src/securejoin.rs @@ -626,8 +626,9 @@ pub(crate) fn handle_securejoin_handshake( let ret = if join_vg { HandshakeMessage::Propagate } else { - HandshakeMessage::Done + HandshakeMessage::Ignore }; + if context.bob.read().unwrap().expects != DC_VC_CONTACT_CONFIRM { info!(context, "Message belongs to a different handshake.",); return Ok(ret); @@ -713,7 +714,11 @@ pub(crate) fn handle_securejoin_handshake( } context.bob.write().unwrap().status = 1; context.stop_ongoing(); - Ok(ret) + Ok(if join_vg { + HandshakeMessage::Propagate + } else { + HandshakeMessage::Done + }) } "vg-member-added-received" => { /*========================================================== From d74b06f8bf37c19e6c7664300d3270d9b3822899 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Fri, 24 Jan 2020 21:22:12 +0100 Subject: [PATCH 3/3] target comment of @flub --- src/securejoin.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/securejoin.rs b/src/securejoin.rs index bf3ab2c4b..5e08ae35a 100644 --- a/src/securejoin.rs +++ b/src/securejoin.rs @@ -623,7 +623,7 @@ pub(crate) fn handle_securejoin_handshake( ==== Bob - the joiner's side ==== ==== Step 7 in "Setup verified contact" protocol ==== =======================================================*/ - let ret = if join_vg { + let abort_retval = if join_vg { HandshakeMessage::Propagate } else { HandshakeMessage::Ignore @@ -631,7 +631,7 @@ pub(crate) fn handle_securejoin_handshake( if context.bob.read().unwrap().expects != DC_VC_CONTACT_CONFIRM { info!(context, "Message belongs to a different handshake.",); - return Ok(ret); + return Ok(abort_retval); } let cond = { let bob = context.bob.read().unwrap(); @@ -643,7 +643,7 @@ pub(crate) fn handle_securejoin_handshake( context, "Message out of sync or belongs to a different handshake.", ); - return Ok(ret); + return Ok(abort_retval); } let scanned_fingerprint_of_alice = get_qr_attr!(context, fingerprint).to_string(); @@ -674,7 +674,7 @@ pub(crate) fn handle_securejoin_handshake( "Contact confirm message not encrypted.", ); context.bob.write().unwrap().status = 0; - return Ok(ret); + return Ok(abort_retval); } if mark_peer_as_verified(context, &scanned_fingerprint_of_alice).is_err() { @@ -683,7 +683,7 @@ pub(crate) fn handle_securejoin_handshake( contact_chat_id, "Fingerprint mismatch on joiner-side.", ); - return Ok(ret); + return Ok(abort_retval); } Contact::scaleup_origin_by_id(context, contact_id, Origin::SecurejoinJoined); emit_event!(context, Event::ContactsChanged(None)); @@ -697,7 +697,7 @@ pub(crate) fn handle_securejoin_handshake( .map_err(|_| HandshakeError::NoSelfAddr)? { info!(context, "Message belongs to a different handshake (scaled up contact anyway to allow creation of group)."); - return Ok(ret); + return Ok(abort_retval); } secure_connection_established(context, contact_chat_id); context.bob.write().unwrap().expects = 0;