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> |
11 #include <base/string_util.h> | 11 #include <base/string_util.h> |
12 #include <dbus/dbus-glib-lowlevel.h> | 12 #include <dbus/dbus-glib-lowlevel.h> |
13 #include <chromeos/dbus/dbus.h> | 13 #include <chromeos/dbus/dbus.h> |
14 #include <chromeos/dbus/service_constants.h> | 14 #include <chromeos/dbus/service_constants.h> |
15 #include <chromeos/glib/object.h> | 15 #include <chromeos/glib/object.h> |
16 #include <chromeos/string.h> | |
16 | 17 |
18 #include "chromeos_login_helpers.h" // NOLINT | |
17 #include "marshal.glibmarshal.h" // NOLINT | 19 #include "marshal.glibmarshal.h" // NOLINT |
18 | 20 |
19 namespace chromeos { // NOLINT | 21 namespace chromeos { // NOLINT |
20 | 22 |
21 | 23 // TODO(cmasone): do a bigger refactor, get rid of this copy-paste macro. |
22 #define SCOPED_SAFE_MESSAGE(e) (e->message ? e->message : "unknown error") | 24 #define SCOPED_SAFE_MESSAGE(e) (e->message ? e->message : "unknown error") |
23 | 25 |
24 namespace { | |
25 chromeos::dbus::Proxy CreateProxy() { | |
26 dbus::BusConnection bus = dbus::GetSystemBusConnection(); | |
27 return chromeos::dbus::Proxy(bus, | |
28 login_manager::kSessionManagerServiceName, | |
29 login_manager::kSessionManagerServicePath, | |
30 login_manager::kSessionManagerInterface); | |
31 } | |
32 } // Anonymous namespace. | |
33 | |
34 class OpaqueSessionConnection { | 26 class OpaqueSessionConnection { |
35 public: | 27 public: |
36 OpaqueSessionConnection(const SessionMonitor& monitor, void* object) | 28 OpaqueSessionConnection(const SessionMonitor& monitor, void* object) |
37 : monitor_(monitor), | 29 : monitor_(monitor), |
38 object_(object) { | 30 object_(object) { |
39 } | 31 } |
40 | 32 |
41 virtual ~OpaqueSessionConnection() {} | 33 virtual ~OpaqueSessionConnection() {} |
42 | 34 |
43 void Notify(OwnershipEvent event) { | 35 void Notify(OwnershipEvent event) { |
44 monitor_(object_, event); | 36 monitor_(object_, event); |
45 } | 37 } |
46 | 38 |
47 private: | 39 private: |
48 SessionMonitor monitor_; | 40 SessionMonitor monitor_; |
49 void* object_; | 41 void* object_; |
50 | 42 |
51 DISALLOW_COPY_AND_ASSIGN(OpaqueSessionConnection); | 43 DISALLOW_COPY_AND_ASSIGN(OpaqueSessionConnection); |
52 }; | 44 }; |
53 | 45 |
54 extern "C" | 46 extern "C" |
55 bool ChromeOSCheckWhitelist(const char* email, | 47 bool ChromeOSCheckWhitelist(const char* email, |
56 std::vector<uint8>* signature) { | 48 std::vector<uint8>* signature) { |
49 // TODO(cmasone): Enable NOTREACHED once Chrome is migrated. | |
50 // NOTREACHED() << "ChromeOSCheckWhitelist is deprecated"; | |
57 DCHECK(signature); | 51 DCHECK(signature); |
58 chromeos::dbus::Proxy proxy = CreateProxy(); | |
59 chromeos::glib::ScopedError error; | |
60 | |
61 GArray* sig; | 52 GArray* sig; |
62 | 53 if (!ChromeOSLoginHelpers::CheckWhitelistHelper(email, &sig)) |
63 if (!::dbus_g_proxy_call(proxy.gproxy(), | |
64 login_manager::kSessionManagerCheckWhitelist, | |
65 &Resetter(&error).lvalue(), | |
66 G_TYPE_STRING, email, | |
67 G_TYPE_INVALID, | |
68 DBUS_TYPE_G_UCHAR_ARRAY, &sig, | |
69 G_TYPE_INVALID)) { | |
70 LOG(WARNING) << login_manager::kSessionManagerCheckWhitelist << " failed: " | |
71 << SCOPED_SAFE_MESSAGE(error); | |
72 return false; | 54 return false; |
73 } | |
74 bool rv = false; | 55 bool rv = false; |
75 signature->resize(sig->len); | 56 signature->resize(sig->len); |
76 if (signature->size() == sig->len) { | 57 if (signature->size() == sig->len) { |
77 memcpy(&(signature->at(0)), static_cast<const void*>(sig->data), sig->len); | 58 memcpy(&(signature->at(0)), static_cast<const void*>(sig->data), sig->len); |
78 rv = true; | 59 rv = true; |
79 } | 60 } |
80 g_array_free(sig, false); | 61 g_array_free(sig, false); |
81 return rv; | 62 return rv; |
82 } | 63 } |
83 | 64 |
84 extern "C" | 65 extern "C" |
66 bool ChromeOSCheckWhitelistSafe(const char* email, | |
67 CryptoBlob** OUT_signature) { | |
68 DCHECK(OUT_signature); | |
69 GArray* sig; | |
70 if (!ChromeOSLoginHelpers::CheckWhitelistHelper(email, &sig)) | |
71 return false; | |
72 *OUT_signature = ChromeOSLoginHelpers::CreateCryptoBlob(sig); | |
73 g_array_free(sig, true); | |
74 return true; | |
75 } | |
76 | |
77 extern "C" | |
85 bool ChromeOSEmitLoginPromptReady() { | 78 bool ChromeOSEmitLoginPromptReady() { |
86 chromeos::dbus::Proxy proxy = CreateProxy(); | 79 chromeos::dbus::Proxy proxy = ChromeOSLoginHelpers::CreateProxy(); |
87 gboolean done = false; | 80 gboolean done = false; |
88 chromeos::glib::ScopedError error; | 81 chromeos::glib::ScopedError error; |
89 | 82 |
90 if (!::dbus_g_proxy_call(proxy.gproxy(), | 83 if (!::dbus_g_proxy_call(proxy.gproxy(), |
91 login_manager::kSessionManagerEmitLoginPromptReady, | 84 login_manager::kSessionManagerEmitLoginPromptReady, |
92 &Resetter(&error).lvalue(), | 85 &Resetter(&error).lvalue(), |
93 G_TYPE_INVALID, | 86 G_TYPE_INVALID, |
94 G_TYPE_BOOLEAN, &done, | 87 G_TYPE_BOOLEAN, &done, |
95 G_TYPE_INVALID)) { | 88 G_TYPE_INVALID)) { |
96 | 89 |
97 LOG(WARNING) << login_manager::kSessionManagerEmitLoginPromptReady | 90 LOG(WARNING) << login_manager::kSessionManagerEmitLoginPromptReady |
98 << " failed: " << SCOPED_SAFE_MESSAGE(error); | 91 << " failed: " << SCOPED_SAFE_MESSAGE(error); |
99 } | 92 } |
100 return done; | 93 return done; |
101 } | 94 } |
102 | 95 |
103 extern "C" | 96 extern "C" |
104 bool ChromeOSEnumerateWhitelisted(std::vector<std::string>* out_whitelisted) { | 97 bool ChromeOSEnumerateWhitelisted(std::vector<std::string>* OUT_whitelisted) { |
105 chromeos::dbus::Proxy proxy = CreateProxy(); | 98 // TODO(cmasone): Enable NOTREACHED once Chrome is migrated. |
99 // NOTREACHED() << "ChromeOSEnumerateWhitelisted is deprecated"; | |
100 DCHECK(OUT_whitelisted); | |
106 gchar** whitelisted = NULL; | 101 gchar** whitelisted = NULL; |
107 chromeos::glib::ScopedError error; | 102 if (!ChromeOSLoginHelpers::EnumerateWhitelistedHelper(&whitelisted)) |
108 | |
109 if (!::dbus_g_proxy_call(proxy.gproxy(), | |
110 login_manager::kSessionManagerEnumerateWhitelisted, | |
111 &Resetter(&error).lvalue(), | |
112 G_TYPE_INVALID, | |
113 G_TYPE_STRV, &whitelisted, | |
114 G_TYPE_INVALID)) { | |
115 | |
116 LOG(WARNING) << login_manager::kSessionManagerEnumerateWhitelisted | |
117 << " failed: " << SCOPED_SAFE_MESSAGE(error); | |
118 return false; | 103 return false; |
119 } | |
120 for (int i = 0; whitelisted[i] != NULL; ++i) | 104 for (int i = 0; whitelisted[i] != NULL; ++i) |
121 out_whitelisted->push_back(std::string(whitelisted[i])); | 105 OUT_whitelisted->push_back(std::string(whitelisted[i])); |
122 | 106 |
123 g_strfreev(whitelisted); | 107 g_strfreev(whitelisted); |
124 return true; | 108 return true; |
125 } | 109 } |
126 | 110 |
127 extern "C" | 111 extern "C" |
112 bool ChromeOSEnumerateWhitelistedSafe(UserList** OUT_whitelisted) { | |
113 DCHECK(OUT_whitelisted); | |
114 gchar** whitelisted = NULL; | |
115 if (!ChromeOSLoginHelpers::EnumerateWhitelistedHelper(&whitelisted)) | |
116 return false; | |
117 *OUT_whitelisted = ChromeOSLoginHelpers::CreateUserList(whitelisted); | |
118 g_strfreev(whitelisted); | |
119 return true; | |
120 } | |
121 | |
122 extern "C" | |
123 CryptoBlob* ChromeOSCreateCryptoBlob(const uint8* in, const int in_len) { | |
124 GArray* ary = ChromeOSLoginHelpers::CreateGArrayFromBytes(in, in_len); | |
125 CryptoBlob* blob = ChromeOSLoginHelpers::CreateCryptoBlob(ary); | |
126 g_array_free(ary, TRUE); | |
127 return blob; | |
128 } | |
129 | |
130 extern "C" | |
131 Property* ChromeOSCreateProperty(const char* name, const char* value, | |
132 const uint8* sig, const int sig_len) { | |
133 GArray* ary = ChromeOSLoginHelpers::CreateGArrayFromBytes(sig, sig_len); | |
134 Property* prop = ChromeOSLoginHelpers::CreateProperty(name, value, ary); | |
135 g_array_free(ary, TRUE); | |
136 return prop; | |
137 } | |
138 | |
139 extern "C" | |
140 UserList* ChromeOSCreateUserList(char** users) { | |
141 return ChromeOSLoginHelpers::CreateUserList(users); | |
142 } | |
143 | |
144 // These Free* methods all use delete (as opposed to delete []) on purpose, | |
145 // following the pattern established by code that uses NewStringCopy. | |
146 extern "C" | |
147 void ChromeOSFreeCryptoBlob(CryptoBlob* blob) { | |
148 ChromeOSLoginHelpers::FreeCryptoBlob(blob); | |
149 } | |
150 | |
151 extern "C" | |
152 void ChromeOSFreeProperty(Property* property) { | |
153 ChromeOSLoginHelpers::FreeProperty(property); | |
154 } | |
155 | |
156 extern "C" | |
157 void ChromeOSFreeUserList(UserList* userlist) { | |
158 ChromeOSLoginHelpers::FreeUserList(userlist); | |
159 } | |
160 | |
161 extern "C" | |
162 bool ChromeOSRestartJob(int pid, const char* command_line) { | |
163 chromeos::dbus::Proxy proxy = ChromeOSLoginHelpers::CreateProxy(); | |
164 gboolean done = false; | |
165 chromeos::glib::ScopedError error; | |
166 | |
167 if (!::dbus_g_proxy_call(proxy.gproxy(), | |
168 login_manager::kSessionManagerRestartJob, | |
169 &Resetter(&error).lvalue(), | |
170 G_TYPE_INT, pid, | |
171 G_TYPE_STRING, command_line, | |
172 G_TYPE_INVALID, | |
173 G_TYPE_BOOLEAN, &done, | |
174 G_TYPE_INVALID)) { | |
175 LOG(WARNING) << login_manager::kSessionManagerRestartJob << " failed: " | |
176 << SCOPED_SAFE_MESSAGE(error); | |
177 } | |
178 return done; | |
179 } | |
180 | |
181 extern "C" | |
128 bool ChromeOSRetrieveProperty(const char* name, | 182 bool ChromeOSRetrieveProperty(const char* name, |
129 std::string* out_value, | 183 std::string* out_value, |
130 std::vector<uint8>* signature) { | 184 std::vector<uint8>* signature) { |
185 // TODO(cmasone): Enable NOTREACHED once Chrome is migrated. | |
186 // NOTREACHED() << "ChromeOSRetrieveProperty is deprecated"; | |
131 DCHECK(signature); | 187 DCHECK(signature); |
132 chromeos::dbus::Proxy proxy = CreateProxy(); | 188 DCHECK(out_value); |
133 chromeos::glib::ScopedError error; | |
134 | |
135 GArray* sig; | 189 GArray* sig; |
136 gchar* value = NULL; | 190 gchar* value = NULL; |
137 | 191 if (!ChromeOSLoginHelpers::RetrievePropertyHelper(name, &value, &sig)) |
138 if (!::dbus_g_proxy_call(proxy.gproxy(), | |
139 login_manager::kSessionManagerRetrieveProperty, | |
140 &Resetter(&error).lvalue(), | |
141 G_TYPE_STRING, name, | |
142 G_TYPE_INVALID, | |
143 G_TYPE_STRING, &value, | |
144 DBUS_TYPE_G_UCHAR_ARRAY, &sig, | |
145 G_TYPE_INVALID)) { | |
146 LOG(WARNING) << login_manager::kSessionManagerRetrieveProperty | |
147 << " failed: " << SCOPED_SAFE_MESSAGE(error); | |
148 return false; | 192 return false; |
149 } | |
150 bool rv = false; | 193 bool rv = false; |
151 signature->resize(sig->len); | 194 signature->resize(sig->len); |
152 if (signature->size() == sig->len) { | 195 if (signature->size() == sig->len) { |
153 memcpy(&(signature->at(0)), static_cast<const void*>(sig->data), sig->len); | 196 memcpy(&(signature->at(0)), static_cast<const void*>(sig->data), sig->len); |
154 rv = true; | 197 rv = true; |
155 } | 198 } |
156 g_array_free(sig, false); | 199 g_array_free(sig, false); |
157 out_value->assign(value); | 200 out_value->assign(value); |
158 g_free(value); | 201 g_free(value); |
159 return rv; | 202 return rv; |
160 } | 203 } |
161 | 204 |
162 extern "C" | 205 extern "C" |
206 bool ChromeOSRetrievePropertySafe(const char* name, Property** OUT_property) { | |
207 DCHECK(OUT_property); | |
208 GArray* sig; | |
209 gchar* value = NULL; | |
210 if (!ChromeOSLoginHelpers::RetrievePropertyHelper(name, &value, &sig)) | |
211 return false; | |
212 *OUT_property = ChromeOSLoginHelpers::CreateProperty(name, value, sig); | |
213 return true; | |
214 } | |
215 | |
216 extern "C" | |
163 bool ChromeOSSetOwnerKey(const std::vector<uint8>& public_key_der) { | 217 bool ChromeOSSetOwnerKey(const std::vector<uint8>& public_key_der) { |
164 chromeos::dbus::Proxy proxy = CreateProxy(); | 218 // TODO(cmasone): Enable NOTREACHED once Chrome is migrated. |
165 chromeos::glib::ScopedError error; | 219 // NOTREACHED() << "ChromeOSSetOwnerKey is deprecated"; |
166 | 220 GArray* key_der = |
167 GArray* key_der = g_array_sized_new(FALSE, FALSE, 1, public_key_der.size()); | 221 ChromeOSLoginHelpers::CreateGArrayFromBytes(&public_key_der[0], |
168 g_array_append_vals(key_der, &public_key_der[0], public_key_der.size()); | 222 public_key_der.size()); |
169 | 223 bool rv = ChromeOSLoginHelpers::SetOwnerKeyHelper(key_der); |
170 bool rv = true; | |
171 if (!::dbus_g_proxy_call(proxy.gproxy(), | |
172 login_manager::kSessionManagerSetOwnerKey, | |
173 &Resetter(&error).lvalue(), | |
174 DBUS_TYPE_G_UCHAR_ARRAY, key_der, | |
175 G_TYPE_INVALID, | |
176 G_TYPE_INVALID)) { | |
177 LOG(WARNING) << login_manager::kSessionManagerSetOwnerKey << " failed: " | |
178 << SCOPED_SAFE_MESSAGE(error); | |
179 rv = false; | |
180 } | |
181 g_array_free(key_der, TRUE); | 224 g_array_free(key_der, TRUE); |
182 return rv; | 225 return rv; |
183 } | 226 } |
227 | |
228 extern "C" | |
229 bool ChromeOSSetOwnerKeySafe(const CryptoBlob* public_key_der) { | |
230 GArray* key_der = | |
231 ChromeOSLoginHelpers::CreateGArrayFromBytes(public_key_der->data, | |
232 public_key_der->length); | |
233 bool rv = ChromeOSLoginHelpers::SetOwnerKeyHelper(key_der); | |
234 g_array_free(key_der, TRUE); | |
235 return rv; | |
236 } | |
184 | 237 |
185 extern "C" | 238 extern "C" |
186 bool ChromeOSStartSession(const char* user_email, | 239 bool ChromeOSStartSession(const char* user_email, |
187 const char* unique_id /* unused */) { | 240 const char* unique_id /* unused */) { |
188 chromeos::dbus::Proxy proxy = CreateProxy(); | 241 chromeos::dbus::Proxy proxy = ChromeOSLoginHelpers::CreateProxy(); |
189 gboolean done = false; | 242 gboolean done = false; |
190 chromeos::glib::ScopedError error; | 243 chromeos::glib::ScopedError error; |
191 | 244 |
192 if (!::dbus_g_proxy_call(proxy.gproxy(), | 245 if (!::dbus_g_proxy_call(proxy.gproxy(), |
193 login_manager::kSessionManagerStartSession, | 246 login_manager::kSessionManagerStartSession, |
194 &Resetter(&error).lvalue(), | 247 &Resetter(&error).lvalue(), |
195 G_TYPE_STRING, user_email, | 248 G_TYPE_STRING, user_email, |
196 G_TYPE_STRING, unique_id, | 249 G_TYPE_STRING, unique_id, |
197 G_TYPE_INVALID, | 250 G_TYPE_INVALID, |
198 G_TYPE_BOOLEAN, &done, | 251 G_TYPE_BOOLEAN, &done, |
199 G_TYPE_INVALID)) { | 252 G_TYPE_INVALID)) { |
200 LOG(WARNING) << login_manager::kSessionManagerStartSession << " failed: " | 253 LOG(WARNING) << login_manager::kSessionManagerStartSession << " failed: " |
201 << SCOPED_SAFE_MESSAGE(error); | 254 << SCOPED_SAFE_MESSAGE(error); |
202 } | 255 } |
203 return done; | 256 return done; |
204 } | 257 } |
205 | 258 |
206 extern "C" | 259 extern "C" |
207 bool ChromeOSStopSession(const char* unique_id /* unused */) { | 260 bool ChromeOSStopSession(const char* unique_id /* unused */) { |
208 chromeos::dbus::Proxy proxy = CreateProxy(); | 261 chromeos::dbus::Proxy proxy = ChromeOSLoginHelpers::CreateProxy(); |
209 // TODO(cmasone): clear up the now-defunct variables here. | 262 // TODO(cmasone): clear up the now-defunct variables here. |
210 gboolean unused = false; | 263 gboolean unused = false; |
211 ::dbus_g_proxy_call_no_reply(proxy.gproxy(), | 264 ::dbus_g_proxy_call_no_reply(proxy.gproxy(), |
212 login_manager::kSessionManagerStopSession, | 265 login_manager::kSessionManagerStopSession, |
213 G_TYPE_STRING, unique_id, | 266 G_TYPE_STRING, unique_id, |
214 G_TYPE_INVALID, | 267 G_TYPE_INVALID, |
215 G_TYPE_BOOLEAN, &unused, | 268 G_TYPE_BOOLEAN, &unused, |
216 G_TYPE_INVALID); | 269 G_TYPE_INVALID); |
217 return true; | 270 return true; |
218 } | 271 } |
219 | 272 |
220 extern "C" | 273 extern "C" |
221 bool ChromeOSRestartJob(int pid, const char* command_line) { | |
222 chromeos::dbus::Proxy proxy = CreateProxy(); | |
223 gboolean done = false; | |
224 chromeos::glib::ScopedError error; | |
225 | |
226 if (!::dbus_g_proxy_call(proxy.gproxy(), | |
227 login_manager::kSessionManagerRestartJob, | |
228 &Resetter(&error).lvalue(), | |
229 G_TYPE_INT, pid, | |
230 G_TYPE_STRING, command_line, | |
231 G_TYPE_INVALID, | |
232 G_TYPE_BOOLEAN, &done, | |
233 G_TYPE_INVALID)) { | |
234 LOG(WARNING) << login_manager::kSessionManagerRestartJob << " failed: " | |
235 << SCOPED_SAFE_MESSAGE(error); | |
236 } | |
237 return done; | |
238 } | |
239 | |
240 extern "C" | |
241 bool ChromeOSStoreProperty(const char* name, | 274 bool ChromeOSStoreProperty(const char* name, |
242 const char* value, | 275 const char* value, |
243 const std::vector<uint8>& signature) { | 276 const std::vector<uint8>& signature) { |
244 chromeos::dbus::Proxy proxy = CreateProxy(); | 277 // TODO(cmasone): Enable NOTREACHED once Chrome is migrated. |
245 chromeos::glib::ScopedError error; | 278 // NOTREACHED() << "ChromeOSStoreProperty is deprecated!"; |
246 | 279 GArray* sig = ChromeOSLoginHelpers::CreateGArrayFromBytes(&signature[0], |
247 GArray* sig = g_array_sized_new(FALSE, FALSE, 1, signature.size()); | 280 signature.size()); |
248 g_array_append_vals(sig, &signature[0], signature.size()); | 281 bool rv = ChromeOSLoginHelpers::StorePropertyHelper(name, value, sig); |
249 | |
250 bool rv = true; | |
251 if (!::dbus_g_proxy_call(proxy.gproxy(), | |
252 login_manager::kSessionManagerStoreProperty, | |
253 &Resetter(&error).lvalue(), | |
254 G_TYPE_STRING, name, | |
255 G_TYPE_STRING, value, | |
256 DBUS_TYPE_G_UCHAR_ARRAY, sig, | |
257 G_TYPE_INVALID, | |
258 G_TYPE_INVALID)) { | |
259 LOG(WARNING) << login_manager::kSessionManagerStoreProperty << " failed: " | |
260 << SCOPED_SAFE_MESSAGE(error); | |
261 rv = false; | |
262 } | |
263 g_array_free(sig, TRUE); | 282 g_array_free(sig, TRUE); |
264 return rv; | 283 return rv; |
265 } | 284 } |
266 | 285 |
267 namespace { | 286 extern "C" |
268 bool WhitelistOpHelper(const char* op, | 287 bool ChromeOSStorePropertySafe(const Property* prop) { |
269 const char* email, | 288 GArray* sig = |
270 const std::vector<uint8>& signature) { | 289 ChromeOSLoginHelpers::CreateGArrayFromBytes(prop->signature->data, |
271 chromeos::dbus::Proxy proxy = CreateProxy(); | 290 prop->signature->length); |
272 chromeos::glib::ScopedError error; | 291 bool rv = ChromeOSLoginHelpers::StorePropertyHelper(prop->name, |
273 | 292 prop->value, |
274 GArray* sig = g_array_sized_new(FALSE, FALSE, 1, signature.size()); | 293 sig); |
275 g_array_append_vals(sig, &signature[0], signature.size()); | |
276 | |
277 bool rv = true; | |
278 if (!::dbus_g_proxy_call(proxy.gproxy(), | |
279 op, | |
280 &Resetter(&error).lvalue(), | |
281 G_TYPE_STRING, email, | |
282 DBUS_TYPE_G_UCHAR_ARRAY, sig, | |
283 G_TYPE_INVALID, | |
284 G_TYPE_INVALID)) { | |
285 LOG(WARNING) << op << " failed: " << SCOPED_SAFE_MESSAGE(error); | |
286 rv = false; | |
287 } | |
288 g_array_free(sig, TRUE); | 294 g_array_free(sig, TRUE); |
289 return rv; | 295 return rv; |
290 } | 296 } |
291 } // anonymous namespace | |
292 | 297 |
293 extern "C" | 298 extern "C" |
294 bool ChromeOSUnwhitelist(const char* email, | 299 bool ChromeOSUnwhitelist(const char* email, |
295 const std::vector<uint8>& signature) { | 300 const std::vector<uint8>& signature) { |
296 return WhitelistOpHelper(login_manager::kSessionManagerUnwhitelist, | 301 // TODO(cmasone): Enable NOTREACHED once Chrome is migrated. |
297 email, | 302 // NOTREACHED() << "ChromeOSUnwhitelist is deprecated!"; |
298 signature); | 303 return ChromeOSLoginHelpers::WhitelistOpHelper( |
304 login_manager::kSessionManagerUnwhitelist, | |
305 email, | |
306 signature); | |
307 } | |
308 | |
309 extern "C" | |
310 bool ChromeOSUnwhitelistSafe(const char* email, const CryptoBlob* signature) { | |
311 std::vector<uint8> sig(signature->data, signature->data + signature->length); | |
312 return ChromeOSLoginHelpers::WhitelistOpHelper( | |
313 login_manager::kSessionManagerUnwhitelist, | |
314 email, | |
315 sig); | |
299 } | 316 } |
300 | 317 |
301 extern "C" | 318 extern "C" |
302 bool ChromeOSWhitelist(const char* email, | 319 bool ChromeOSWhitelist(const char* email, |
303 const std::vector<uint8>& signature) { | 320 const std::vector<uint8>& signature) { |
304 return WhitelistOpHelper(login_manager::kSessionManagerWhitelist, | 321 // TODO(cmasone): Enable NOTREACHED once Chrome is migrated. |
305 email, | 322 // NOTREACHED() << "ChromeOSWhitelist is deprecated!"; |
zel
2010/10/28 20:02:46
you should just nuke these calls once chrome side
Chris Masone
2010/10/28 20:09:08
I figured we'd want to leave at least a bit of a w
| |
306 signature); | 323 return ChromeOSLoginHelpers::WhitelistOpHelper( |
324 login_manager::kSessionManagerWhitelist, | |
325 email, | |
326 signature); | |
327 } | |
328 | |
329 extern "C" | |
330 bool ChromeOSWhitelistSafe(const char* email, const CryptoBlob* signature) { | |
331 std::vector<uint8> sig(signature->data, signature->data + signature->length); | |
332 return ChromeOSLoginHelpers::WhitelistOpHelper( | |
333 login_manager::kSessionManagerWhitelist, | |
334 email, | |
335 sig); | |
307 } | 336 } |
308 | 337 |
309 namespace { | 338 namespace { |
310 #define SAFE_MESSAGE(e) (e.message ? e.message : "unknown error") | 339 #define SAFE_MESSAGE(e) (e.message ? e.message : "unknown error") |
311 | 340 |
312 bool IsSuccess(DBusMessage* message) { | 341 bool IsSuccess(DBusMessage* message) { |
313 char* out_string = NULL; | 342 char* out_string = NULL; |
314 DBusError error; | 343 DBusError error; |
315 dbus_error_init (&error); | 344 dbus_error_init (&error); |
316 bool unpack = dbus_message_get_args(message, | 345 bool unpack = dbus_message_get_args(message, |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
381 extern "C" | 410 extern "C" |
382 void ChromeOSDisconnectSession(SessionConnection connection) { | 411 void ChromeOSDisconnectSession(SessionConnection connection) { |
383 DBusConnection *bus = ::dbus_g_connection_get_connection( | 412 DBusConnection *bus = ::dbus_g_connection_get_connection( |
384 dbus::GetSystemBusConnection().g_connection()); | 413 dbus::GetSystemBusConnection().g_connection()); |
385 ::dbus_connection_remove_filter(bus, &Filter, connection); | 414 ::dbus_connection_remove_filter(bus, &Filter, connection); |
386 delete connection; | 415 delete connection; |
387 LOG(INFO) << "Disconnected from session manager"; | 416 LOG(INFO) << "Disconnected from session manager"; |
388 } | 417 } |
389 | 418 |
390 } // namespace chromeos | 419 } // namespace chromeos |
OLD | NEW |