| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium OS 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_login.h" // NOLINT | 5 #include "chromeos_login.h" // NOLINT |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include <base/basictypes.h> | 9 #include <base/basictypes.h> |
| 10 #include <base/logging.h> | 10 #include <base/logging.h> |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 } | 222 } |
| 223 | 223 |
| 224 extern "C" | 224 extern "C" |
| 225 bool ChromeOSRetrievePropertySafe(const char* name, Property** OUT_property) { | 225 bool ChromeOSRetrievePropertySafe(const char* name, Property** OUT_property) { |
| 226 DCHECK(OUT_property); | 226 DCHECK(OUT_property); |
| 227 GArray* sig; | 227 GArray* sig; |
| 228 gchar* value = NULL; | 228 gchar* value = NULL; |
| 229 if (!ChromeOSLoginHelpers::RetrievePropertyHelper(name, &value, &sig)) | 229 if (!ChromeOSLoginHelpers::RetrievePropertyHelper(name, &value, &sig)) |
| 230 return false; | 230 return false; |
| 231 *OUT_property = ChromeOSLoginHelpers::CreateProperty(name, value, sig); | 231 *OUT_property = ChromeOSLoginHelpers::CreateProperty(name, value, sig); |
| 232 g_array_free(sig, false); |
| 233 g_free(value); |
| 232 return true; | 234 return true; |
| 233 } | 235 } |
| 234 | 236 |
| 235 extern "C" | 237 extern "C" |
| 236 bool ChromeOSSetOwnerKey(const std::vector<uint8>& public_key_der) { | 238 bool ChromeOSSetOwnerKey(const std::vector<uint8>& public_key_der) { |
| 237 // TODO(cmasone): Remove this code, once we're sure NOTREACHED isn't hit. | 239 // TODO(cmasone): Remove this code, once we're sure NOTREACHED isn't hit. |
| 238 NOTREACHED() << "ChromeOSSetOwnerKey is deprecated"; | 240 NOTREACHED() << "ChromeOSSetOwnerKey is deprecated"; |
| 239 GArray* key_der = | 241 GArray* key_der = |
| 240 ChromeOSLoginHelpers::CreateGArrayFromBytes(&public_key_der[0], | 242 ChromeOSLoginHelpers::CreateGArrayFromBytes(&public_key_der[0], |
| 241 public_key_der.size()); | 243 public_key_der.size()); |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 delete cb_data; | 458 delete cb_data; |
| 457 } | 459 } |
| 458 | 460 |
| 459 void RetrievePolicyNotify(DBusGProxy* gproxy, | 461 void RetrievePolicyNotify(DBusGProxy* gproxy, |
| 460 DBusGProxyCall* call_id, | 462 DBusGProxyCall* call_id, |
| 461 void* user_data) { | 463 void* user_data) { |
| 462 CallbackData<RetrievePolicyCallback>* cb_data = | 464 CallbackData<RetrievePolicyCallback>* cb_data = |
| 463 reinterpret_cast<CallbackData<RetrievePolicyCallback>*>(user_data); | 465 reinterpret_cast<CallbackData<RetrievePolicyCallback>*>(user_data); |
| 464 DCHECK(cb_data); | 466 DCHECK(cb_data); |
| 465 glib::ScopedError error; | 467 glib::ScopedError error; |
| 466 gchar* policy_blob = NULL; | 468 GArray* policy_blob = NULL; |
| 467 if (!::dbus_g_proxy_end_call(gproxy, | 469 if (!::dbus_g_proxy_end_call(gproxy, |
| 468 call_id, | 470 call_id, |
| 469 &Resetter(&error).lvalue(), | 471 &Resetter(&error).lvalue(), |
| 470 G_TYPE_STRING, &policy_blob, | 472 DBUS_TYPE_G_UCHAR_ARRAY, &policy_blob, |
| 471 G_TYPE_INVALID)) { | 473 G_TYPE_INVALID)) { |
| 472 LOG(ERROR) << login_manager::kSessionManagerRetrievePolicy | 474 LOG(ERROR) << login_manager::kSessionManagerRetrievePolicy |
| 473 << " failed: " << SCOPED_SAFE_MESSAGE(error); | 475 << " failed: " << SCOPED_SAFE_MESSAGE(error); |
| 474 } | 476 } |
| 475 cb_data->callback(cb_data->object, policy_blob); | 477 if (policy_blob) { |
| 476 if (policy_blob) | 478 std::string policy(policy_blob->data, policy_blob->len); |
| 477 g_free(policy_blob); | 479 cb_data->callback(cb_data->object, policy.c_str()); |
| 480 g_array_free(policy_blob, TRUE); |
| 481 } else { |
| 482 cb_data->callback(cb_data->object, NULL); |
| 483 } |
| 478 } | 484 } |
| 479 | 485 |
| 480 extern "C" | 486 extern "C" |
| 481 void ChromeOSRetrievePolicy(RetrievePolicyCallback callback, void* delegate) { | 487 void ChromeOSRetrievePolicy(RetrievePolicyCallback callback, void* delegate) { |
| 482 DCHECK(delegate); | 488 DCHECK(delegate); |
| 483 CallbackData<RetrievePolicyCallback>* cb_data = | 489 CallbackData<RetrievePolicyCallback>* cb_data = |
| 484 new CallbackData<RetrievePolicyCallback>(callback, delegate); | 490 new CallbackData<RetrievePolicyCallback>(callback, delegate); |
| 485 DBusGProxyCall* call_id = | 491 DBusGProxyCall* call_id = |
| 486 ::dbus_g_proxy_begin_call(cb_data->proxy.gproxy(), | 492 ::dbus_g_proxy_begin_call(cb_data->proxy.gproxy(), |
| 487 login_manager::kSessionManagerRetrievePolicy, | 493 login_manager::kSessionManagerRetrievePolicy, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 512 LOG(ERROR) << login_manager::kSessionManagerStorePolicy | 518 LOG(ERROR) << login_manager::kSessionManagerStorePolicy |
| 513 << " failed: " << SCOPED_SAFE_MESSAGE(error); | 519 << " failed: " << SCOPED_SAFE_MESSAGE(error); |
| 514 } | 520 } |
| 515 cb_data->callback(cb_data->object, success); | 521 cb_data->callback(cb_data->object, success); |
| 516 } | 522 } |
| 517 | 523 |
| 518 extern "C" | 524 extern "C" |
| 519 void ChromeOSStorePolicy(const char* prop, | 525 void ChromeOSStorePolicy(const char* prop, |
| 520 StorePolicyCallback callback, | 526 StorePolicyCallback callback, |
| 521 void* delegate) { | 527 void* delegate) { |
| 528 DCHECK(prop); |
| 522 DCHECK(delegate); | 529 DCHECK(delegate); |
| 523 CallbackData<StorePolicyCallback>* cb_data = | 530 CallbackData<StorePolicyCallback>* cb_data = |
| 524 new CallbackData<StorePolicyCallback>(callback, delegate); | 531 new CallbackData<StorePolicyCallback>(callback, delegate); |
| 532 GArray* policy = g_array_new(FALSE, FALSE, 1); |
| 533 policy->data = const_cast<gchar*>(prop); // This just gets copied below. |
| 534 policy->len = strlen(prop); |
| 525 DBusGProxyCall* call_id = | 535 DBusGProxyCall* call_id = |
| 526 ::dbus_g_proxy_begin_call(cb_data->proxy.gproxy(), | 536 ::dbus_g_proxy_begin_call(cb_data->proxy.gproxy(), |
| 527 login_manager::kSessionManagerStorePolicy, | 537 login_manager::kSessionManagerStorePolicy, |
| 528 &StorePolicyNotify, | 538 &StorePolicyNotify, |
| 529 cb_data, | 539 cb_data, |
| 530 &DeleteCallbackData<StorePolicyCallback>, | 540 &DeleteCallbackData<StorePolicyCallback>, |
| 531 G_TYPE_STRING, prop, | 541 DBUS_TYPE_G_UCHAR_ARRAY, policy, |
| 532 G_TYPE_INVALID); | 542 G_TYPE_INVALID); |
| 533 if (!call_id) { | 543 if (!call_id) { |
| 534 LOG(ERROR) << "StorePolicy async call failed"; | 544 LOG(ERROR) << "StorePolicy async call failed"; |
| 535 delete cb_data; | 545 delete cb_data; |
| 536 callback(delegate, false); | 546 callback(delegate, false); |
| 537 } | 547 } |
| 548 g_array_free(policy, FALSE); |
| 538 } | 549 } |
| 539 | 550 |
| 540 } // namespace chromeos | 551 } // namespace chromeos |
| OLD | NEW |