diff --git a/src/otr/otr.c b/src/otr/otr.c index 348b7620..e246748b 100644 --- a/src/otr/otr.c +++ b/src/otr/otr.c @@ -407,6 +407,7 @@ _otr_smp_secret(const char * const recipient, const char *secret) // if recipient initiated SMP, send response, else initialise if (g_hash_table_contains(smp_initiators, recipient)) { otrl_message_respond_smp(user_state, &ops, NULL, context, (const unsigned char*)secret, strlen(secret)); + g_hash_table_remove(smp_initiators, context->username); } else { otrl_message_initiate_smp(user_state, &ops, NULL, context, (const unsigned char*)secret, strlen(secret)); } diff --git a/src/otr/otrlibv3.c b/src/otr/otrlibv3.c index a2e31b1c..ce5a2f95 100644 --- a/src/otr/otrlibv3.c +++ b/src/otr/otrlibv3.c @@ -24,6 +24,8 @@ #include #include "ui/ui.h" +#include "otr/otr.h" +#include "otr/otrlib.h" OtrlPolicy otrlib_policy(void) @@ -116,7 +118,6 @@ otrlib_handle_tlvs(OtrlUserState user_state, OtrlMessageAppOps *ops, ConnContext if (nextMsg != OTRL_SMP_EXPECT1) { otrl_message_abort_smp(user_state, ops, NULL, context); } else { - // [get secret from user and continue SMP]; ui_smp_recipient_initiated(context->username); g_hash_table_insert(smp_initiators, strdup(context->username), strdup(context->username)); } @@ -126,7 +127,6 @@ otrlib_handle_tlvs(OtrlUserState user_state, OtrlMessageAppOps *ops, ConnContext if (nextMsg != OTRL_SMP_EXPECT2) { otrl_message_abort_smp(user_state, ops, NULL, context); } else { - // If we received TLV2, we will send TLV3 and expect TLV4 context->smstate->nextExpected = OTRL_SMP_EXPECT4; } } @@ -135,14 +135,14 @@ otrlib_handle_tlvs(OtrlUserState user_state, OtrlMessageAppOps *ops, ConnContext if (nextMsg != OTRL_SMP_EXPECT3) { otrl_message_abort_smp(user_state, ops, NULL, context); } else { - // If we received TLV3, we will send TLV4 - // We will not expect more messages, so prepare for next SMP context->smstate->nextExpected = OTRL_SMP_EXPECT1; - // Report result to user if ((context->active_fingerprint->trust != NULL) && (context->active_fingerprint->trust[0] != '\0')) { - ui_smp_successful_sender(context->username); + ui_trust(context->username); + otr_trust(context->username); } else { ui_smp_unsuccessful_sender(context->username); + ui_untrust(context->username); + otr_untrust(context->username); } } } @@ -151,21 +151,22 @@ otrlib_handle_tlvs(OtrlUserState user_state, OtrlMessageAppOps *ops, ConnContext if (nextMsg != OTRL_SMP_EXPECT4) { otrl_message_abort_smp(user_state, ops, NULL, context); } else { - // We will not expect more messages, so prepare for next SMP context->smstate->nextExpected = OTRL_SMP_EXPECT1; - // Report result to user if ((context->active_fingerprint->trust != NULL) && (context->active_fingerprint->trust[0] != '\0')) { - ui_smp_successful_receiver(context->username); + ui_trust(context->username); + otr_trust(context->username); } else { ui_smp_unsuccessful_receiver(context->username); + ui_untrust(context->username); + otr_untrust(context->username); } } } tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP_ABORT); if (tlv) { - // The message we are waiting for will not arrive, so reset - // and prepare for the next SMP context->smstate->nextExpected = OTRL_SMP_EXPECT1; ui_smp_aborted(context->username); + ui_untrust(context->username); + otr_untrust(context->username); } } \ No newline at end of file diff --git a/src/ui/core.c b/src/ui/core.c index e59b2fda..5c7343e9 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -791,19 +791,7 @@ _ui_smp_recipient_initiated(const char * const recipient) if (window == NULL) { return; } else { - win_vprint_line(window, '!', 0, "%s initiated SMP with secret, use '/otr secret ' to start a trusted session.", recipient); - win_update_virtual(window); - } -} - -static void -_ui_smp_successful_sender(const char * const recipient) -{ - ProfWin *window = wins_get_by_recipient(recipient); - if (window == NULL) { - return; - } else { - win_vprint_line(window, '!', 0, "SMP session started."); + win_vprint_line(window, '!', 0, "%s wants to authenticate your identity, use '/otr secret '.", recipient); win_update_virtual(window); } } @@ -815,19 +803,7 @@ _ui_smp_unsuccessful_sender(const char * const recipient) if (window == NULL) { return; } else { - win_vprint_line(window, '!', 0, "SMP session failed, the secret you entered does not match the secret entered by %s.", recipient); - win_update_virtual(window); - } -} - -static void -_ui_smp_successful_receiver(const char * const recipient) -{ - ProfWin *window = wins_get_by_recipient(recipient); - if (window == NULL) { - return; - } else { - win_vprint_line(window, '!', 0, "SMP session started."); + win_vprint_line(window, '!', 0, "Authentication failed, the secret you entered does not match the secret entered by %s.", recipient); win_update_virtual(window); } } @@ -839,7 +815,7 @@ _ui_smp_unsuccessful_receiver(const char * const recipient) if (window == NULL) { return; } else { - win_vprint_line(window, '!', 0, "SMP session failed, the secret %s entered does not match the secret you entered.", recipient); + win_vprint_line(window, '!', 0, "Authentication failed, the secret entered by %s does not match yours.", recipient); win_update_virtual(window); } } @@ -2051,9 +2027,7 @@ ui_init_module(void) ui_trust = _ui_trust; ui_untrust = _ui_untrust; ui_smp_recipient_initiated = _ui_smp_recipient_initiated; - ui_smp_successful_sender = _ui_smp_successful_sender; ui_smp_unsuccessful_sender = _ui_smp_unsuccessful_sender; - ui_smp_successful_receiver = _ui_smp_successful_receiver; ui_smp_unsuccessful_receiver = _ui_smp_unsuccessful_receiver; ui_smp_aborted = _ui_smp_aborted; ui_chat_win_contact_online = _ui_chat_win_contact_online; diff --git a/src/ui/ui.h b/src/ui/ui.h index cfc5aaf5..4aff8d4d 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -64,9 +64,7 @@ void (*ui_gone_insecure)(const char * const recipient); void (*ui_trust)(const char * const recipient); void (*ui_untrust)(const char * const recipient); void (*ui_smp_recipient_initiated)(const char * const recipient); -void (*ui_smp_successful_sender)(const char * const recipient); void (*ui_smp_unsuccessful_sender)(const char * const recipient); -void (*ui_smp_successful_receiver)(const char * const recipient); void (*ui_smp_unsuccessful_receiver)(const char * const recipient); void (*ui_smp_aborted)(const char * const recipient);