Index: chromeos/dbus/session_manager_client.cc |
diff --git a/chromeos/dbus/session_manager_client.cc b/chromeos/dbus/session_manager_client.cc |
index 0854875d0aeb974c262b0a34963aaf48c4d79c3c..273f84c0f7edd0075f7b0dd30510d41b570d031c 100644 |
--- a/chromeos/dbus/session_manager_client.cc |
+++ b/chromeos/dbus/session_manager_client.cc |
@@ -19,6 +19,7 @@ |
#include "chromeos/chromeos_paths.h" |
#include "chromeos/dbus/blocking_method_caller.h" |
#include "chromeos/dbus/cryptohome_client.h" |
+#include "components/user_manager/user_id.h" |
#include "crypto/sha2.h" |
#include "dbus/bus.h" |
#include "dbus/message.h" |
@@ -34,13 +35,13 @@ namespace { |
// Returns a location for |file| that is specific to the given |username|. |
// These paths will be relative to DIR_USER_POLICY_KEYS, and can be used only |
// to store stub files. |
-base::FilePath GetUserFilePath(const std::string& username, const char* file) { |
+base::FilePath GetUserFilePath(const user_manager::UserID& user_id, const char* file) { |
base::FilePath keys_path; |
if (!PathService::Get(chromeos::DIR_USER_POLICY_KEYS, &keys_path)) |
return base::FilePath(); |
- const std::string sanitized = |
- CryptohomeClient::GetStubSanitizedUsername(username); |
- return keys_path.AppendASCII(sanitized).AppendASCII(file); |
+ const std::string hash = |
+ CryptohomeClient::GetStubSanitizedUsername(user_id); |
+ return keys_path.AppendASCII(hash).AppendASCII(file); |
} |
// Helper to asynchronously retrieve a file's content. |
@@ -150,11 +151,11 @@ class SessionManagerClientImpl : public SessionManagerClient { |
false); |
} |
- void StartSession(const std::string& user_email) override { |
+ void StartSession(const user_manager::UserID& user_id) override { |
dbus::MethodCall method_call(login_manager::kSessionManagerInterface, |
login_manager::kSessionManagerStartSession); |
dbus::MessageWriter writer(&method_call); |
- writer.AppendString(user_email); |
+ writer.AppendString(user_id.GetUserEmail()); |
writer.AppendString(""); // Unique ID is deprecated |
session_manager_proxy_->CallMethod( |
&method_call, |
@@ -235,21 +236,21 @@ class SessionManagerClientImpl : public SessionManagerClient { |
callback)); |
} |
- void RetrievePolicyForUser(const std::string& username, |
+ void RetrievePolicyForUser(const user_manager::UserID& user_id, |
const RetrievePolicyCallback& callback) override { |
CallRetrievePolicyByUsername( |
login_manager::kSessionManagerRetrievePolicyForUser, |
- username, |
+ user_id.GetUserEmail(), |
callback); |
} |
std::string BlockingRetrievePolicyForUser( |
- const std::string& username) override { |
+ const user_manager::UserID& user_id) override { |
dbus::MethodCall method_call( |
login_manager::kSessionManagerInterface, |
login_manager::kSessionManagerRetrievePolicyForUser); |
dbus::MessageWriter writer(&method_call); |
- writer.AppendString(username); |
+ writer.AppendString(user_id.GetUserEmail()); |
scoped_ptr<dbus::Response> response = |
blocking_method_caller_->CallMethodAndBlock(&method_call); |
std::string policy; |
@@ -285,11 +286,11 @@ class SessionManagerClientImpl : public SessionManagerClient { |
callback)); |
} |
- void StorePolicyForUser(const std::string& username, |
+ void StorePolicyForUser(const user_manager::UserID& user_id, |
const std::string& policy_blob, |
const StorePolicyCallback& callback) override { |
CallStorePolicyByUsername(login_manager::kSessionManagerStorePolicyForUser, |
- username, |
+ user_id.GetUserEmail(), |
policy_blob, |
callback); |
} |
@@ -305,12 +306,12 @@ class SessionManagerClientImpl : public SessionManagerClient { |
callback); |
} |
- void SetFlagsForUser(const std::string& username, |
+ void SetFlagsForUser(const user_manager::UserID& user_id, |
const std::vector<std::string>& flags) override { |
dbus::MethodCall method_call(login_manager::kSessionManagerInterface, |
login_manager::kSessionManagerSetFlagsForUser); |
dbus::MessageWriter writer(&method_call); |
- writer.AppendString(username); |
+ writer.AppendString(user_id.GetUserEmail()); |
writer.AppendArrayOfStrings(flags); |
session_manager_proxy_->CallMethod( |
&method_call, |
@@ -383,9 +384,10 @@ class SessionManagerClientImpl : public SessionManagerClient { |
} |
// Helper for RetrieveDeviceLocalAccountPolicy and RetrievePolicyForUser. |
+ // |username| is either UserEmail or DeviceLocalAccountID. |
void CallRetrievePolicyByUsername(const std::string& method_name, |
- const std::string& username, |
- const RetrievePolicyCallback& callback) { |
+ const std::string& username, |
+ const RetrievePolicyCallback& callback) { |
dbus::MethodCall method_call(login_manager::kSessionManagerInterface, |
method_name); |
dbus::MessageWriter writer(&method_call); |
@@ -400,10 +402,11 @@ class SessionManagerClientImpl : public SessionManagerClient { |
callback)); |
} |
+ // |username| is either UserEmail or DeviceLocalAccountID. |
void CallStorePolicyByUsername(const std::string& method_name, |
- const std::string& username, |
- const std::string& policy_blob, |
- const StorePolicyCallback& callback) { |
+ const std::string& username, |
+ const std::string& policy_blob, |
+ const StorePolicyCallback& callback) { |
dbus::MethodCall method_call(login_manager::kSessionManagerInterface, |
method_name); |
dbus::MessageWriter writer(&method_call); |
@@ -505,7 +508,8 @@ class SessionManagerClientImpl : public SessionManagerClient { |
LOG(ERROR) << method_name << " response is incorrect: " |
<< response->ToString(); |
} else { |
- sessions[key] = value; |
+ const user_manager::UserID user_id(std::string() /* gaia_id */, key); |
+ sessions[user_id] = value; |
} |
} |
success = true; |
@@ -669,7 +673,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient { |
bool IsScreenLocked() const override { return screen_is_locked_; } |
void EmitLoginPromptVisible() override {} |
void RestartJob(int pid, const std::string& command_line) override {} |
- void StartSession(const std::string& user_email) override {} |
+ void StartSession(const user_manager::UserID& user_id) override {} |
void StopSession() override {} |
void NotifySupervisedUserCreationStarted() override {} |
void NotifySupervisedUserCreationFinished() override {} |
@@ -702,22 +706,23 @@ class SessionManagerClientStubImpl : public SessionManagerClient { |
base::Bind(&GetFileContent, device_policy_path), |
callback); |
} |
- void RetrievePolicyForUser(const std::string& username, |
+ void RetrievePolicyForUser(const user_manager::UserID& user_id, |
const RetrievePolicyCallback& callback) override { |
base::PostTaskAndReplyWithResult( |
base::WorkerPool::GetTaskRunner(false).get(), |
FROM_HERE, |
- base::Bind(&GetFileContent, GetUserFilePath(username, "stub_policy")), |
+ base::Bind(&GetFileContent, GetUserFilePath(user_id, "stub_policy")), |
callback); |
} |
std::string BlockingRetrievePolicyForUser( |
- const std::string& username) override { |
- return GetFileContent(GetUserFilePath(username, "stub_policy")); |
+ const user_manager::UserID& user_id) override { |
+ return GetFileContent(GetUserFilePath(user_id, "stub_policy")); |
} |
void RetrieveDeviceLocalAccountPolicy( |
const std::string& account_name, |
const RetrievePolicyCallback& callback) override { |
- RetrievePolicyForUser(account_name, callback); |
+ const user_manager::UserID fake_user_id(std::string() /* gaia_id */, account_name); |
+ RetrievePolicyForUser(fake_user_id, callback); |
} |
void StoreDevicePolicy(const std::string& policy_blob, |
const StorePolicyCallback& callback) override { |
@@ -749,7 +754,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient { |
base::Bind(callback, true), |
false); |
} |
- void StorePolicyForUser(const std::string& username, |
+ void StorePolicyForUser(const user_manager::UserID& user_id, |
const std::string& policy_blob, |
const StorePolicyCallback& callback) override { |
// The session manager writes the user policy key to a well-known |
@@ -762,7 +767,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient { |
} |
if (response.has_new_public_key()) { |
- base::FilePath key_path = GetUserFilePath(username, "policy.pub"); |
+ base::FilePath key_path = GetUserFilePath(user_id, "policy.pub"); |
base::WorkerPool::PostTask( |
FROM_HERE, |
base::Bind(&StoreFile, key_path, response.new_public_key()), |
@@ -771,7 +776,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient { |
// This file isn't read directly by Chrome, but is used by this class to |
// reload the user policy across restarts. |
- base::FilePath stub_policy_path = GetUserFilePath(username, "stub_policy"); |
+ base::FilePath stub_policy_path = GetUserFilePath(user_id, "stub_policy"); |
base::WorkerPool::PostTaskAndReply( |
FROM_HERE, |
base::Bind(&StoreFile, stub_policy_path, policy_blob), |
@@ -782,9 +787,10 @@ class SessionManagerClientStubImpl : public SessionManagerClient { |
const std::string& account_name, |
const std::string& policy_blob, |
const StorePolicyCallback& callback) override { |
- StorePolicyForUser(account_name, policy_blob, callback); |
+ const user_manager::UserID fake_user_id(std::string() /* gaia_id */, account_name); |
+ StorePolicyForUser(fake_user_id, policy_blob, callback); |
} |
- void SetFlagsForUser(const std::string& username, |
+ void SetFlagsForUser(const user_manager::UserID& user_id, |
const std::vector<std::string>& flags) override {} |
void GetServerBackedStateKeys(const StateKeysCallback& callback) override { |