Index: session_manager_service.h |
diff --git a/session_manager_service.h b/session_manager_service.h |
index edfe2b1699ccdebbb416079e93445dd396e206eb..36cb6405fa9b9b5df2f541ee51e8c3af3cc9ceec 100644 |
--- a/session_manager_service.h |
+++ b/session_manager_service.h |
@@ -23,6 +23,7 @@ |
#include <chromeos/dbus/dbus.h> |
#include <chromeos/dbus/service_constants.h> |
+#include "login_manager/child_job.h" |
#include "login_manager/file_checker.h" |
#include "login_manager/owner_key.h" |
#include "login_manager/owner_key_loss_mitigator.h" |
@@ -100,6 +101,9 @@ class SessionManagerService |
void set_upstart_signal_emitter(UpstartSignalEmitter* emitter) { |
session_manager_service_->upstart_signal_emitter_.reset(emitter); |
} |
+ void set_keygen_job(ChildJobInterface* job) { |
+ session_manager_service_->keygen_job_.reset(job); |
+ } |
// Sets whether the the manager exits when a child finishes. |
void set_exit_on_child_done(bool do_exit) { |
@@ -305,6 +309,12 @@ class SessionManagerService |
// start was successful. |
gboolean RestartEntd(GError** error); |
+ // Ensures that the public key in |buf| is legitimately paired with |
+ // a private key held by the current user, signs and stores some |
+ // ownership-related metadata, and then stores this key off as the |
+ // new device Owner key. |
+ void ValidateAndStoreOwnerKey(const std::string& buf); |
+ |
// Perform very, very basic validation of |email_address|. |
static bool ValidateEmail(const std::string& email_address); |
@@ -344,9 +354,10 @@ class SessionManagerService |
void* data); |
// |data| is a SessionManagerService* |
- static void HandleChildExit(GPid pid, |
- gint status, |
- gpointer data); |
+ static void HandleChildExit(GPid pid, gint status, gpointer data); |
+ |
+ // |data| is a SessionManagerService* |
+ static void HandleKeygenExit(GPid pid, gint status, gpointer data); |
// |data| is a SessionManagerService*. This is a wrapper around |
// ServiceShutdown() so that we can register it as the callback for |
@@ -383,10 +394,14 @@ class SessionManagerService |
gboolean ValidateAndCacheUserEmail(const gchar* email_address, |
GError** error); |
+ // Searches through |child_pids_| for |pid|. Returns index of child if |
+ // found, -1 if not. |
+ int FindChildByPid(int pid); |
+ |
// Terminate all children, with increasing prejudice. |
void CleanupChildren(int timeout); |
- // If the current user has access to the owner private key |
+ // Assuming the current user has access to the owner private key |
// (read: is the owner), this call whitelists |current_user_|, sets a |
// property indicating |current_user_| is the owner, and schedules both |
// a PersistWhitelist() and a PersistStore(). |
@@ -441,6 +456,8 @@ class SessionManagerService |
// to signal Chromium when done. |
void PersistStore(); |
+ void StartKeyGeneration(); |
+ |
// Uses |system_| to send |signal_name| to Chromium. Attaches a payload |
// to the signal indicating the status of |succeeded|. |
void SendSignal(const char signal_name[], bool succeeded); |
@@ -458,10 +475,13 @@ class SessionManagerService |
// The name of the pref that Chrome sets to track who the owner is. |
static const char kDeviceOwnerPref[]; |
static const char kIOThreadName[]; |
+ static const char kKeygenExecutable[]; |
+ static const char kTemporaryKeyFilename[]; |
std::vector<ChildJobInterface*> child_jobs_; |
std::vector<int> child_pids_; |
bool exit_on_child_done_; |
+ scoped_ptr<ChildJobInterface> keygen_job_; |
gobject::SessionManager* session_manager_; |
GMainLoop* main_loop_; |