| OLD | NEW |
| 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 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 void SendSasToConsole(); | 195 void SendSasToConsole(); |
| 196 | 196 |
| 197 // Tear down resources that run on the UI thread. | 197 // Tear down resources that run on the UI thread. |
| 198 void ShutdownOnUiThread(); | 198 void ShutdownOnUiThread(); |
| 199 | 199 |
| 200 // Applies the host config, returning true if successful. | 200 // Applies the host config, returning true if successful. |
| 201 bool ApplyConfig(scoped_ptr<JsonHostConfig> config); | 201 bool ApplyConfig(scoped_ptr<JsonHostConfig> config); |
| 202 | 202 |
| 203 void OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies); | 203 void OnPolicyUpdate(scoped_ptr<base::DictionaryValue> policies); |
| 204 bool OnHostDomainPolicyUpdate(const std::string& host_domain); | 204 bool OnHostDomainPolicyUpdate(const std::string& host_domain); |
| 205 bool OnUsernamePolicyUpdate(bool username_match_required); | 205 bool OnUsernamePolicyUpdate(bool curtain_required, |
| 206 bool username_match_required); |
| 206 bool OnNatPolicyUpdate(bool nat_traversal_enabled); | 207 bool OnNatPolicyUpdate(bool nat_traversal_enabled); |
| 207 bool OnCurtainPolicyUpdate(bool curtain_required); | 208 bool OnCurtainPolicyUpdate(bool curtain_required); |
| 208 bool OnHostTalkGadgetPrefixPolicyUpdate(const std::string& talkgadget_prefix); | 209 bool OnHostTalkGadgetPrefixPolicyUpdate(const std::string& talkgadget_prefix); |
| 209 bool OnHostTokenUrlPolicyUpdate(const GURL& token_url, | 210 bool OnHostTokenUrlPolicyUpdate(const GURL& token_url, |
| 210 const GURL& token_validation_url); | 211 const GURL& token_validation_url); |
| 211 | 212 |
| 212 void StartHost(); | 213 void StartHost(); |
| 213 | 214 |
| 214 void OnAuthFailed(); | 215 void OnAuthFailed(); |
| 215 | 216 |
| (...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 return; | 718 return; |
| 718 } | 719 } |
| 719 | 720 |
| 720 bool restart_required = false; | 721 bool restart_required = false; |
| 721 bool bool_value; | 722 bool bool_value; |
| 722 std::string string_value; | 723 std::string string_value; |
| 723 if (policies->GetString(policy_hack::PolicyWatcher::kHostDomainPolicyName, | 724 if (policies->GetString(policy_hack::PolicyWatcher::kHostDomainPolicyName, |
| 724 &string_value)) { | 725 &string_value)) { |
| 725 restart_required |= OnHostDomainPolicyUpdate(string_value); | 726 restart_required |= OnHostDomainPolicyUpdate(string_value); |
| 726 } | 727 } |
| 728 bool curtain_required = false; |
| 729 if (policies->GetBoolean( |
| 730 policy_hack::PolicyWatcher::kHostRequireCurtainPolicyName, |
| 731 &curtain_required)) { |
| 732 restart_required |= OnCurtainPolicyUpdate(curtain_required); |
| 733 } |
| 727 if (policies->GetBoolean( | 734 if (policies->GetBoolean( |
| 728 policy_hack::PolicyWatcher::kHostMatchUsernamePolicyName, | 735 policy_hack::PolicyWatcher::kHostMatchUsernamePolicyName, |
| 729 &bool_value)) { | 736 &bool_value)) { |
| 730 restart_required |= OnUsernamePolicyUpdate(bool_value); | 737 restart_required |= OnUsernamePolicyUpdate(curtain_required, bool_value); |
| 731 } | 738 } |
| 732 if (policies->GetBoolean(policy_hack::PolicyWatcher::kNatPolicyName, | 739 if (policies->GetBoolean(policy_hack::PolicyWatcher::kNatPolicyName, |
| 733 &bool_value)) { | 740 &bool_value)) { |
| 734 restart_required |= OnNatPolicyUpdate(bool_value); | 741 restart_required |= OnNatPolicyUpdate(bool_value); |
| 735 } | 742 } |
| 736 if (policies->GetString( | 743 if (policies->GetString( |
| 737 policy_hack::PolicyWatcher::kHostTalkGadgetPrefixPolicyName, | 744 policy_hack::PolicyWatcher::kHostTalkGadgetPrefixPolicyName, |
| 738 &string_value)) { | 745 &string_value)) { |
| 739 restart_required |= OnHostTalkGadgetPrefixPolicyUpdate(string_value); | 746 restart_required |= OnHostTalkGadgetPrefixPolicyUpdate(string_value); |
| 740 } | 747 } |
| 741 if (policies->GetBoolean( | |
| 742 policy_hack::PolicyWatcher::kHostRequireCurtainPolicyName, | |
| 743 &bool_value)) { | |
| 744 restart_required |= OnCurtainPolicyUpdate(bool_value); | |
| 745 } | |
| 746 std::string token_url_string, token_validation_url_string; | 748 std::string token_url_string, token_validation_url_string; |
| 747 if (policies->GetString( | 749 if (policies->GetString( |
| 748 policy_hack::PolicyWatcher::kHostTokenUrlPolicyName, | 750 policy_hack::PolicyWatcher::kHostTokenUrlPolicyName, |
| 749 &token_url_string) && | 751 &token_url_string) && |
| 750 policies->GetString( | 752 policies->GetString( |
| 751 policy_hack::PolicyWatcher::kHostTokenValidationUrlPolicyName, | 753 policy_hack::PolicyWatcher::kHostTokenValidationUrlPolicyName, |
| 752 &token_validation_url_string)) { | 754 &token_validation_url_string)) { |
| 753 restart_required |= OnHostTokenUrlPolicyUpdate( | 755 restart_required |= OnHostTokenUrlPolicyUpdate( |
| 754 GURL(token_url_string), GURL(token_validation_url_string)); | 756 GURL(token_url_string), GURL(token_validation_url_string)); |
| 755 } | 757 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 767 | 769 |
| 768 LOG(INFO) << "Policy sets host domain: " << host_domain; | 770 LOG(INFO) << "Policy sets host domain: " << host_domain; |
| 769 | 771 |
| 770 if (!host_domain.empty() && | 772 if (!host_domain.empty() && |
| 771 !EndsWith(xmpp_login_, std::string("@") + host_domain, false)) { | 773 !EndsWith(xmpp_login_, std::string("@") + host_domain, false)) { |
| 772 ShutdownHost(kInvalidHostDomainExitCode); | 774 ShutdownHost(kInvalidHostDomainExitCode); |
| 773 } | 775 } |
| 774 return false; | 776 return false; |
| 775 } | 777 } |
| 776 | 778 |
| 777 bool HostProcess::OnUsernamePolicyUpdate(bool host_username_match_required) { | 779 bool HostProcess::OnUsernamePolicyUpdate(bool curtain_required, |
| 780 bool host_username_match_required) { |
| 778 // Returns false: never restart the host after this policy update. | 781 // Returns false: never restart the host after this policy update. |
| 779 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); | 782 DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); |
| 780 | 783 |
| 781 if (host_username_match_required) { | 784 if (host_username_match_required) { |
| 782 LOG(INFO) << "Policy requires host username match."; | 785 LOG(INFO) << "Policy requires host username match."; |
| 783 std::string username = GetUsername(); | 786 std::string username = GetUsername(); |
| 784 bool shutdown = username.empty() || | 787 bool shutdown = username.empty() || |
| 785 !StartsWithASCII(xmpp_login_, username + std::string("@"), | 788 !StartsWithASCII(xmpp_login_, username + std::string("@"), |
| 786 false); | 789 false); |
| 787 | 790 |
| 788 #if defined(OS_MACOSX) | 791 #if defined(OS_MACOSX) |
| 789 // On Mac, we run as root at the login screen, so the username won't match. | 792 // On Mac, we run as root at the login screen, so the username won't match. |
| 790 // However, there's no need to enforce the policy at the login screen, as | 793 // However, there's no need to enforce the policy at the login screen, as |
| 791 // the client will have to reconnect if a login occurs. | 794 // the client will have to reconnect if a login occurs. |
| 792 if (shutdown && getuid() == 0) { | 795 if (shutdown && getuid() == 0) { |
| 793 shutdown = false; | 796 shutdown = false; |
| 794 } | 797 } |
| 795 #endif | 798 #endif |
| 796 | 799 |
| 800 // Curtain-mode on Windows presents the standard OS login prompt to the user |
| 801 // for each connection, removing the need for an explicit user-name matching |
| 802 // check. |
| 803 #if defined(OS_WIN) && defined(REMOTING_RDP_SESSION) |
| 804 if (curtain_required) |
| 805 return false; |
| 806 #endif // defined(OS_WIN) && defined(REMOTING_RDP_SESSION) |
| 807 |
| 808 // Shutdown the host if the username does not match. |
| 797 if (shutdown) { | 809 if (shutdown) { |
| 798 LOG(ERROR) << "The host username does not match."; | 810 LOG(ERROR) << "The host username does not match."; |
| 799 ShutdownHost(kUsernameMismatchExitCode); | 811 ShutdownHost(kUsernameMismatchExitCode); |
| 800 } | 812 } |
| 801 } else { | 813 } else { |
| 802 LOG(INFO) << "Policy does not require host username match."; | 814 LOG(INFO) << "Policy does not require host username match."; |
| 803 } | 815 } |
| 804 | 816 |
| 805 return false; | 817 return false; |
| 806 } | 818 } |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1143 return exit_code; | 1155 return exit_code; |
| 1144 } | 1156 } |
| 1145 | 1157 |
| 1146 } // namespace remoting | 1158 } // namespace remoting |
| 1147 | 1159 |
| 1148 #if !defined(OS_WIN) | 1160 #if !defined(OS_WIN) |
| 1149 int main(int argc, char** argv) { | 1161 int main(int argc, char** argv) { |
| 1150 return remoting::HostMain(argc, argv); | 1162 return remoting::HostMain(argc, argv); |
| 1151 } | 1163 } |
| 1152 #endif // !defined(OS_WIN) | 1164 #endif // !defined(OS_WIN) |
| OLD | NEW |