| Index: remoting/protocol/me2me_host_authenticator_factory.cc
|
| diff --git a/remoting/protocol/me2me_host_authenticator_factory.cc b/remoting/protocol/me2me_host_authenticator_factory.cc
|
| index 6e63fbeb1b4aeadd3457348e455dbfd8513de4c2..37c627bc274141339f20c19d45989ed2ff94f3b8 100644
|
| --- a/remoting/protocol/me2me_host_authenticator_factory.cc
|
| +++ b/remoting/protocol/me2me_host_authenticator_factory.cc
|
| @@ -27,7 +27,7 @@ Me2MeHostAuthenticatorFactory::CreateWithPin(
|
| const std::string& host_owner,
|
| const std::string& local_cert,
|
| scoped_refptr<RsaKeyPair> key_pair,
|
| - const std::string& required_client_domain,
|
| + std::vector<std::string> required_client_domain_list,
|
| const std::string& pin_hash,
|
| scoped_refptr<PairingRegistry> pairing_registry) {
|
| std::unique_ptr<Me2MeHostAuthenticatorFactory> result(
|
| @@ -36,7 +36,7 @@ Me2MeHostAuthenticatorFactory::CreateWithPin(
|
| result->host_owner_ = host_owner;
|
| result->local_cert_ = local_cert;
|
| result->key_pair_ = key_pair;
|
| - result->required_client_domain_ = required_client_domain;
|
| + result->required_client_domain_list_ = std::move(required_client_domain_list);
|
| result->pin_hash_ = pin_hash;
|
| result->pairing_registry_ = pairing_registry;
|
| return std::move(result);
|
| @@ -50,7 +50,7 @@ Me2MeHostAuthenticatorFactory::CreateWithThirdPartyAuth(
|
| const std::string& host_owner,
|
| const std::string& local_cert,
|
| scoped_refptr<RsaKeyPair> key_pair,
|
| - const std::string& required_client_domain,
|
| + std::vector<std::string> required_client_domain_list,
|
| scoped_refptr<TokenValidatorFactory> token_validator_factory) {
|
| std::unique_ptr<Me2MeHostAuthenticatorFactory> result(
|
| new Me2MeHostAuthenticatorFactory());
|
| @@ -58,7 +58,7 @@ Me2MeHostAuthenticatorFactory::CreateWithThirdPartyAuth(
|
| result->host_owner_ = host_owner;
|
| result->local_cert_ = local_cert;
|
| result->key_pair_ = key_pair;
|
| - result->required_client_domain_ = required_client_domain;
|
| + result->required_client_domain_list_ = std::move(required_client_domain_list);
|
| result->token_validator_factory_ = token_validator_factory;
|
| return std::move(result);
|
| }
|
| @@ -101,19 +101,25 @@ Me2MeHostAuthenticatorFactory::CreateAuthenticator(
|
| }
|
|
|
| // If necessary, verify that the client's jid belongs to the correct domain.
|
| - if (!required_client_domain_.empty()) {
|
| + if (!required_client_domain_list_.empty()) {
|
| std::string client_username = remote_jid;
|
| size_t pos = client_username.find('/');
|
| if (pos != std::string::npos) {
|
| client_username.replace(pos, std::string::npos, "");
|
| }
|
| - if (!base::EndsWith(client_username,
|
| - std::string("@") + required_client_domain_,
|
| - base::CompareCase::INSENSITIVE_ASCII)) {
|
| + bool matched = false;
|
| + for (const std::string& domain : required_client_domain_list_) {
|
| + if (base::EndsWith(client_username, std::string("@") + domain,
|
| + base::CompareCase::INSENSITIVE_ASCII)) {
|
| + matched = true;
|
| + break;
|
| + }
|
| + }
|
| + if (!matched) {
|
| LOG(ERROR) << "Rejecting incoming connection from " << remote_jid
|
| - << ": Domain mismatch.";
|
| - return base::WrapUnique(
|
| - new RejectingAuthenticator(Authenticator::INVALID_ACCOUNT));
|
| + << ": Domain not allowed.";
|
| + return base::MakeUnique<RejectingAuthenticator>(
|
| + Authenticator::INVALID_ACCOUNT);
|
| }
|
| }
|
|
|
|
|