Commit 2bac601963afc6777692777c2e19666b589e85cd
1 parent
c1713132
Remove repeated code and enable encrypted SD cards and USB sticks images.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2750 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
29 additions
and
25 deletions
hw/usb-msd.c
| ... | ... | @@ -522,6 +522,8 @@ USBDevice *usb_msd_init(const char *filename) |
| 522 | 522 | bdrv = bdrv_new("usb"); |
| 523 | 523 | if (bdrv_open(bdrv, filename, 0) < 0) |
| 524 | 524 | goto fail; |
| 525 | + if (qemu_key_check(bdrv, filename)) | |
| 526 | + goto fail; | |
| 525 | 527 | s->bs = bdrv; |
| 526 | 528 | |
| 527 | 529 | s->dev.speed = USB_SPEED_FULL; | ... | ... |
monitor.c
| ... | ... | @@ -386,8 +386,6 @@ static void do_eject(int force, const char *filename) |
| 386 | 386 | static void do_change(const char *device, const char *filename) |
| 387 | 387 | { |
| 388 | 388 | BlockDriverState *bs; |
| 389 | - int i; | |
| 390 | - char password[256]; | |
| 391 | 389 | |
| 392 | 390 | bs = bdrv_find(device); |
| 393 | 391 | if (!bs) { |
| ... | ... | @@ -397,15 +395,7 @@ static void do_change(const char *device, const char *filename) |
| 397 | 395 | if (eject_device(bs, 0) < 0) |
| 398 | 396 | return; |
| 399 | 397 | bdrv_open(bs, filename, 0); |
| 400 | - if (bdrv_is_encrypted(bs)) { | |
| 401 | - term_printf("%s is encrypted.\n", device); | |
| 402 | - for(i = 0; i < 3; i++) { | |
| 403 | - monitor_readline("Password: ", 1, password, sizeof(password)); | |
| 404 | - if (bdrv_set_key(bs, password) == 0) | |
| 405 | - break; | |
| 406 | - term_printf("invalid password\n"); | |
| 407 | - } | |
| 408 | - } | |
| 398 | + qemu_key_check(bs, filename); | |
| 409 | 399 | } |
| 410 | 400 | |
| 411 | 401 | static void do_screen_dump(const char *filename) | ... | ... |
vl.c
| ... | ... | @@ -6714,6 +6714,24 @@ static uint8_t *signal_stack; |
| 6714 | 6714 | |
| 6715 | 6715 | /* password input */ |
| 6716 | 6716 | |
| 6717 | +int qemu_key_check(BlockDriverState *bs, const char *name) | |
| 6718 | +{ | |
| 6719 | + char password[256]; | |
| 6720 | + int i; | |
| 6721 | + | |
| 6722 | + if (!bdrv_is_encrypted(bs)) | |
| 6723 | + return 0; | |
| 6724 | + | |
| 6725 | + term_printf("%s is encrypted.\n", name); | |
| 6726 | + for(i = 0; i < 3; i++) { | |
| 6727 | + monitor_readline("Password: ", 1, password, sizeof(password)); | |
| 6728 | + if (bdrv_set_key(bs, password) == 0) | |
| 6729 | + return 0; | |
| 6730 | + term_printf("invalid password\n"); | |
| 6731 | + } | |
| 6732 | + return -EPERM; | |
| 6733 | +} | |
| 6734 | + | |
| 6717 | 6735 | static BlockDriverState *get_bdrv(int index) |
| 6718 | 6736 | { |
| 6719 | 6737 | BlockDriverState *bs; |
| ... | ... | @@ -6731,21 +6749,12 @@ static BlockDriverState *get_bdrv(int index) |
| 6731 | 6749 | static void read_passwords(void) |
| 6732 | 6750 | { |
| 6733 | 6751 | BlockDriverState *bs; |
| 6734 | - int i, j; | |
| 6735 | - char password[256]; | |
| 6752 | + int i; | |
| 6736 | 6753 | |
| 6737 | 6754 | for(i = 0; i < 6; i++) { |
| 6738 | 6755 | bs = get_bdrv(i); |
| 6739 | - if (bs && bdrv_is_encrypted(bs)) { | |
| 6740 | - term_printf("%s is encrypted.\n", bdrv_get_device_name(bs)); | |
| 6741 | - for(j = 0; j < 3; j++) { | |
| 6742 | - monitor_readline("Password: ", | |
| 6743 | - 1, password, sizeof(password)); | |
| 6744 | - if (bdrv_set_key(bs, password) == 0) | |
| 6745 | - break; | |
| 6746 | - term_printf("invalid password\n"); | |
| 6747 | - } | |
| 6748 | - } | |
| 6756 | + if (bs) | |
| 6757 | + qemu_key_check(bs, bdrv_get_device_name(bs)); | |
| 6749 | 6758 | } |
| 6750 | 6759 | } |
| 6751 | 6760 | |
| ... | ... | @@ -7622,7 +7631,7 @@ int main(int argc, char **argv) |
| 7622 | 7631 | } |
| 7623 | 7632 | } |
| 7624 | 7633 | |
| 7625 | - /* Open the virtual parallel flash bloc devices */ | |
| 7634 | + /* Open the virtual parallel flash block devices */ | |
| 7626 | 7635 | for(i = 0; i < MAX_PFLASH; i++) { |
| 7627 | 7636 | if (pflash_filename[i]) { |
| 7628 | 7637 | if (!pflash_table[i]) { |
| ... | ... | @@ -7648,7 +7657,8 @@ int main(int argc, char **argv) |
| 7648 | 7657 | snapshot ? BDRV_O_SNAPSHOT : 0) < 0) { |
| 7649 | 7658 | fprintf(stderr, "qemu: could not open SD card image %s\n", |
| 7650 | 7659 | sd_filename); |
| 7651 | - } | |
| 7660 | + } else | |
| 7661 | + qemu_key_check(bs, sd_filename); | |
| 7652 | 7662 | } |
| 7653 | 7663 | |
| 7654 | 7664 | register_savevm("timer", 0, 2, timer_save, timer_load, NULL); | ... | ... |
vl.h
| ... | ... | @@ -632,6 +632,8 @@ void qemu_aio_wait_start(void); |
| 632 | 632 | void qemu_aio_wait(void); |
| 633 | 633 | void qemu_aio_wait_end(void); |
| 634 | 634 | |
| 635 | +int qemu_key_check(BlockDriverState *bs, const char *name); | |
| 636 | + | |
| 635 | 637 | /* Ensure contents are flushed to disk. */ |
| 636 | 638 | void bdrv_flush(BlockDriverState *bs); |
| 637 | 639 | ... | ... |