Remove chromeos_cryptohome.cc
BUG=chromium-os:16552
TEST=gmerge libcros
Change-Id: I2e2240075d5ea3f9045df271263d2afabcb76e6f
Reviewed-on: https://gerrit.chromium.org/gerrit/16934
Reviewed-by: Satoru Takabayashi <satorux@chromium.org>
Tested-by: Ryo Hashimoto <hashimoto@chromium.org>
Commit-Ready: Ryo Hashimoto <hashimoto@chromium.org>
diff --git a/SConstruct.chromiumos b/SConstruct.chromiumos
index fd413d1..0acac05 100644
--- a/SConstruct.chromiumos
+++ b/SConstruct.chromiumos
@@ -65,7 +65,6 @@
base_env.Append(LINKFLAGS=Split('-fPIC'))
SOURCES = Split('''\
- chromeos_cryptohome.cc
chromeos_network.cc
marshal.glibmarshal.c
version_check.cc
diff --git a/chromeos_cros_api.h b/chromeos_cros_api.h
index 97b5978..ca6a749 100644
--- a/chromeos_cros_api.h
+++ b/chromeos_cros_api.h
@@ -364,12 +364,29 @@
// CryptohomeInstallAttributesIsInvalid,
// CryptohomeInstallAttributesIsFirstInstall, CryptohomeFreeString
// CryptohomeMonitorSession.
+// 197: Removed CryptohomeAsyncCheckKey, CryptohomeAsyncMigrateKey,
+// CryptohomeAsyncMountGuest, CryptohomeAsyncMountSafe,
+// CryptohomeAsyncRemove, CryptohomeAsyncSetOwnerUser,
+// CryptohomeFreeString, CryptohomeGetStatusString,
+// CryptohomeGetStatusStringSafe, CryptohomeGetSystemSaltSafe,
+// CryptohomeInstallAttributesFinalize, CryptohomeInstallAttributesGet,
+// CryptohomeInstallAttributesIsFirstInstall,
+// CryptohomeInstallAttributesIsInvalid,
+// CryptohomeInstallAttributesIsReady, CryptohomeInstallAttributesSet,
+// CryptohomeIsMounted, CryptohomeMonitorSession,
+// CryptohomePkcs11GetTpmTokenInfo,
+// CryptohomePkcs11GetTmpTokenReadyForUser,
+// CryptohomePkcs11IsTpmTokenReady,
+// CryptohomePkcs11IsTmpTokenReadyForUser,
+// CryptohomeTpmCanAttemptOwnership, CryptohomeTpmClearStoredPassword,
+// CryptohomeTpmGetPasswordSafe, CryptohomeTpmIsBeingOwned,
+// CryptohomeTpmIsEnabled, CryptohomeTpmIsOwned, CryptohomeTpmIsReady.
namespace chromeos { // NOLINT
enum CrosAPIVersion {
- kCrosAPIMinVersion = 191,
- kCrosAPIVersion = 196
+ kCrosAPIMinVersion = 196,
+ kCrosAPIVersion = 197
};
// Default path to pass to LoadCros: "/opt/google/chrome/chromeos/libcros.so"
diff --git a/chromeos_cryptohome.cc b/chromeos_cryptohome.cc
deleted file mode 100644
index 52e10e4..0000000
--- a/chromeos_cryptohome.cc
+++ /dev/null
@@ -1,838 +0,0 @@
-// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <string>
-#include <vector>
-
-#include <base/basictypes.h>
-#include <base/string_util.h>
-#include <dbus/dbus-glib-lowlevel.h>
-#include <chromeos/dbus/dbus.h>
-#include <chromeos/dbus/service_constants.h>
-#include <chromeos/glib/object.h>
-
-namespace chromeos { // NOLINT
-
-struct CryptohomeAsyncCallStatus {
- int async_id;
- bool return_status;
- int return_code;
-};
-
-typedef void(*CryptohomeSignalCallback)(
- const CryptohomeAsyncCallStatus& call_status, void* callback_context);
-
-extern "C"
-int ChromeOSCryptohomeAsyncCheckKey(const char* user_email, const char* key) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gint async_call_id = 0;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeAsyncCheckKey,
- &Resetter(&error).lvalue(),
- G_TYPE_STRING,
- user_email,
- G_TYPE_STRING,
- key,
- G_TYPE_INVALID,
- G_TYPE_INT,
- &async_call_id,
- G_TYPE_INVALID)) {
- LOG(WARNING) << cryptohome::kCryptohomeAsyncCheckKey << " failed: "
- << (error->message ? error->message : "Unknown Error.");
- }
- return async_call_id;
-}
-
-extern "C"
-int ChromeOSCryptohomeAsyncMigrateKey(const char* user_email,
- const char* from_key,
- const char* to_key) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gint async_call_id = 0;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeAsyncMigrateKey,
- &Resetter(&error).lvalue(),
- G_TYPE_STRING,
- user_email,
- G_TYPE_STRING,
- from_key,
- G_TYPE_STRING,
- to_key,
- G_TYPE_INVALID,
- G_TYPE_INT,
- &async_call_id,
- G_TYPE_INVALID)) {
- LOG(WARNING) << cryptohome::kCryptohomeAsyncMigrateKey << " failed: "
- << (error->message ? error->message : "Unknown Error.");
- }
- return async_call_id;
-}
-
-extern "C"
-int ChromeOSCryptohomeAsyncRemove(const char* user_email) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gint async_call_id = 0;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeAsyncRemove,
- &Resetter(&error).lvalue(),
- G_TYPE_STRING,
- user_email,
- G_TYPE_INVALID,
- G_TYPE_INT,
- &async_call_id,
- G_TYPE_INVALID)) {
- LOG(WARNING) << cryptohome::kCryptohomeAsyncRemove << " failed: "
- << (error->message ? error->message : "Unknown Error.");
- }
- return async_call_id;
-}
-
-extern "C"
-bool ChromeOSCryptohomeGetSystemSaltSafe(char** salt, int* length) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- GArray* dbus_salt;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeGetSystemSalt,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- DBUS_TYPE_G_UCHAR_ARRAY,
- &dbus_salt,
- G_TYPE_INVALID)) {
- LOG(WARNING) << cryptohome::kCryptohomeGetSystemSalt << " failed: "
- << (error->message ? error->message : "Unknown Error.");
- return false;
- }
- char* local_salt = static_cast<char*>(g_malloc(dbus_salt->len));
- if (local_salt) {
- memcpy(local_salt, static_cast<const void*>(dbus_salt->data),
- dbus_salt->len);
- *salt = local_salt;
- *length = dbus_salt->len;
- g_array_free(dbus_salt, false);
- return true;
- }
- g_array_free(dbus_salt, false);
- return false;
-}
-
-extern "C"
-bool ChromeOSCryptohomeIsMounted() {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gboolean done = false;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeIsMounted,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &done,
- G_TYPE_INVALID)) {
-
- LOG(FATAL) << cryptohome::kCryptohomeIsMounted << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
- return done;
-}
-
-gchar** ChromeOSCryptohomeCopyStringArray(
- const std::vector<std::string>& input_array) {
- gchar** return_array = g_new(gchar*, input_array.size() + 1);
- if (!return_array) {
- return NULL;
- }
- int i = 0;
- for (std::vector<std::string>::const_iterator itr = input_array.begin();
- itr != input_array.end();
- itr++, i++) {
- return_array[i] = g_strdup((*itr).c_str());
- if (!return_array[i]) {
- // return_array is automatically NULL-terminated in this case
- g_strfreev(return_array);
- return NULL;
- }
- }
- return_array[i] = NULL;
- return return_array;
-}
-
-extern "C"
-int ChromeOSCryptohomeAsyncMountSafe(
- const char* user_email,
- const char* key,
- bool create_if_missing,
- bool replace_tracked_subdirectories,
- const char** tracked_subdirectories) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gint async_call_id = 0;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeAsyncMount,
- &Resetter(&error).lvalue(),
- G_TYPE_STRING,
- user_email,
- G_TYPE_STRING,
- key,
- G_TYPE_BOOLEAN,
- create_if_missing,
- G_TYPE_BOOLEAN,
- replace_tracked_subdirectories,
- G_TYPE_STRV,
- tracked_subdirectories,
- G_TYPE_INVALID,
- G_TYPE_INT,
- &async_call_id,
- G_TYPE_INVALID)) {
- LOG(WARNING) << cryptohome::kCryptohomeAsyncMount << " failed: "
- << (error->message ? error->message : "Unknown Error.");
- }
-
- return async_call_id;
-}
-
-extern "C"
-int ChromeOSCryptohomeAsyncMountGuest() {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gint async_call_id = 0;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeAsyncMountGuest,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_INT,
- &async_call_id,
- G_TYPE_INVALID)) {
- LOG(WARNING) << cryptohome::kCryptohomeAsyncMountGuest << " failed: "
- << (error->message ? error->message : "Unknown Error.");
- }
- return async_call_id;
-}
-
-extern "C"
-int ChromeOSCryptohomeAsyncSetOwnerUser(const char* username) {
- return 0;
-}
-
-extern "C"
-bool ChromeOSCryptohomeTpmIsReady() {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gboolean ready = false;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeTpmIsReady,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &ready,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomeTpmIsReady << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
- return ready;
-}
-
-extern "C"
-bool ChromeOSCryptohomeTpmIsEnabled() {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gboolean done = false;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeTpmIsEnabled,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &done,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomeTpmIsEnabled << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
- return done;
-}
-
-extern "C"
-bool ChromeOSCryptohomeTpmIsOwned() {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gboolean done = false;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeTpmIsOwned,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &done,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomeTpmIsOwned << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
- return done;
-}
-
-extern "C"
-bool ChromeOSCryptohomeTpmIsBeingOwned() {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gboolean done = false;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeTpmIsBeingOwned,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &done,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomeTpmIsBeingOwned << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
- return done;
-}
-
-extern "C"
-bool ChromeOSCryptohomeTpmGetPasswordSafe(char** password) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gchar* local_password = NULL;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeTpmGetPassword,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_STRING,
- &local_password,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomeTpmGetPassword << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
-
- if (local_password) {
- *password = local_password;
- return true;
- }
- *password = NULL;
- return false;
-}
-
-extern "C"
-void ChromeOSCryptohomeTpmCanAttemptOwnership() {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeTpmCanAttemptOwnership,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomeTpmCanAttemptOwnership << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
-}
-
-extern "C"
-void ChromeOSCryptohomeTpmClearStoredPassword() {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeTpmClearStoredPassword,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomeTpmClearStoredPassword << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
-}
-
-// TODO(ellyjones): Remove this. crosbug.com/22120
-extern "C"
-bool ChromeOSCryptohomePkcs11IsTpmTokenReady() {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gboolean ready = FALSE;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomePkcs11IsTpmTokenReady,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &ready,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomePkcs11IsTpmTokenReady << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
- return ready;
-}
-
-extern "C"
-bool ChromeOSCryptohomePkcs11IsTpmTokenReadyForUser(const std::string& user) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gboolean ready = FALSE;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomePkcs11IsTpmTokenReadyForUser,
- &Resetter(&error).lvalue(),
- G_TYPE_STRING,
- user.c_str(),
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &ready,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomePkcs11IsTpmTokenReadyForUser
- << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
- return ready;
-}
-
-// TODO(ellyjones): Remove this. crosbug.com/22120
-extern "C"
-void ChromeOSCryptohomePkcs11GetTpmTokenInfo(std::string* label,
- std::string* user_pin) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gchar* local_label = NULL;
- gchar* local_user_pin = NULL;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomePkcs11GetTpmTokenInfo,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_STRING,
- &local_label,
- G_TYPE_STRING,
- &local_user_pin,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomePkcs11GetTpmTokenInfo << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
-
- if (local_label) {
- *label = local_label;
- g_free(local_label);
- }
- if (local_user_pin) {
- *user_pin = local_user_pin;
- g_free(local_user_pin);
- }
-}
-
-extern "C"
-void ChromeOSCryptohomePkcs11GetTpmTokenInfoForUser(const std::string& user,
- std::string* label,
- std::string* user_pin) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gchar* local_label = NULL;
- gchar* local_user_pin = NULL;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomePkcs11GetTpmTokenInfoForUser,
- &Resetter(&error).lvalue(),
- G_TYPE_STRING,
- user.c_str(),
- G_TYPE_INVALID,
- G_TYPE_STRING,
- &local_label,
- G_TYPE_STRING,
- &local_user_pin,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomePkcs11GetTpmTokenInfo << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
-
- if (local_label) {
- *label = local_label;
- g_free(local_label);
- }
- if (local_user_pin) {
- *user_pin = local_user_pin;
- g_free(local_user_pin);
- }
-}
-
-extern "C"
-bool ChromeOSCryptohomeGetStatusStringSafe(char** status) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gchar* local_status = NULL;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeGetStatusString,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_STRING,
- &local_status,
- G_TYPE_INVALID)) {
-
- LOG(WARNING) << cryptohome::kCryptohomeGetStatusString << " failed: "
- << (error->message ? error->message : "Unknown Error.");
-
- }
-
- if (local_status) {
- *status = local_status;
- return true;
- }
- *status = NULL;
- return false;
-}
-
-extern "C"
-bool ChromeOSCryptohomeGetStatusString(std::string* status) {
- gchar* local_status = NULL;
- if (!ChromeOSCryptohomeGetStatusStringSafe(&local_status)) {
- return false;
- }
-
- status->assign(local_status);
- g_free(local_status);
- return true;
-}
-
-extern "C"
-bool ChromeOSCryptohomeInstallAttributesGet(const char* name, char** value) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gboolean done = false;
- GArray* dbus_value = NULL;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeInstallAttributesGet,
- &Resetter(&error).lvalue(),
- G_TYPE_STRING,
- name,
- G_TYPE_INVALID,
- DBUS_TYPE_G_UCHAR_ARRAY,
- &dbus_value,
- G_TYPE_BOOLEAN,
- &done,
- G_TYPE_INVALID)) {
- LOG(WARNING) << cryptohome::kCryptohomeInstallAttributesGet << " failed: "
- << (error->message ? error->message : "Unknown Error.");
- }
-
- if (!dbus_value || !done)
- return false;
-
- char* local_value = static_cast<char*>(g_malloc(dbus_value->len));
- if (local_value) {
- memcpy(local_value, static_cast<const void*>(dbus_value->data),
- dbus_value->len);
- *value = local_value;
- g_array_free(dbus_value, false);
- return done;
- }
- g_array_free(dbus_value, false);
- return false;
-}
-
-extern "C"
-bool ChromeOSCryptohomeInstallAttributesSet(const char* name,
- const char* value) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gboolean done = false;
- // TODO(pastarmovj): Change this to a bin data compatible impl. when needed.
- int value_len = strlen(value)+1;
- gchar* local_value = static_cast<char*>(g_malloc(value_len));
- if (!local_value)
- return false;
-
- memcpy(local_value, static_cast<const gchar*>(value), value_len);
- GArray *dbus_value = g_array_new(FALSE, FALSE, 1);
- if (!dbus_value)
- return false;
-
- dbus_value->data = local_value;
- dbus_value->len = value_len;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- cryptohome::kCryptohomeInstallAttributesSet,
- &Resetter(&error).lvalue(),
- G_TYPE_STRING,
- name,
- DBUS_TYPE_G_UCHAR_ARRAY,
- dbus_value,
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &done,
- G_TYPE_INVALID)) {
- LOG(WARNING) << cryptohome::kCryptohomeInstallAttributesSet << " failed: "
- << (error->message ? error->message : "Unknown Error.");
- }
-
- g_array_free(dbus_value, FALSE);
- g_free(local_value);
-
- return done;
-}
-
-bool CallCryptohomeBoolFunction(const char* function) {
- dbus::BusConnection bus = dbus::GetSystemBusConnection();
- dbus::Proxy proxy(bus,
- cryptohome::kCryptohomeServiceName,
- cryptohome::kCryptohomeServicePath,
- cryptohome::kCryptohomeInterface);
- gboolean done = false;
- glib::ScopedError error;
-
- if (!::dbus_g_proxy_call(proxy.gproxy(),
- function,
- &Resetter(&error).lvalue(),
- G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &done,
- G_TYPE_INVALID)) {
- LOG(WARNING) << function << " failed: "
- << (error->message ? error->message : "Unknown Error.");
- }
- return done;
-}
-
-
-extern "C"
-bool ChromeOSCryptohomeInstallAttributesFinalize() {
- return CallCryptohomeBoolFunction(
- cryptohome::kCryptohomeInstallAttributesFinalize);
-}
-
-extern "C"
-bool ChromeOSCryptohomeInstallAttributesIsReady() {
- return CallCryptohomeBoolFunction(
- cryptohome::kCryptohomeInstallAttributesIsReady);
-}
-
-extern "C"
-bool ChromeOSCryptohomeInstallAttributesIsInvalid() {
- return CallCryptohomeBoolFunction(
- cryptohome::kCryptohomeInstallAttributesIsInvalid);
-}
-
-extern "C"
-bool ChromeOSCryptohomeInstallAttributesIsFirstInstall() {
- return CallCryptohomeBoolFunction(
- cryptohome::kCryptohomeInstallAttributesIsFirstInstall);
-}
-
-extern "C"
-void ChromeOSCryptohomeFreeString(char* value) {
- if (value) {
- g_free(value);
- }
-}
-
-class CryptohomeSessionConnection {
- public:
- CryptohomeSessionConnection(const CryptohomeSignalCallback& monitor,
- void* monitor_context)
- : monitor_(monitor),
- monitor_context_(monitor_context) {
- }
-
- virtual ~CryptohomeSessionConnection() {}
-
- void Notify(const CryptohomeAsyncCallStatus& call_status) {
- monitor_(call_status, monitor_context_);
- }
-
- private:
- CryptohomeSignalCallback monitor_;
- void* monitor_context_;
-
- DISALLOW_COPY_AND_ASSIGN(CryptohomeSessionConnection);
-};
-
-
-#ifndef SAFE_MESSAGE
-#define SAFE_MESSAGE(e) (e.message ? e.message : "unknown error")
-#endif // SAFE_MESSAGE
-
-bool CryptohomeExtractAsyncStatus(DBusMessage* message,
- CryptohomeAsyncCallStatus* call_status) {
- DBusError error;
- dbus_error_init (&error);
- bool unpack = dbus_message_get_args(message,
- &error,
- DBUS_TYPE_INT32,
- &(call_status->async_id),
- DBUS_TYPE_BOOLEAN,
- &(call_status->return_status),
- DBUS_TYPE_INT32,
- &(call_status->return_code),
- DBUS_TYPE_INVALID);
- if (!unpack) {
- LOG(INFO) << "Couldn't get arg: " << SAFE_MESSAGE(error);
- return false;
- }
- return true;
-}
-
-// A message filter to receive signals.
-DBusHandlerResult CryptohomeSignalFilter(DBusConnection* dbus_connection,
- DBusMessage* message,
- void* connection) {
- CryptohomeSessionConnection* self =
- static_cast<CryptohomeSessionConnection*>(connection);
- if (dbus_message_is_signal(message, cryptohome::kCryptohomeInterface,
- cryptohome::kSignalAsyncCallStatus)) {
- LOG(INFO) << "Filter:: AsyncCallStatus signal received";
- CryptohomeAsyncCallStatus call_status;
- if (CryptohomeExtractAsyncStatus(message, &call_status)) {
- self->Notify(call_status);
- return DBUS_HANDLER_RESULT_HANDLED;
- }
- }
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-}
-
-extern "C"
-void* ChromeOSCryptohomeMonitorSession(CryptohomeSignalCallback monitor,
- void* monitor_context) {
- const std::string filter = StringPrintf("type='signal', interface='%s'",
- cryptohome::kCryptohomeInterface);
-
- DBusError error;
- ::dbus_error_init(&error);
- DBusConnection* dbus_connection = ::dbus_g_connection_get_connection(
- dbus::GetSystemBusConnection().g_connection());
- CHECK(dbus_connection);
- ::dbus_bus_add_match(dbus_connection, filter.c_str(), &error);
- if (::dbus_error_is_set(&error)) {
- LOG(WARNING) << "Failed to add a filter:" << error.name << ", message="
- << SAFE_MESSAGE(error);
- return NULL;
- }
-
- CryptohomeSessionConnection* connection = new CryptohomeSessionConnection(
- monitor,
- monitor_context);
- CHECK(dbus_connection_add_filter(dbus_connection,
- &CryptohomeSignalFilter,
- connection,
- NULL));
-
- LOG(INFO) << "Cryptohome API event monitoring started";
- return connection;
-}
-
-} // namespace chromeos