Index: remoting/jingle_glue/xmpp_signal_strategy.cc |
=================================================================== |
--- remoting/jingle_glue/xmpp_signal_strategy.cc (revision 138203) |
+++ remoting/jingle_glue/xmpp_signal_strategy.cc (working copy) |
@@ -167,6 +167,24 @@ |
DCHECK(CalledOnValidThread()); |
if (state == buzz::XmppEngine::STATE_OPEN) { |
+ // Verify that the JID that we've received matches the username |
+ // that we have. If it doesn't, then the OAuth token was probably |
+ // issued for a different account, so we treat is a an auth error. |
+ // |
+ // TODO(sergeyu): Some user accounts may not have associated |
+ // e-mail address. The check below will fail for such |
+ // accounts. Make sure we can handle this case proprely. |
+ if (!StartsWithASCII(GetLocalJid(), username_, false)) { |
+ LOG(ERROR) << "Received JID that is different from the expected value."; |
+ error_ = AUTHENTICATION_FAILED; |
+ xmpp_client_->SignalStateChange.disconnect(this); |
+ MessageLoop::current()->PostTask( |
+ FROM_HERE, base::Bind(&DisconnectXmppClient, xmpp_client_)); |
+ xmpp_client_ = NULL; |
+ SetState(DISCONNECTED); |
+ return; |
+ } |
+ |
keep_alive_timer_.Start( |
FROM_HERE, base::TimeDelta::FromSeconds(kKeepAliveIntervalSeconds), |
this, &XmppSignalStrategy::SendKeepAlive); |