Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(244)

Side by Side Diff: remoting/host/remoting_me2me_host.cc

Issue 595063005: Save the client base JID for authentication in case it differs from the email (for accounts non-Goo… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // This file implements a standalone host process for Me2Me. 5 // This file implements a standalone host process for Me2Me.
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/at_exit.h" 9 #include "base/at_exit.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 HostState state_; 288 HostState state_;
289 289
290 scoped_ptr<ConfigWatcher> config_watcher_; 290 scoped_ptr<ConfigWatcher> config_watcher_;
291 291
292 std::string host_id_; 292 std::string host_id_;
293 protocol::SharedSecretHash host_secret_hash_; 293 protocol::SharedSecretHash host_secret_hash_;
294 scoped_refptr<RsaKeyPair> key_pair_; 294 scoped_refptr<RsaKeyPair> key_pair_;
295 std::string oauth_refresh_token_; 295 std::string oauth_refresh_token_;
296 std::string serialized_config_; 296 std::string serialized_config_;
297 std::string host_owner_; 297 std::string host_owner_;
298 std::string host_owner_email_;
298 bool use_service_account_; 299 bool use_service_account_;
299 bool enable_vp9_; 300 bool enable_vp9_;
300 int64_t frame_recorder_buffer_size_; 301 int64_t frame_recorder_buffer_size_;
301 302
302 scoped_ptr<policy_hack::PolicyWatcher> policy_watcher_; 303 scoped_ptr<policy_hack::PolicyWatcher> policy_watcher_;
303 std::string host_domain_; 304 std::string host_domain_;
304 bool host_username_match_required_; 305 bool host_username_match_required_;
305 bool allow_nat_traversal_; 306 bool allow_nat_traversal_;
306 bool allow_relay_; 307 bool allow_relay_;
307 int min_udp_port_; 308 int min_udp_port_;
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 863
863 if (config->GetString(kHostOwnerConfigPath, &host_owner_)) { 864 if (config->GetString(kHostOwnerConfigPath, &host_owner_)) {
864 // Service account configs have a host_owner, different from the xmpp_login. 865 // Service account configs have a host_owner, different from the xmpp_login.
865 use_service_account_ = true; 866 use_service_account_ = true;
866 } else { 867 } else {
867 // User credential configs only have an xmpp_login, which is also the owner. 868 // User credential configs only have an xmpp_login, which is also the owner.
868 host_owner_ = xmpp_server_config_.username; 869 host_owner_ = xmpp_server_config_.username;
869 use_service_account_ = false; 870 use_service_account_ = false;
870 } 871 }
871 872
873 // For non-Gmail Google accounts, the owner base JID differs from the email.
874 // host_owner_ contains the base JID (used for authenticating clients), while
875 // host_owner_email contains the account's email (used for UI and logs).
876 if (!config->GetString(kHostOwnerEmailConfigPath, &host_owner_email_)) {
877 host_owner_email_ = host_owner_;
878 }
879
872 // Allow offering of VP9 encoding to be overridden by the command-line. 880 // Allow offering of VP9 encoding to be overridden by the command-line.
873 if (CommandLine::ForCurrentProcess()->HasSwitch(kEnableVp9SwitchName)) { 881 if (CommandLine::ForCurrentProcess()->HasSwitch(kEnableVp9SwitchName)) {
874 enable_vp9_ = true; 882 enable_vp9_ = true;
875 } else { 883 } else {
876 config->GetBoolean(kEnableVp9ConfigPath, &enable_vp9_); 884 config->GetBoolean(kEnableVp9ConfigPath, &enable_vp9_);
877 } 885 }
878 886
879 // Allow the command-line to override the size of the frame recorder buffer. 887 // Allow the command-line to override the size of the frame recorder buffer.
880 std::string frame_recorder_buffer_kb; 888 std::string frame_recorder_buffer_kb;
881 if (CommandLine::ForCurrentProcess()->HasSwitch( 889 if (CommandLine::ForCurrentProcess()->HasSwitch(
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 927
920 if (state_ == HOST_INITIALIZING) { 928 if (state_ == HOST_INITIALIZING) {
921 StartHost(); 929 StartHost();
922 } else if (state_ == HOST_STARTED && restart_required) { 930 } else if (state_ == HOST_STARTED && restart_required) {
923 RestartHost(); 931 RestartHost();
924 } 932 }
925 } 933 }
926 934
927 void HostProcess::ApplyHostDomainPolicy() { 935 void HostProcess::ApplyHostDomainPolicy() {
928 HOST_LOG << "Policy sets host domain: " << host_domain_; 936 HOST_LOG << "Policy sets host domain: " << host_domain_;
937
938 // If the user does not have a Google email, their client JID will not be
939 // based on their email. In that case, the username/host domain policies would
940 // be meaningless, since there is no way to check that the JID attempting to
941 // connect actually corresponds to the owner email in question.
942 if (host_owner_ != host_owner_email_) {
943 LOG(ERROR) << "The username and host domain policies cannot be enabled for "
944 << "accounts with a non-Google email.";
945 ShutdownHost(kInvalidHostDomainExitCode);
946 }
947
929 if (!host_domain_.empty() && 948 if (!host_domain_.empty() &&
930 !EndsWith(host_owner_, std::string("@") + host_domain_, false)) { 949 !EndsWith(host_owner_, std::string("@") + host_domain_, false)) {
931 LOG(ERROR) << "The host domain does not match the policy."; 950 LOG(ERROR) << "The host domain does not match the policy.";
932 ShutdownHost(kInvalidHostDomainExitCode); 951 ShutdownHost(kInvalidHostDomainExitCode);
933 } 952 }
934 } 953 }
935 954
936 bool HostProcess::OnHostDomainPolicyUpdate(base::DictionaryValue* policies) { 955 bool HostProcess::OnHostDomainPolicyUpdate(base::DictionaryValue* policies) {
937 // Returns true if the host has to be restarted after this policy update. 956 // Returns true if the host has to be restarted after this policy update.
938 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); 957 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
939 958
940 if (!policies->GetString(policy_hack::PolicyWatcher::kHostDomainPolicyName, 959 if (!policies->GetString(policy_hack::PolicyWatcher::kHostDomainPolicyName,
941 &host_domain_)) { 960 &host_domain_)) {
942 return false; 961 return false;
943 } 962 }
944 963
945 ApplyHostDomainPolicy(); 964 ApplyHostDomainPolicy();
946 return false; 965 return false;
947 } 966 }
948 967
949 void HostProcess::ApplyUsernamePolicy() { 968 void HostProcess::ApplyUsernamePolicy() {
969 // See comment in ApplyHostDomainPolicy.
970 if (host_owner_ != host_owner_email_) {
971 LOG(ERROR) << "The username and host domain policies cannot be enabled for "
972 << "accounts with a non-Google email.";
973 ShutdownHost(kUsernameMismatchExitCode);
974 }
975
950 if (host_username_match_required_) { 976 if (host_username_match_required_) {
951 HOST_LOG << "Policy requires host username match."; 977 HOST_LOG << "Policy requires host username match.";
952 std::string username = GetUsername(); 978 std::string username = GetUsername();
953 bool shutdown = username.empty() || 979 bool shutdown = username.empty() ||
954 !StartsWithASCII(host_owner_, username + std::string("@"), 980 !StartsWithASCII(host_owner_, username + std::string("@"),
955 false); 981 false);
956 982
957 #if defined(OS_MACOSX) 983 #if defined(OS_MACOSX)
958 // On Mac, we run as root at the login screen, so the username won't match. 984 // On Mac, we run as root at the login screen, so the username won't match.
959 // However, there's no need to enforce the policy at the login screen, as 985 // However, there's no need to enforce the policy at the login screen, as
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
1303 // Set up reporting the host status notifications. 1329 // Set up reporting the host status notifications.
1304 #if defined(REMOTING_MULTI_PROCESS) 1330 #if defined(REMOTING_MULTI_PROCESS)
1305 host_event_logger_.reset( 1331 host_event_logger_.reset(
1306 new IpcHostEventLogger(host_->AsWeakPtr(), daemon_channel_.get())); 1332 new IpcHostEventLogger(host_->AsWeakPtr(), daemon_channel_.get()));
1307 #else // !defined(REMOTING_MULTI_PROCESS) 1333 #else // !defined(REMOTING_MULTI_PROCESS)
1308 host_event_logger_ = 1334 host_event_logger_ =
1309 HostEventLogger::Create(host_->AsWeakPtr(), kApplicationName); 1335 HostEventLogger::Create(host_->AsWeakPtr(), kApplicationName);
1310 #endif // !defined(REMOTING_MULTI_PROCESS) 1336 #endif // !defined(REMOTING_MULTI_PROCESS)
1311 1337
1312 host_->SetEnableCurtaining(curtain_required_); 1338 host_->SetEnableCurtaining(curtain_required_);
1313 host_->Start(host_owner_); 1339 host_->Start(host_owner_email_);
1314 1340
1315 CreateAuthenticatorFactory(); 1341 CreateAuthenticatorFactory();
1316 } 1342 }
1317 1343
1318 void HostProcess::OnAuthFailed() { 1344 void HostProcess::OnAuthFailed() {
1319 ShutdownHost(kInvalidOauthCredentialsExitCode); 1345 ShutdownHost(kInvalidOauthCredentialsExitCode);
1320 } 1346 }
1321 1347
1322 void HostProcess::RestartHost() { 1348 void HostProcess::RestartHost() {
1323 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); 1349 DCHECK(context_->network_task_runner()->BelongsToCurrentThread());
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1448 int exit_code = kSuccessExitCode; 1474 int exit_code = kSuccessExitCode;
1449 new HostProcess(context.Pass(), &exit_code); 1475 new HostProcess(context.Pass(), &exit_code);
1450 1476
1451 // Run the main (also UI) message loop until the host no longer needs it. 1477 // Run the main (also UI) message loop until the host no longer needs it.
1452 message_loop.Run(); 1478 message_loop.Run();
1453 1479
1454 return exit_code; 1480 return exit_code;
1455 } 1481 }
1456 1482
1457 } // namespace remoting 1483 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698