diff options
author | Zihao Chang <changzihao1@huawei.com> | 2021-03-16 15:58:44 +0800 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2021-03-23 08:48:21 +0100 |
commit | 1f08e3415120637cad7f540d9ceb4dba3136dbdd (patch) | |
tree | 618455273446f9fc60ba940f7679f92bef9f1bf8 | |
parent | a29acc9c318781b59063091b895773fc6cbe96e7 (diff) | |
download | qemu-1f08e3415120637cad7f540d9ceb4dba3136dbdd.zip qemu-1f08e3415120637cad7f540d9ceb4dba3136dbdd.tar.gz qemu-1f08e3415120637cad7f540d9ceb4dba3136dbdd.tar.bz2 |
vnc: support reload x509 certificates for vnc
This patch add vnc_display_reload_certs() to support
update x509 certificates.
Signed-off-by: Zihao Chang <changzihao1@huawei.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20210316075845.1476-3-changzihao1@huawei.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r-- | include/ui/console.h | 1 | ||||
-rw-r--r-- | ui/vnc.c | 28 |
2 files changed, 29 insertions, 0 deletions
diff --git a/include/ui/console.h b/include/ui/console.h index c960b70..2714038 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -476,6 +476,7 @@ int vnc_display_password(const char *id, const char *password); int vnc_display_pw_expire(const char *id, time_t expires); void vnc_parse(const char *str); int vnc_init_func(void *opaque, QemuOpts *opts, Error **errp); +bool vnc_display_reload_certs(const char *id, Error **errp); /* input.c */ int index_from_key(const char *key, size_t key_length); @@ -585,6 +585,34 @@ VncInfo2List *qmp_query_vnc_servers(Error **errp) return prev; } +bool vnc_display_reload_certs(const char *id, Error **errp) +{ + VncDisplay *vd = vnc_display_find(id); + QCryptoTLSCredsClass *creds = NULL; + + if (!vd) { + error_setg(errp, "Can not find vnc display"); + return false; + } + + if (!vd->tlscreds) { + error_setg(errp, "vnc tls is not enable"); + return false; + } + + creds = QCRYPTO_TLS_CREDS_GET_CLASS(OBJECT(vd->tlscreds)); + if (creds->reload == NULL) { + error_setg(errp, "%s doesn't support to reload TLS credential", + object_get_typename(OBJECT(vd->tlscreds))); + return false; + } + if (!creds->reload(vd->tlscreds, errp)) { + return false; + } + + return true; +} + /* TODO 1) Get the queue working for IO. 2) there is some weirdness when using the -S option (the screen is grey |