You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

90 lines
3.3 KiB

From 242ddaa613c4d41cbdd063b73d20292049944b47 Mon Sep 17 00:00:00 2001
From: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
Date: Mon, 7 Oct 2013 16:02:37 +0200
Subject: [PATCH 24/60] KVMRedirectionSAP: Only return redirection SAPs for VNC
graphics
Since pty consoles still show up as GraphicsRASDs the check for
VNC redirection proved to be too rigid. Instead of failing the
associator call, PTY consoles will just be ignored now.
This is an old bug, but will be exposed when cimtest is extended
to handle consoles.
Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
Reviewed-by: Daniel Hansel <daniel.hansel@linux.vnet.ibm.com>
Signed-off-by: John Ferlan <jferlan@redhat.com>
---
src/Virt_KVMRedirectionSAP.c | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/src/Virt_KVMRedirectionSAP.c b/src/Virt_KVMRedirectionSAP.c
index 708b0d1..1533e52 100644
--- a/src/Virt_KVMRedirectionSAP.c
+++ b/src/Virt_KVMRedirectionSAP.c
@@ -264,28 +264,31 @@ static CMPIStatus get_vnc_sessions(const CMPIBroker *broker,
return s;
}
-static bool check_graphics(virDomainPtr dom,
- struct domain **dominfo)
+static int check_graphics(virDomainPtr dom,
+ struct domain **dominfo)
{
int ret = 0;
+ int i;
ret = get_dominfo(dom, dominfo);
if (!ret) {
CU_DEBUG("Unable to get domain info");
- return false;
+ return -1;
}
if ((*dominfo)->dev_graphics == NULL) {
CU_DEBUG("No graphics device associated with guest");
- return false;
+ return -1;
}
- if (!STREQC((*dominfo)->dev_graphics->dev.graphics.type, "vnc")) {
- CU_DEBUG("Only vnc devices have console redirection sessions");
- return false;
+ for (i = 0; i < (*dominfo)->dev_graphics_ct; i++) {
+ if (STREQC((*dominfo)->dev_graphics[i].dev.graphics.type, "vnc")) {
+ return i;
+ }
}
- return true;
+ CU_DEBUG("Only vnc devices have console redirection sessions");
+ return -1;
}
static CMPIStatus return_console_sap(const CMPIObjectPath *ref,
@@ -362,12 +365,13 @@ CMPIStatus enum_console_sap(const CMPIBroker *broker,
}
for (i = 0; i < count; i++) {
- if (!check_graphics(domain_list[i], &dominfo)) {
+ int pos = check_graphics(domain_list[i], &dominfo);
+ if (pos < 0) {
cleanup_dominfo(&dominfo);
continue;
}
- ret = sscanf(dominfo->dev_graphics->dev.graphics.dev.vnc.port,
+ ret = sscanf(dominfo->dev_graphics[pos].dev.graphics.dev.vnc.port,
"%d",
&lport);
if (ret != 1) {
@@ -449,7 +453,7 @@ CMPIStatus get_console_sap_by_name(const CMPIBroker *broker,
goto out;
}
- if (!check_graphics(dom, &dominfo)) {
+ if (check_graphics(dom, &dominfo) < 0) {
virt_set_status(broker, &s,
CMPI_RC_ERR_FAILED,
conn,
--
2.1.0