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

Unified Diff: chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc

Issue 148843002: Make an online wildcard login check for enterprise devices. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
index e6be0a560701675c45632f91102b6e88a0237f65..b2abb5505a825005ac3265ce07868fce718f2ea3 100644
--- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
+++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
@@ -13,7 +13,9 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h"
#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h"
+#include "chrome/browser/chromeos/policy/wildcard_login_checker.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/lifetime/application_lifetime.h"
#include "components/policy/core/common/cloud/cloud_external_data_manager.h"
#include "components/policy/core/common/cloud/cloud_policy_refresh_scheduler.h"
#include "components/policy/core/common/cloud/device_management_service.h"
@@ -47,6 +49,20 @@ const char kUMAInitialFetchOAuth2Error[] =
const char kUMAInitialFetchOAuth2NetworkError[] =
"Enterprise.UserPolicyChromeOS.InitialFetch.OAuth2NetworkError";
+void OnWildcardCheckCompleted(const std::string& username, bool result) {
+ if (!result) {
+ LOG(ERROR) << "Online wildcard login check failed, terminating session.";
+
+ // TODO(mnissler): This only removes the user pod from the login screen, but
+ // the cryptohome remains. This is because deleting the cryptohome for a
+ // logged-in session is not possible. Fix this either by delaying the
+ // cryptohome deletion operation or by getting rid of the in-session
+ // wildcard check.
+ chromeos::UserManager::Get()->RemoveUserFromList(username);
+ chrome::AttemptUserExit();
+ }
+}
+
} // namespace
UserCloudPolicyManagerChromeOS::UserCloudPolicyManagerChromeOS(
@@ -125,6 +141,14 @@ void UserCloudPolicyManagerChromeOS::Connect(
void UserCloudPolicyManagerChromeOS::OnAccessTokenAvailable(
const std::string& access_token) {
access_token_ = access_token;
+
+ if (!wildcard_username_.empty()) {
+ wildcard_login_checker_.reset(new WildcardLoginChecker());
+ wildcard_login_checker_->StartWithAccessToken(
+ access_token,
+ base::Bind(&OnWildcardCheckCompleted, wildcard_username_));
+ }
+
if (service() && service()->IsInitializationComplete() &&
client() && !client()->is_registered()) {
OnOAuth2PolicyTokenFetched(
@@ -136,6 +160,12 @@ bool UserCloudPolicyManagerChromeOS::IsClientRegistered() const {
return client() && client()->is_registered();
}
+void UserCloudPolicyManagerChromeOS::EnableWildcardLoginCheck(
+ const std::string& username) {
+ DCHECK(access_token_.empty());
+ wildcard_username_ = username;
+}
+
void UserCloudPolicyManagerChromeOS::Shutdown() {
if (client())
client()->RemoveObserver(this);
@@ -181,8 +211,7 @@ void UserCloudPolicyManagerChromeOS::OnInitializationCompleted(
if (wait_for_policy_fetch_) {
FetchPolicyOAuthTokenUsingSigninProfile();
} else if (!access_token_.empty()) {
- OnOAuth2PolicyTokenFetched(
- access_token_, GoogleServiceAuthError(GoogleServiceAuthError::NONE));
+ OnAccessTokenAvailable(access_token_);
}
}
@@ -267,7 +296,6 @@ void UserCloudPolicyManagerChromeOS::OnOAuth2PolicyTokenFetched(
const std::string& policy_token,
const GoogleServiceAuthError& error) {
DCHECK(!client()->is_registered());
-
time_token_available_ = base::Time::Now();
if (wait_for_policy_fetch_) {
UMA_HISTOGRAM_MEDIUM_TIMES(kUMAInitialFetchDelayOAuth2Token,

Powered by Google App Engine
This is Rietveld 408576698