vnc.c (bedf13ecab38bcd479e9db6994ebc3b2c5c7a3ae) | vnc.c (e5766eb40453b1d22815fc5482802688ff184006) |
---|---|
1/* 2 * QEMU VNC display driver 3 * 4 * Copyright (C) 2006 Anthony Liguori <anthony@codemonkey.ws> 5 * Copyright (C) 2006 Fabrice Bellard 6 * Copyright (C) 2009 Red Hat, Inc 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a copy --- 3387 unchanged lines hidden (view full) --- 3396 } 3397 3398 return QCRYPTO_TLS_CREDS(creds); 3399} 3400 3401 3402static int vnc_display_get_address(const char *addrstr, 3403 bool websocket, | 1/* 2 * QEMU VNC display driver 3 * 4 * Copyright (C) 2006 Anthony Liguori <anthony@codemonkey.ws> 5 * Copyright (C) 2006 Fabrice Bellard 6 * Copyright (C) 2009 Red Hat, Inc 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a copy --- 3387 unchanged lines hidden (view full) --- 3396 } 3397 3398 return QCRYPTO_TLS_CREDS(creds); 3399} 3400 3401 3402static int vnc_display_get_address(const char *addrstr, 3403 bool websocket, |
3404 bool reverse, |
|
3404 int displaynum, 3405 int to, 3406 bool has_ipv4, 3407 bool has_ipv6, 3408 bool ipv4, 3409 bool ipv6, 3410 SocketAddress **retaddr, 3411 Error **errp) --- 63 unchanged lines hidden (view full) --- 3475 if (to) { 3476 inet->has_to = true; 3477 inet->to = to + 5700; 3478 } 3479 } else { 3480 inet->port = g_strdup(port); 3481 } 3482 } else { | 3405 int displaynum, 3406 int to, 3407 bool has_ipv4, 3408 bool has_ipv6, 3409 bool ipv4, 3410 bool ipv6, 3411 SocketAddress **retaddr, 3412 Error **errp) --- 63 unchanged lines hidden (view full) --- 3476 if (to) { 3477 inet->has_to = true; 3478 inet->to = to + 5700; 3479 } 3480 } else { 3481 inet->port = g_strdup(port); 3482 } 3483 } else { |
3484 int offset = reverse ? 0 : 5900; |
|
3483 if (parse_uint_full(port, &baseport, 10) < 0) { 3484 error_setg(errp, "can't convert to a number: %s", port); 3485 goto cleanup; 3486 } 3487 if (baseport > 65535 || | 3485 if (parse_uint_full(port, &baseport, 10) < 0) { 3486 error_setg(errp, "can't convert to a number: %s", port); 3487 goto cleanup; 3488 } 3489 if (baseport > 65535 || |
3488 baseport + 5900 > 65535) { | 3490 baseport + offset > 65535) { |
3489 error_setg(errp, "port %s out of range", port); 3490 goto cleanup; 3491 } 3492 inet->port = g_strdup_printf( | 3491 error_setg(errp, "port %s out of range", port); 3492 goto cleanup; 3493 } 3494 inet->port = g_strdup_printf( |
3493 "%d", (int)baseport + 5900); | 3495 "%d", (int)baseport + offset); |
3494 3495 if (to) { 3496 inet->has_to = true; | 3496 3497 if (to) { 3498 inet->has_to = true; |
3497 inet->to = to + 5900; | 3499 inet->to = to + offset; |
3498 } 3499 } 3500 3501 inet->ipv4 = ipv4; 3502 inet->has_ipv4 = has_ipv4; 3503 inet->ipv6 = ipv6; 3504 inet->has_ipv6 = has_ipv6; 3505 --- 5 unchanged lines hidden (view full) --- 3511 cleanup: 3512 if (ret < 0) { 3513 qapi_free_SocketAddress(addr); 3514 } 3515 return ret; 3516} 3517 3518static int vnc_display_get_addresses(QemuOpts *opts, | 3500 } 3501 } 3502 3503 inet->ipv4 = ipv4; 3504 inet->has_ipv4 = has_ipv4; 3505 inet->ipv6 = ipv6; 3506 inet->has_ipv6 = has_ipv6; 3507 --- 5 unchanged lines hidden (view full) --- 3513 cleanup: 3514 if (ret < 0) { 3515 qapi_free_SocketAddress(addr); 3516 } 3517 return ret; 3518} 3519 3520static int vnc_display_get_addresses(QemuOpts *opts, |
3521 bool reverse, |
|
3519 SocketAddress ***retsaddr, 3520 size_t *retnsaddr, 3521 SocketAddress ***retwsaddr, 3522 size_t *retnwsaddr, 3523 Error **errp) 3524{ 3525 SocketAddress *saddr = NULL; 3526 SocketAddress *wsaddr = NULL; --- 23 unchanged lines hidden (view full) --- 3550 error_setg(errp, 3551 "SHA1 hash support is required for websockets"); 3552 goto cleanup; 3553 } 3554 3555 qemu_opt_iter_init(&addriter, opts, "vnc"); 3556 while ((addr = qemu_opt_iter_next(&addriter)) != NULL) { 3557 int rv; | 3522 SocketAddress ***retsaddr, 3523 size_t *retnsaddr, 3524 SocketAddress ***retwsaddr, 3525 size_t *retnwsaddr, 3526 Error **errp) 3527{ 3528 SocketAddress *saddr = NULL; 3529 SocketAddress *wsaddr = NULL; --- 23 unchanged lines hidden (view full) --- 3553 error_setg(errp, 3554 "SHA1 hash support is required for websockets"); 3555 goto cleanup; 3556 } 3557 3558 qemu_opt_iter_init(&addriter, opts, "vnc"); 3559 while ((addr = qemu_opt_iter_next(&addriter)) != NULL) { 3560 int rv; |
3558 rv = vnc_display_get_address(addr, false, 0, to, | 3561 rv = vnc_display_get_address(addr, false, reverse, 0, to, |
3559 has_ipv4, has_ipv6, 3560 ipv4, ipv6, 3561 &saddr, errp); 3562 if (rv < 0) { 3563 goto cleanup; 3564 } 3565 /* Historical compat - first listen address can be used 3566 * to set the default websocket port --- 8 unchanged lines hidden (view full) --- 3575 /* If we had multiple primary displays, we don't do defaults 3576 * for websocket, and require explicit config instead. */ 3577 if (*retnsaddr > 1) { 3578 displaynum = -1; 3579 } 3580 3581 qemu_opt_iter_init(&addriter, opts, "websocket"); 3582 while ((addr = qemu_opt_iter_next(&addriter)) != NULL) { | 3562 has_ipv4, has_ipv6, 3563 ipv4, ipv6, 3564 &saddr, errp); 3565 if (rv < 0) { 3566 goto cleanup; 3567 } 3568 /* Historical compat - first listen address can be used 3569 * to set the default websocket port --- 8 unchanged lines hidden (view full) --- 3578 /* If we had multiple primary displays, we don't do defaults 3579 * for websocket, and require explicit config instead. */ 3580 if (*retnsaddr > 1) { 3581 displaynum = -1; 3582 } 3583 3584 qemu_opt_iter_init(&addriter, opts, "websocket"); 3585 while ((addr = qemu_opt_iter_next(&addriter)) != NULL) { |
3583 if (vnc_display_get_address(addr, true, displaynum, to, | 3586 if (vnc_display_get_address(addr, true, reverse, displaynum, to, |
3584 has_ipv4, has_ipv6, 3585 ipv4, ipv6, 3586 &wsaddr, errp) < 0) { 3587 goto cleanup; 3588 } 3589 3590 /* Historical compat - if only a single listen address was 3591 * provided, then this is used to set the default listen --- 180 unchanged lines hidden (view full) --- 3772 return; 3773 } 3774 vnc_display_close(vd); 3775 3776 if (!opts) { 3777 return; 3778 } 3779 | 3587 has_ipv4, has_ipv6, 3588 ipv4, ipv6, 3589 &wsaddr, errp) < 0) { 3590 goto cleanup; 3591 } 3592 3593 /* Historical compat - if only a single listen address was 3594 * provided, then this is used to set the default listen --- 180 unchanged lines hidden (view full) --- 3775 return; 3776 } 3777 vnc_display_close(vd); 3778 3779 if (!opts) { 3780 return; 3781 } 3782 |
3780 if (vnc_display_get_addresses(opts, &saddr, &nsaddr, | 3783 reverse = qemu_opt_get_bool(opts, "reverse", false); 3784 if (vnc_display_get_addresses(opts, reverse, &saddr, &nsaddr, |
3781 &wsaddr, &nwsaddr, errp) < 0) { 3782 goto fail; 3783 } 3784 3785 if (saddr == NULL) { 3786 return; 3787 } 3788 --- 9 unchanged lines hidden (view full) --- 3798 if (!qcrypto_cipher_supports( 3799 QCRYPTO_CIPHER_ALG_DES_RFB, QCRYPTO_CIPHER_MODE_ECB)) { 3800 error_setg(errp, 3801 "Cipher backend does not support DES RFB algorithm"); 3802 goto fail; 3803 } 3804 } 3805 | 3785 &wsaddr, &nwsaddr, errp) < 0) { 3786 goto fail; 3787 } 3788 3789 if (saddr == NULL) { 3790 return; 3791 } 3792 --- 9 unchanged lines hidden (view full) --- 3802 if (!qcrypto_cipher_supports( 3803 QCRYPTO_CIPHER_ALG_DES_RFB, QCRYPTO_CIPHER_MODE_ECB)) { 3804 error_setg(errp, 3805 "Cipher backend does not support DES RFB algorithm"); 3806 goto fail; 3807 } 3808 } 3809 |
3806 reverse = qemu_opt_get_bool(opts, "reverse", false); | |
3807 lock_key_sync = qemu_opt_get_bool(opts, "lock-key-sync", true); 3808 key_delay_ms = qemu_opt_get_number(opts, "key-delay-ms", 1); 3809 sasl = qemu_opt_get_bool(opts, "sasl", false); 3810#ifndef CONFIG_VNC_SASL 3811 if (sasl) { 3812 error_setg(errp, "VNC SASL auth requires cyrus-sasl support"); 3813 goto fail; 3814 } --- 255 unchanged lines hidden --- | 3810 lock_key_sync = qemu_opt_get_bool(opts, "lock-key-sync", true); 3811 key_delay_ms = qemu_opt_get_number(opts, "key-delay-ms", 1); 3812 sasl = qemu_opt_get_bool(opts, "sasl", false); 3813#ifndef CONFIG_VNC_SASL 3814 if (sasl) { 3815 error_setg(errp, "VNC SASL auth requires cyrus-sasl support"); 3816 goto fail; 3817 } --- 255 unchanged lines hidden --- |