diff --git a/SOURCES/0033-utils-Support-G_TYPE_UINT-in-_set_property_value_fro.patch b/SOURCES/0033-utils-Support-G_TYPE_UINT-in-_set_property_value_fro.patch new file mode 100644 index 0000000..7c41038 --- /dev/null +++ b/SOURCES/0033-utils-Support-G_TYPE_UINT-in-_set_property_value_fro.patch @@ -0,0 +1,40 @@ +From 7eae90f67d00bf36c0a9c56cf3c9e4fdc7d02494 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Wed, 10 May 2017 15:53:12 -0300 +Subject: [PATCH] utils: Support G_TYPE_UINT in _set_property_value_from_type() + +This type will mostly be used to parse the XML elements for +OvirtVmDisplay. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + govirt/ovirt-utils.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/govirt/ovirt-utils.c b/govirt/ovirt-utils.c +index 501acb9..af1dfc6 100644 +--- a/govirt/ovirt-utils.c ++++ b/govirt/ovirt-utils.c +@@ -23,6 +23,7 @@ + #include + + #include ++#include + #include + + #include +@@ -182,6 +183,11 @@ _set_property_value_from_type(GValue *value, + g_value_set_string(value, value_str); + break; + } ++ case G_TYPE_UINT: { ++ guint uint_value = strtoul(value_str, NULL, 0); ++ g_value_set_uint(value, uint_value); ++ break; ++ } + case G_TYPE_UINT64: { + guint64 int64_value = g_ascii_strtoull(value_str, NULL, 0); + g_value_set_uint64(value, int64_value); +-- +2.14.4 + diff --git a/SOURCES/0034-utils-Improve-log-message-when-subnode-is-not-found.patch b/SOURCES/0034-utils-Improve-log-message-when-subnode-is-not-found.patch new file mode 100644 index 0000000..a7ac83e --- /dev/null +++ b/SOURCES/0034-utils-Improve-log-message-when-subnode-is-not-found.patch @@ -0,0 +1,29 @@ +From 5a41846ba6e0d88a0a641caa214703336e2b2820 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Mon, 18 Sep 2017 10:47:13 -0300 +Subject: [PATCH] utils: Improve log message when subnode is not found + +Signed-off-by: Eduardo Lima (Etrunko) +--- + govirt/ovirt-utils.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/govirt/ovirt-utils.c b/govirt/ovirt-utils.c +index af1dfc6..a60c754 100644 +--- a/govirt/ovirt-utils.c ++++ b/govirt/ovirt-utils.c +@@ -63,9 +63,10 @@ ovirt_rest_xml_node_find(RestXmlNode *node, const char *path) + pathv = g_strsplit(path, "/", -1); + + for (i = 0; i < g_strv_length(pathv); ++i) { ++ gchar *name = node->name; + node = rest_xml_node_find(node, pathv[i]); + if (node == NULL) { +- g_debug("could not find XML node '%s'", pathv[i]); ++ g_debug("could not find subnode '%s' of XML node '%s' (search: %s)", pathv[i], name, path); + break; + } + } +-- +2.14.4 + diff --git a/SOURCES/0035-utils-Factor-out-basic-value-type-setting-from-_set_.patch b/SOURCES/0035-utils-Factor-out-basic-value-type-setting-from-_set_.patch new file mode 100644 index 0000000..14e559d --- /dev/null +++ b/SOURCES/0035-utils-Factor-out-basic-value-type-setting-from-_set_.patch @@ -0,0 +1,93 @@ +From 1bff3d3ca4101639e659c8649731020e7a5c9c10 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Tue, 3 Oct 2017 17:32:03 -0300 +Subject: [PATCH] utils: Factor out basic value type setting from + _set_property_value_from_type() + +A simple cosmetic enhancement with the hope to improve code readability. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + govirt/ovirt-utils.c | 59 ++++++++++++++++++++++++++++++---------------------- + 1 file changed, 34 insertions(+), 25 deletions(-) + +diff --git a/govirt/ovirt-utils.c b/govirt/ovirt-utils.c +index a60c754..a0146fd 100644 +--- a/govirt/ovirt-utils.c ++++ b/govirt/ovirt-utils.c +@@ -134,6 +134,39 @@ ovirt_rest_xml_node_get_str_array_from_path(RestXmlNode *node, const char *path, + return (GStrv) g_array_free(array, FALSE); + } + ++static gboolean ++_set_property_value_from_basic_type(GValue *value, ++ GType type, ++ const char *value_str) ++{ ++ switch(type) { ++ case G_TYPE_BOOLEAN: { ++ gboolean bool_value = ovirt_utils_boolean_from_string(value_str); ++ g_value_set_boolean(value, bool_value); ++ return TRUE; ++ } ++ case G_TYPE_STRING: { ++ g_value_set_string(value, value_str); ++ return TRUE; ++ } ++ case G_TYPE_UINT: { ++ guint uint_value = strtoul(value_str, NULL, 0); ++ g_value_set_uint(value, uint_value); ++ return TRUE; ++ } ++ case G_TYPE_UINT64: { ++ guint64 int64_value = g_ascii_strtoull(value_str, NULL, 0); ++ g_value_set_uint64(value, int64_value); ++ return TRUE; ++ } ++ default: { ++ g_warning("Unexpected type '%s' with value '%s'", g_type_name(type), value_str); ++ } ++ } ++ ++ return FALSE; ++} ++ + static gboolean + _set_property_value_from_type(GValue *value, + GType type, +@@ -174,31 +207,7 @@ _set_property_value_from_type(GValue *value, + goto end; + } + +- switch(type) { +- case G_TYPE_BOOLEAN: { +- gboolean bool_value = ovirt_utils_boolean_from_string(value_str); +- g_value_set_boolean(value, bool_value); +- break; +- } +- case G_TYPE_STRING: { +- g_value_set_string(value, value_str); +- break; +- } +- case G_TYPE_UINT: { +- guint uint_value = strtoul(value_str, NULL, 0); +- g_value_set_uint(value, uint_value); +- break; +- } +- case G_TYPE_UINT64: { +- guint64 int64_value = g_ascii_strtoull(value_str, NULL, 0); +- g_value_set_uint64(value, int64_value); +- break; +- } +- default: { +- g_warning("Unexpected type '%s' with value '%s'", g_type_name(type), value_str); +- ret = FALSE; +- } +- } ++ ret = _set_property_value_from_basic_type(value, type, value_str); + + end: + return ret; +-- +2.14.4 + diff --git a/SOURCES/0036-utils-Get-enum-default-value-from-GParamSpec.patch b/SOURCES/0036-utils-Get-enum-default-value-from-GParamSpec.patch new file mode 100644 index 0000000..8ae8c78 --- /dev/null +++ b/SOURCES/0036-utils-Get-enum-default-value-from-GParamSpec.patch @@ -0,0 +1,55 @@ +From 290692dcf6d572e86a2a90ff87f666ea148eb602 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Tue, 3 Oct 2017 17:51:41 -0300 +Subject: [PATCH] utils: Get enum default value from GParamSpec + +Instead of assuming 0 as the default value, use the one specified during +property creation time with g_param_spec_enum(). + +Signed-off-by: Eduardo Lima (Etrunko) +--- + govirt/ovirt-utils.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/govirt/ovirt-utils.c b/govirt/ovirt-utils.c +index a0146fd..dfaf09d 100644 +--- a/govirt/ovirt-utils.c ++++ b/govirt/ovirt-utils.c +@@ -169,13 +169,14 @@ _set_property_value_from_basic_type(GValue *value, + + static gboolean + _set_property_value_from_type(GValue *value, +- GType type, ++ GParamSpec *prop, + const char *path, + const char *attr, + RestXmlNode *node) + { + gboolean ret = TRUE; + const char *value_str; ++ GType type = prop->value_type; + + if (g_type_is_a(type, OVIRT_TYPE_RESOURCE)) { + OvirtResource *resource_value = ovirt_resource_new_from_xml(type, node, NULL); +@@ -202,7 +203,8 @@ _set_property_value_from_type(GValue *value, + return FALSE; + + if (G_TYPE_IS_ENUM(type)) { +- int enum_value = ovirt_utils_genum_get_value(type, value_str, 0); ++ GParamSpecEnum *enum_prop = G_PARAM_SPEC_ENUM(prop); ++ int enum_value = ovirt_utils_genum_get_value(type, value_str, enum_prop->default_value); + g_value_set_enum(value, enum_value); + goto end; + } +@@ -229,7 +231,7 @@ ovirt_rest_xml_node_parse(RestXmlNode *node, + g_return_val_if_fail(prop != NULL, FALSE); + + g_value_init(&value, prop->value_type); +- if (_set_property_value_from_type(&value, prop->value_type, elements->xml_path, elements->xml_attr, node)) ++ if (_set_property_value_from_type(&value, prop, elements->xml_path, elements->xml_attr, node)) + g_object_set_property(object, elements->prop_name, &value); + g_value_unset(&value); + } +-- +2.14.4 + diff --git a/SOURCES/0037-vm-Set-vm-state-property-using-OvirtXmlElement-struc.patch b/SOURCES/0037-vm-Set-vm-state-property-using-OvirtXmlElement-struc.patch new file mode 100644 index 0000000..febad54 --- /dev/null +++ b/SOURCES/0037-vm-Set-vm-state-property-using-OvirtXmlElement-struc.patch @@ -0,0 +1,82 @@ +From 039c8d8bc0aa49ea3bd34fc190afc844d68a6e41 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Thu, 4 May 2017 18:23:39 -0300 +Subject: [PATCH] vm: Set vm state property using OvirtXmlElement struct + +It was required to change the default value of the enum property to +OVIRT_VM_STATE_UNKNOWN, so that it will be set by +ovirt_rest_xml_node_parse() function in case of error. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + govirt/ovirt-vm-xml.c | 30 +----------------------------- + govirt/ovirt-vm.c | 5 ++++- + 2 files changed, 5 insertions(+), 30 deletions(-) + +diff --git a/govirt/ovirt-vm-xml.c b/govirt/ovirt-vm-xml.c +index 9990262..25f50f3 100644 +--- a/govirt/ovirt-vm-xml.c ++++ b/govirt/ovirt-vm-xml.c +@@ -138,35 +138,7 @@ static gboolean vm_set_display_from_xml(OvirtVm *vm, + return TRUE; + } + +-static gboolean vm_set_state_from_xml(OvirtVm *vm, RestXmlNode *node) +-{ +- RestXmlNode *state_node; +- +- state_node = rest_xml_node_find(node, "status"); +- if (state_node == NULL) { +- g_debug("Could not find 'status' node"); +- return FALSE; +- } +- state_node = rest_xml_node_find(state_node, "state"); +- if (state_node != NULL) { +- int state; +- +- g_return_val_if_fail(state_node->content != NULL, FALSE); +- state = ovirt_utils_genum_get_value(OVIRT_TYPE_VM_STATE, +- state_node->content, +- OVIRT_VM_STATE_UNKNOWN); +- g_object_set(G_OBJECT(vm), "state", state, NULL); +- +- return TRUE; +- } +- +- return FALSE; +-} +- + G_GNUC_INTERNAL gboolean ovirt_vm_refresh_from_xml(OvirtVm *vm, RestXmlNode *node) + { +- vm_set_state_from_xml(vm, node); +- vm_set_display_from_xml(vm, node); +- +- return TRUE; ++ return vm_set_display_from_xml(vm, node); + } +diff --git a/govirt/ovirt-vm.c b/govirt/ovirt-vm.c +index 36ffd35..f30022d 100644 +--- a/govirt/ovirt-vm.c ++++ b/govirt/ovirt-vm.c +@@ -199,6 +199,9 @@ static gboolean ovirt_vm_init_from_xml(OvirtResource *resource, + .xml_path = "cluster", + .xml_attr = "id", + }, ++ { .prop_name = "state", ++ .xml_path = "status/state", ++ }, + { NULL, }, + }; + +@@ -233,7 +236,7 @@ static void ovirt_vm_class_init(OvirtVmClass *klass) + "State", + "Virtual Machine State", + OVIRT_TYPE_VM_STATE, +- OVIRT_VM_STATE_DOWN, ++ OVIRT_VM_STATE_UNKNOWN, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property(object_class, +-- +2.14.4 + diff --git a/SOURCES/0038-vm-Set-values-of-OvirtVmDisplay-using-OvirtXmlElemen.patch b/SOURCES/0038-vm-Set-values-of-OvirtVmDisplay-using-OvirtXmlElemen.patch new file mode 100644 index 0000000..ec45755 --- /dev/null +++ b/SOURCES/0038-vm-Set-values-of-OvirtVmDisplay-using-OvirtXmlElemen.patch @@ -0,0 +1,190 @@ +From b8b0d03e43bee40ad15fa4c3aa6ca8b07ca98e31 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Wed, 10 May 2017 15:48:09 -0300 +Subject: [PATCH] vm: Set values of OvirtVmDisplay using OvirtXmlElement struct + +This required the addition of OVIRT_VM_DISPLAY_INVALID to the +OvirtVmDisplayType enum as the default value. + +The value of the 'type' property of OvirtVmDisplay is tested after the +parsing is done, to ensure it is either vnc or spice. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + govirt/ovirt-vm-display.c | 2 +- + govirt/ovirt-vm-display.h | 3 +- + govirt/ovirt-vm-xml.c | 118 ++++++++++++++-------------------------------- + 3 files changed, 38 insertions(+), 85 deletions(-) + +diff --git a/govirt/ovirt-vm-display.c b/govirt/ovirt-vm-display.c +index 37e042a..b03c303 100644 +--- a/govirt/ovirt-vm-display.c ++++ b/govirt/ovirt-vm-display.c +@@ -197,7 +197,7 @@ static void ovirt_vm_display_class_init(OvirtVmDisplayClass *klass) + "Type", + "Display Type", + OVIRT_TYPE_VM_DISPLAY_TYPE, +- OVIRT_VM_DISPLAY_SPICE, ++ OVIRT_VM_DISPLAY_INVALID, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property(object_class, +diff --git a/govirt/ovirt-vm-display.h b/govirt/ovirt-vm-display.h +index f7eb310..38ef9b7 100644 +--- a/govirt/ovirt-vm-display.h ++++ b/govirt/ovirt-vm-display.h +@@ -55,7 +55,8 @@ struct _OvirtVmDisplayClass + + typedef enum { + OVIRT_VM_DISPLAY_SPICE, +- OVIRT_VM_DISPLAY_VNC ++ OVIRT_VM_DISPLAY_VNC, ++ OVIRT_VM_DISPLAY_INVALID, + } OvirtVmDisplayType; + + GType ovirt_vm_display_get_type(void); +diff --git a/govirt/ovirt-vm-xml.c b/govirt/ovirt-vm-xml.c +index 25f50f3..0603427 100644 +--- a/govirt/ovirt-vm-xml.c ++++ b/govirt/ovirt-vm-xml.c +@@ -33,102 +33,54 @@ + static gboolean vm_set_display_from_xml(OvirtVm *vm, + RestXmlNode *root) + { +- RestXmlNode *node; + OvirtVmDisplay *display; +- const char *display_key = g_intern_string("display"); +- const char *type_key = g_intern_string("type"); +- const char *address_key = g_intern_string("address"); +- const char *port_key = g_intern_string("port"); +- const char *secure_port_key = g_intern_string("secure_port"); +- const char *monitors_key = g_intern_string("monitors"); +- const char *certificate_key = g_intern_string("certificate"); +- const char *smartcard_key = g_intern_string("smartcard_enabled"); +- const char *allow_override_key = g_intern_string("allow_override"); +- const char *proxy_key = g_intern_string("proxy"); ++ OvirtVmDisplayType type; ++ OvirtXmlElement display_elements[] = { ++ { .prop_name = "type", ++ .xml_path = "type", ++ }, ++ { .prop_name = "address", ++ .xml_path = "address", ++ }, ++ { .prop_name = "port", ++ .xml_path = "port", ++ }, ++ { .prop_name = "secure-port", ++ .xml_path = "secure_port", ++ }, ++ { .prop_name = "monitor-count", ++ .xml_path = "monitors", ++ }, ++ { .prop_name = "smartcard", ++ .xml_path = "smartcard_enabled", ++ }, ++ { .prop_name = "allow-override", ++ .xml_path = "allow_override", ++ }, ++ { .prop_name = "host-subject", ++ .xml_path = "certificate/subject", ++ }, ++ { .prop_name = "proxy-url", ++ .xml_path = "proxy", ++ }, ++ { NULL, }, ++ }; + + if (root == NULL) { + return FALSE; + } +- root = g_hash_table_lookup(root->children, display_key); ++ root = rest_xml_node_find(root, "display"); + if (root == NULL) { + g_debug("Could not find 'display' node"); + return FALSE; + } + display = ovirt_vm_display_new(); +- +- node = g_hash_table_lookup(root->children, type_key); +- g_return_val_if_fail(node != NULL, FALSE); +- if (g_strcmp0(node->content, "spice") == 0) { +- g_object_set(G_OBJECT(display), "type", OVIRT_VM_DISPLAY_SPICE, NULL); +- } else if (g_strcmp0(node->content, "vnc") == 0) { +- g_object_set(G_OBJECT(display), "type", OVIRT_VM_DISPLAY_VNC, NULL); +- } else { +- g_warning("Unknown display type: %s", node->content); ++ ovirt_rest_xml_node_parse(root, G_OBJECT(display), display_elements); ++ g_object_get(G_OBJECT(display), "type", &type, NULL); ++ if (type == OVIRT_VM_DISPLAY_INVALID) { + return FALSE; + } + +- node = g_hash_table_lookup(root->children, monitors_key); +- g_return_val_if_fail(node != NULL, FALSE); +- g_object_set(G_OBJECT(display), +- "monitor-count", strtoul(node->content, NULL, 0), +- NULL); +- +- /* on non started VMs, these 2 values will not be available */ +- node = g_hash_table_lookup(root->children, address_key); +- if (node != NULL) { +- g_object_set(G_OBJECT(display), "address", node->content, NULL); +- } +- +- node = g_hash_table_lookup(root->children, port_key); +- if (node != NULL) { +- g_object_set(G_OBJECT(display), +- "port", strtoul(node->content, NULL, 0), +- NULL); +- } +- +- node = g_hash_table_lookup(root->children, secure_port_key); +- if (node != NULL) { +- g_object_set(G_OBJECT(display), +- "secure-port", strtoul(node->content, NULL, 0), +- NULL); +- } +- +- node = g_hash_table_lookup(root->children, smartcard_key); +- if (node != NULL) { +- gboolean smartcard; +- +- smartcard = (g_strcmp0(node->content, "true") == 0); +- g_object_set(G_OBJECT(display), +- "smartcard", smartcard, +- NULL); +- } +- +- node = g_hash_table_lookup(root->children, allow_override_key); +- if (node != NULL) { +- gboolean allow_override; +- +- allow_override = (g_strcmp0(node->content, "true") == 0); +- g_object_set(G_OBJECT(display), +- "allow-override", allow_override, +- NULL); +- } +- +- node = g_hash_table_lookup(root->children, certificate_key); +- if (node != NULL) { +- const char *subject_key = g_intern_string("subject"); +- node = g_hash_table_lookup(node->children, subject_key); +- if (node != NULL) { +- g_object_set(G_OBJECT(display), +- "host-subject", node->content, +- NULL); +- } +- } +- +- node = g_hash_table_lookup(root->children, proxy_key); +- if (node != NULL) { +- g_object_set(G_OBJECT(display), "proxy-url", node->content, NULL); +- } +- + /* FIXME: this overrides the ticket/expiry which may + * already be set + */ +-- +2.14.4 + diff --git a/SOURCES/0039-vm-display-Move-XML-parsing-from-ovirt-vm-xml.c-file.patch b/SOURCES/0039-vm-display-Move-XML-parsing-from-ovirt-vm-xml.c-file.patch new file mode 100644 index 0000000..04c6288 --- /dev/null +++ b/SOURCES/0039-vm-display-Move-XML-parsing-from-ovirt-vm-xml.c-file.patch @@ -0,0 +1,266 @@ +From c81f18b9dd4888145ac979addb4ef5d73585a176 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Tue, 19 Sep 2017 12:02:32 -0300 +Subject: [PATCH] vm-display: Move XML parsing from ovirt-vm-xml.c file + +Following the model of other resources, the code for parsing the XML +elements for the OvirtVmDisplay object where it really belongs to. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + govirt/Makefile.am | 1 - + govirt/ovirt-vm-display.c | 60 +++++++++++++++++++++++++++++ + govirt/ovirt-vm-display.h | 2 + + govirt/ovirt-vm-xml.c | 96 ----------------------------------------------- + govirt/ovirt-vm.c | 15 ++++++-- + 5 files changed, 74 insertions(+), 100 deletions(-) + delete mode 100644 govirt/ovirt-vm-xml.c + +diff --git a/govirt/Makefile.am b/govirt/Makefile.am +index 9bf0eba..1a59f2c 100644 +--- a/govirt/Makefile.am ++++ b/govirt/Makefile.am +@@ -73,7 +73,6 @@ libgovirt_la_SOURCES = \ + ovirt-utils.c \ + ovirt-vm.c \ + ovirt-vm-display.c \ +- ovirt-vm-xml.c \ + ovirt-vm-pool.c \ + $(NULL) + +diff --git a/govirt/ovirt-vm-display.c b/govirt/ovirt-vm-display.c +index b03c303..ebb04c2 100644 +--- a/govirt/ovirt-vm-display.c ++++ b/govirt/ovirt-vm-display.c +@@ -24,6 +24,7 @@ + + #include "ovirt-enum-types.h" + #include "ovirt-vm-display.h" ++#include "ovirt-utils.h" + + #define OVIRT_VM_DISPLAY_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), OVIRT_TYPE_VM_DISPLAY, OvirtVmDisplayPrivate)) +@@ -303,3 +304,62 @@ OvirtVmDisplay *ovirt_vm_display_new(void) + { + return OVIRT_VM_DISPLAY(g_object_new(OVIRT_TYPE_VM_DISPLAY, NULL)); + } ++ ++static gboolean ovirt_vm_display_set_from_xml(OvirtVmDisplay *display, RestXmlNode *node) ++{ ++ OvirtVmDisplayType type; ++ OvirtXmlElement display_elements[] = { ++ { .prop_name = "type", ++ .xml_path = "type", ++ }, ++ { .prop_name = "address", ++ .xml_path = "address", ++ }, ++ { .prop_name = "port", ++ .xml_path = "port", ++ }, ++ { .prop_name = "secure-port", ++ .xml_path = "secure_port", ++ }, ++ { .prop_name = "monitor-count", ++ .xml_path = "monitors", ++ }, ++ { .prop_name = "smartcard", ++ .xml_path = "smartcard_enabled", ++ }, ++ { .prop_name = "allow-override", ++ .xml_path = "allow_override", ++ }, ++ { .prop_name = "host-subject", ++ .xml_path = "certificate/subject", ++ }, ++ { .prop_name = "proxy-url", ++ .xml_path = "proxy", ++ }, ++ { NULL, }, ++ }; ++ ++ ovirt_rest_xml_node_parse(node, G_OBJECT(display), display_elements); ++ g_object_get(G_OBJECT(display), "type", &type, NULL); ++ if (type == OVIRT_VM_DISPLAY_INVALID) { ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++OvirtVmDisplay *ovirt_vm_display_new_from_xml(RestXmlNode *node) ++{ ++ OvirtVmDisplay *display; ++ ++ g_return_val_if_fail(node != NULL, NULL); ++ ++ display = ovirt_vm_display_new(); ++ ++ if (!ovirt_vm_display_set_from_xml(display, node)) { ++ g_object_unref(display); ++ return NULL; ++ } ++ ++ return display; ++} +diff --git a/govirt/ovirt-vm-display.h b/govirt/ovirt-vm-display.h +index 38ef9b7..11a5074 100644 +--- a/govirt/ovirt-vm-display.h ++++ b/govirt/ovirt-vm-display.h +@@ -24,6 +24,7 @@ + + #include + #include ++#include + + G_BEGIN_DECLS + +@@ -61,6 +62,7 @@ typedef enum { + + GType ovirt_vm_display_get_type(void); + OvirtVmDisplay *ovirt_vm_display_new(void); ++OvirtVmDisplay *ovirt_vm_display_new_from_xml(RestXmlNode *node); + + G_END_DECLS + +diff --git a/govirt/ovirt-vm-xml.c b/govirt/ovirt-vm-xml.c +deleted file mode 100644 +index 0603427..0000000 +--- a/govirt/ovirt-vm-xml.c ++++ /dev/null +@@ -1,96 +0,0 @@ +-/* +- * ovirt-vm-xml.c +- * +- * Copyright (C) 2011, 2013 Red Hat, Inc. +- * +- * This library is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2.1 of the License, or (at your option) any later version. +- * +- * This library is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with this library. If not, see +- * . +- * +- * Author: Christophe Fergeau +- */ +-#include +- +-#include +-#include +- +-#include "ovirt-enum-types.h" +-#include "ovirt-utils.h" +-#include "ovirt-vm.h" +-#include "ovirt-vm-display.h" +-#include "ovirt-vm-private.h" +- +-static gboolean vm_set_display_from_xml(OvirtVm *vm, +- RestXmlNode *root) +-{ +- OvirtVmDisplay *display; +- OvirtVmDisplayType type; +- OvirtXmlElement display_elements[] = { +- { .prop_name = "type", +- .xml_path = "type", +- }, +- { .prop_name = "address", +- .xml_path = "address", +- }, +- { .prop_name = "port", +- .xml_path = "port", +- }, +- { .prop_name = "secure-port", +- .xml_path = "secure_port", +- }, +- { .prop_name = "monitor-count", +- .xml_path = "monitors", +- }, +- { .prop_name = "smartcard", +- .xml_path = "smartcard_enabled", +- }, +- { .prop_name = "allow-override", +- .xml_path = "allow_override", +- }, +- { .prop_name = "host-subject", +- .xml_path = "certificate/subject", +- }, +- { .prop_name = "proxy-url", +- .xml_path = "proxy", +- }, +- { NULL, }, +- }; +- +- if (root == NULL) { +- return FALSE; +- } +- root = rest_xml_node_find(root, "display"); +- if (root == NULL) { +- g_debug("Could not find 'display' node"); +- return FALSE; +- } +- display = ovirt_vm_display_new(); +- ovirt_rest_xml_node_parse(root, G_OBJECT(display), display_elements); +- g_object_get(G_OBJECT(display), "type", &type, NULL); +- if (type == OVIRT_VM_DISPLAY_INVALID) { +- return FALSE; +- } +- +- /* FIXME: this overrides the ticket/expiry which may +- * already be set +- */ +- g_object_set(G_OBJECT(vm), "display", display, NULL); +- g_object_unref(G_OBJECT(display)); +- +- return TRUE; +-} +- +-G_GNUC_INTERNAL gboolean ovirt_vm_refresh_from_xml(OvirtVm *vm, RestXmlNode *node) +-{ +- return vm_set_display_from_xml(vm, node); +-} +diff --git a/govirt/ovirt-vm.c b/govirt/ovirt-vm.c +index f30022d..95c1e4d 100644 +--- a/govirt/ovirt-vm.c ++++ b/govirt/ovirt-vm.c +@@ -180,7 +180,8 @@ static gboolean ovirt_vm_init_from_xml(OvirtResource *resource, + RestXmlNode *node, + GError **error) + { +- gboolean parsed_ok; ++ OvirtVmDisplay *display; ++ RestXmlNode *display_node; + OvirtResourceClass *parent_class; + OvirtXmlElement vm_elements[] = { + { .prop_name = "host-href", +@@ -205,11 +206,19 @@ static gboolean ovirt_vm_init_from_xml(OvirtResource *resource, + { NULL, }, + }; + +- parsed_ok = ovirt_vm_refresh_from_xml(OVIRT_VM(resource), node); +- if (!parsed_ok) { ++ display_node = rest_xml_node_find(node, "display"); ++ if (display_node == NULL) { ++ g_debug("Could not find 'display' node"); + return FALSE; + } + ++ display = ovirt_vm_display_new_from_xml(display_node); ++ if (display == NULL) ++ return FALSE; ++ ++ g_object_set(G_OBJECT(resource), "display", display, NULL); ++ g_object_unref(G_OBJECT(display)); ++ + if (!ovirt_rest_xml_node_parse(node, G_OBJECT(resource), vm_elements)) + return FALSE; + +-- +2.14.4 + diff --git a/SOURCES/0040-vm-Set-ticket-expiry-using-OvirtXmlElement-struct.patch b/SOURCES/0040-vm-Set-ticket-expiry-using-OvirtXmlElement-struct.patch new file mode 100644 index 0000000..6113367 --- /dev/null +++ b/SOURCES/0040-vm-Set-ticket-expiry-using-OvirtXmlElement-struct.patch @@ -0,0 +1,98 @@ +From 3a92d61ba92b85c0d31aa836713344085dab813e Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Wed, 10 May 2017 15:16:27 -0300 +Subject: [PATCH] vm: Set 'ticket/expiry' using OvirtXmlElement struct + +Signed-off-by: Eduardo Lima (Etrunko) +--- + govirt/ovirt-vm.c | 56 +++++++++++++++++++++++++++++++------------------------ + 1 file changed, 32 insertions(+), 24 deletions(-) + +diff --git a/govirt/ovirt-vm.c b/govirt/ovirt-vm.c +index 95c1e4d..8cd482b 100644 +--- a/govirt/ovirt-vm.c ++++ b/govirt/ovirt-vm.c +@@ -381,48 +381,56 @@ gboolean ovirt_vm_stop(OvirtVm *vm, OvirtProxy *proxy, GError **error) + + static gboolean parse_ticket_status(RestXmlNode *root, OvirtResource *resource, GError **error) + { +- OvirtVm *vm; +- RestXmlNode *node; +- const char *ticket_key = g_intern_string("ticket"); +- const char *value_key = g_intern_string("value"); +- const char *expiry_key = g_intern_string("expiry"); + OvirtVmDisplay *display; ++ gchar *ticket = NULL; ++ guint expiry = 0; ++ gboolean ret = FALSE; ++ OvirtXmlElement ticket_elements[] = { ++ { .prop_name = "ticket", ++ .xml_path = "value", ++ }, ++ { .prop_name = "expiry", ++ .xml_path = "expiry", ++ }, ++ { NULL, }, ++ }; + + g_return_val_if_fail(root != NULL, FALSE); + g_return_val_if_fail(OVIRT_IS_VM(resource), FALSE); + g_return_val_if_fail(error == NULL || *error == NULL, FALSE); + +- vm = OVIRT_VM(resource); +- root = g_hash_table_lookup(root->children, ticket_key); ++ g_object_get(G_OBJECT(resource), "display", &display, NULL); ++ g_return_val_if_fail(display != NULL, FALSE); ++ ++ root = rest_xml_node_find(root, "ticket"); + if (root == NULL) { + g_set_error(error, OVIRT_ERROR, OVIRT_ERROR_PARSING_FAILED, + _("Could not find 'ticket' node")); +- g_return_val_if_reached(FALSE); ++ goto end; + } +- node = g_hash_table_lookup(root->children, value_key); +- if (node == NULL) { ++ ++ ovirt_rest_xml_node_parse(root, G_OBJECT(display), ticket_elements); ++ ++ g_object_get(G_OBJECT(display), "ticket", &ticket, "expiry", &expiry, NULL); ++ ++ if (ticket == NULL) { + g_set_error(error, OVIRT_ERROR, OVIRT_ERROR_PARSING_FAILED, + _("Could not find 'value' node")); +- g_return_val_if_reached(FALSE); ++ goto end; + } ++ g_free(ticket); + +- g_object_get(G_OBJECT(vm), "display", &display, NULL); +- g_return_val_if_fail(display != NULL, FALSE); +- g_object_set(G_OBJECT(display), "ticket", node->content, NULL); +- +- node = g_hash_table_lookup(root->children, expiry_key); +- if (node == NULL) { ++ if (expiry == 0) { + g_set_error(error, OVIRT_ERROR, OVIRT_ERROR_PARSING_FAILED, + _("Could not find 'expiry' node")); +- g_object_unref(G_OBJECT(display)); +- g_return_val_if_reached(FALSE); ++ goto end; + } +- g_object_set(G_OBJECT(display), +- "expiry", strtoul(node->content, NULL, 0), +- NULL); ++ ++ ret = TRUE; ++ ++end: + g_object_unref(G_OBJECT(display)); +- +- return TRUE; ++ return ret; + } + + +-- +2.14.4 + diff --git a/SOURCES/0041-test-govirt-Add-display-node-to-vm-XMLs.patch b/SOURCES/0041-test-govirt-Add-display-node-to-vm-XMLs.patch new file mode 100644 index 0000000..042cd4e --- /dev/null +++ b/SOURCES/0041-test-govirt-Add-display-node-to-vm-XMLs.patch @@ -0,0 +1,39 @@ +From a2abf332bf99baf1d6b6a96d9153b44efdedf384 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Fri, 22 Jun 2018 18:18:53 -0300 +Subject: [PATCH] test-govirt: Add 'display' node to vm XMLs + +Makes 'make distcheck' pass again. Test-govirt was failing since commit +039c8d8, because the 'display' node is mandatory, but the return value +of the function vm_set_display_from_xml() had been ignored. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + tests/test-govirt.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/tests/test-govirt.c b/tests/test-govirt.c +index 247a27a..7f2cd57 100644 +--- a/tests/test-govirt.c ++++ b/tests/test-govirt.c +@@ -194,9 +194,17 @@ static void test_govirt_list_duplicate_vms(void) + const char *vms_body = " \ + \ + vm0 \ ++ \ ++ spice \ ++ 1 \ ++ \ + \ + \ + vm0 \ ++ \ ++ spice \ ++ 1 \ ++ \ + \ + "; + +-- +2.14.4 + diff --git a/SOURCES/0042-proxy-Set-detailed-error-message-for-async-call.patch b/SOURCES/0042-proxy-Set-detailed-error-message-for-async-call.patch new file mode 100644 index 0000000..ccd706a --- /dev/null +++ b/SOURCES/0042-proxy-Set-detailed-error-message-for-async-call.patch @@ -0,0 +1,66 @@ +From 01563a00550dd001f080aeddd8c6bbc35c676991 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Wed, 11 Jul 2018 15:42:16 -0300 +Subject: [PATCH] proxy: Set detailed error message for async call + +The rest API returns more detailed error messages with the result, not +only the literal corresponding to the value. If this is the case, we set +a new error message and return it. + +For example, before this change, virt-viewer showed a dialog with a +vague 'Bad Request' message, and now a much more detailed 'Operation +Failed: query execution failed due to insufficient permissions.' + +Signed-off-by: Eduardo Lima (Etrunko) +--- + govirt/ovirt-proxy.c | 20 ++++++++++++++++++-- + 1 file changed, 18 insertions(+), 2 deletions(-) + +diff --git a/govirt/ovirt-proxy.c b/govirt/ovirt-proxy.c +index 921e22e..f8e629e 100644 +--- a/govirt/ovirt-proxy.c ++++ b/govirt/ovirt-proxy.c +@@ -240,6 +240,22 @@ call_async_cancelled_cb (G_GNUC_UNUSED GCancellable *cancellable, + } + + ++static void rest_call_async_set_error(RestProxyCall *call, GSimpleAsyncResult *result, const GError *error) ++{ ++ GError *local_error = NULL; ++ RestXmlNode *root = ovirt_rest_xml_node_from_call(call); ++ ++ if (root != NULL && ovirt_utils_gerror_from_xml_fault(root, &local_error)) { ++ g_debug("ovirt_rest_call_async(): %s", local_error->message); ++ g_simple_async_result_set_from_error(result, local_error); ++ g_clear_error(&local_error); ++ } else { ++ g_simple_async_result_set_from_error(result, error); ++ } ++ ++ rest_xml_node_unref(root); ++} ++ + static void + call_async_cb(RestProxyCall *call, const GError *error, + G_GNUC_UNUSED GObject *weak_object, +@@ -249,7 +265,7 @@ call_async_cb(RestProxyCall *call, const GError *error, + GSimpleAsyncResult *result = data->result; + + if (error != NULL) { +- g_simple_async_result_set_from_error(result, error); ++ rest_call_async_set_error(call, result, error); + } else { + GError *call_error = NULL; + gboolean callback_result = TRUE; +@@ -259,7 +275,7 @@ call_async_cb(RestProxyCall *call, const GError *error, + data->call_user_data, + &call_error); + if (call_error != NULL) { +- g_simple_async_result_set_from_error(result, call_error); ++ rest_call_async_set_error(call, result, call_error); + } + } + +-- +2.20.1 + diff --git a/SOURCES/0043-cdrom-Set-file-property-using-OvirtXmlElement-struct.patch b/SOURCES/0043-cdrom-Set-file-property-using-OvirtXmlElement-struct.patch new file mode 100644 index 0000000..e157479 --- /dev/null +++ b/SOURCES/0043-cdrom-Set-file-property-using-OvirtXmlElement-struct.patch @@ -0,0 +1,108 @@ +From 53fb63d610503679bd3f4e2780989076544ddb14 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Thu, 4 May 2017 15:54:02 -0300 +Subject: [PATCH] cdrom: Set file property using OvirtXmlElement struct + +This was the last place left to move to the new automatic parsing +scheme. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + govirt/ovirt-cdrom.c | 57 +++++++++++++++++--------------------------- + 1 file changed, 22 insertions(+), 35 deletions(-) + +diff --git a/govirt/ovirt-cdrom.c b/govirt/ovirt-cdrom.c +index d852403..5bab7d3 100644 +--- a/govirt/ovirt-cdrom.c ++++ b/govirt/ovirt-cdrom.c +@@ -28,6 +28,7 @@ + #include "ovirt-proxy-private.h" + #include "ovirt-resource-private.h" + #include "ovirt-resource-rest-call.h" ++#include "ovirt-utils.h" + + #define OVIRT_CDROM_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), OVIRT_TYPE_CDROM, OvirtCdromPrivate)) +@@ -95,25 +96,29 @@ static void ovirt_cdrom_finalize(GObject *object) + } + + +-static gboolean ovirt_cdrom_refresh_from_xml(OvirtCdrom *cdrom, +- RestXmlNode *node) ++static gboolean ovirt_cdrom_init_from_xml(OvirtResource *resource, ++ RestXmlNode *node, ++ GError **error) + { +- RestXmlNode *file_node; +- const char *file; +- const char *file_key = g_intern_string("file"); ++ gboolean ret = FALSE; + char *name; ++ OvirtResourceClass *parent_class; ++ OvirtXmlElement cdrom_elements[] = { ++ { .prop_name = "file", ++ .xml_path = "file", ++ .xml_attr = "id", ++ }, ++ { NULL , }, ++ }; + +- file_node = g_hash_table_lookup(node->children, file_key); +- if (file_node != NULL) { +- file = rest_xml_node_get_attr(file_node, "id"); +- if (g_strcmp0(file, cdrom->priv->file) != 0) { +- g_free(cdrom->priv->file); +- cdrom->priv->file = g_strdup(file); +- g_object_notify(G_OBJECT(cdrom), "file"); +- } +- } ++ parent_class = OVIRT_RESOURCE_CLASS(ovirt_cdrom_parent_class); ++ ++ if (!parent_class->init_from_xml(resource, node, error)) ++ return FALSE; + +- g_object_get(G_OBJECT(cdrom), "name", &name, NULL); ++ ovirt_rest_xml_node_parse(node, G_OBJECT(resource), cdrom_elements); ++ ++ g_object_get(G_OBJECT(resource), "name", &name, NULL); + if (name == NULL) { + /* Build up fake name as ovirt_collection_refresh_from_xml() + * expects it to be set (it uses it as a hash table key), but +@@ -122,32 +127,14 @@ static gboolean ovirt_cdrom_refresh_from_xml(OvirtCdrom *cdrom, + * enough for now + */ + g_debug("Setting fake 'name' for cdrom resource"); +- g_object_set(G_OBJECT(cdrom), "name", "cdrom0", NULL); +- } else { +- g_free(name); ++ g_object_set(G_OBJECT(resource), "name", "cdrom0", NULL); + } + ++ g_free(name); + return TRUE; + } + + +-static gboolean ovirt_cdrom_init_from_xml(OvirtResource *resource, +- RestXmlNode *node, +- GError **error) +-{ +- gboolean parsed_ok; +- OvirtResourceClass *parent_class; +- +- parsed_ok = ovirt_cdrom_refresh_from_xml(OVIRT_CDROM(resource), node); +- if (!parsed_ok) { +- return FALSE; +- } +- parent_class = OVIRT_RESOURCE_CLASS(ovirt_cdrom_parent_class); +- +- return parent_class->init_from_xml(resource, node, error); +-} +- +- + static char *ovirt_cdrom_to_xml(OvirtResource *resource) + { + OvirtCdrom *cdrom; +-- +2.20.1 + diff --git a/SOURCES/0044-proxy-Don-t-try-to-unref-NULL-root-node.patch b/SOURCES/0044-proxy-Don-t-try-to-unref-NULL-root-node.patch new file mode 100644 index 0000000..e984477 --- /dev/null +++ b/SOURCES/0044-proxy-Don-t-try-to-unref-NULL-root-node.patch @@ -0,0 +1,31 @@ +From 8032575cbe274c9e70ec2a0efb0b536f13dbc6cd Mon Sep 17 00:00:00 2001 +From: Christophe Fergeau +Date: Fri, 21 Dec 2018 13:15:16 +0100 +Subject: [PATCH] proxy: Don't try to unref NULL root node + +When an error occurs, we may have failed to get any data, so 'root' may +be NULL. Trying to unref it triggers a critical. This happens for +example when trying to connect to a remote host with an invalid +certificate. +--- + govirt/ovirt-proxy.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/govirt/ovirt-proxy.c b/govirt/ovirt-proxy.c +index f8e629e..920ef21 100644 +--- a/govirt/ovirt-proxy.c ++++ b/govirt/ovirt-proxy.c +@@ -253,7 +253,9 @@ static void rest_call_async_set_error(RestProxyCall *call, GSimpleAsyncResult *r + g_simple_async_result_set_from_error(result, error); + } + +- rest_xml_node_unref(root); ++ if (root != NULL) { ++ rest_xml_node_unref(root); ++ } + } + + static void +-- +2.20.1 + diff --git a/SOURCES/0045-utils-Check-for-valid-data-before-calling-rest_xml_p.patch b/SOURCES/0045-utils-Check-for-valid-data-before-calling-rest_xml_p.patch new file mode 100644 index 0000000..fbfabcf --- /dev/null +++ b/SOURCES/0045-utils-Check-for-valid-data-before-calling-rest_xml_p.patch @@ -0,0 +1,98 @@ +From d6ddeff795ce3f132f1e266fc813e0a4917f8bf7 Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Mon, 4 Feb 2019 15:58:40 -0200 +Subject: [PATCH] utils: Check for valid data before calling + rest_xml_parser_parse_from_data() + +In the case of HTTP errors, such as a invalid TLS certificate, the +returned data is NULL, and the code in librest does not check for the +pointer being valid, causing a segfault. + +The users of this function have been updated to check for NULL return +value. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + govirt/ovirt-proxy.c | 6 ++++++ + govirt/ovirt-resource.c | 9 ++++++++- + govirt/ovirt-utils.c | 7 +++++-- + 3 files changed, 19 insertions(+), 3 deletions(-) + +diff --git a/govirt/ovirt-proxy.c b/govirt/ovirt-proxy.c +index 920ef21..9cdd211 100644 +--- a/govirt/ovirt-proxy.c ++++ b/govirt/ovirt-proxy.c +@@ -365,6 +365,11 @@ static gboolean get_collection_xml_async_cb(OvirtProxy* proxy, + data = (OvirtProxyGetCollectionAsyncData *)user_data; + + root = ovirt_rest_xml_node_from_call(call); ++ if (root == NULL) { ++ g_set_error_literal(error, OVIRT_ERROR, OVIRT_ERROR_PARSING_FAILED, ++ _("Failed to parse response from collection")); ++ goto end; ++ } + + /* Do the parsing */ + g_warn_if_fail(data->parser != NULL); +@@ -374,6 +379,7 @@ static gboolean get_collection_xml_async_cb(OvirtProxy* proxy, + + rest_xml_node_unref(root); + ++end: + return parsed; + } + +diff --git a/govirt/ovirt-resource.c b/govirt/ovirt-resource.c +index 1984b1d..936e912 100644 +--- a/govirt/ovirt-resource.c ++++ b/govirt/ovirt-resource.c +@@ -868,17 +868,24 @@ static gboolean ovirt_resource_refresh_async_cb(OvirtProxy *proxy, + { + OvirtResource *resource; + RestXmlNode *root; +- gboolean refreshed; ++ gboolean refreshed = FALSE; + + g_return_val_if_fail(REST_IS_PROXY_CALL(call), FALSE); + g_return_val_if_fail(OVIRT_IS_RESOURCE(user_data), FALSE); + + root = ovirt_rest_xml_node_from_call(call); ++ if (root == NULL) { ++ g_set_error_literal(error, OVIRT_ERROR, OVIRT_ERROR_PARSING_FAILED, ++ _("Failed to parse response from resource")); ++ goto end; ++ } ++ + resource = OVIRT_RESOURCE(user_data); + refreshed = ovirt_resource_init_from_xml(resource, root, error); + + rest_xml_node_unref(root); + ++end: + return refreshed; + } + +diff --git a/govirt/ovirt-utils.c b/govirt/ovirt-utils.c +index dfaf09d..56ce2e1 100644 +--- a/govirt/ovirt-utils.c ++++ b/govirt/ovirt-utils.c +@@ -40,11 +40,14 @@ ovirt_rest_xml_node_from_call(RestProxyCall *call) + { + RestXmlParser *parser; + RestXmlNode *node; ++ const char * data = rest_proxy_call_get_payload (call); ++ ++ if (data == NULL) ++ return NULL; + + parser = rest_xml_parser_new (); + +- node = rest_xml_parser_parse_from_data (parser, +- rest_proxy_call_get_payload (call), ++ node = rest_xml_parser_parse_from_data (parser, data, + rest_proxy_call_get_payload_length (call)); + + g_object_unref(G_OBJECT(parser)); +-- +2.20.1 + diff --git a/SOURCES/0046-Update-tests-certificates.patch b/SOURCES/0046-Update-tests-certificates.patch new file mode 100644 index 0000000..e3dfc7b --- /dev/null +++ b/SOURCES/0046-Update-tests-certificates.patch @@ -0,0 +1,147 @@ +From d8b4c483d8e31525b1290115fbded054b4e8c3ab Mon Sep 17 00:00:00 2001 +From: "Eduardo Lima (Etrunko)" +Date: Tue, 21 May 2019 14:30:50 -0300 +Subject: [PATCH] Update tests certificates + +As reference, use https://www.spice-space.org/spice-user-manual.html#_generating_self_signed_certificates +in order to create new certificates. This procedure should not be +necessary anymore, current date of expiration is set to Dec 31st 9999. + +Signed-off-by: Eduardo Lima (Etrunko) +--- + tests/https-cert/ca-cert.pem | 60 ++++++++++++++++---------------- + tests/https-cert/server-cert.pem | 54 ++++++++++++++-------------- + 2 files changed, 57 insertions(+), 57 deletions(-) + +diff --git a/tests/https-cert/ca-cert.pem b/tests/https-cert/ca-cert.pem +index 1f37f35..b904a2d 100644 +--- a/tests/https-cert/ca-cert.pem ++++ b/tests/https-cert/ca-cert.pem +@@ -1,32 +1,32 @@ + -----BEGIN CERTIFICATE----- +-MIIFfzCCA2egAwIBAgIJAJe68wcZuCytMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV +-BAYTAlhYMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxHDAaBgNVBAoME0RlZmF1bHQg +-Q29tcGFueSBMdGQxEjAQBgNVBAMMCWdvdmlydCBDQTAeFw0xNjA0MTIxNTEyNDFa +-Fw0xOTA0MTIxNTEyNDFaMFYxCzAJBgNVBAYTAlhYMRUwEwYDVQQHDAxEZWZhdWx0 +-IENpdHkxHDAaBgNVBAoME0RlZmF1bHQgQ29tcGFueSBMdGQxEjAQBgNVBAMMCWdv +-dmlydCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALj2s6YqG9CE +-O7ZxudxjGRSN3rUsnc++p0I+Exo32lsPMD3AXGJ9EwGnXhoRvGnuF2piICZ3CLl2 +-nOH/7Ta8Sb/RuHj67XpJyOhgamM9HULff7ZFXyOrSVyf7YhetCqtx6QhwGfeJ88A +-MsClJmLZ0AkC1rqtIze9r7HCHZCQxkZZHKV0EhF8RaK0oBxjt6MFIru/kzQCXvWT +-t9/RaaxhOdboCtTEmu5oTBQfmKUzl4KT3byYVhdm70MEu/PES1XcgnI2RiHcggrI +-jJ7IknDZTZVK6r0uYLwhBLYA7WsHjRuinTC45dfGcZo0ZTn3khO2Get1negU6wuq +-kkxyc/Su+tU+eH74haW58Xa3DRXlRNHu91ll81W1Wtpi2osDlImIbM/a+FTSTenl +-/bIpPOSqbncvi0yfOoZJhH/u8jgQl3hKVgcA8wYdBj/zcHknldnjeS/k0zI84jOd +-ZrSWL/U7CRGiqJJgRpEKMlggf8Zyh+Lu5Hs6DJrSMG36nbLuukioNCzk7mzMJtOk +-kcE2576RA/1qkYdno06ZHCR7AnOlwvOKusS8ApIti/quQy1COanBYKaiXOJOemZ2 +-n5D3cDsqRk1s/Wj53Ci9KurhGoQOoquRXHv7Z3vzBtZdqZBdwLH3r0pM85a//M6c +-HkDwEDsZNUPlvteDahhMPt2qjJNI1ucVAgMBAAGjUDBOMB0GA1UdDgQWBBTxTMG0 +-4azCV/NN7/DhFI5tVp9t3TAfBgNVHSMEGDAWgBTxTMG04azCV/NN7/DhFI5tVp9t +-3TAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQA0OOkImczWNwgz/CaB +-mEx6odCM0Kv2ozZ6d8ttsj4w9S3tn0HSR1xM62F/GmO1NfxQXKWTR3xYMou0fQVA +-RskWy/I9WVN/BTD2QSPD9b3fqZvXgi5eMXVeT/1zO2LywV/APLzVl+jbB3WT9J+9 +-1CHyiMNQUUbkIULmE3Z4FPYL30TGbAj4QSIIAbJlHAxRsrTbLXqRXnqw/NxdKdBk +-v1AOvCenu1HcbtWwDnwrIJGt8/igPB5KqsBzHVfcVmvpXUDC1oLf8w8v7nUB55hs +-ZMFyaeEcmc+W2B/JM26npbfTCjST9D6kxBXUhIeu9oJDimfiUqYUaZOuybUM6ZEy +-76vsO8qB06AuA+KhbvBgz8VHveMCnL516VIB8gxThvBgGIe7AQJuDHCy3+oRJ1+k +-kQm04t2k+Gg03ZpgtzbKaOCL6zRFyy5XE8h59/92KyUh804WTiS5MQZLTnqONqS1 +-49BWXgTZgL+PvMr2xzE5ECs3lkcNpO3TvQJB6eSg0X6NQEscQRbTI1qrmszfAov3 +-teQQlwZZHwzXhJxDNAW9u4oaCWbhRsVbYIoDDdvgIeeLozNaQgJkVzQOrSDOcbrk +-4cclYBgxgSAp1wvlje6iUFGGz6Q37GLBhqBTONjIL2ArlizqznGvBbQ/0CO1bij4 +-mePFkPdR8OZWT1+FN6HavKYtPg== ++MIIFjzCCA3egAwIBAgIUI09vQ7noXtQvCMMLivExKvahRI8wDQYJKoZIhvcNAQEL ++BQAwVjELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UE ++CgwTRGVmYXVsdCBDb21wYW55IEx0ZDESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTE5 ++MDUyMTE3MjUwN1oYDzk5OTkxMjMxMTcyNTA3WjBWMQswCQYDVQQGEwJYWDEVMBMG ++A1UEBwwMRGVmYXVsdCBDaXR5MRwwGgYDVQQKDBNEZWZhdWx0IENvbXBhbnkgTHRk ++MRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK ++AoICAQC49rOmKhvQhDu2cbncYxkUjd61LJ3PvqdCPhMaN9pbDzA9wFxifRMBp14a ++Ebxp7hdqYiAmdwi5dpzh/+02vEm/0bh4+u16ScjoYGpjPR1C33+2RV8jq0lcn+2I ++XrQqrcekIcBn3ifPADLApSZi2dAJAta6rSM3va+xwh2QkMZGWRyldBIRfEWitKAc ++Y7ejBSK7v5M0Al71k7ff0WmsYTnW6ArUxJruaEwUH5ilM5eCk928mFYXZu9DBLvz ++xEtV3IJyNkYh3IIKyIyeyJJw2U2VSuq9LmC8IQS2AO1rB40bop0wuOXXxnGaNGU5 ++95ITthnrdZ3oFOsLqpJMcnP0rvrVPnh++IWlufF2tw0V5UTR7vdZZfNVtVraYtqL ++A5SJiGzP2vhU0k3p5f2yKTzkqm53L4tMnzqGSYR/7vI4EJd4SlYHAPMGHQY/83B5 ++J5XZ43kv5NMyPOIznWa0li/1OwkRoqiSYEaRCjJYIH/Gcofi7uR7Ogya0jBt+p2y ++7rpIqDQs5O5szCbTpJHBNue+kQP9apGHZ6NOmRwkewJzpcLzirrEvAKSLYv6rkMt ++QjmpwWCmolziTnpmdp+Q93A7KkZNbP1o+dwovSrq4RqEDqKrkVx7+2d78wbWXamQ ++XcCx969KTPOWv/zOnB5A8BA7GTVD5b7Xg2oYTD7dqoyTSNbnFQIDAQABo1MwUTAd ++BgNVHQ4EFgQU8UzBtOGswlfzTe/w4RSObVafbd0wHwYDVR0jBBgwFoAU8UzBtOGs ++wlfzTe/w4RSObVafbd0wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC ++AgEAUFRLaj6YtYRLG+PAT9ic+VEqX2qxttBO2/LpjFwpsBPuNs6/kHF6VNPOhV6K ++6SM4yfWM+y37IqQATTCe4eMiMEun+4DMzhkKX4Lbz+FR/n7xyibwNALZH/M0P6gt ++nXIciyLcG7hmFkgQCGBCVyavrh6q7HcE14MYZlCCt+0rRyJu+PEd4sbcnwo+Ia9p ++4tEeTK8cU5Ek4kJh/AkdlabgGQ/Cq24Y0+Tfix/0i3tRPM1jWgaukKlD2wPh/Idp ++KjtPqx1PM0MSgCoalNxcCAOHPh1h/8NJt+yIDwurOd+XEbG+tBnLE8y0upyO5w1U ++SU9XCBqv7fQnSPOBgvQ/5OwribIHLuvjCVF0BkI3u+NeNVSzFtGreFHNWJ6foA6o ++Um50pw/hCgLptOfhXYkCx2uP7XxOhjlpJOc+1I05Y44vai5YmpqwvvEWkcV2Dlw3 ++ihIHWca6wxVql61LqIzqoiVxNhGiOGTPWbyGMBWA+8cbxVqG0zBKl3A4vox0cGRX ++QPBIiUFjhx4Z5pYZuJ5ndQHiclnYtEfC6+UppL08yrDdIzyLMxIpDqkUAw03TKKC ++TzCsa3DL10LTIulDJurC5SHgY+SrBrWAGuSy97Lmp0cogSBgU9VFqESKaB1lgtET ++c8dkOFwHdOIXu3iI9uKGcwkUfrjGsUdYOUJaAJ5t36WCw/Q= + -----END CERTIFICATE----- +diff --git a/tests/https-cert/server-cert.pem b/tests/https-cert/server-cert.pem +index 709369f..9ca912d 100644 +--- a/tests/https-cert/server-cert.pem ++++ b/tests/https-cert/server-cert.pem +@@ -1,30 +1,30 @@ + -----BEGIN CERTIFICATE----- +-MIIFIDCCAwgCAQEwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCWFgxFTATBgNV ++MIIFIjCCAwoCAQEwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCWFgxFTATBgNV + BAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDES +-MBAGA1UEAwwJZ292aXJ0IENBMB4XDTE2MDQxMjE1MTMzNVoXDTE5MDQxMjE1MTMz +-NVowVjELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UE +-CgwTRGVmYXVsdCBDb21wYW55IEx0ZDESMBAGA1UEAwwJbG9jYWxob3N0MIICIjAN +-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt6OkS5HhwwFLJWDmuRSOYCXwQP6v +-OlToc7rHvK0+shkspUb1KYks3iEw9djLQdxf1E5k+oDlifDKAMgd/AxkJn8kZ4f1 +-i3183gFdad+UlMFwCliReb3opdtalR6Bef1CDE91+wsN1S4OLXYlVY/EO/sV4Ydh +-khReJiSQzUS+s1T9Nxa57YiuhJ6KYhS5SKkoFDQ7OmyvXM4cSnqOy7h4xBg8fBv9 +-jxI24DNsF1qPg3XVQg3FDmHLEdRTlOWzq39qxzHPrTcFCboS1EaKHIX5DwlNR/L+ +-x/JVqP99t2d/7lp2u8rveHsV0sLCoGK6ehbL6CHMXZQmmRQaVL/xueVIUvUhpwCS +-BXdxRNHpSizPkM4P7/0isgvJ8okElwKv2G46rJjt/AuQTOXVJDEfajHe/703E5r3 +-iJkkG4Jd3uVeZIEigic9PEyervYk2VrWXIIZltfgaCUZYiJNRQ6xbG6RrKLYgSfV +-fpr8urFWFKs+j8dZHc8/GPi1tjTtaaYG0kXg3CGEh3Ww3ym0xjxrt2Qr62nMD+lH +-0loK8wdJbzsHgmLOGnURUWN55XKFpWcrP9rYHSl0d70u6YioMpIM2UClfRPQnLvX +-+/H3yBshAPQldBgseXJ9zlG1ho5fXaIg5u4mtNg+GccerNOFypdJJc97IdYFmyhm +-ww/6LcpMKk+e6wECAwEAATANBgkqhkiG9w0BAQsFAAOCAgEADePSnvlNHaO54TRl +-FZxfxNf/Ft3s+HP2ya6SC+tu1X7FgjbHQL4nm0Xf+pboAZoeUMujgUVGuYQ3ytkt +-irbSONYBbr439zZ4cPqWXqgzySTEiKwWR8REHXRPHJaupE09g+uEWo4E2u7423+k +-j3tbSkPZlObmsXkpdtQEw347yHcmZb8ujloxBopRK5KHchg/mXjiVGrkt9E8tzgX +-V8eG7CkCiEujnLpdjZ+7+AwmJoIuzB7xs2rXMe/zC7/4l2ViCFgjJKZra2oZLzqc +-FVBZXW8dAmWT4iIsZP4xXyzrKA8exzKgsdtXTMYNzgUsXH6Zcou0GhTR5jZvWbvZ +-Z0uPIXFnDRBqvK8nbRab0ok7iJRoLJhFih6q2tQwrpg05zPV39d9GLNwXKEKCo6/ +-dqnqUhQcD5CpXoLhANbSgZZo7xdTM4Onxlm+h+3D/UxbciOQ8nRmNKUC+xX79+Xw +-zPLRULRs32brrfObOuOJuiA4tL81n9ghAdnbVhiZZvhxpJ/QvZWl4CH1UdR2/bO4 +-+lkEAJDfLTP2uvWe0zYFS2E1WeJUOBjt6mU4sFNxqf5Vt+6PMWBGKvUg/JW+2kCP +-S5h1pRFDf8XOGWJ5UvzwlxP/VXrDo70xeY7Pdgk+TPr+TroJsNjorIi9Y0JXKZJ6 +-dux12jowA6uKxtF7dmtA5szUKSU= ++MBAGA1UEAwwJbG9jYWxob3N0MCAXDTE5MDUyMTE3MjUzMloYDzk5OTkxMjMxMTcy ++NTMyWjBWMQswCQYDVQQGEwJYWDEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MRwwGgYD ++VQQKDBNEZWZhdWx0IENvbXBhbnkgTHRkMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIi ++MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC3o6RLkeHDAUslYOa5FI5gJfBA ++/q86VOhzuse8rT6yGSylRvUpiSzeITD12MtB3F/UTmT6gOWJ8MoAyB38DGQmfyRn ++h/WLfXzeAV1p35SUwXAKWJF5veil21qVHoF5/UIMT3X7Cw3VLg4tdiVVj8Q7+xXh ++h2GSFF4mJJDNRL6zVP03FrntiK6EnopiFLlIqSgUNDs6bK9czhxKeo7LuHjEGDx8 ++G/2PEjbgM2wXWo+DddVCDcUOYcsR1FOU5bOrf2rHMc+tNwUJuhLURoochfkPCU1H ++8v7H8lWo/323Z3/uWna7yu94exXSwsKgYrp6FsvoIcxdlCaZFBpUv/G55UhS9SGn ++AJIFd3FE0elKLM+Qzg/v/SKyC8nyiQSXAq/YbjqsmO38C5BM5dUkMR9qMd7/vTcT ++mveImSQbgl3e5V5kgSKCJz08TJ6u9iTZWtZcghmW1+BoJRliIk1FDrFsbpGsotiB ++J9V+mvy6sVYUqz6Px1kdzz8Y+LW2NO1ppgbSReDcIYSHdbDfKbTGPGu3ZCvracwP ++6UfSWgrzB0lvOweCYs4adRFRY3nlcoWlZys/2tgdKXR3vS7piKgykgzZQKV9E9Cc ++u9f78ffIGyEA9CV0GCx5cn3OUbWGjl9doiDm7ia02D4Zxx6s04XKl0klz3sh1gWb ++KGbDD/otykwqT57rAQIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQCdarzrfXWzSL1k ++MZ+D25teNSgZglXw7cpc/WVx2zQ26Wd7csig8Gac1vW/bQMk9XBbwZoI9tuHk62l ++6+9eXGgIgN5qUCchlqcO41IVSk4sWrvNPXiU7kbLrjmrh8txQM8D/YLKm8S8Muf7 ++F4r/RhRkQY+85eOS2GEyj5AMnUlmi1g7wBkIiRipY4fMLowwX8ouQiJCvQE/LJYS ++rQlPDnvCwcVmOxEKUjQoZ0vKrD6zNrnWzEe3LXxQQI3OnnAqgVGHH7bQsY482apn ++2e+WRJouBSwOKEb27/DWMQoXaiVhNBh2wWt5xgKKupJB+PIyW0H2w0Gw1Jr2JY+I ++Lh5fXJXCB/BF3qsbJhi2mnNYWhPP4oOoLN/pT6m1FV/bbTEXlsxxczfE/zT4JRsi ++DhQRZ/FWhbpT9Z7I5kd76KjpKkRFi3Nkb9ezAW35xuo6Ex5x7EWNJM8FJuktNgIK ++Z7JxnqeC0DVEDSWhtxo6HTlx0HgpVTjRPKCVEt1d4itPRBMKueygul1se1jLlMw8 +++8sRpCxdYU9KX18c+p4wANTke94vH5mrm2msK/oXmM77VDIGriEtr8tMIYZbGwKQ ++dhUKsH9eaReKHwoLqihQotpEi28DSng4EXSu9crZV/Yu7crL1+JBSF+N5OK7cf0q ++8K2k/Y/pshicpfHaEKDJmLp5vfULNw== + -----END CERTIFICATE----- +-- +2.21.0 + diff --git a/SPECS/libgovirt.spec b/SPECS/libgovirt.spec index 00e20c5..33da5a4 100644 --- a/SPECS/libgovirt.spec +++ b/SPECS/libgovirt.spec @@ -17,7 +17,7 @@ Summary: A GObject library for interacting with oVirt REST API Name: libgovirt Version: 0.3.4 -Release: 1%{?dist}%{?extra_release} +Release: 3%{?dist}%{?extra_release} License: LGPLv2+ Group: Development/Libraries Source: http://ftp.gnome.org/pub/GNOME/sources/libgovirt/0.3/%{name}-%{version}.tar.xz @@ -54,6 +54,20 @@ Patch29: 0029-resource-Fix-ovirt_resource_rest_call_sync-crash-on-.patch Patch30: 0030-resource-Fix-ovirt_resource_init_from_xml_real-preco.patch Patch31: 0031-resource-Update-xml-node-in-ovirt_resource_init_from.patch Patch32: 0032-utils-Drop-type-member-from-OvirtXmlElement-struct.patch +Patch33: 0033-utils-Support-G_TYPE_UINT-in-_set_property_value_fro.patch +Patch34: 0034-utils-Improve-log-message-when-subnode-is-not-found.patch +Patch35: 0035-utils-Factor-out-basic-value-type-setting-from-_set_.patch +Patch36: 0036-utils-Get-enum-default-value-from-GParamSpec.patch +Patch37: 0037-vm-Set-vm-state-property-using-OvirtXmlElement-struc.patch +Patch38: 0038-vm-Set-values-of-OvirtVmDisplay-using-OvirtXmlElemen.patch +Patch39: 0039-vm-display-Move-XML-parsing-from-ovirt-vm-xml.c-file.patch +Patch40: 0040-vm-Set-ticket-expiry-using-OvirtXmlElement-struct.patch +Patch41: 0041-test-govirt-Add-display-node-to-vm-XMLs.patch +Patch42: 0042-proxy-Set-detailed-error-message-for-async-call.patch +Patch43: 0043-cdrom-Set-file-property-using-OvirtXmlElement-struct.patch +Patch44: 0044-proxy-Don-t-try-to-unref-NULL-root-node.patch +Patch45: 0045-utils-Check-for-valid-data-before-calling-rest_xml_p.patch +Patch46: 0046-Update-tests-certificates.patch %if 0%{?enable_autotools} BuildRequires: autoconf @@ -139,6 +153,12 @@ make check %endif %changelog +* Tue Apr 09 2019 Eduardo Lima (Etrunko) - 0.3.4-2 +- Parse XML nodes automatically + Related: rhbz#1427467 +- Set detailed error message for async call + Related: rhbz#1427467 + * Fri Jun 08 2018 Christophe Fergeau - 0.3.4-1 - Rebase to latest 0.3.4 upstream release. Still quite a few patches as there was no 0.3.5 release yet