| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "service.h" | 5 #include "service.h" |
| 6 | 6 |
| 7 #include <stdio.h> | 7 #include <stdio.h> |
| 8 #include <stdlib.h> | 8 #include <stdlib.h> |
| 9 | 9 |
| 10 #include <base/file_util.h> | 10 #include <base/file_util.h> |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 } | 326 } |
| 327 | 327 |
| 328 gboolean Service::IsMounted(gboolean *OUT_is_mounted, GError **error) { | 328 gboolean Service::IsMounted(gboolean *OUT_is_mounted, GError **error) { |
| 329 *OUT_is_mounted = mount_->IsCryptohomeMounted(); | 329 *OUT_is_mounted = mount_->IsCryptohomeMounted(); |
| 330 return TRUE; | 330 return TRUE; |
| 331 } | 331 } |
| 332 | 332 |
| 333 gboolean Service::Mount(gchar *userid, | 333 gboolean Service::Mount(gchar *userid, |
| 334 gchar *key, | 334 gchar *key, |
| 335 gboolean create_if_missing, | 335 gboolean create_if_missing, |
| 336 gboolean replace_tracked_subdirectories, | 336 gboolean deprecated_replace_tracked_subdirectories, |
| 337 gchar** tracked_subdirectories, | 337 gchar** deprecated_tracked_subdirectories, |
| 338 gint *OUT_error_code, | 338 gint *OUT_error_code, |
| 339 gboolean *OUT_result, | 339 gboolean *OUT_result, |
| 340 GError **error) { | 340 GError **error) { |
| 341 UsernamePasskey credentials(userid, SecureBlob(key, strlen(key))); | 341 UsernamePasskey credentials(userid, SecureBlob(key, strlen(key))); |
| 342 | 342 |
| 343 if (mount_->IsCryptohomeMounted()) { | 343 if (mount_->IsCryptohomeMounted()) { |
| 344 if (mount_->IsCryptohomeMountedForUser(credentials)) { | 344 if (mount_->IsCryptohomeMountedForUser(credentials)) { |
| 345 LOG(INFO) << "Cryptohome already mounted for this user"; | 345 LOG(INFO) << "Cryptohome already mounted for this user"; |
| 346 *OUT_error_code = Mount::MOUNT_ERROR_NONE; | 346 *OUT_error_code = Mount::MOUNT_ERROR_NONE; |
| 347 *OUT_result = TRUE; | 347 *OUT_result = TRUE; |
| 348 return TRUE; | 348 return TRUE; |
| 349 } else { | 349 } else { |
| 350 if (!mount_->UnmountCryptohome()) { | 350 if (!mount_->UnmountCryptohome()) { |
| 351 LOG(ERROR) << "Could not unmount cryptohome from previous user"; | 351 LOG(ERROR) << "Could not unmount cryptohome from previous user"; |
| 352 *OUT_error_code = Mount::MOUNT_ERROR_MOUNT_POINT_BUSY; | 352 *OUT_error_code = Mount::MOUNT_ERROR_MOUNT_POINT_BUSY; |
| 353 *OUT_result = FALSE; | 353 *OUT_result = FALSE; |
| 354 return TRUE; | 354 return TRUE; |
| 355 } | 355 } |
| 356 } | 356 } |
| 357 } | 357 } |
| 358 | 358 |
| 359 MountTaskResult result; | 359 MountTaskResult result; |
| 360 base::WaitableEvent event(true, false); | 360 base::WaitableEvent event(true, false); |
| 361 Mount::MountArgs mount_args; | 361 Mount::MountArgs mount_args; |
| 362 mount_args.create_if_missing = create_if_missing; | 362 mount_args.create_if_missing = create_if_missing; |
| 363 mount_args.replace_tracked_subdirectories = replace_tracked_subdirectories; | |
| 364 if (tracked_subdirectories) { | |
| 365 mount_args.AssignSubdirsNullTerminatedList( | |
| 366 const_cast<const char**>(tracked_subdirectories)); | |
| 367 } | |
| 368 MountTaskMount* mount_task = new MountTaskMount(NULL, | 363 MountTaskMount* mount_task = new MountTaskMount(NULL, |
| 369 mount_, | 364 mount_, |
| 370 credentials, | 365 credentials, |
| 371 mount_args); | 366 mount_args); |
| 372 mount_task->set_result(&result); | 367 mount_task->set_result(&result); |
| 373 mount_task->set_complete_event(&event); | 368 mount_task->set_complete_event(&event); |
| 374 mount_thread_.message_loop()->PostTask(FROM_HERE, mount_task); | 369 mount_thread_.message_loop()->PostTask(FROM_HERE, mount_task); |
| 375 event.Wait(); | 370 event.Wait(); |
| 376 *OUT_error_code = result.return_code(); | 371 *OUT_error_code = result.return_code(); |
| 377 *OUT_result = result.return_status(); | 372 *OUT_result = result.return_status(); |
| 378 return TRUE; | 373 return TRUE; |
| 379 } | 374 } |
| 380 | 375 |
| 381 gboolean Service::AsyncMount(gchar *userid, | 376 gboolean Service::AsyncMount(gchar *userid, |
| 382 gchar *key, | 377 gchar *key, |
| 383 gboolean create_if_missing, | 378 gboolean create_if_missing, |
| 384 gboolean replace_tracked_subdirectories, | 379 gboolean deprecated_replace_tracked_subdirectories, |
| 385 gchar** tracked_subdirectories, | 380 gchar** deprecated_tracked_subdirectories, |
| 386 gint *OUT_async_id, | 381 gint *OUT_async_id, |
| 387 GError **error) { | 382 GError **error) { |
| 388 UsernamePasskey credentials(userid, SecureBlob(key, strlen(key))); | 383 UsernamePasskey credentials(userid, SecureBlob(key, strlen(key))); |
| 389 | 384 |
| 390 if (mount_->IsCryptohomeMounted()) { | 385 if (mount_->IsCryptohomeMounted()) { |
| 391 if (mount_->IsCryptohomeMountedForUser(credentials)) { | 386 if (mount_->IsCryptohomeMountedForUser(credentials)) { |
| 392 LOG(INFO) << "Cryptohome already mounted for this user"; | 387 LOG(INFO) << "Cryptohome already mounted for this user"; |
| 393 MountTaskNop* mount_task = new MountTaskNop(this); | 388 MountTaskNop* mount_task = new MountTaskNop(this); |
| 394 mount_task->result()->set_return_code(Mount::MOUNT_ERROR_NONE); | 389 mount_task->result()->set_return_code(Mount::MOUNT_ERROR_NONE); |
| 395 mount_task->result()->set_return_status(true); | 390 mount_task->result()->set_return_status(true); |
| 396 *OUT_async_id = mount_task->sequence_id(); | 391 *OUT_async_id = mount_task->sequence_id(); |
| 397 mount_thread_.message_loop()->PostTask(FROM_HERE, mount_task); | 392 mount_thread_.message_loop()->PostTask(FROM_HERE, mount_task); |
| 398 return TRUE; | 393 return TRUE; |
| 399 } else { | 394 } else { |
| 400 if (!mount_->UnmountCryptohome()) { | 395 if (!mount_->UnmountCryptohome()) { |
| 401 LOG(ERROR) << "Could not unmount cryptohome from previous user"; | 396 LOG(ERROR) << "Could not unmount cryptohome from previous user"; |
| 402 MountTaskNop* mount_task = new MountTaskNop(this); | 397 MountTaskNop* mount_task = new MountTaskNop(this); |
| 403 mount_task->result()->set_return_code( | 398 mount_task->result()->set_return_code( |
| 404 Mount::MOUNT_ERROR_MOUNT_POINT_BUSY); | 399 Mount::MOUNT_ERROR_MOUNT_POINT_BUSY); |
| 405 mount_task->result()->set_return_status(false); | 400 mount_task->result()->set_return_status(false); |
| 406 *OUT_async_id = mount_task->sequence_id(); | 401 *OUT_async_id = mount_task->sequence_id(); |
| 407 mount_thread_.message_loop()->PostTask(FROM_HERE, mount_task); | 402 mount_thread_.message_loop()->PostTask(FROM_HERE, mount_task); |
| 408 return TRUE; | 403 return TRUE; |
| 409 } | 404 } |
| 410 } | 405 } |
| 411 } | 406 } |
| 412 | 407 |
| 413 Mount::MountArgs mount_args; | 408 Mount::MountArgs mount_args; |
| 414 mount_args.create_if_missing = create_if_missing; | 409 mount_args.create_if_missing = create_if_missing; |
| 415 mount_args.replace_tracked_subdirectories = replace_tracked_subdirectories; | |
| 416 if (tracked_subdirectories) { | |
| 417 mount_args.AssignSubdirsNullTerminatedList( | |
| 418 const_cast<const char**>(tracked_subdirectories)); | |
| 419 } | |
| 420 MountTaskMount* mount_task = new MountTaskMount(this, | 410 MountTaskMount* mount_task = new MountTaskMount(this, |
| 421 mount_, | 411 mount_, |
| 422 credentials, | 412 credentials, |
| 423 mount_args); | 413 mount_args); |
| 424 *OUT_async_id = mount_task->sequence_id(); | 414 *OUT_async_id = mount_task->sequence_id(); |
| 425 mount_thread_.message_loop()->PostTask(FROM_HERE, mount_task); | 415 mount_thread_.message_loop()->PostTask(FROM_HERE, mount_task); |
| 426 return TRUE; | 416 return TRUE; |
| 427 } | 417 } |
| 428 | 418 |
| 429 gboolean Service::MountGuest(gint *OUT_error_code, | 419 gboolean Service::MountGuest(gint *OUT_error_code, |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 635 (tpm_status.CanDecrypt ? "1" : "0"), | 625 (tpm_status.CanDecrypt ? "1" : "0"), |
| 636 (tpm_status.ThisInstanceHasContext ? "1" : "0"), | 626 (tpm_status.ThisInstanceHasContext ? "1" : "0"), |
| 637 (tpm_status.ThisInstanceHasKeyHandle ? "1" : "0"), | 627 (tpm_status.ThisInstanceHasKeyHandle ? "1" : "0"), |
| 638 tpm_status.LastTpmError, | 628 tpm_status.LastTpmError, |
| 639 user_data.c_str(), | 629 user_data.c_str(), |
| 640 (mount_->IsCryptohomeMounted() ? "1" : "0")); | 630 (mount_->IsCryptohomeMounted() ? "1" : "0")); |
| 641 return TRUE; | 631 return TRUE; |
| 642 } | 632 } |
| 643 | 633 |
| 644 } // namespace cryptohome | 634 } // namespace cryptohome |
| OLD | NEW |