Commit 2bac601963afc6777692777c2e19666b589e85cd

Authored by balrog
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
hw/usb-msd.c
@@ -522,6 +522,8 @@ USBDevice *usb_msd_init(const char *filename) @@ -522,6 +522,8 @@ USBDevice *usb_msd_init(const char *filename)
522 bdrv = bdrv_new("usb"); 522 bdrv = bdrv_new("usb");
523 if (bdrv_open(bdrv, filename, 0) < 0) 523 if (bdrv_open(bdrv, filename, 0) < 0)
524 goto fail; 524 goto fail;
  525 + if (qemu_key_check(bdrv, filename))
  526 + goto fail;
525 s->bs = bdrv; 527 s->bs = bdrv;
526 528
527 s->dev.speed = USB_SPEED_FULL; 529 s->dev.speed = USB_SPEED_FULL;
monitor.c
@@ -386,8 +386,6 @@ static void do_eject(int force, const char *filename) @@ -386,8 +386,6 @@ static void do_eject(int force, const char *filename)
386 static void do_change(const char *device, const char *filename) 386 static void do_change(const char *device, const char *filename)
387 { 387 {
388 BlockDriverState *bs; 388 BlockDriverState *bs;
389 - int i;  
390 - char password[256];  
391 389
392 bs = bdrv_find(device); 390 bs = bdrv_find(device);
393 if (!bs) { 391 if (!bs) {
@@ -397,15 +395,7 @@ static void do_change(const char *device, const char *filename) @@ -397,15 +395,7 @@ static void do_change(const char *device, const char *filename)
397 if (eject_device(bs, 0) < 0) 395 if (eject_device(bs, 0) < 0)
398 return; 396 return;
399 bdrv_open(bs, filename, 0); 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 static void do_screen_dump(const char *filename) 401 static void do_screen_dump(const char *filename)
@@ -6714,6 +6714,24 @@ static uint8_t *signal_stack; @@ -6714,6 +6714,24 @@ static uint8_t *signal_stack;
6714 6714
6715 /* password input */ 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 static BlockDriverState *get_bdrv(int index) 6735 static BlockDriverState *get_bdrv(int index)
6718 { 6736 {
6719 BlockDriverState *bs; 6737 BlockDriverState *bs;
@@ -6731,21 +6749,12 @@ static BlockDriverState *get_bdrv(int index) @@ -6731,21 +6749,12 @@ static BlockDriverState *get_bdrv(int index)
6731 static void read_passwords(void) 6749 static void read_passwords(void)
6732 { 6750 {
6733 BlockDriverState *bs; 6751 BlockDriverState *bs;
6734 - int i, j;  
6735 - char password[256]; 6752 + int i;
6736 6753
6737 for(i = 0; i < 6; i++) { 6754 for(i = 0; i < 6; i++) {
6738 bs = get_bdrv(i); 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,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 for(i = 0; i < MAX_PFLASH; i++) { 7635 for(i = 0; i < MAX_PFLASH; i++) {
7627 if (pflash_filename[i]) { 7636 if (pflash_filename[i]) {
7628 if (!pflash_table[i]) { 7637 if (!pflash_table[i]) {
@@ -7648,7 +7657,8 @@ int main(int argc, char **argv) @@ -7648,7 +7657,8 @@ int main(int argc, char **argv)
7648 snapshot ? BDRV_O_SNAPSHOT : 0) < 0) { 7657 snapshot ? BDRV_O_SNAPSHOT : 0) < 0) {
7649 fprintf(stderr, "qemu: could not open SD card image %s\n", 7658 fprintf(stderr, "qemu: could not open SD card image %s\n",
7650 sd_filename); 7659 sd_filename);
7651 - } 7660 + } else
  7661 + qemu_key_check(bs, sd_filename);
7652 } 7662 }
7653 7663
7654 register_savevm("timer", 0, 2, timer_save, timer_load, NULL); 7664 register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
@@ -632,6 +632,8 @@ void qemu_aio_wait_start(void); @@ -632,6 +632,8 @@ void qemu_aio_wait_start(void);
632 void qemu_aio_wait(void); 632 void qemu_aio_wait(void);
633 void qemu_aio_wait_end(void); 633 void qemu_aio_wait_end(void);
634 634
  635 +int qemu_key_check(BlockDriverState *bs, const char *name);
  636 +
635 /* Ensure contents are flushed to disk. */ 637 /* Ensure contents are flushed to disk. */
636 void bdrv_flush(BlockDriverState *bs); 638 void bdrv_flush(BlockDriverState *bs);
637 639