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

Unified Diff: chromeos_login.cc

Issue 3166035: add more ownership API methods to libcros (Closed) Base URL: http://git.chromium.org/git/cros.git
Patch Set: Forgot to INIT_FUNC some new stuff Created 10 years, 4 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
« no previous file with comments | « chromeos_login.h ('k') | drive_login.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos_login.cc
diff --git a/chromeos_login.cc b/chromeos_login.cc
index a90b658be9b449d71d811df45ec1d90cf3958f94..39909cf3098b2c672f5df273bebd53b91e02f285 100644
--- a/chromeos_login.cc
+++ b/chromeos_login.cc
@@ -17,6 +17,9 @@
namespace chromeos { // NOLINT
+
+#define SCOPED_SAFE_MESSAGE(e) (e->message ? e->message : "unknown error")
+
namespace {
chromeos::dbus::Proxy CreateProxy() {
dbus::BusConnection bus = dbus::GetSystemBusConnection();
@@ -48,6 +51,36 @@ class OpaqueSessionConnection {
};
extern "C"
+bool ChromeOSCheckWhitelist(const char* email,
+ std::vector<uint8>* signature) {
+ DCHECK(signature);
+ chromeos::dbus::Proxy proxy = CreateProxy();
+ chromeos::glib::ScopedError error;
+
+ GArray* sig;
+
+ if (!::dbus_g_proxy_call(proxy.gproxy(),
+ login_manager::kSessionManagerCheckWhitelist,
+ &Resetter(&error).lvalue(),
+ G_TYPE_STRING, email,
+ G_TYPE_INVALID,
+ DBUS_TYPE_G_UCHAR_ARRAY, &sig,
+ G_TYPE_INVALID)) {
+ LOG(WARNING) << login_manager::kSessionManagerCheckWhitelist << " failed: "
+ << SCOPED_SAFE_MESSAGE(error);
+ return false;
+ }
+ bool rv = false;
+ signature->resize(sig->len);
+ if (signature->size() == sig->len) {
+ memcpy(&(signature->at(0)), static_cast<const void*>(sig->data), sig->len);
+ rv = true;
+ }
+ g_array_free(sig, false);
+ return rv;
+}
+
+extern "C"
bool ChromeOSEmitLoginPromptReady() {
chromeos::dbus::Proxy proxy = CreateProxy();
gboolean done = false;
@@ -57,19 +90,51 @@ bool ChromeOSEmitLoginPromptReady() {
login_manager::kSessionManagerEmitLoginPromptReady,
&Resetter(&error).lvalue(),
G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &done,
+ G_TYPE_BOOLEAN, &done,
G_TYPE_INVALID)) {
LOG(WARNING) << login_manager::kSessionManagerEmitLoginPromptReady
- << " failed: "
- << (error->message ? error->message : "Unknown Error.");
+ << " failed: " << SCOPED_SAFE_MESSAGE(error);
}
return done;
}
extern "C"
+bool ChromeOSCheckRetrieveProperty(const char* name,
+ std::string* out_value,
+ std::vector<uint8>* signature) {
+ DCHECK(signature);
+ chromeos::dbus::Proxy proxy = CreateProxy();
+ chromeos::glib::ScopedError error;
+
+ GArray* sig;
+ gchar* value;
+
+ if (!::dbus_g_proxy_call(proxy.gproxy(),
+ login_manager::kSessionManagerCheckWhitelist,
+ &Resetter(&error).lvalue(),
+ G_TYPE_STRING, name,
+ G_TYPE_INVALID,
+ G_TYPE_STRING, value,
+ DBUS_TYPE_G_UCHAR_ARRAY, &sig,
+ G_TYPE_INVALID)) {
+ LOG(WARNING) << login_manager::kSessionManagerCheckWhitelist << " failed: "
+ << SCOPED_SAFE_MESSAGE(error);
+ return false;
+ }
+ bool rv = false;
+ signature->resize(sig->len);
+ if (signature->size() == sig->len) {
+ memcpy(&(signature->at(0)), static_cast<const void*>(sig->data), sig->len);
+ rv = true;
+ }
+ g_array_free(sig, false);
+ out_value->assign(value);
+ return rv;
+}
+
+extern "C"
bool ChromeOSSetOwnerKey(const std::vector<uint8>& public_key_der) {
chromeos::dbus::Proxy proxy = CreateProxy();
chromeos::glib::ScopedError error;
@@ -81,12 +146,11 @@ bool ChromeOSSetOwnerKey(const std::vector<uint8>& public_key_der) {
if (!::dbus_g_proxy_call(proxy.gproxy(),
login_manager::kSessionManagerSetOwnerKey,
&Resetter(&error).lvalue(),
- DBUS_TYPE_G_UCHAR_ARRAY,
- key_der,
+ DBUS_TYPE_G_UCHAR_ARRAY, key_der,
G_TYPE_INVALID,
G_TYPE_INVALID)) {
LOG(WARNING) << login_manager::kSessionManagerSetOwnerKey << " failed: "
- << (error->message ? error->message : "Unknown Error.");
+ << SCOPED_SAFE_MESSAGE(error);
rv = false;
}
g_array_free(key_der, TRUE);
@@ -103,16 +167,13 @@ bool ChromeOSStartSession(const char* user_email,
if (!::dbus_g_proxy_call(proxy.gproxy(),
login_manager::kSessionManagerStartSession,
&Resetter(&error).lvalue(),
- G_TYPE_STRING,
- user_email,
- G_TYPE_STRING,
- unique_id,
+ G_TYPE_STRING, user_email,
+ G_TYPE_STRING, unique_id,
G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &done,
+ G_TYPE_BOOLEAN, &done,
G_TYPE_INVALID)) {
LOG(WARNING) << login_manager::kSessionManagerStartSession << " failed: "
- << (error->message ? error->message : "Unknown Error.");
+ << SCOPED_SAFE_MESSAGE(error);
}
return done;
}
@@ -126,14 +187,12 @@ bool ChromeOSStopSession(const char* unique_id /* unused */) {
if (!::dbus_g_proxy_call(proxy.gproxy(),
login_manager::kSessionManagerStopSession,
&Resetter(&error).lvalue(),
- G_TYPE_STRING,
- unique_id,
+ G_TYPE_STRING, unique_id,
G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &done,
+ G_TYPE_BOOLEAN, &done,
G_TYPE_INVALID)) {
LOG(WARNING) << login_manager::kSessionManagerStopSession << " failed: "
- << (error->message ? error->message : "Unknown Error.");
+ << SCOPED_SAFE_MESSAGE(error);
}
return done;
}
@@ -147,25 +206,89 @@ bool ChromeOSRestartJob(int pid, const char* command_line) {
if (!::dbus_g_proxy_call(proxy.gproxy(),
login_manager::kSessionManagerRestartJob,
&Resetter(&error).lvalue(),
- G_TYPE_INT,
- pid,
- G_TYPE_STRING,
- command_line,
+ G_TYPE_INT, pid,
+ G_TYPE_STRING, command_line,
G_TYPE_INVALID,
- G_TYPE_BOOLEAN,
- &done,
+ G_TYPE_BOOLEAN, &done,
G_TYPE_INVALID)) {
LOG(WARNING) << login_manager::kSessionManagerRestartJob << " failed: "
- << (error->message ? error->message : "Unknown Error.");
+ << SCOPED_SAFE_MESSAGE(error);
}
return done;
}
+extern "C"
+bool ChromeOSStoreProperty(const char* name,
+ const char* value,
+ const std::vector<uint8>& signature) {
+ chromeos::dbus::Proxy proxy = CreateProxy();
+ chromeos::glib::ScopedError error;
+
+ GArray* sig = g_array_sized_new(FALSE, FALSE, 1, signature.size());
+ g_array_append_vals(sig, &signature[0], signature.size());
+
+ bool rv = true;
+ if (!::dbus_g_proxy_call(proxy.gproxy(),
+ login_manager::kSessionManagerStoreProperty,
+ &Resetter(&error).lvalue(),
+ G_TYPE_STRING, name,
+ G_TYPE_STRING, value,
+ DBUS_TYPE_G_UCHAR_ARRAY, sig,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID)) {
+ LOG(WARNING) << login_manager::kSessionManagerStoreProperty << " failed: "
+ << SCOPED_SAFE_MESSAGE(error);
+ rv = false;
+ }
+ g_array_free(sig, TRUE);
+ return rv;
+}
+
+namespace {
+bool WhitelistOpHelper(const char* op,
+ const char* email,
+ const std::vector<uint8>& signature) {
+ chromeos::dbus::Proxy proxy = CreateProxy();
+ chromeos::glib::ScopedError error;
+ GArray* sig = g_array_sized_new(FALSE, FALSE, 1, signature.size());
+ g_array_append_vals(sig, &signature[0], signature.size());
-#define SAFE_MESSAGE(e) (e.message ? e.message : "unknown error")
+ bool rv = true;
+ if (!::dbus_g_proxy_call(proxy.gproxy(),
+ op,
+ &Resetter(&error).lvalue(),
+ G_TYPE_STRING, email,
+ DBUS_TYPE_G_UCHAR_ARRAY, sig,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID)) {
+ LOG(WARNING) << op << " failed: " << SCOPED_SAFE_MESSAGE(error);
+ rv = false;
+ }
+ g_array_free(sig, TRUE);
+ return rv;
+}
+} // anonymous namespace
+
+extern "C"
+bool ChromeOSUnwhitelist(const char* email,
+ const std::vector<uint8>& signature) {
+ return WhitelistOpHelper(login_manager::kSessionManagerUnwhitelist,
+ email,
+ signature);
+}
+
+extern "C"
+bool ChromeOSWhitelist(const char* email,
+ const std::vector<uint8>& signature) {
+ return WhitelistOpHelper(login_manager::kSessionManagerWhitelist,
+ email,
+ signature);
+}
namespace {
+#define SAFE_MESSAGE(e) (e.message ? e.message : "unknown error")
+
bool IsSuccess(DBusMessage* message) {
char* out_string = NULL;
DBusError error;
« no previous file with comments | « chromeos_login.h ('k') | drive_login.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698