diff --git a/37564b47-xend-parse-response.patch b/37564b47-xend-parse-response.patch new file mode 100644 index 0000000..8c32fc5 --- /dev/null +++ b/37564b47-xend-parse-response.patch @@ -0,0 +1,39 @@ +commit 37564b471da7e9080284149f8350241afd448515 +Author: Jim Fehlig +Date: Tue Jan 28 18:15:48 2014 -0700 + + xen: fix parsing xend http response + + Commit df36af58 broke parsing of http response from xend. The prior + use of atoi() would happily parse e.g. a string containing "200 OK\r\n", + whereas virStrToLong_i() will fail when called with a NULL end_ptr. + Change the calls to virStrToLong_i() to provide a non-NULL end_ptr. + +Index: libvirt-1.2.1/src/xen/xend_internal.c +=================================================================== +--- libvirt-1.2.1.orig/src/xen/xend_internal.c ++++ libvirt-1.2.1/src/xen/xend_internal.c +@@ -282,6 +282,7 @@ xend_req(int fd, char **content) + size_t buffer_size = 4096; + int content_length = 0; + int retcode = 0; ++ char *end_ptr; + + if (VIR_ALLOC_N(buffer, buffer_size) < 0) + return -1; +@@ -291,13 +292,13 @@ xend_req(int fd, char **content) + break; + + if (istartswith(buffer, "Content-Length: ")) { +- if (virStrToLong_i(buffer + 16, NULL, 10, &content_length) < 0) { ++ if (virStrToLong_i(buffer + 16, &end_ptr, 10, &content_length) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("failed to parse Xend response content length")); + return -1; + } + } else if (istartswith(buffer, "HTTP/1.1 ")) { +- if (virStrToLong_i(buffer + 9, NULL, 10, &retcode) < 0) { ++ if (virStrToLong_i(buffer + 9, &end_ptr, 10, &retcode) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("failed to parse Xend response return code")); + return -1; diff --git a/fix-pci-attach-xen-driver.patch b/fix-pci-attach-xen-driver.patch index ba4c45a..215466b 100644 --- a/fix-pci-attach-xen-driver.patch +++ b/fix-pci-attach-xen-driver.patch @@ -12,7 +12,7 @@ Index: libvirt-1.2.1/src/xen/xend_internal.c =================================================================== --- libvirt-1.2.1.orig/src/xen/xend_internal.c +++ libvirt-1.2.1/src/xen/xend_internal.c -@@ -2216,6 +2216,7 @@ xenDaemonAttachDeviceFlags(virConnectPtr +@@ -2217,6 +2217,7 @@ xenDaemonAttachDeviceFlags(virConnectPtr virBuffer buf = VIR_BUFFER_INITIALIZER; char class[8], ref[80]; char *target = NULL; @@ -20,7 +20,7 @@ Index: libvirt-1.2.1/src/xen/xend_internal.c virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1); -@@ -2314,8 +2315,18 @@ xenDaemonAttachDeviceFlags(virConnectPtr +@@ -2315,8 +2316,18 @@ xenDaemonAttachDeviceFlags(virConnectPtr } sexpr = virBufferContentAndReset(&buf); diff --git a/libvirt.changes b/libvirt.changes index 2857279..648cb9b 100644 --- a/libvirt.changes +++ b/libvirt.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Wed Jan 29 14:50:27 MST 2014 - jfehlig@suse.com + +- Fix parsing xend http response + 37564b47-xend-parse-response.patch + rhb#1055165 + ------------------------------------------------------------------- Wed Jan 22 10:02:06 MST 2014 - jfehlig@suse.com diff --git a/libvirt.spec b/libvirt.spec index fc22a77..43c3673 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -421,6 +421,7 @@ Source1: libvirtd.init Source2: libvirtd-relocation-server.fw Source99: baselibs.conf # Upstream patches +Patch0: 37564b47-xend-parse-response.patch # Need to go upstream Patch100: xen-name-for-devid.patch Patch101: ia64-clone.patch @@ -928,6 +929,7 @@ namespaces. %prep %setup -q +%patch0 -p1 %patch100 -p1 %patch101 -p1 %patch102 -p1 diff --git a/xen-name-for-devid.patch b/xen-name-for-devid.patch index 9ae1992..326736a 100644 --- a/xen-name-for-devid.patch +++ b/xen-name-for-devid.patch @@ -27,7 +27,7 @@ Index: libvirt-1.2.1/src/xen/xend_internal.c virDomainDeviceDefPtr dev, char *class, char *ref, int ref_len); -@@ -3325,18 +3325,18 @@ xenDaemonDomainBlockPeek(virConnectPtr c +@@ -3326,18 +3326,18 @@ xenDaemonDomainBlockPeek(virConnectPtr c * Returns 0 in case of success, -1 in case of failure. */ static int @@ -50,7 +50,7 @@ Index: libvirt-1.2.1/src/xen/xend_internal.c if (dev->data.disk->driverName && STREQ(dev->data.disk->driverName, "tap")) strcpy(class, "tap"); -@@ -3346,19 +3346,17 @@ virDomainXMLDevID(virConnectPtr conn, +@@ -3347,19 +3347,17 @@ virDomainXMLDevID(virConnectPtr conn, else strcpy(class, "vbd"); @@ -81,7 +81,7 @@ Index: libvirt-1.2.1/src/xen/xend_internal.c } else if (dev->type == VIR_DOMAIN_DEVICE_NET) { char mac[VIR_MAC_STRING_BUFLEN]; virDomainNetDefPtr netdef = dev->data.net; -@@ -3366,16 +3364,22 @@ virDomainXMLDevID(virConnectPtr conn, +@@ -3367,16 +3365,22 @@ virDomainXMLDevID(virConnectPtr conn, strcpy(class, "vif"); @@ -114,7 +114,7 @@ Index: libvirt-1.2.1/src/xen/xend_internal.c } else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV && dev->data.hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && dev->data.hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) { -@@ -3391,17 +3395,44 @@ virDomainXMLDevID(virConnectPtr conn, +@@ -3392,17 +3396,44 @@ virDomainXMLDevID(virConnectPtr conn, strcpy(class, "pci");