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

Side by Side Diff: chromeos/dbus/session_manager_client.cc

Issue 1693383003: ChromeOS cryptohome should be able to use gaia id as user identifier. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add missing files. Created 4 years, 10 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 #include "chromeos/dbus/session_manager_client.h" 5 #include "chromeos/dbus/session_manager_client.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <sys/socket.h> 9 #include <sys/socket.h>
10 10
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 &CreateValidCredConduit, local_auth_fd.get(), remote_auth_fd.get()); 146 &CreateValidCredConduit, local_auth_fd.get(), remote_auth_fd.get());
147 147
148 base::WorkerPool::PostTaskAndReply( 148 base::WorkerPool::PostTaskAndReply(
149 FROM_HERE, create_credentials_conduit_closure, 149 FROM_HERE, create_credentials_conduit_closure,
150 base::Bind(&SessionManagerClientImpl::CallRestartJobWithValidFd, 150 base::Bind(&SessionManagerClientImpl::CallRestartJobWithValidFd,
151 weak_ptr_factory_.GetWeakPtr(), base::Passed(&local_auth_fd), 151 weak_ptr_factory_.GetWeakPtr(), base::Passed(&local_auth_fd),
152 base::Passed(&remote_auth_fd), argv), 152 base::Passed(&remote_auth_fd), argv),
153 false); 153 false);
154 } 154 }
155 155
156 void StartSession(const std::string& user_email) override { 156 void StartSession(const std::string& user_id) override {
157 dbus::MethodCall method_call(login_manager::kSessionManagerInterface, 157 dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
158 login_manager::kSessionManagerStartSession); 158 login_manager::kSessionManagerStartSession);
159 dbus::MessageWriter writer(&method_call); 159 dbus::MessageWriter writer(&method_call);
160 writer.AppendString(user_email); 160 writer.AppendString(user_id);
161 writer.AppendString(""); // Unique ID is deprecated 161 writer.AppendString(""); // Unique ID is deprecated
162 session_manager_proxy_->CallMethod( 162 session_manager_proxy_->CallMethod(
163 &method_call, 163 &method_call,
164 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 164 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
165 base::Bind(&SessionManagerClientImpl::OnStartSession, 165 base::Bind(&SessionManagerClientImpl::OnStartSession,
166 weak_ptr_factory_.GetWeakPtr())); 166 weak_ptr_factory_.GetWeakPtr()));
167 } 167 }
168 168
169 void StopSession() override { 169 void StopSession() override {
170 dbus::MethodCall method_call(login_manager::kSessionManagerInterface, 170 dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 login_manager::kSessionManagerRetrievePolicy); 231 login_manager::kSessionManagerRetrievePolicy);
232 session_manager_proxy_->CallMethod( 232 session_manager_proxy_->CallMethod(
233 &method_call, 233 &method_call,
234 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 234 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
235 base::Bind(&SessionManagerClientImpl::OnRetrievePolicy, 235 base::Bind(&SessionManagerClientImpl::OnRetrievePolicy,
236 weak_ptr_factory_.GetWeakPtr(), 236 weak_ptr_factory_.GetWeakPtr(),
237 login_manager::kSessionManagerRetrievePolicy, 237 login_manager::kSessionManagerRetrievePolicy,
238 callback)); 238 callback));
239 } 239 }
240 240
241 void RetrievePolicyForUser(const std::string& username, 241 void RetrievePolicyForUser(const std::string& user_id,
242 const RetrievePolicyCallback& callback) override { 242 const RetrievePolicyCallback& callback) override {
243 CallRetrievePolicyByUsername( 243 CallRetrievePolicyByUsername(
244 login_manager::kSessionManagerRetrievePolicyForUser, 244 login_manager::kSessionManagerRetrievePolicyForUser, user_id, callback);
245 username,
246 callback);
247 } 245 }
248 246
249 std::string BlockingRetrievePolicyForUser( 247 std::string BlockingRetrievePolicyForUser(
250 const std::string& username) override { 248 const std::string& user_id) override {
251 dbus::MethodCall method_call( 249 dbus::MethodCall method_call(
252 login_manager::kSessionManagerInterface, 250 login_manager::kSessionManagerInterface,
253 login_manager::kSessionManagerRetrievePolicyForUser); 251 login_manager::kSessionManagerRetrievePolicyForUser);
254 dbus::MessageWriter writer(&method_call); 252 dbus::MessageWriter writer(&method_call);
255 writer.AppendString(username); 253 writer.AppendString(user_id);
256 scoped_ptr<dbus::Response> response = 254 scoped_ptr<dbus::Response> response =
257 blocking_method_caller_->CallMethodAndBlock(&method_call); 255 blocking_method_caller_->CallMethodAndBlock(&method_call);
258 std::string policy; 256 std::string policy;
259 ExtractString(login_manager::kSessionManagerRetrievePolicyForUser, 257 ExtractString(login_manager::kSessionManagerRetrievePolicyForUser,
260 response.get(), 258 response.get(),
261 &policy); 259 &policy);
262 return policy; 260 return policy;
263 } 261 }
264 262
265 void RetrieveDeviceLocalAccountPolicy( 263 void RetrieveDeviceLocalAccountPolicy(
(...skipping 16 matching lines...) Expand all
282 policy_blob.size()); 280 policy_blob.size());
283 session_manager_proxy_->CallMethod( 281 session_manager_proxy_->CallMethod(
284 &method_call, 282 &method_call,
285 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 283 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
286 base::Bind(&SessionManagerClientImpl::OnStorePolicy, 284 base::Bind(&SessionManagerClientImpl::OnStorePolicy,
287 weak_ptr_factory_.GetWeakPtr(), 285 weak_ptr_factory_.GetWeakPtr(),
288 login_manager::kSessionManagerStorePolicy, 286 login_manager::kSessionManagerStorePolicy,
289 callback)); 287 callback));
290 } 288 }
291 289
292 void StorePolicyForUser(const std::string& username, 290 void StorePolicyForUser(const std::string& user_id,
293 const std::string& policy_blob, 291 const std::string& policy_blob,
294 const StorePolicyCallback& callback) override { 292 const StorePolicyCallback& callback) override {
295 CallStorePolicyByUsername(login_manager::kSessionManagerStorePolicyForUser, 293 CallStorePolicyByUsername(login_manager::kSessionManagerStorePolicyForUser,
296 username, 294 user_id, policy_blob, callback);
297 policy_blob,
298 callback);
299 } 295 }
300 296
301 void StoreDeviceLocalAccountPolicy( 297 void StoreDeviceLocalAccountPolicy(
302 const std::string& account_name, 298 const std::string& account_name,
303 const std::string& policy_blob, 299 const std::string& policy_blob,
304 const StorePolicyCallback& callback) override { 300 const StorePolicyCallback& callback) override {
305 CallStorePolicyByUsername( 301 CallStorePolicyByUsername(
306 login_manager::kSessionManagerStoreDeviceLocalAccountPolicy, 302 login_manager::kSessionManagerStoreDeviceLocalAccountPolicy,
307 account_name, 303 account_name,
308 policy_blob, 304 policy_blob,
309 callback); 305 callback);
310 } 306 }
311 307
312 void SetFlagsForUser(const std::string& username, 308 void SetFlagsForUser(const std::string& user_id,
313 const std::vector<std::string>& flags) override { 309 const std::vector<std::string>& flags) override {
314 dbus::MethodCall method_call(login_manager::kSessionManagerInterface, 310 dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
315 login_manager::kSessionManagerSetFlagsForUser); 311 login_manager::kSessionManagerSetFlagsForUser);
316 dbus::MessageWriter writer(&method_call); 312 dbus::MessageWriter writer(&method_call);
317 writer.AppendString(username); 313 writer.AppendString(user_id);
318 writer.AppendArrayOfStrings(flags); 314 writer.AppendArrayOfStrings(flags);
319 session_manager_proxy_->CallMethod( 315 session_manager_proxy_->CallMethod(
320 &method_call, 316 &method_call,
321 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 317 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
322 dbus::ObjectProxy::EmptyResponseCallback()); 318 dbus::ObjectProxy::EmptyResponseCallback());
323 } 319 }
324 320
325 void GetServerBackedStateKeys(const StateKeysCallback& callback) override { 321 void GetServerBackedStateKeys(const StateKeysCallback& callback) override {
326 dbus::MethodCall method_call( 322 dbus::MethodCall method_call(
327 login_manager::kSessionManagerInterface, 323 login_manager::kSessionManagerInterface,
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 dbus::MethodCall method_call(login_manager::kSessionManagerInterface, 412 dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
417 method_name); 413 method_name);
418 session_manager_proxy_->CallMethod( 414 session_manager_proxy_->CallMethod(
419 &method_call, 415 &method_call,
420 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 416 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
421 dbus::ObjectProxy::EmptyResponseCallback()); 417 dbus::ObjectProxy::EmptyResponseCallback());
422 } 418 }
423 419
424 // Helper for RetrieveDeviceLocalAccountPolicy and RetrievePolicyForUser. 420 // Helper for RetrieveDeviceLocalAccountPolicy and RetrievePolicyForUser.
425 void CallRetrievePolicyByUsername(const std::string& method_name, 421 void CallRetrievePolicyByUsername(const std::string& method_name,
426 const std::string& username, 422 const std::string& user_id,
427 const RetrievePolicyCallback& callback) { 423 const RetrievePolicyCallback& callback) {
428 dbus::MethodCall method_call(login_manager::kSessionManagerInterface, 424 dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
429 method_name); 425 method_name);
430 dbus::MessageWriter writer(&method_call); 426 dbus::MessageWriter writer(&method_call);
431 writer.AppendString(username); 427 writer.AppendString(user_id);
432 session_manager_proxy_->CallMethod( 428 session_manager_proxy_->CallMethod(
433 &method_call, 429 &method_call,
434 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 430 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
435 base::Bind( 431 base::Bind(
436 &SessionManagerClientImpl::OnRetrievePolicy, 432 &SessionManagerClientImpl::OnRetrievePolicy,
437 weak_ptr_factory_.GetWeakPtr(), 433 weak_ptr_factory_.GetWeakPtr(),
438 method_name, 434 method_name,
439 callback)); 435 callback));
440 } 436 }
441 437
442 void CallStorePolicyByUsername(const std::string& method_name, 438 void CallStorePolicyByUsername(const std::string& method_name,
443 const std::string& username, 439 const std::string& user_id,
444 const std::string& policy_blob, 440 const std::string& policy_blob,
445 const StorePolicyCallback& callback) { 441 const StorePolicyCallback& callback) {
446 dbus::MethodCall method_call(login_manager::kSessionManagerInterface, 442 dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
447 method_name); 443 method_name);
448 dbus::MessageWriter writer(&method_call); 444 dbus::MessageWriter writer(&method_call);
449 writer.AppendString(username); 445 writer.AppendString(user_id);
450 // static_cast does not work due to signedness. 446 // static_cast does not work due to signedness.
451 writer.AppendArrayOfBytes( 447 writer.AppendArrayOfBytes(
452 reinterpret_cast<const uint8_t*>(policy_blob.data()), 448 reinterpret_cast<const uint8_t*>(policy_blob.data()),
453 policy_blob.size()); 449 policy_blob.size());
454 session_manager_proxy_->CallMethod( 450 session_manager_proxy_->CallMethod(
455 &method_call, 451 &method_call,
456 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 452 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
457 base::Bind( 453 base::Bind(
458 &SessionManagerClientImpl::OnStorePolicy, 454 &SessionManagerClientImpl::OnStorePolicy,
459 weak_ptr_factory_.GetWeakPtr(), 455 weak_ptr_factory_.GetWeakPtr(),
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 return; 763 return;
768 } 764 }
769 base::FilePath device_policy_path = 765 base::FilePath device_policy_path =
770 owner_key_path.DirName().AppendASCII("stub_device_policy"); 766 owner_key_path.DirName().AppendASCII("stub_device_policy");
771 base::PostTaskAndReplyWithResult( 767 base::PostTaskAndReplyWithResult(
772 base::WorkerPool::GetTaskRunner(false).get(), 768 base::WorkerPool::GetTaskRunner(false).get(),
773 FROM_HERE, 769 FROM_HERE,
774 base::Bind(&GetFileContent, device_policy_path), 770 base::Bind(&GetFileContent, device_policy_path),
775 callback); 771 callback);
776 } 772 }
777 void RetrievePolicyForUser(const std::string& username, 773 void RetrievePolicyForUser(const std::string& user_id,
778 const RetrievePolicyCallback& callback) override { 774 const RetrievePolicyCallback& callback) override {
779 base::PostTaskAndReplyWithResult( 775 base::PostTaskAndReplyWithResult(
780 base::WorkerPool::GetTaskRunner(false).get(), 776 base::WorkerPool::GetTaskRunner(false).get(), FROM_HERE,
781 FROM_HERE, 777 base::Bind(&GetFileContent, GetUserFilePath(user_id, "stub_policy")),
782 base::Bind(&GetFileContent, GetUserFilePath(username, "stub_policy")),
783 callback); 778 callback);
784 } 779 }
785 std::string BlockingRetrievePolicyForUser( 780 std::string BlockingRetrievePolicyForUser(
786 const std::string& username) override { 781 const std::string& user_id) override {
787 return GetFileContent(GetUserFilePath(username, "stub_policy")); 782 return GetFileContent(GetUserFilePath(user_id, "stub_policy"));
788 } 783 }
789 void RetrieveDeviceLocalAccountPolicy( 784 void RetrieveDeviceLocalAccountPolicy(
790 const std::string& account_name, 785 const std::string& account_name,
791 const RetrievePolicyCallback& callback) override { 786 const RetrievePolicyCallback& callback) override {
792 RetrievePolicyForUser(account_name, callback); 787 RetrievePolicyForUser(account_name, callback);
793 } 788 }
794 void StoreDevicePolicy(const std::string& policy_blob, 789 void StoreDevicePolicy(const std::string& policy_blob,
795 const StorePolicyCallback& callback) override { 790 const StorePolicyCallback& callback) override {
796 enterprise_management::PolicyFetchResponse response; 791 enterprise_management::PolicyFetchResponse response;
797 base::FilePath owner_key_path; 792 base::FilePath owner_key_path;
(...skipping 16 matching lines...) Expand all
814 // Note also that the owner key will be written before the device policy, 809 // Note also that the owner key will be written before the device policy,
815 // if it was present in the blob. 810 // if it was present in the blob.
816 base::FilePath device_policy_path = 811 base::FilePath device_policy_path =
817 owner_key_path.DirName().AppendASCII("stub_device_policy"); 812 owner_key_path.DirName().AppendASCII("stub_device_policy");
818 base::WorkerPool::PostTaskAndReply( 813 base::WorkerPool::PostTaskAndReply(
819 FROM_HERE, 814 FROM_HERE,
820 base::Bind(&StoreFile, device_policy_path, policy_blob), 815 base::Bind(&StoreFile, device_policy_path, policy_blob),
821 base::Bind(callback, true), 816 base::Bind(callback, true),
822 false); 817 false);
823 } 818 }
824 void StorePolicyForUser(const std::string& username, 819 void StorePolicyForUser(const std::string& user_id,
825 const std::string& policy_blob, 820 const std::string& policy_blob,
826 const StorePolicyCallback& callback) override { 821 const StorePolicyCallback& callback) override {
827 // The session manager writes the user policy key to a well-known 822 // The session manager writes the user policy key to a well-known
828 // location. Do the same with the stub impl, so that user policy works and 823 // location. Do the same with the stub impl, so that user policy works and
829 // can be tested on desktop builds. 824 // can be tested on desktop builds.
830 enterprise_management::PolicyFetchResponse response; 825 enterprise_management::PolicyFetchResponse response;
831 if (!response.ParseFromString(policy_blob)) { 826 if (!response.ParseFromString(policy_blob)) {
832 callback.Run(false); 827 callback.Run(false);
833 return; 828 return;
834 } 829 }
835 830
836 if (response.has_new_public_key()) { 831 if (response.has_new_public_key()) {
837 base::FilePath key_path = GetUserFilePath(username, "policy.pub"); 832 base::FilePath key_path = GetUserFilePath(user_id, "policy.pub");
838 base::WorkerPool::PostTask( 833 base::WorkerPool::PostTask(
839 FROM_HERE, 834 FROM_HERE,
840 base::Bind(&StoreFile, key_path, response.new_public_key()), 835 base::Bind(&StoreFile, key_path, response.new_public_key()),
841 false); 836 false);
842 } 837 }
843 838
844 // This file isn't read directly by Chrome, but is used by this class to 839 // This file isn't read directly by Chrome, but is used by this class to
845 // reload the user policy across restarts. 840 // reload the user policy across restarts.
846 base::FilePath stub_policy_path = GetUserFilePath(username, "stub_policy"); 841 base::FilePath stub_policy_path = GetUserFilePath(user_id, "stub_policy");
847 base::WorkerPool::PostTaskAndReply( 842 base::WorkerPool::PostTaskAndReply(
848 FROM_HERE, 843 FROM_HERE,
849 base::Bind(&StoreFile, stub_policy_path, policy_blob), 844 base::Bind(&StoreFile, stub_policy_path, policy_blob),
850 base::Bind(callback, true), 845 base::Bind(callback, true),
851 false); 846 false);
852 } 847 }
853 void StoreDeviceLocalAccountPolicy( 848 void StoreDeviceLocalAccountPolicy(
854 const std::string& account_name, 849 const std::string& account_name,
855 const std::string& policy_blob, 850 const std::string& policy_blob,
856 const StorePolicyCallback& callback) override { 851 const StorePolicyCallback& callback) override {
857 StorePolicyForUser(account_name, policy_blob, callback); 852 StorePolicyForUser(account_name, policy_blob, callback);
858 } 853 }
859 void SetFlagsForUser(const std::string& username, 854 void SetFlagsForUser(const std::string& user_id,
860 const std::vector<std::string>& flags) override {} 855 const std::vector<std::string>& flags) override {}
861 856
862 void GetServerBackedStateKeys(const StateKeysCallback& callback) override { 857 void GetServerBackedStateKeys(const StateKeysCallback& callback) override {
863 std::vector<std::string> state_keys; 858 std::vector<std::string> state_keys;
864 for (int i = 0; i < 5; ++i) 859 for (int i = 0; i < 5; ++i)
865 state_keys.push_back(crypto::SHA256HashString(base::IntToString(i))); 860 state_keys.push_back(crypto::SHA256HashString(base::IntToString(i)));
866 861
867 if (!callback.is_null()) 862 if (!callback.is_null())
868 callback.Run(state_keys); 863 callback.Run(state_keys);
869 } 864 }
(...skipping 28 matching lines...) Expand all
898 893
899 SessionManagerClient* SessionManagerClient::Create( 894 SessionManagerClient* SessionManagerClient::Create(
900 DBusClientImplementationType type) { 895 DBusClientImplementationType type) {
901 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) 896 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
902 return new SessionManagerClientImpl(); 897 return new SessionManagerClientImpl();
903 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); 898 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
904 return new SessionManagerClientStubImpl(); 899 return new SessionManagerClientStubImpl();
905 } 900 }
906 901
907 } // namespace chromeos 902 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698