From 4daedcf6c980d7a32416f56605e474bf48828ca95359fe98c7f2c3d9e19186db Mon Sep 17 00:00:00 2001 From: James Fehlig Date: Tue, 14 Aug 2018 17:05:16 +0000 Subject: [PATCH 1/2] Accepting request 629264 from home:jfehlig:branches:Virtualization - Revert switch to jansson boo#1104820 - Dropped: temp-build-fix.patch - Added: 9ed59012--revert-jansson1.patch, 54f2b5e3-revert-jansson2.patch, b56950fd-revert-jansson3.patch, 6c3d66ac-revert-jansson4.patch, 8e373e6d-revert-jansson5.patch, 6f99de31-revert-jansson6.patch, f204cf51-revert-jansson7.patch, 5a58b5ed-revert-jansson8.patch, 63f6e0e9-revert-jansson9.patch, 8687eba-revert-jansson10.patch, e96e71d8-revert-jansson11.patch, d99a8959-revert-jansson12.patch - spec: don't restart libvirt-guests when updating libvirt-client bsc#1104662 OBS-URL: https://build.opensuse.org/request/show/629264 OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=701 --- 074a7e14-revert-jansson13.patch | 28 ++ 54f2b5e3-revert-jansson2.patch | 37 ++ 5a58b5ed-revert-jansson8.patch | 40 ++ 63f6e0e9-revert-jansson9.patch | 73 ++++ 6c3d66ac-revert-jansson4.patch | 496 ++++++++++++++++++++++ 6f99de31-revert-jansson6.patch | 174 ++++++++ 8687eba-revert-jansson10.patch | 29 ++ 86db0db9-revert-jansson14.patch | 82 ++++ 8e373e6d-revert-jansson5.patch | 31 ++ 9ed59012--revert-jansson1.patch | 53 +++ b56950fd-revert-jansson3.patch | 36 ++ d99a8959-revert-jansson12.patch | 712 ++++++++++++++++++++++++++++++++ e96e71d8-revert-jansson11.patch | 570 +++++++++++++++++++++++++ f204cf51-revert-jansson7.patch | 30 ++ libvirt-suse-netcontrol.patch | 6 +- libvirt.changes | 27 ++ libvirt.spec | 38 +- temp-build-fix.patch | 40 -- 18 files changed, 2452 insertions(+), 50 deletions(-) create mode 100644 074a7e14-revert-jansson13.patch create mode 100644 54f2b5e3-revert-jansson2.patch create mode 100644 5a58b5ed-revert-jansson8.patch create mode 100644 63f6e0e9-revert-jansson9.patch create mode 100644 6c3d66ac-revert-jansson4.patch create mode 100644 6f99de31-revert-jansson6.patch create mode 100644 8687eba-revert-jansson10.patch create mode 100644 86db0db9-revert-jansson14.patch create mode 100644 8e373e6d-revert-jansson5.patch create mode 100644 9ed59012--revert-jansson1.patch create mode 100644 b56950fd-revert-jansson3.patch create mode 100644 d99a8959-revert-jansson12.patch create mode 100644 e96e71d8-revert-jansson11.patch create mode 100644 f204cf51-revert-jansson7.patch delete mode 100644 temp-build-fix.patch diff --git a/074a7e14-revert-jansson13.patch b/074a7e14-revert-jansson13.patch new file mode 100644 index 0000000..321370c --- /dev/null +++ b/074a7e14-revert-jansson13.patch @@ -0,0 +1,28 @@ +commit 074a7e14780e6aff78c7305c7dcad059a998c08a +Author: Ján Tomko +Date: Mon Aug 13 13:40:25 2018 +0200 + + Revert "build: undef WITH_JANSSON for SETUID_RPC_CLIENT" + + This reverts commit 93fdc9e0b0cbb2eec32745a868ac4633f0912ad5. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/config-post.h +=================================================================== +--- libvirt-4.6.0.orig/config-post.h ++++ libvirt-4.6.0/config-post.h +@@ -36,7 +36,6 @@ + # undef WITH_DEVMAPPER + # undef WITH_DTRACE_PROBES + # undef WITH_GNUTLS +-# undef WITH_JANSSON + # undef WITH_LIBSSH + # undef WITH_MACVTAP + # undef WITH_NUMACTL diff --git a/54f2b5e3-revert-jansson2.patch b/54f2b5e3-revert-jansson2.patch new file mode 100644 index 0000000..5e19e24 --- /dev/null +++ b/54f2b5e3-revert-jansson2.patch @@ -0,0 +1,37 @@ +commit 54f2b5e330aa20c9745b2545fc88973539015b98 +Author: Ján Tomko +Date: Mon Aug 13 13:38:46 2018 +0200 + + Revert "util: jsoncompat: Stub out virJSONInitialize when compiling without jansson" + + This reverts commit 9e44c2db8ad94d3c20acc1d081538c280af198b4. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/src/util/virjsoncompat.c +=================================================================== +--- libvirt-4.6.0.orig/src/util/virjsoncompat.c ++++ libvirt-4.6.0/src/util/virjsoncompat.c +@@ -271,15 +271,4 @@ json_true_impl(void) + return json_true_ptr(); + } + +- +-#else /* !WITH_JANSSON */ +- +- +-int +-virJSONInitialize(void) +-{ +- return 0; +-} +- +- +-#endif /* !WITH_JANSSON */ ++#endif /* WITH_JANSSON */ diff --git a/5a58b5ed-revert-jansson8.patch b/5a58b5ed-revert-jansson8.patch new file mode 100644 index 0000000..addfe12 --- /dev/null +++ b/5a58b5ed-revert-jansson8.patch @@ -0,0 +1,40 @@ +commit 5a58b5ed6803e71e32e5d6f8c6e3b68874d085fb +Author: Ján Tomko +Date: Mon Aug 13 13:39:48 2018 +0200 + + Revert "build: switch --with-qemu default from yes to check" + + This reverts commit c5ae8e0c2b4b6bb3c667cfadaf65a66c3f4f3d85. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/m4/virt-driver-qemu.m4 +=================================================================== +--- libvirt-4.6.0.orig/m4/virt-driver-qemu.m4 ++++ libvirt-4.6.0/m4/virt-driver-qemu.m4 +@@ -18,7 +18,7 @@ dnl . + dnl + + AC_DEFUN([LIBVIRT_DRIVER_ARG_QEMU], [ +- LIBVIRT_ARG_WITH_FEATURE([QEMU], [QEMU/KVM], [check]) ++ LIBVIRT_ARG_WITH_FEATURE([QEMU], [QEMU/KVM], [yes]) + LIBVIRT_ARG_WITH([QEMU_USER], [username to run QEMU system instance as], + ['platform dependent']) + LIBVIRT_ARG_WITH([QEMU_GROUP], [groupname to run QEMU system instance as], +@@ -26,10 +26,6 @@ AC_DEFUN([LIBVIRT_DRIVER_ARG_QEMU], [ + ]) + + AC_DEFUN([LIBVIRT_DRIVER_CHECK_QEMU], [ +- AC_REQUIRE([LIBVIRT_CHECK_JANSSON]) +- if test "$with_qemu" = "check"; then +- with_qemu=$with_jansson +- fi + if test "$with_qemu" = "yes" ; then + AC_DEFINE_UNQUOTED([WITH_QEMU], 1, [whether QEMU driver is enabled]) + fi diff --git a/63f6e0e9-revert-jansson9.patch b/63f6e0e9-revert-jansson9.patch new file mode 100644 index 0000000..787d543 --- /dev/null +++ b/63f6e0e9-revert-jansson9.patch @@ -0,0 +1,73 @@ +commit 63f6e0e95036a0634ee8147ee7a463c4066fa720 +Author: Ján Tomko +Date: Mon Aug 13 13:39:56 2018 +0200 + + Revert "Remove virJSONValueNewStringLen" + + This reverts commit 8f802c6d8659beb9eb3cab96ba2553e251728337. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/src/libvirt_private.syms +=================================================================== +--- libvirt-4.6.0.orig/src/libvirt_private.syms ++++ libvirt-4.6.0/src/libvirt_private.syms +@@ -2098,6 +2098,7 @@ virJSONValueNewNumberUint; + virJSONValueNewNumberUlong; + virJSONValueNewObject; + virJSONValueNewString; ++virJSONValueNewStringLen; + virJSONValueObjectAdd; + virJSONValueObjectAddVArgs; + virJSONValueObjectAppend; +Index: libvirt-4.6.0/src/util/virjson.c +=================================================================== +--- libvirt-4.6.0.orig/src/util/virjson.c ++++ libvirt-4.6.0/src/util/virjson.c +@@ -420,6 +420,28 @@ virJSONValueNewString(const char *data) + } + + ++virJSONValuePtr ++virJSONValueNewStringLen(const char *data, ++ size_t length) ++{ ++ virJSONValuePtr val; ++ ++ if (!data) ++ return virJSONValueNewNull(); ++ ++ if (VIR_ALLOC(val) < 0) ++ return NULL; ++ ++ val->type = VIR_JSON_TYPE_STRING; ++ if (VIR_STRNDUP(val->data.string, data, length) < 0) { ++ VIR_FREE(val); ++ return NULL; ++ } ++ ++ return val; ++} ++ ++ + static virJSONValuePtr + virJSONValueNewNumber(const char *data) + { +Index: libvirt-4.6.0/src/util/virjson.h +=================================================================== +--- libvirt-4.6.0.orig/src/util/virjson.h ++++ libvirt-4.6.0/src/util/virjson.h +@@ -59,6 +59,7 @@ int virJSONValueObjectAddVArgs(virJSONVa + + + virJSONValuePtr virJSONValueNewString(const char *data); ++virJSONValuePtr virJSONValueNewStringLen(const char *data, size_t length); + virJSONValuePtr virJSONValueNewNumberInt(int data); + virJSONValuePtr virJSONValueNewNumberUint(unsigned int data); + virJSONValuePtr virJSONValueNewNumberLong(long long data); diff --git a/6c3d66ac-revert-jansson4.patch b/6c3d66ac-revert-jansson4.patch new file mode 100644 index 0000000..31bd7b6 --- /dev/null +++ b/6c3d66ac-revert-jansson4.patch @@ -0,0 +1,496 @@ +commit 6c3d66ac7409579752765c12e65adccec30e24fc +Author: Ján Tomko +Date: Mon Aug 13 13:39:16 2018 +0200 + + Revert "util: avoid symbol clash between json libraries" + + This reverts commit ce3c6ef6843f98d81be5423ece11fad79eaab920. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/libvirt.spec.in +=================================================================== +--- libvirt-4.6.0.orig/libvirt.spec.in ++++ libvirt-4.6.0/libvirt.spec.in +@@ -898,8 +898,6 @@ Requires: ncurses + Requires: gettext + # Needed by virt-pki-validate script. + Requires: gnutls-utils +-# We dlopen(libjansson.so.4), so need an explicit dep +-Requires: jansson + %if %{with_bash_completion} + Requires: %{name}-bash-completion = %{version}-%{release} + %endif +Index: libvirt-4.6.0/src/Makefile.am +=================================================================== +--- libvirt-4.6.0.orig/src/Makefile.am ++++ libvirt-4.6.0/src/Makefile.am +@@ -552,6 +552,7 @@ libvirt_admin_la_CFLAGS += \ + + libvirt_admin_la_LIBADD += \ + $(CAPNG_LIBS) \ ++ $(JANSSON_LIBS) \ + $(DEVMAPPER_LIBS) \ + $(LIBXML_LIBS) \ + $(SSH2_LIBS) \ +@@ -689,7 +690,6 @@ libvirt_setuid_rpc_client_la_SOURCES = \ + util/virhashcode.c \ + util/virhostcpu.c \ + util/virjson.c \ +- util/virjsoncompat.c \ + util/virlog.c \ + util/virobject.c \ + util/virpidfile.c \ +@@ -961,8 +961,6 @@ libvirt_nss_la_SOURCES = \ + util/virhashcode.h \ + util/virjson.c \ + util/virjson.h \ +- util/virjsoncompat.c \ +- util/virjsoncompat.h \ + util/virkmod.c \ + util/virkmod.h \ + util/virlease.c \ +@@ -1001,6 +999,10 @@ libvirt_nss_la_CFLAGS = \ + libvirt_nss_la_LDFLAGS = \ + $(AM_LDFLAGS) \ + $(NULL) ++ ++libvirt_nss_la_LIBADD = \ ++ $(JANSSON_LIBS) \ ++ $(NULL) + endif WITH_NSS + + +Index: libvirt-4.6.0/src/util/Makefile.inc.am +=================================================================== +--- libvirt-4.6.0.orig/src/util/Makefile.inc.am ++++ libvirt-4.6.0/src/util/Makefile.inc.am +@@ -86,8 +86,6 @@ UTIL_SOURCES = \ + util/viriscsi.h \ + util/virjson.c \ + util/virjson.h \ +- util/virjsoncompat.c \ +- util/virjsoncompat.h \ + util/virkeycode.c \ + util/virkeycode.h \ + util/virkeyfile.c \ +@@ -266,6 +264,7 @@ libvirt_util_la_CFLAGS = \ + $(NULL) + libvirt_util_la_LIBADD = \ + $(CAPNG_LIBS) \ ++ $(JANSSON_LIBS) \ + $(LIBNL_LIBS) \ + $(THREAD_LIBS) \ + $(AUDIT_LIBS) \ +Index: libvirt-4.6.0/src/util/virjson.c +=================================================================== +--- libvirt-4.6.0.orig/src/util/virjson.c ++++ libvirt-4.6.0/src/util/virjson.c +@@ -1437,8 +1437,7 @@ virJSONValueCopy(const virJSONValue *in) + + + #if WITH_JANSSON +- +-# include "virjsoncompat.h" ++# include + + static virJSONValuePtr + virJSONValueFromJansson(json_t *json) +@@ -1525,9 +1524,6 @@ virJSONValueFromString(const char *jsons + size_t flags = JSON_REJECT_DUPLICATES | + JSON_DECODE_ANY; + +- if (virJSONInitialize() < 0) +- return NULL; +- + if (!(json = json_loads(jsonstring, flags, &error))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("failed to parse JSON %d:%d: %s"), +@@ -1634,9 +1630,6 @@ virJSONValueToString(virJSONValuePtr obj + json_t *json; + char *str = NULL; + +- if (virJSONInitialize() < 0) +- return NULL; +- + if (pretty) + flags |= JSON_INDENT(2); + else +Index: libvirt-4.6.0/src/util/virjsoncompat.c +=================================================================== +--- libvirt-4.6.0.orig/src/util/virjsoncompat.c ++++ /dev/null +@@ -1,274 +0,0 @@ +-/* +- * virjsoncompat.c: JSON object parsing/formatting +- * +- * Copyright (C) 2018 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 +- * . +- * +- */ +- +-#include +- +-#include "virthread.h" +-#include "virerror.h" +-#define VIR_JSON_COMPAT_IMPL +-#include "virjsoncompat.h" +- +-#define VIR_FROM_THIS VIR_FROM_NONE +- +-#if WITH_JANSSON +- +-# include +- +-json_t *(*json_array_ptr)(void); +-int (*json_array_append_new_ptr)(json_t *array, json_t *value); +-json_t *(*json_array_get_ptr)(const json_t *array, size_t index); +-size_t (*json_array_size_ptr)(const json_t *array); +-void (*json_delete_ptr)(json_t *json); +-char *(*json_dumps_ptr)(const json_t *json, size_t flags); +-json_t *(*json_false_ptr)(void); +-json_t *(*json_integer_ptr)(json_int_t value); +-json_int_t (*json_integer_value_ptr)(const json_t *integer); +-json_t *(*json_loads_ptr)(const char *input, size_t flags, json_error_t *error); +-json_t *(*json_null_ptr)(void); +-json_t *(*json_object_ptr)(void); +-void *(*json_object_iter_ptr)(json_t *object); +-const char *(*json_object_iter_key_ptr)(void *iter); +-void *(*json_object_iter_next_ptr)(json_t *object, void *iter); +-json_t *(*json_object_iter_value_ptr)(void *iter); +-void *(*json_object_key_to_iter_ptr)(const char *key); +-int (*json_object_set_new_ptr)(json_t *object, const char *key, json_t *value); +-json_t *(*json_real_ptr)(double value); +-double (*json_real_value_ptr)(const json_t *real); +-json_t *(*json_string_ptr)(const char *value); +-const char *(*json_string_value_ptr)(const json_t *string); +-json_t *(*json_true_ptr)(void); +- +- +-static int +-virJSONJanssonOnceInit(void) +-{ +- void *handle = dlopen("libjansson.so.4", RTLD_LAZY|RTLD_LOCAL|RTLD_NODELETE); +- if (!handle) { +- virReportError(VIR_ERR_NO_SUPPORT, +- _("libjansson.so.4 JSON library not available: %s"), dlerror()); +- return -1; +- } +- +-# define LOAD(name) \ +- do { \ +- if (!(name ## _ptr = dlsym(handle, #name))) { \ +- virReportError(VIR_ERR_NO_SUPPORT, \ +- _("missing symbol '%s' in libjansson.so.4: %s"), #name, dlerror()); \ +- return -1; \ +- } \ +- } while (0) +- +- LOAD(json_array); +- LOAD(json_array_append_new); +- LOAD(json_array_get); +- LOAD(json_array_size); +- LOAD(json_delete); +- LOAD(json_dumps); +- LOAD(json_false); +- LOAD(json_integer); +- LOAD(json_integer_value); +- LOAD(json_loads); +- LOAD(json_null); +- LOAD(json_object); +- LOAD(json_object_iter); +- LOAD(json_object_iter_key); +- LOAD(json_object_iter_next); +- LOAD(json_object_iter_value); +- LOAD(json_object_key_to_iter); +- LOAD(json_object_set_new); +- LOAD(json_real); +- LOAD(json_real_value); +- LOAD(json_string); +- LOAD(json_string_value); +- LOAD(json_true); +- +- return 0; +-} +- +-VIR_ONCE_GLOBAL_INIT(virJSONJansson); +- +-int +-virJSONInitialize(void) +-{ +- return virJSONJanssonInitialize(); +-} +- +-json_t * +-json_array_impl(void) +-{ +- return json_array_ptr(); +-} +- +- +-int +-json_array_append_new_impl(json_t *array, json_t *value) +-{ +- return json_array_append_new_ptr(array, value); +-} +- +- +-json_t * +-json_array_get_impl(const json_t *array, size_t index) +-{ +- return json_array_get_ptr(array, index); +-} +- +- +-size_t +-json_array_size_impl(const json_t *array) +-{ +- return json_array_size_ptr(array); +-} +- +- +-void +-json_delete_impl(json_t *json) +-{ +- return json_delete_ptr(json); +-} +- +- +-char * +-json_dumps_impl(const json_t *json, size_t flags) +-{ +- return json_dumps_ptr(json, flags); +-} +- +- +-json_t * +-json_false_impl(void) +-{ +- return json_false_ptr(); +-} +- +- +-json_t * +-json_integer_impl(json_int_t value) +-{ +- return json_integer_ptr(value); +-} +- +- +-json_int_t +-json_integer_value_impl(const json_t *integer) +-{ +- return json_integer_value_ptr(integer); +-} +- +- +-json_t * +-json_loads_impl(const char *input, size_t flags, json_error_t *error) +-{ +- return json_loads_ptr(input, flags, error); +-} +- +- +-json_t * +-json_null_impl(void) +-{ +- return json_null_ptr(); +-} +- +- +-json_t * +-json_object_impl(void) +-{ +- return json_object_ptr(); +-} +- +- +-void * +-json_object_iter_impl(json_t *object) +-{ +- return json_object_iter_ptr(object); +-} +- +- +-const char * +-json_object_iter_key_impl(void *iter) +-{ +- return json_object_iter_key_ptr(iter); +-} +- +- +-void * +-json_object_iter_next_impl(json_t *object, void *iter) +-{ +- return json_object_iter_next_ptr(object, iter); +-} +- +- +-json_t * +-json_object_iter_value_impl(void *iter) +-{ +- return json_object_iter_value_ptr(iter); +-} +- +- +-void * +-json_object_key_to_iter_impl(const char *key) +-{ +- return json_object_key_to_iter_ptr(key); +-} +- +- +-int +-json_object_set_new_impl(json_t *object, const char *key, json_t *value) +-{ +- return json_object_set_new_ptr(object, key, value); +-} +- +- +-json_t * +-json_real_impl(double value) +-{ +- return json_real_ptr(value); +-} +- +- +-double +-json_real_value_impl(const json_t *real) +-{ +- return json_real_value_ptr(real); +-} +- +- +-json_t * +-json_string_impl(const char *value) +-{ +- return json_string_ptr(value); +-} +- +- +-const char * +-json_string_value_impl(const json_t *string) +-{ +- return json_string_value_ptr(string); +-} +- +- +-json_t * +-json_true_impl(void) +-{ +- return json_true_ptr(); +-} +- +-#endif /* WITH_JANSSON */ +Index: libvirt-4.6.0/src/util/virjsoncompat.h +=================================================================== +--- libvirt-4.6.0.orig/src/util/virjsoncompat.h ++++ /dev/null +@@ -1,88 +0,0 @@ +-/* +- * virjsoncompat.h: JSON object parsing/formatting +- * +- * Copyright (C) 2018 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 +- * . +- * +- */ +- +- +-#ifndef __VIR_JSON_COMPAT_H_ +-# define __VIR_JSON_COMPAT_H_ +- +-# if WITH_JANSSON +-# ifndef VIR_JSON_COMPAT_IMPL +- +-# define json_array json_array_impl +-# define json_array_append_new json_array_append_new_impl +-# define json_array_get json_array_get_impl +-# define json_array_size json_array_size_impl +-# define json_delete json_delete_impl +-# define json_dumps json_dumps_impl +-# define json_false json_false_impl +-# define json_integer json_integer_impl +-# define json_integer_value json_integer_value_impl +-# define json_loads json_loads_impl +-# define json_null json_null_impl +-# define json_object json_object_impl +-# define json_object_iter json_object_iter_impl +-# define json_object_iter_key json_object_iter_key_impl +-# define json_object_iter_next json_object_iter_next_impl +-# define json_object_iter_value json_object_iter_value_impl +-# define json_object_key_to_iter json_object_key_to_iter_impl +-# define json_object_set_new json_object_set_new_impl +-# define json_real json_real_impl +-# define json_real_value json_real_value_impl +-# define json_string json_string_impl +-# define json_string_value json_string_value_impl +-# define json_true json_true_impl +- +-# endif /* ! VIR_JSON_COMPAT_IMPL */ +- +-# include +- +-# ifdef VIR_JSON_COMPAT_IMPL +- +-json_t *json_array_impl(void); +-int json_array_append_new_impl(json_t *array, json_t *value); +-json_t *json_array_get_impl(const json_t *array, size_t index); +-size_t json_array_size_impl(const json_t *array); +-void json_delete_impl(json_t *json); +-char *json_dumps_impl(const json_t *json, size_t flags); +-json_t *json_false_impl(void); +-json_t *json_integer_impl(json_int_t value); +-json_int_t json_integer_value_impl(const json_t *integer); +-json_t *json_loads_impl(const char *input, size_t flags, json_error_t *error); +-json_t *json_null_impl(void); +-json_t *json_object_impl(void); +-void *json_object_iter_impl(json_t *object); +-const char *json_object_iter_key_impl(void *iter); +-void *json_object_iter_next_impl(json_t *object, void *iter); +-json_t *json_object_iter_value_impl(void *iter); +-void *json_object_key_to_iter_impl(const char *key); +-int json_object_set_new_impl(json_t *object, const char *key, json_t *value); +-json_t *json_real_impl(double value); +-double json_real_value_impl(const json_t *real); +-json_t *json_string_impl(const char *value); +-const char *json_string_value_impl(const json_t *string); +-json_t *json_true_impl(void); +- +-# endif /* VIR_JSON_COMPAT_IMPL */ +-# endif /* WITH_JANSSON */ +- +-int virJSONInitialize(void); +- +-#endif /* __VIR_JSON_COMPAT_H_ */ diff --git a/6f99de31-revert-jansson6.patch b/6f99de31-revert-jansson6.patch new file mode 100644 index 0000000..dcf0c32 --- /dev/null +++ b/6f99de31-revert-jansson6.patch @@ -0,0 +1,174 @@ +commit 6f99de314855296d52cdf0badcab5b12213f2ca4 +Author: Ján Tomko +Date: Mon Aug 13 13:39:33 2018 +0200 + + Revert "m4: Introduce STABLE_ORDERING_JANSSON" + + This reverts commit 4dd60540007042bfc0087a67f57f3e9f3311a84a. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/m4/virt-jansson.m4 +=================================================================== +--- libvirt-4.6.0.orig/m4/virt-jansson.m4 ++++ libvirt-4.6.0/m4/virt-jansson.m4 +@@ -22,9 +22,6 @@ AC_DEFUN([LIBVIRT_ARG_JANSSON],[ + AC_DEFUN([LIBVIRT_CHECK_JANSSON],[ + dnl Jansson http://www.digip.org/jansson/ + LIBVIRT_CHECK_PKG([JANSSON], [jansson], [2.5]) +- dnl Older versions of Jansson did not preserve the order of object keys +- dnl use this check to guard the tests that are sensitive to this +- LIBVIRT_CHECK_PKG([STABLE_ORDERING_JANSSON], [jansson], [2.8], [true]) + ]) + + AC_DEFUN([LIBVIRT_RESULT_JANSSON],[ +Index: libvirt-4.6.0/tests/qemublocktest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemublocktest.c ++++ libvirt-4.6.0/tests/qemublocktest.c +@@ -337,11 +337,6 @@ mymain(void) + char *capslatest_x86_64 = NULL; + virQEMUCapsPtr caps_x86_64 = NULL; + +-#if !WITH_STABLE_ORDERING_JANSSON +- fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr); +- return EXIT_AM_SKIP; +-#endif +- + if (qemuTestDriverInit(&driver) < 0) + return EXIT_FAILURE; + +Index: libvirt-4.6.0/tests/qemucapabilitiestest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemucapabilitiestest.c ++++ libvirt-4.6.0/tests/qemucapabilitiestest.c +@@ -141,11 +141,6 @@ mymain(void) + int ret = 0; + testQemuData data; + +-#if !WITH_STABLE_ORDERING_JANSSON +- fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr); +- return EXIT_AM_SKIP; +-#endif +- + #if !WITH_JANSSON + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; +Index: libvirt-4.6.0/tests/qemucommandutiltest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemucommandutiltest.c ++++ libvirt-4.6.0/tests/qemucommandutiltest.c +@@ -76,11 +76,6 @@ mymain(void) + int ret = 0; + testQemuCommandBuildObjectFromJSONData data1; + +-#if !WITH_STABLE_ORDERING_JANSSON +- fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr); +- return EXIT_AM_SKIP; +-#endif +- + #if !WITH_JANSSON + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; +Index: libvirt-4.6.0/tests/qemuhotplugtest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemuhotplugtest.c ++++ libvirt-4.6.0/tests/qemuhotplugtest.c +@@ -593,11 +593,6 @@ mymain(void) + struct qemuHotplugTestData data = {0}; + struct testQemuHotplugCpuParams cpudata; + +-#if !WITH_STABLE_ORDERING_JANSSON +- fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr); +- return EXIT_AM_SKIP; +-#endif +- + #if !WITH_JANSSON + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; +Index: libvirt-4.6.0/tests/qemumigparamstest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemumigparamstest.c ++++ libvirt-4.6.0/tests/qemumigparamstest.c +@@ -203,11 +203,6 @@ mymain(void) + virQEMUDriver driver; + int ret = 0; + +-#if !WITH_STABLE_ORDERING_JANSSON +- fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr); +- return EXIT_AM_SKIP; +-#endif +- + #if !WITH_JANSSON + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; +Index: libvirt-4.6.0/tests/qemumonitorjsontest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemumonitorjsontest.c ++++ libvirt-4.6.0/tests/qemumonitorjsontest.c +@@ -2863,11 +2863,6 @@ mymain(void) + virJSONValuePtr metaschema = NULL; + char *metaschemastr = NULL; + +-#if !WITH_STABLE_ORDERING_JANSSON +- fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr); +- return EXIT_AM_SKIP; +-#endif +- + #if !WITH_JANSSON + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; +Index: libvirt-4.6.0/tests/virjsontest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/virjsontest.c ++++ libvirt-4.6.0/tests/virjsontest.c +@@ -479,11 +479,6 @@ mymain(void) + { + int ret = 0; + +-#if !WITH_STABLE_ORDERING_JANSSON +- fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr); +- return EXIT_AM_SKIP; +-#endif +- + #define DO_TEST_FULL(name, cmd, doc, expect, pass) \ + do { \ + struct testInfo info = { doc, expect, pass }; \ +Index: libvirt-4.6.0/tests/virmacmaptest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/virmacmaptest.c ++++ libvirt-4.6.0/tests/virmacmaptest.c +@@ -157,11 +157,6 @@ mymain(void) + int ret = 0; + virMacMapPtr mgr = NULL; + +-#if !WITH_STABLE_ORDERING_JANSSON +- fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr); +- return EXIT_AM_SKIP; +-#endif +- + #define DO_TEST_BASIC(f, d, ...) \ + do { \ + const char * const m[] = {__VA_ARGS__, NULL }; \ +Index: libvirt-4.6.0/tests/virnetdaemontest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/virnetdaemontest.c ++++ libvirt-4.6.0/tests/virnetdaemontest.c +@@ -375,11 +375,6 @@ mymain(void) + int ret = 0; + const char *server_names[] = { "testServer0", "testServer1" }; + +-# if !WITH_STABLE_ORDERING_JANSSON +- fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr); +- return EXIT_AM_SKIP; +-# endif +- + if (virInitialize() < 0 || + virEventRegisterDefaultImpl() < 0) { + virDispatchError(NULL); diff --git a/8687eba-revert-jansson10.patch b/8687eba-revert-jansson10.patch new file mode 100644 index 0000000..8044180 --- /dev/null +++ b/8687eba-revert-jansson10.patch @@ -0,0 +1,29 @@ +commit 8687eba5ca9a78b3a74a7c4e162d80633b8d877b +Author: Ján Tomko +Date: Mon Aug 13 13:40:02 2018 +0200 + + Revert "build: remove references to WITH_YAJL for SETUID_RPC_CLIENT" + + This reverts commit 1caf8441604b58e4a89aa2c09975b8346928c52a. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/config-post.h +=================================================================== +--- libvirt-4.6.0.orig/config-post.h ++++ libvirt-4.6.0/config-post.h +@@ -44,6 +44,8 @@ + # undef WITH_SSH2 + # undef WITH_SYSTEMD_DAEMON + # undef WITH_VIRTUALPORT ++# undef WITH_YAJL ++# undef WITH_YAJL2 + #endif + + /* diff --git a/86db0db9-revert-jansson14.patch b/86db0db9-revert-jansson14.patch new file mode 100644 index 0000000..e775ae1 --- /dev/null +++ b/86db0db9-revert-jansson14.patch @@ -0,0 +1,82 @@ +commit 86db0db979c39df278f03dbf3b4239c873ddb637 +Author: Ján Tomko +Date: Mon Aug 13 13:41:14 2018 +0200 + + Revert "build: add --with-jansson" + + This reverts commit 12b34f094e2f1c7f414f4bb8f880a9d65c8fcd85. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Conflicts: + configure.ac: + Commit 8aa85e0b introduced LIBVIRT_*_LIBISCSI macros. + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/configure.ac +=================================================================== +--- libvirt-4.6.0.orig/configure.ac ++++ libvirt-4.6.0/configure.ac +@@ -250,7 +250,6 @@ LIBVIRT_ARG_FIREWALLD + LIBVIRT_ARG_FUSE + LIBVIRT_ARG_GLUSTER + LIBVIRT_ARG_HAL +-LIBVIRT_ARG_JANSSON + LIBVIRT_ARG_LIBPCAP + LIBVIRT_ARG_LIBSSH + LIBVIRT_ARG_LIBXML +@@ -291,7 +290,6 @@ LIBVIRT_CHECK_FUSE + LIBVIRT_CHECK_GLUSTER + LIBVIRT_CHECK_GNUTLS + LIBVIRT_CHECK_HAL +-LIBVIRT_CHECK_JANSSON + LIBVIRT_CHECK_LIBNL + LIBVIRT_CHECK_LIBPARTED + LIBVIRT_CHECK_LIBPCAP +@@ -972,7 +970,6 @@ LIBVIRT_RESULT_FUSE + LIBVIRT_RESULT_GLUSTER + LIBVIRT_RESULT_GNUTLS + LIBVIRT_RESULT_HAL +-LIBVIRT_RESULT_JANSSON + LIBVIRT_RESULT_LIBNL + LIBVIRT_RESULT_LIBPCAP + LIBVIRT_RESULT_LIBSSH +Index: libvirt-4.6.0/m4/virt-jansson.m4 +=================================================================== +--- libvirt-4.6.0.orig/m4/virt-jansson.m4 ++++ /dev/null +@@ -1,29 +0,0 @@ +-dnl The jansson library +-dnl +-dnl This library is free software; you can redistribute it and/or +-dnl modify it under the terms of the GNU Lesser General Public +-dnl License as published by the Free Software Foundation; either +-dnl version 2.1 of the License, or (at your option) any later version. +-dnl +-dnl This library is distributed in the hope that it will be useful, +-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +-dnl Lesser General Public License for more details. +-dnl +-dnl You should have received a copy of the GNU Lesser General Public +-dnl License along with this library. If not, see +-dnl . +-dnl +- +-AC_DEFUN([LIBVIRT_ARG_JANSSON],[ +- LIBVIRT_ARG_WITH_FEATURE([JANSSON], [jansson], [check]) +-]) +- +-AC_DEFUN([LIBVIRT_CHECK_JANSSON],[ +- dnl Jansson http://www.digip.org/jansson/ +- LIBVIRT_CHECK_PKG([JANSSON], [jansson], [2.5]) +-]) +- +-AC_DEFUN([LIBVIRT_RESULT_JANSSON],[ +- LIBVIRT_RESULT_LIB([JANSSON]) +-]) diff --git a/8e373e6d-revert-jansson5.patch b/8e373e6d-revert-jansson5.patch new file mode 100644 index 0000000..e4a2dea --- /dev/null +++ b/8e373e6d-revert-jansson5.patch @@ -0,0 +1,31 @@ +commit 8e373e6d80afa3b212464b8b1a9faa36ee684472 +Author: Ján Tomko +Date: Mon Aug 13 13:39:25 2018 +0200 + + Revert "tests: also skip qemuagenttest with old jansson" + + This reverts commit c31146685f5c8558ff88d52d03a68533c9220feb. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/tests/qemuagenttest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemuagenttest.c ++++ libvirt-4.6.0/tests/qemuagenttest.c +@@ -907,8 +907,8 @@ mymain(void) + { + int ret = 0; + +-#if !WITH_STABLE_ORDERING_JANSSON +- fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr); ++#if !WITH_JANSSON ++ fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; + #endif + diff --git a/9ed59012--revert-jansson1.patch b/9ed59012--revert-jansson1.patch new file mode 100644 index 0000000..bc0e437 --- /dev/null +++ b/9ed59012--revert-jansson1.patch @@ -0,0 +1,53 @@ +commit 9ed59012d3ccdf8365f5e8119959017849bc89fd +Author: Ján Tomko +Date: Mon Aug 13 13:38:38 2018 +0200 + + Revert "remote: daemon: Make sure that JSON symbols are properly loaded at startup" + + This reverts commit 3251fc9c9b9639c3fec3181530599415523d671a. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/src/libvirt_private.syms +=================================================================== +--- libvirt-4.6.0.orig/src/libvirt_private.syms ++++ libvirt-4.6.0/src/libvirt_private.syms +@@ -2135,10 +2135,6 @@ virJSONValueObjectStealObject; + virJSONValueToString; + + +-# util/virjsoncompat.h +-virJSONInitialize; +- +- + # util/virkeycode.h + virKeycodeSetTypeFromString; + virKeycodeSetTypeToString; +Index: libvirt-4.6.0/src/remote/remote_daemon.c +=================================================================== +--- libvirt-4.6.0.orig/src/remote/remote_daemon.c ++++ libvirt-4.6.0/src/remote/remote_daemon.c +@@ -59,7 +59,6 @@ + #include "virutil.h" + #include "virgettext.h" + #include "util/virnetdevopenvswitch.h" +-#include "virjsoncompat.h" + + #include "driver.h" + +@@ -1184,9 +1183,6 @@ int main(int argc, char **argv) { + exit(EXIT_FAILURE); + } + +- if (virJSONInitialize() < 0) +- exit(EXIT_FAILURE); +- + daemonSetupNetDevOpenvswitch(config); + + if (daemonSetupAccessManager(config) < 0) { diff --git a/b56950fd-revert-jansson3.patch b/b56950fd-revert-jansson3.patch new file mode 100644 index 0000000..8c319ba --- /dev/null +++ b/b56950fd-revert-jansson3.patch @@ -0,0 +1,36 @@ +commit b56950fd277c0e31cbdf3a0e5b3c944f9857789a +Author: Ján Tomko +Date: Mon Aug 13 13:39:09 2018 +0200 + + Revert "tests: qemucapsprobe: Fix output after switching to jansson" + + This reverts commit 397447f80588438545994a86883792a5999cad15. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/tests/qemucapsprobemock.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemucapsprobemock.c ++++ libvirt-4.6.0/tests/qemucapsprobemock.c +@@ -76,7 +76,6 @@ qemuMonitorSend(qemuMonitorPtr mon, + printLineSkipEmpty("\n", stdout); + + printLineSkipEmpty(reformatted, stdout); +- printLineSkipEmpty("\n", stdout); + VIR_FREE(reformatted); + + return realQemuMonitorSend(mon, msg); +@@ -117,7 +116,6 @@ qemuMonitorJSONIOProcessLine(qemuMonitor + printLineSkipEmpty("\n", stdout); + + printLineSkipEmpty(json, stdout); +- printLineSkipEmpty("\n", stdout); + } + + cleanup: diff --git a/d99a8959-revert-jansson12.patch b/d99a8959-revert-jansson12.patch new file mode 100644 index 0000000..cead632 --- /dev/null +++ b/d99a8959-revert-jansson12.patch @@ -0,0 +1,712 @@ +commit d99a89592d65ab8adb51d695134bd347648d825f +Author: Ján Tomko +Date: Mon Aug 13 13:40:18 2018 +0200 + + Revert "Switch from yajl to Jansson" + + This reverts commit 9cf38263d05ca7f27dbbd9b1a0b48d338d9280e2. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/libvirt.spec.in +=================================================================== +--- libvirt-4.6.0.orig/libvirt.spec.in ++++ libvirt-4.6.0/libvirt.spec.in +@@ -292,7 +292,7 @@ BuildRequires: libblkid-devel >= 2.17 + BuildRequires: augeas + BuildRequires: systemd-devel >= 185 + BuildRequires: libpciaccess-devel >= 0.10.9 +-BuildRequires: jansson-devel ++BuildRequires: yajl-devel + %if %{with_sanlock} + BuildRequires: sanlock-devel >= 2.4 + %endif +@@ -1226,7 +1226,7 @@ rm -f po/stamp-po + --without-apparmor \ + --without-hal \ + --with-udev \ +- --with-jansson \ ++ --with-yajl \ + %{?arg_sanlock} \ + --with-libpcap \ + --with-macvtap \ +Index: libvirt-4.6.0/m4/virt-nss.m4 +=================================================================== +--- libvirt-4.6.0.orig/m4/virt-nss.m4 ++++ libvirt-4.6.0/m4/virt-nss.m4 +@@ -27,9 +27,9 @@ AC_DEFUN([LIBVIRT_CHECK_NSS],[ + bsd_nss=no + fail=0 + if test "x$with_nss_plugin" != "xno" ; then +- if test "x$with_jansson" != "xyes" ; then ++ if test "x$with_yajl" != "xyes" ; then + if test "x$with_nss_plugin" = "xyes" ; then +- AC_MSG_ERROR([Can't build nss plugin without JSON support]) ++ AC_MSG_ERROR([Can't build nss plugin without yajl]) + else + with_nss_plugin=no + fi +Index: libvirt-4.6.0/m4/virt-yajl.m4 +=================================================================== +--- libvirt-4.6.0.orig/m4/virt-yajl.m4 ++++ libvirt-4.6.0/m4/virt-yajl.m4 +@@ -23,10 +23,31 @@ AC_DEFUN([LIBVIRT_ARG_YAJL],[ + + AC_DEFUN([LIBVIRT_CHECK_YAJL],[ + dnl YAJL JSON library http://lloyd.github.com/yajl/ +- if test "$with_yajl" = yes; then +- AC_MSG_ERROR([Compilation with YAJL is no longer supported]) ++ if test "$with_qemu:$with_yajl" = yes:check; then ++ dnl Some versions of qemu require the use of yajl; try to detect them ++ dnl here, although we do not require qemu to exist in order to compile. ++ dnl This check mirrors src/qemu/qemu_capabilities.c ++ AC_PATH_PROGS([QEMU], [qemu-kvm qemu kvm qemu-system-x86_64], ++ [], [$PATH:/usr/bin:/usr/libexec]) ++ if test -x "$QEMU"; then ++ if $QEMU -help 2>/dev/null | grep -q libvirt; then ++ with_yajl=yes ++ else ++ [qemu_version_sed='s/.*ersion \([0-9.,]*\).*/\1/'] ++ qemu_version=`$QEMU -version | sed "$qemu_version_sed"` ++ case $qemu_version in ++ [[1-9]].* | 0.15.* ) with_yajl=yes ;; ++ 0.* | '' ) ;; ++ *) AC_MSG_ERROR([Unexpected qemu version string]) ;; ++ esac ++ fi ++ fi + fi +- with_yajl=no ++ ++ LIBVIRT_CHECK_LIB_ALT([YAJL], [yajl], ++ [yajl_parse_complete], [yajl/yajl_common.h], ++ [YAJL2], [yajl], ++ [yajl_tree_parse], [yajl/yajl_common.h]) + ]) + + AC_DEFUN([LIBVIRT_RESULT_YAJL],[ +Index: libvirt-4.6.0/src/Makefile.am +=================================================================== +--- libvirt-4.6.0.orig/src/Makefile.am ++++ libvirt-4.6.0/src/Makefile.am +@@ -544,7 +544,7 @@ libvirt_admin_la_CFLAGS = \ + libvirt_admin_la_CFLAGS += \ + $(XDR_CFLAGS) \ + $(CAPNG_CFLAGS) \ +- $(JANSSON_CFLAGS) \ ++ $(YAJL_CFLAGS) \ + $(SSH2_CFLAGS) \ + $(SASL_CFLAGS) \ + $(GNUTLS_CFLAGS) \ +@@ -552,7 +552,7 @@ libvirt_admin_la_CFLAGS += \ + + libvirt_admin_la_LIBADD += \ + $(CAPNG_LIBS) \ +- $(JANSSON_LIBS) \ ++ $(YAJL_LIBS) \ + $(DEVMAPPER_LIBS) \ + $(LIBXML_LIBS) \ + $(SSH2_LIBS) \ +@@ -994,14 +994,14 @@ libvirt_nss_la_SOURCES = \ + libvirt_nss_la_CFLAGS = \ + -DLIBVIRT_NSS \ + $(AM_CFLAGS) \ +- $(JANSSON_CFLAGS) \ ++ $(YAJL_CFLAGS) \ + $(NULL) + libvirt_nss_la_LDFLAGS = \ + $(AM_LDFLAGS) \ + $(NULL) + + libvirt_nss_la_LIBADD = \ +- $(JANSSON_LIBS) \ ++ $(YAJL_LIBS) \ + $(NULL) + endif WITH_NSS + +Index: libvirt-4.6.0/src/qemu/qemu_driver.c +=================================================================== +--- libvirt-4.6.0.orig/src/qemu/qemu_driver.c ++++ libvirt-4.6.0/src/qemu/qemu_driver.c +@@ -2092,7 +2092,7 @@ qemuDomainReboot(virDomainPtr dom, unsig + */ + if ((!useAgent) || + (ret < 0 && (acpiRequested || !flags))) { +-#if !WITH_JANSSON ++#if !WITH_YAJL + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("ACPI reboot is not supported without the JSON monitor")); + goto endjob; +Index: libvirt-4.6.0/src/util/Makefile.inc.am +=================================================================== +--- libvirt-4.6.0.orig/src/util/Makefile.inc.am ++++ libvirt-4.6.0/src/util/Makefile.inc.am +@@ -251,7 +251,7 @@ libvirt_util_la_SOURCES = \ + $(NULL) + libvirt_util_la_CFLAGS = \ + $(CAPNG_CFLAGS) \ +- $(JANSSON_CFLAGS) \ ++ $(YAJL_CFLAGS) \ + $(LIBNL_CFLAGS) \ + $(AM_CFLAGS) \ + $(AUDIT_CFLAGS) \ +@@ -264,7 +264,7 @@ libvirt_util_la_CFLAGS = \ + $(NULL) + libvirt_util_la_LIBADD = \ + $(CAPNG_LIBS) \ +- $(JANSSON_LIBS) \ ++ $(YAJL_LIBS) \ + $(LIBNL_LIBS) \ + $(THREAD_LIBS) \ + $(AUDIT_LIBS) \ +Index: libvirt-4.6.0/src/util/virjson.c +=================================================================== +--- libvirt-4.6.0.orig/src/util/virjson.c ++++ libvirt-4.6.0/src/util/virjson.c +@@ -1985,217 +1985,6 @@ virJSONValueToString(virJSONValuePtr obj + } + + +-#elif WITH_JANSSON +-# include +- +-static virJSONValuePtr +-virJSONValueFromJansson(json_t *json) +-{ +- virJSONValuePtr ret = NULL; +- const char *key; +- json_t *cur; +- size_t i; +- +- switch (json_typeof(json)) { +- case JSON_OBJECT: +- ret = virJSONValueNewObject(); +- if (!ret) +- goto error; +- +- json_object_foreach(json, key, cur) { +- virJSONValuePtr val = virJSONValueFromJansson(cur); +- if (!val) +- goto error; +- +- if (virJSONValueObjectAppend(ret, key, val) < 0) { +- virJSONValueFree(val); +- goto error; +- } +- } +- +- break; +- +- case JSON_ARRAY: +- ret = virJSONValueNewArray(); +- if (!ret) +- goto error; +- +- json_array_foreach(json, i, cur) { +- virJSONValuePtr val = virJSONValueFromJansson(cur); +- if (!val) +- goto error; +- +- if (virJSONValueArrayAppend(ret, val) < 0) { +- virJSONValueFree(val); +- goto error; +- } +- } +- break; +- +- case JSON_STRING: +- ret = virJSONValueNewString(json_string_value(json)); +- break; +- +- case JSON_INTEGER: +- ret = virJSONValueNewNumberLong(json_integer_value(json)); +- break; +- +- case JSON_REAL: +- ret = virJSONValueNewNumberDouble(json_real_value(json)); +- break; +- +- case JSON_TRUE: +- ret = virJSONValueNewBoolean(true); +- break; +- +- case JSON_FALSE: +- ret = virJSONValueNewBoolean(false); +- break; +- +- case JSON_NULL: +- ret = virJSONValueNewNull(); +- break; +- } +- +- return ret; +- +- error: +- virJSONValueFree(ret); +- return NULL; +-} +- +-virJSONValuePtr +-virJSONValueFromString(const char *jsonstring) +-{ +- virJSONValuePtr ret = NULL; +- json_t *json; +- json_error_t error; +- size_t flags = JSON_REJECT_DUPLICATES | +- JSON_DECODE_ANY; +- +- if (!(json = json_loads(jsonstring, flags, &error))) { +- virReportError(VIR_ERR_INTERNAL_ERROR, +- _("failed to parse JSON %d:%d: %s"), +- error.line, error.column, error.text); +- return NULL; +- } +- +- ret = virJSONValueFromJansson(json); +- json_decref(json); +- return ret; +-} +- +- +-static json_t * +-virJSONValueToJansson(virJSONValuePtr object) +-{ +- json_t *ret = NULL; +- size_t i; +- +- switch ((virJSONType)object->type) { +- case VIR_JSON_TYPE_OBJECT: +- ret = json_object(); +- if (!ret) +- goto no_memory; +- for (i = 0; i < object->data.object.npairs; i++) { +- virJSONObjectPairPtr cur = object->data.object.pairs + i; +- json_t *val = virJSONValueToJansson(cur->value); +- +- if (!val) +- goto error; +- if (json_object_set_new(ret, cur->key, val) < 0) { +- json_decref(val); +- goto no_memory; +- } +- } +- break; +- +- case VIR_JSON_TYPE_ARRAY: +- ret = json_array(); +- if (!ret) +- goto no_memory; +- for (i = 0; i < object->data.array.nvalues; i++) { +- virJSONValuePtr cur = object->data.array.values[i]; +- json_t *val = virJSONValueToJansson(cur); +- +- if (!val) +- goto error; +- if (json_array_append_new(ret, val) < 0) { +- json_decref(val); +- goto no_memory; +- } +- } +- break; +- +- case VIR_JSON_TYPE_STRING: +- ret = json_string(object->data.string); +- break; +- +- case VIR_JSON_TYPE_NUMBER: { +- long long ll_val; +- double d_val; +- if (virStrToLong_ll(object->data.number, NULL, 10, &ll_val) < 0) { +- if (virStrToDouble(object->data.number, NULL, &d_val) < 0) { +- virReportError(VIR_ERR_INTERNAL_ERROR, "%s", +- _("JSON value is not a number")); +- return NULL; +- } +- ret = json_real(d_val); +- } else { +- ret = json_integer(ll_val); +- } +- } +- break; +- +- case VIR_JSON_TYPE_BOOLEAN: +- ret = json_boolean(object->data.boolean); +- break; +- +- case VIR_JSON_TYPE_NULL: +- ret = json_null(); +- break; +- +- default: +- virReportEnumRangeError(virJSONType, object->type); +- goto error; +- } +- if (!ret) +- goto no_memory; +- return ret; +- +- no_memory: +- virReportOOMError(); +- error: +- json_decref(ret); +- return NULL; +-} +- +- +-char * +-virJSONValueToString(virJSONValuePtr object, +- bool pretty) +-{ +- size_t flags = JSON_ENCODE_ANY; +- json_t *json; +- char *str = NULL; +- +- if (pretty) +- flags |= JSON_INDENT(2); +- else +- flags |= JSON_COMPACT; +- +- json = virJSONValueToJansson(object); +- if (!json) +- return NULL; +- +- str = json_dumps(json, flags); +- if (!str) +- virReportOOMError(); +- json_decref(json); +- return str; +-} +- +- + #else + virJSONValuePtr + virJSONValueFromString(const char *jsonstring ATTRIBUTE_UNUSED) +Index: libvirt-4.6.0/tests/Makefile.am +=================================================================== +--- libvirt-4.6.0.orig/tests/Makefile.am ++++ libvirt-4.6.0/tests/Makefile.am +@@ -46,7 +46,7 @@ AM_CFLAGS = \ + $(SASL_CFLAGS) \ + $(SELINUX_CFLAGS) \ + $(APPARMOR_CFLAGS) \ +- $(JANSSON_CFLAGS) \ ++ $(YAJL_CFLAGS) \ + $(COVERAGE_CFLAGS) \ + $(XDR_CFLAGS) \ + $(WARN_CFLAGS) +@@ -331,9 +331,9 @@ if WITH_CIL + test_programs += objectlocking + endif WITH_CIL + +-if WITH_JANSSON ++if WITH_YAJL + test_programs += virjsontest +-endif WITH_JANSSON ++endif WITH_YAJL + + test_programs += \ + networkxml2xmltest \ +@@ -1219,15 +1219,15 @@ virdeterministichashmock_la_LIBADD = $(M + + test_libraries += virdeterministichashmock.la + +-if WITH_JANSSON ++if WITH_YAJL + virmacmaptest_SOURCES = \ + virmacmaptest.c testutils.h testutils.c + virmacmaptest_LDADD = $(LDADDS) + + test_programs += virmacmaptest +-else ! WITH_JANSSON ++else ! WITH_YAJL + EXTRA_DIST += virmacmaptest.c +-endif ! WITH_JANSSON ++endif ! WITH_YAJL + + virnetdevtest_SOURCES = \ + virnetdevtest.c testutils.h testutils.c +Index: libvirt-4.6.0/tests/cputest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/cputest.c ++++ libvirt-4.6.0/tests/cputest.c +@@ -40,7 +40,7 @@ + #include "cpu/cpu_map.h" + #include "virstring.h" + +-#if WITH_QEMU && WITH_JANSSON ++#if WITH_QEMU && WITH_YAJL + # include "testutilsqemu.h" + # include "qemumonitortestutils.h" + # define __QEMU_CAPSPRIV_H_ALLOW__ +@@ -67,7 +67,7 @@ struct data { + int result; + }; + +-#if WITH_QEMU && WITH_JANSSON ++#if WITH_QEMU && WITH_YAJL + static virQEMUDriver driver; + #endif + +@@ -479,7 +479,7 @@ typedef enum { + JSON_MODELS_REQUIRED, + } cpuTestCPUIDJson; + +-#if WITH_QEMU && WITH_JANSSON ++#if WITH_QEMU && WITH_YAJL + static virQEMUCapsPtr + cpuTestMakeQEMUCaps(const struct data *data) + { +@@ -554,7 +554,7 @@ cpuTestGetCPUModels(const struct data *d + return 0; + } + +-#else /* if WITH_QEMU && WITH_JANSSON */ ++#else /* if WITH_QEMU && WITH_YAJL */ + + static int + cpuTestGetCPUModels(const struct data *data, +@@ -834,7 +834,7 @@ cpuTestUpdateLive(const void *arg) + } + + +-#if WITH_QEMU && WITH_JANSSON ++#if WITH_QEMU && WITH_YAJL + static int + cpuTestJSONCPUID(const void *arg) + { +@@ -911,7 +911,7 @@ mymain(void) + virDomainCapsCPUModelsPtr ppc_models = NULL; + int ret = 0; + +-#if WITH_QEMU && WITH_JANSSON ++#if WITH_QEMU && WITH_YAJL + if (qemuTestDriverInit(&driver) < 0) + return EXIT_FAILURE; + +@@ -1004,7 +1004,7 @@ mymain(void) + host "/" cpu " (" #models ")", \ + host, cpu, models, 0, result) + +-#if WITH_QEMU && WITH_JANSSON ++#if WITH_QEMU && WITH_YAJL + # define DO_TEST_JSON(arch, host, json) \ + do { \ + if (json == JSON_MODELS) { \ +@@ -1205,7 +1205,7 @@ mymain(void) + DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-X5460", JSON_NONE); + + cleanup: +-#if WITH_QEMU && WITH_JANSSON ++#if WITH_QEMU && WITH_YAJL + qemuTestDriverFree(&driver); + #endif + +Index: libvirt-4.6.0/tests/libxlxml2domconfigtest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/libxlxml2domconfigtest.c ++++ libvirt-4.6.0/tests/libxlxml2domconfigtest.c +@@ -33,7 +33,7 @@ + + #include "testutils.h" + +-#if defined(WITH_LIBXL) && defined(WITH_JANSSON) && defined(HAVE_LIBXL_DOMAIN_CONFIG_FROM_JSON) ++#if defined(WITH_LIBXL) && defined(WITH_YAJL) && defined(HAVE_LIBXL_DOMAIN_CONFIG_FROM_JSON) + + # include "internal.h" + # include "viralloc.h" +@@ -228,4 +228,4 @@ int main(void) + return EXIT_AM_SKIP; + } + +-#endif /* WITH_LIBXL && WITH_JANSSON && HAVE_LIBXL_DOMAIN_CONFIG_FROM_JSON */ ++#endif /* WITH_LIBXL && WITH_YAJL && HAVE_LIBXL_DOMAIN_CONFIG_FROM_JSON */ +Index: libvirt-4.6.0/tests/qemuagenttest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemuagenttest.c ++++ libvirt-4.6.0/tests/qemuagenttest.c +@@ -907,7 +907,7 @@ mymain(void) + { + int ret = 0; + +-#if !WITH_JANSSON ++#if !WITH_YAJL + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; + #endif +Index: libvirt-4.6.0/tests/qemublocktest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemublocktest.c ++++ libvirt-4.6.0/tests/qemublocktest.c +@@ -309,7 +309,6 @@ testQemuDiskXMLToPropsValidateFile(const + goto cleanup; + + virBufferAdd(&buf, jsonstr, -1); +- virBufferAddLit(&buf, "\n"); + VIR_FREE(jsonstr); + } + +Index: libvirt-4.6.0/tests/qemucapabilitiestest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemucapabilitiestest.c ++++ libvirt-4.6.0/tests/qemucapabilitiestest.c +@@ -141,7 +141,7 @@ mymain(void) + int ret = 0; + testQemuData data; + +-#if !WITH_JANSSON ++#if !WITH_YAJL + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; + #endif +Index: libvirt-4.6.0/tests/qemucaps2xmltest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemucaps2xmltest.c ++++ libvirt-4.6.0/tests/qemucaps2xmltest.c +@@ -165,7 +165,7 @@ mymain(void) + + testQemuData data; + +-#if !WITH_JANSSON ++#if !WITH_YAJL + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; + #endif +Index: libvirt-4.6.0/tests/qemucommandutiltest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemucommandutiltest.c ++++ libvirt-4.6.0/tests/qemucommandutiltest.c +@@ -76,7 +76,7 @@ mymain(void) + int ret = 0; + testQemuCommandBuildObjectFromJSONData data1; + +-#if !WITH_JANSSON ++#if !WITH_YAJL + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; + #endif +Index: libvirt-4.6.0/tests/qemuhotplugtest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemuhotplugtest.c ++++ libvirt-4.6.0/tests/qemuhotplugtest.c +@@ -593,7 +593,7 @@ mymain(void) + struct qemuHotplugTestData data = {0}; + struct testQemuHotplugCpuParams cpudata; + +-#if !WITH_JANSSON ++#if !WITH_YAJL + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; + #endif +Index: libvirt-4.6.0/tests/qemumigparamsdata/empty.json +=================================================================== +--- libvirt-4.6.0.orig/tests/qemumigparamsdata/empty.json ++++ libvirt-4.6.0/tests/qemumigparamsdata/empty.json +@@ -1 +1,3 @@ +-{} ++{ ++ ++} +Index: libvirt-4.6.0/tests/qemumigparamsdata/unsupported.json +=================================================================== +--- libvirt-4.6.0.orig/tests/qemumigparamsdata/unsupported.json ++++ libvirt-4.6.0/tests/qemumigparamsdata/unsupported.json +@@ -1 +1,3 @@ +-{} ++{ ++ ++} +Index: libvirt-4.6.0/tests/qemumigparamstest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemumigparamstest.c ++++ libvirt-4.6.0/tests/qemumigparamstest.c +@@ -203,7 +203,7 @@ mymain(void) + virQEMUDriver driver; + int ret = 0; + +-#if !WITH_JANSSON ++#if !WITH_YAJL + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; + #endif +Index: libvirt-4.6.0/tests/qemumonitorjsontest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/qemumonitorjsontest.c ++++ libvirt-4.6.0/tests/qemumonitorjsontest.c +@@ -2863,7 +2863,7 @@ mymain(void) + virJSONValuePtr metaschema = NULL; + char *metaschemastr = NULL; + +-#if !WITH_JANSSON ++#if !WITH_YAJL + fputs("libvirt not compiled with JSON support, skipping this test\n", stderr); + return EXIT_AM_SKIP; + #endif +Index: libvirt-4.6.0/tests/virmacmaptestdata/empty.json +=================================================================== +--- libvirt-4.6.0.orig/tests/virmacmaptestdata/empty.json ++++ libvirt-4.6.0/tests/virmacmaptestdata/empty.json +@@ -1 +1,3 @@ +-[] ++[ ++ ++] +Index: libvirt-4.6.0/tests/virmocklibxl.c +=================================================================== +--- libvirt-4.6.0.orig/tests/virmocklibxl.c ++++ libvirt-4.6.0/tests/virmocklibxl.c +@@ -22,7 +22,7 @@ + + #include + +-#if defined(WITH_LIBXL) && defined(WITH_JANSSON) ++#if defined(WITH_LIBXL) && defined(WITH_YAJL) + # include "virmock.h" + # include + # include +@@ -136,4 +136,4 @@ VIR_MOCK_IMPL_RET_ARGS(stat, int, + return real_stat(path, sb); + } + +-#endif /* WITH_LIBXL && WITH_JANSSON */ ++#endif /* WITH_LIBXL && WITH_YAJL */ +Index: libvirt-4.6.0/tests/virnetdaemontest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/virnetdaemontest.c ++++ libvirt-4.6.0/tests/virnetdaemontest.c +@@ -26,7 +26,7 @@ + + #define VIR_FROM_THIS VIR_FROM_RPC + +-#if defined(HAVE_SOCKETPAIR) && defined(WITH_JANSSON) ++#if defined(HAVE_SOCKETPAIR) && defined(WITH_YAJL) + struct testClientPriv { + int magic; + }; +Index: libvirt-4.6.0/tests/virstoragetest.c +=================================================================== +--- libvirt-4.6.0.orig/tests/virstoragetest.c ++++ libvirt-4.6.0/tests/virstoragetest.c +@@ -1317,7 +1317,7 @@ mymain(void) + " \n" + "\n"); + +-#ifdef WITH_JANSSON ++#ifdef WITH_YAJL + TEST_BACKING_PARSE("json:", NULL); + TEST_BACKING_PARSE("json:asdgsdfg", NULL); + TEST_BACKING_PARSE("json:{}", NULL); +@@ -1581,7 +1581,7 @@ mymain(void) + "\n" + " \n" + "\n"); +-#endif /* WITH_JANSSON */ ++#endif /* WITH_YAJL */ + + cleanup: + /* Final cleanup */ diff --git a/e96e71d8-revert-jansson11.patch b/e96e71d8-revert-jansson11.patch new file mode 100644 index 0000000..a44bb2e --- /dev/null +++ b/e96e71d8-revert-jansson11.patch @@ -0,0 +1,570 @@ +commit e96e71d8d07eff9324f4df059dfcebaf0fe2eda9 +Author: Ján Tomko +Date: Mon Aug 13 13:40:11 2018 +0200 + + Revert "Remove functions using yajl" + + This reverts commit bf114decb34f21cd225ead6dc4d929d35a8c5fe5. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/src/util/virjson.c +=================================================================== +--- libvirt-4.6.0.orig/src/util/virjson.c ++++ libvirt-4.6.0/src/util/virjson.c +@@ -29,6 +29,22 @@ + #include "virstring.h" + #include "virutil.h" + ++#if WITH_YAJL ++# include ++# include ++ ++# ifdef WITH_YAJL2 ++# define yajl_size_t size_t ++# define VIR_YAJL_STATUS_OK(status) ((status) == yajl_status_ok) ++# else ++# define yajl_size_t unsigned int ++# define yajl_complete_parse yajl_parse_complete ++# define VIR_YAJL_STATUS_OK(status) \ ++ ((status) == yajl_status_ok || (status) == yajl_status_insufficient_data) ++# endif ++ ++#endif ++ + /* XXX fixme */ + #define VIR_FROM_THIS VIR_FROM_NONE + +@@ -72,6 +88,23 @@ struct _virJSONValue { + }; + + ++typedef struct _virJSONParserState virJSONParserState; ++typedef virJSONParserState *virJSONParserStatePtr; ++struct _virJSONParserState { ++ virJSONValuePtr value; ++ char *key; ++}; ++ ++typedef struct _virJSONParser virJSONParser; ++typedef virJSONParser *virJSONParserPtr; ++struct _virJSONParser { ++ virJSONValuePtr head; ++ virJSONParserStatePtr state; ++ size_t nstate; ++ int wrap; ++}; ++ ++ + virJSONType + virJSONValueGetType(const virJSONValue *value) + { +@@ -1458,7 +1491,501 @@ virJSONValueCopy(const virJSONValue *in) + } + + +-#if WITH_JANSSON ++#if WITH_YAJL ++static int ++virJSONParserInsertValue(virJSONParserPtr parser, ++ virJSONValuePtr value) ++{ ++ if (!parser->head) { ++ parser->head = value; ++ } else { ++ virJSONParserStatePtr state; ++ if (!parser->nstate) { ++ VIR_DEBUG("got a value to insert without a container"); ++ return -1; ++ } ++ ++ state = &parser->state[parser->nstate-1]; ++ ++ switch (state->value->type) { ++ case VIR_JSON_TYPE_OBJECT: { ++ if (!state->key) { ++ VIR_DEBUG("missing key when inserting object value"); ++ return -1; ++ } ++ ++ if (virJSONValueObjectAppend(state->value, ++ state->key, ++ value) < 0) ++ return -1; ++ ++ VIR_FREE(state->key); ++ } break; ++ ++ case VIR_JSON_TYPE_ARRAY: { ++ if (state->key) { ++ VIR_DEBUG("unexpected key when inserting array value"); ++ return -1; ++ } ++ ++ if (virJSONValueArrayAppend(state->value, ++ value) < 0) ++ return -1; ++ } break; ++ ++ default: ++ VIR_DEBUG("unexpected value type, not a container"); ++ return -1; ++ } ++ } ++ ++ return 0; ++} ++ ++ ++static int ++virJSONParserHandleNull(void *ctx) ++{ ++ virJSONParserPtr parser = ctx; ++ virJSONValuePtr value = virJSONValueNewNull(); ++ ++ VIR_DEBUG("parser=%p", parser); ++ ++ if (!value) ++ return 0; ++ ++ if (virJSONParserInsertValue(parser, value) < 0) { ++ virJSONValueFree(value); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++ ++static int ++virJSONParserHandleBoolean(void *ctx, ++ int boolean_) ++{ ++ virJSONParserPtr parser = ctx; ++ virJSONValuePtr value = virJSONValueNewBoolean(boolean_); ++ ++ VIR_DEBUG("parser=%p boolean=%d", parser, boolean_); ++ ++ if (!value) ++ return 0; ++ ++ if (virJSONParserInsertValue(parser, value) < 0) { ++ virJSONValueFree(value); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++ ++static int ++virJSONParserHandleNumber(void *ctx, ++ const char *s, ++ yajl_size_t l) ++{ ++ virJSONParserPtr parser = ctx; ++ char *str; ++ virJSONValuePtr value; ++ ++ if (VIR_STRNDUP(str, s, l) < 0) ++ return -1; ++ value = virJSONValueNewNumber(str); ++ VIR_FREE(str); ++ ++ VIR_DEBUG("parser=%p str=%s", parser, str); ++ ++ if (!value) ++ return 0; ++ ++ if (virJSONParserInsertValue(parser, value) < 0) { ++ virJSONValueFree(value); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++ ++static int ++virJSONParserHandleString(void *ctx, ++ const unsigned char *stringVal, ++ yajl_size_t stringLen) ++{ ++ virJSONParserPtr parser = ctx; ++ virJSONValuePtr value = virJSONValueNewStringLen((const char *)stringVal, ++ stringLen); ++ ++ VIR_DEBUG("parser=%p str=%p", parser, (const char *)stringVal); ++ ++ if (!value) ++ return 0; ++ ++ if (virJSONParserInsertValue(parser, value) < 0) { ++ virJSONValueFree(value); ++ return 0; ++ } ++ ++ return 1; ++} ++ ++ ++static int ++virJSONParserHandleMapKey(void *ctx, ++ const unsigned char *stringVal, ++ yajl_size_t stringLen) ++{ ++ virJSONParserPtr parser = ctx; ++ virJSONParserStatePtr state; ++ ++ VIR_DEBUG("parser=%p key=%p", parser, (const char *)stringVal); ++ ++ if (!parser->nstate) ++ return 0; ++ ++ state = &parser->state[parser->nstate-1]; ++ if (state->key) ++ return 0; ++ if (VIR_STRNDUP(state->key, (const char *)stringVal, stringLen) < 0) ++ return 0; ++ return 1; ++} ++ ++ ++static int ++virJSONParserHandleStartMap(void *ctx) ++{ ++ virJSONParserPtr parser = ctx; ++ virJSONValuePtr value = virJSONValueNewObject(); ++ ++ VIR_DEBUG("parser=%p", parser); ++ ++ if (!value) ++ return 0; ++ ++ if (virJSONParserInsertValue(parser, value) < 0) { ++ virJSONValueFree(value); ++ return 0; ++ } ++ ++ if (VIR_REALLOC_N(parser->state, ++ parser->nstate + 1) < 0) { ++ return 0; ++ } ++ ++ parser->state[parser->nstate].value = value; ++ parser->state[parser->nstate].key = NULL; ++ parser->nstate++; ++ ++ return 1; ++} ++ ++ ++static int ++virJSONParserHandleEndMap(void *ctx) ++{ ++ virJSONParserPtr parser = ctx; ++ virJSONParserStatePtr state; ++ ++ VIR_DEBUG("parser=%p", parser); ++ ++ if (!parser->nstate) ++ return 0; ++ ++ state = &(parser->state[parser->nstate-1]); ++ if (state->key) { ++ VIR_FREE(state->key); ++ return 0; ++ } ++ ++ VIR_DELETE_ELEMENT(parser->state, parser->nstate - 1, parser->nstate); ++ ++ return 1; ++} ++ ++ ++static int ++virJSONParserHandleStartArray(void *ctx) ++{ ++ virJSONParserPtr parser = ctx; ++ virJSONValuePtr value = virJSONValueNewArray(); ++ ++ VIR_DEBUG("parser=%p", parser); ++ ++ if (!value) ++ return 0; ++ ++ if (virJSONParserInsertValue(parser, value) < 0) { ++ virJSONValueFree(value); ++ return 0; ++ } ++ ++ if (VIR_REALLOC_N(parser->state, ++ parser->nstate + 1) < 0) ++ return 0; ++ ++ parser->state[parser->nstate].value = value; ++ parser->state[parser->nstate].key = NULL; ++ parser->nstate++; ++ ++ return 1; ++} ++ ++ ++static int ++virJSONParserHandleEndArray(void *ctx) ++{ ++ virJSONParserPtr parser = ctx; ++ virJSONParserStatePtr state; ++ ++ VIR_DEBUG("parser=%p", parser); ++ ++ if (!(parser->nstate - parser->wrap)) ++ return 0; ++ ++ state = &(parser->state[parser->nstate-1]); ++ if (state->key) { ++ VIR_FREE(state->key); ++ return 0; ++ } ++ ++ VIR_DELETE_ELEMENT(parser->state, parser->nstate - 1, parser->nstate); ++ ++ return 1; ++} ++ ++ ++static const yajl_callbacks parserCallbacks = { ++ virJSONParserHandleNull, ++ virJSONParserHandleBoolean, ++ NULL, ++ NULL, ++ virJSONParserHandleNumber, ++ virJSONParserHandleString, ++ virJSONParserHandleStartMap, ++ virJSONParserHandleMapKey, ++ virJSONParserHandleEndMap, ++ virJSONParserHandleStartArray, ++ virJSONParserHandleEndArray ++}; ++ ++ ++/* XXX add an incremental streaming parser - yajl trivially supports it */ ++virJSONValuePtr ++virJSONValueFromString(const char *jsonstring) ++{ ++ yajl_handle hand; ++ virJSONParser parser = { NULL, NULL, 0, 0 }; ++ virJSONValuePtr ret = NULL; ++ int rc; ++ size_t len = strlen(jsonstring); ++# ifndef WITH_YAJL2 ++ yajl_parser_config cfg = { 0, 1 }; /* Match yajl 2 default behavior */ ++ VIR_AUTOPTR(virJSONValue) tmp = NULL; ++# endif ++ ++ VIR_DEBUG("string=%s", jsonstring); ++ ++# ifdef WITH_YAJL2 ++ hand = yajl_alloc(&parserCallbacks, NULL, &parser); ++# else ++ hand = yajl_alloc(&parserCallbacks, &cfg, NULL, &parser); ++# endif ++ if (!hand) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("Unable to create JSON parser")); ++ goto cleanup; ++ } ++ ++ /* Yajl 2 is nice enough to default to rejecting trailing garbage. ++ * Yajl 1.0.12 has yajl_get_bytes_consumed to make that detection ++ * simpler. But we're stuck with yajl 1.0.7 on RHEL 6, which ++ * happily quits parsing at the end of a valid JSON construct, ++ * with no visibility into how much more input remains. Wrapping ++ * things in an array forces yajl to confess the truth. */ ++# ifdef WITH_YAJL2 ++ rc = yajl_parse(hand, (const unsigned char *)jsonstring, len); ++# else ++ rc = yajl_parse(hand, (const unsigned char *)"[", 1); ++ parser.wrap = 1; ++ if (VIR_YAJL_STATUS_OK(rc)) ++ rc = yajl_parse(hand, (const unsigned char *)jsonstring, len); ++ parser.wrap = 0; ++ if (VIR_YAJL_STATUS_OK(rc)) ++ rc = yajl_parse(hand, (const unsigned char *)"]", 1); ++# endif ++ if (!VIR_YAJL_STATUS_OK(rc) || ++ yajl_complete_parse(hand) != yajl_status_ok) { ++ unsigned char *errstr = yajl_get_error(hand, 1, ++ (const unsigned char*)jsonstring, ++ strlen(jsonstring)); ++ ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("cannot parse json %s: %s"), ++ jsonstring, (const char*) errstr); ++ yajl_free_error(hand, errstr); ++ virJSONValueFree(parser.head); ++ goto cleanup; ++ } ++ ++ if (parser.nstate != 0) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("cannot parse json %s: unterminated string/map/array"), ++ jsonstring); ++ virJSONValueFree(parser.head); ++ } else { ++ ret = parser.head; ++# ifndef WITH_YAJL2 ++ /* Undo the array wrapping above */ ++ tmp = ret; ++ ret = NULL; ++ if (virJSONValueArraySize(tmp) > 1) ++ virReportError(VIR_ERR_INTERNAL_ERROR, ++ _("cannot parse json %s: too many items present"), ++ jsonstring); ++ else ++ ret = virJSONValueArraySteal(tmp, 0); ++# endif ++ } ++ ++ cleanup: ++ yajl_free(hand); ++ ++ if (parser.nstate) { ++ size_t i; ++ for (i = 0; i < parser.nstate; i++) ++ VIR_FREE(parser.state[i].key); ++ VIR_FREE(parser.state); ++ } ++ ++ VIR_DEBUG("result=%p", ret); ++ ++ return ret; ++} ++ ++ ++static int ++virJSONValueToStringOne(virJSONValuePtr object, ++ yajl_gen g) ++{ ++ size_t i; ++ ++ VIR_DEBUG("object=%p type=%d gen=%p", object, object->type, g); ++ ++ switch (object->type) { ++ case VIR_JSON_TYPE_OBJECT: ++ if (yajl_gen_map_open(g) != yajl_gen_status_ok) ++ return -1; ++ for (i = 0; i < object->data.object.npairs; i++) { ++ if (yajl_gen_string(g, ++ (unsigned char *)object->data.object.pairs[i].key, ++ strlen(object->data.object.pairs[i].key)) ++ != yajl_gen_status_ok) ++ return -1; ++ if (virJSONValueToStringOne(object->data.object.pairs[i].value, g) < 0) ++ return -1; ++ } ++ if (yajl_gen_map_close(g) != yajl_gen_status_ok) ++ return -1; ++ break; ++ case VIR_JSON_TYPE_ARRAY: ++ if (yajl_gen_array_open(g) != yajl_gen_status_ok) ++ return -1; ++ for (i = 0; i < object->data.array.nvalues; i++) { ++ if (virJSONValueToStringOne(object->data.array.values[i], g) < 0) ++ return -1; ++ } ++ if (yajl_gen_array_close(g) != yajl_gen_status_ok) ++ return -1; ++ break; ++ ++ case VIR_JSON_TYPE_STRING: ++ if (yajl_gen_string(g, (unsigned char *)object->data.string, ++ strlen(object->data.string)) != yajl_gen_status_ok) ++ return -1; ++ break; ++ ++ case VIR_JSON_TYPE_NUMBER: ++ if (yajl_gen_number(g, object->data.number, ++ strlen(object->data.number)) != yajl_gen_status_ok) ++ return -1; ++ break; ++ ++ case VIR_JSON_TYPE_BOOLEAN: ++ if (yajl_gen_bool(g, object->data.boolean) != yajl_gen_status_ok) ++ return -1; ++ break; ++ ++ case VIR_JSON_TYPE_NULL: ++ if (yajl_gen_null(g) != yajl_gen_status_ok) ++ return -1; ++ break; ++ ++ default: ++ return -1; ++ } ++ ++ return 0; ++} ++ ++ ++char * ++virJSONValueToString(virJSONValuePtr object, ++ bool pretty) ++{ ++ yajl_gen g; ++ const unsigned char *str; ++ char *ret = NULL; ++ yajl_size_t len; ++# ifndef WITH_YAJL2 ++ yajl_gen_config conf = { pretty ? 1 : 0, pretty ? " " : " "}; ++# endif ++ ++ VIR_DEBUG("object=%p", object); ++ ++# ifdef WITH_YAJL2 ++ g = yajl_gen_alloc(NULL); ++ if (g) { ++ yajl_gen_config(g, yajl_gen_beautify, pretty ? 1 : 0); ++ yajl_gen_config(g, yajl_gen_indent_string, pretty ? " " : " "); ++ yajl_gen_config(g, yajl_gen_validate_utf8, 1); ++ } ++# else ++ g = yajl_gen_alloc(&conf, NULL); ++# endif ++ if (!g) { ++ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", ++ _("Unable to create JSON formatter")); ++ goto cleanup; ++ } ++ ++ if (virJSONValueToStringOne(object, g) < 0) { ++ virReportOOMError(); ++ goto cleanup; ++ } ++ ++ if (yajl_gen_get_buf(g, &str, &len) != yajl_gen_status_ok) { ++ virReportOOMError(); ++ goto cleanup; ++ } ++ ++ ignore_value(VIR_STRDUP(ret, (const char *)str)); ++ ++ cleanup: ++ yajl_gen_free(g); ++ ++ VIR_DEBUG("result=%s", NULLSTR(ret)); ++ ++ return ret; ++} ++ ++ ++#elif WITH_JANSSON + # include + + static virJSONValuePtr diff --git a/f204cf51-revert-jansson7.patch b/f204cf51-revert-jansson7.patch new file mode 100644 index 0000000..23e5f5d --- /dev/null +++ b/f204cf51-revert-jansson7.patch @@ -0,0 +1,30 @@ +commit f204cf51035f51b979dec18ee526e418139fa874 +Author: Ján Tomko +Date: Mon Aug 13 13:39:39 2018 +0200 + + Revert "build: require Jansson if QEMU driver is enabled" + + This reverts commit 01ce04375c3348fd683475e5aa5231149ef6a78a. + + Jansson cannot parse QEMU's quirky JSON. + Revert back to yajl. + + https://bugzilla.redhat.com/show_bug.cgi?id=1614569 + + Signed-off-by: Ján Tomko + Reviewed-by: Daniel P. Berrangé + +Index: libvirt-4.6.0/m4/virt-driver-qemu.m4 +=================================================================== +--- libvirt-4.6.0.orig/m4/virt-driver-qemu.m4 ++++ libvirt-4.6.0/m4/virt-driver-qemu.m4 +@@ -27,9 +27,6 @@ AC_DEFUN([LIBVIRT_DRIVER_ARG_QEMU], [ + + AC_DEFUN([LIBVIRT_DRIVER_CHECK_QEMU], [ + AC_REQUIRE([LIBVIRT_CHECK_JANSSON]) +- if test "$with_qemu:$with_jansson" = "yes:no"; then +- AC_MSG_ERROR([Jansson >= 2.5 is required to build QEMU driver]) +- fi + if test "$with_qemu" = "check"; then + with_qemu=$with_jansson + fi diff --git a/libvirt-suse-netcontrol.patch b/libvirt-suse-netcontrol.patch index 7f4030f..5c3ec78 100644 --- a/libvirt-suse-netcontrol.patch +++ b/libvirt-suse-netcontrol.patch @@ -2,7 +2,7 @@ Index: libvirt-4.6.0/configure.ac =================================================================== --- libvirt-4.6.0.orig/configure.ac +++ libvirt-4.6.0/configure.ac -@@ -256,6 +256,7 @@ LIBVIRT_ARG_LIBSSH +@@ -255,6 +255,7 @@ LIBVIRT_ARG_LIBSSH LIBVIRT_ARG_LIBXML LIBVIRT_ARG_MACVTAP LIBVIRT_ARG_NETCF @@ -10,7 +10,7 @@ Index: libvirt-4.6.0/configure.ac LIBVIRT_ARG_NLS LIBVIRT_ARG_NSS LIBVIRT_ARG_NUMACTL -@@ -299,6 +300,7 @@ LIBVIRT_CHECK_LIBSSH +@@ -297,6 +298,7 @@ LIBVIRT_CHECK_LIBSSH LIBVIRT_CHECK_LIBXML LIBVIRT_CHECK_MACVTAP LIBVIRT_CHECK_NETCF @@ -18,7 +18,7 @@ Index: libvirt-4.6.0/configure.ac LIBVIRT_CHECK_NLS LIBVIRT_CHECK_NUMACTL LIBVIRT_CHECK_NWFILTER -@@ -980,6 +982,7 @@ LIBVIRT_RESULT_LIBXL +@@ -977,6 +979,7 @@ LIBVIRT_RESULT_LIBXL LIBVIRT_RESULT_LIBXML LIBVIRT_RESULT_MACVTAP LIBVIRT_RESULT_NETCF diff --git a/libvirt.changes b/libvirt.changes index b60df1c..bf4379f 100644 --- a/libvirt.changes +++ b/libvirt.changes @@ -1,3 +1,30 @@ +------------------------------------------------------------------- +Tue Aug 14 03:23:24 UTC 2018 - jfehlig@suse.com + +- Revert switch to jansson + boo#1104820 + - Dropped: + temp-build-fix.patch + - Added: + 9ed59012--revert-jansson1.patch, + 54f2b5e3-revert-jansson2.patch, + b56950fd-revert-jansson3.patch, + 6c3d66ac-revert-jansson4.patch, + 8e373e6d-revert-jansson5.patch, + 6f99de31-revert-jansson6.patch, + f204cf51-revert-jansson7.patch, + 5a58b5ed-revert-jansson8.patch, + 63f6e0e9-revert-jansson9.patch, + 8687eba-revert-jansson10.patch, + e96e71d8-revert-jansson11.patch, + d99a8959-revert-jansson12.patch + +------------------------------------------------------------------- +Mon Aug 13 18:06:51 UTC 2018 - jfehlig@suse.com + +- spec: don't restart libvirt-guests when updating libvirt-client + bsc#1104662 + ------------------------------------------------------------------- Mon Aug 6 16:38:32 UTC 2018 - jfehlig@suse.com diff --git a/libvirt.spec b/libvirt.spec index 8801851..cdfd8c7 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -247,9 +247,9 @@ BuildRequires: readline-devel BuildRequires: perl(XML::XPath) # For pool-build probing for existing pools BuildRequires: libblkid-devel >= 2.17 -BuildRequires: libjansson-devel BuildRequires: libpciaccess0-devel >= 0.10.9 BuildRequires: libudev-devel >= 145 +BuildRequires: libyajl-devel %if %{with_sanlock} BuildRequires: sanlock-devel >= 2.4 %endif @@ -328,6 +328,20 @@ Source6: libvirtd-relocation-server.xml Source99: baselibs.conf Source100: %{name}-rpmlintrc # Upstream patches +Patch0: 9ed59012--revert-jansson1.patch +Patch1: 54f2b5e3-revert-jansson2.patch +Patch2: b56950fd-revert-jansson3.patch +Patch3: 6c3d66ac-revert-jansson4.patch +Patch4: 8e373e6d-revert-jansson5.patch +Patch5: 6f99de31-revert-jansson6.patch +Patch6: f204cf51-revert-jansson7.patch +Patch7: 5a58b5ed-revert-jansson8.patch +Patch8: 63f6e0e9-revert-jansson9.patch +Patch9: 8687eba-revert-jansson10.patch +Patch10: e96e71d8-revert-jansson11.patch +Patch11: d99a8959-revert-jansson12.patch +Patch12: 074a7e14-revert-jansson13.patch +Patch13: 86db0db9-revert-jansson14.patch # Patches pending upstream review Patch100: libxl-dom-reset.patch Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.patch @@ -341,7 +355,6 @@ Patch155: libxl-set-cach-mode.patch Patch156: 0001-Extract-stats-functions-from-the-qemu-driver.patch Patch157: 0002-lxc-implement-connectGetAllDomainStats.patch Patch158: 0001-libxl-add-support-for-BlockResize-API.patch -Patch159: temp-build-fix.patch # Our patches Patch200: suse-libvirtd-disable-tls.patch Patch201: suse-libvirtd-sysconfig-settings.patch @@ -839,8 +852,6 @@ Requires: gettext-runtime # Needed by virt-pki-validate script. Requires: cyrus-sasl Requires: gnutls -# We dlopen(libjansson.so.4), so need an explicit dep -Requires: libjansson4 %if %{with_bash_completion} Requires: %{name}-bash-completion = %{version}-%{release} %endif @@ -931,6 +942,20 @@ libvirt plugin for NSS for translating domain names into IP addresses. %prep %setup -q +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 %patch100 -p1 %patch101 -p1 %patch150 -p1 @@ -942,7 +967,6 @@ libvirt plugin for NSS for translating domain names into IP addresses. %patch156 -p1 %patch157 -p1 %patch158 -p1 -%patch159 -p1 %patch200 -p1 %patch201 -p1 %patch202 -p1 @@ -1124,7 +1148,7 @@ export PYTHON=%{_bindir}/python3 %{?arg_apparmor} \ %{?arg_apparmor_profiles} \ --with-udev \ - --with-jansson \ + --with-yajl \ %{?arg_sanlock} \ --with-libpcap \ --with-macvtap \ @@ -1371,7 +1395,7 @@ if [ $1 = 0 ]; then fi %postun client -%service_del_postun libvirt-guests.service +%service_del_postun -n libvirt-guests.service %post libs -p /sbin/ldconfig diff --git a/temp-build-fix.patch b/temp-build-fix.patch deleted file mode 100644 index c7590e3..0000000 --- a/temp-build-fix.patch +++ /dev/null @@ -1,40 +0,0 @@ -Fix link errors in tools/nss and tests - -Although a simple 'make' of libvirt.git works, building libvirt 4.6.0 -with 'osc build ...' fails in tools/nss and tests, with output along -the lines of: - -[ 469s] libtool: link: gcc -shared -fPIC -DPIC -Wl,--whole-archive nss/.libs/libnss_libvirt_impl.a -Wl,--no-whole-archive -lpthread -lutil -ltirpc -fstack-protector-strong -grecord-gcc-switches -O2 -fstack-protector-strong -g -Wl,--version-script=./nss/libvirt_nss.syms -Wl,-z -Wl,relro -Wl,-z -Wl,now -Wl,--no-copy-dt-needed-entries -Wl,-z -Wl,defs -grecord-gcc-switches -O2 -fstack-protector-strong -g -pthread -Wl,-soname -Wl,libnss_libvirt.so.2 -o nss/.libs/libnss_libvirt.so.2 -[ 469s] nss/.libs/libnss_libvirt_impl.a(libvirt_nss_la-virjsoncompat.o): In function `virJSONJanssonOnce': -[ 469s] /home/abuild/rpmbuild/BUILD/libvirt-4.6.0/src/util/virjsoncompat.c:63: undefined reference to `dlopen' -[ 469s] /home/abuild/rpmbuild/BUILD/libvirt-4.6.0/src/util/virjsoncompat.c:79: undefined reference to `dlsym' -... - -A quick hack is to add '-ldl' to the linker flags for libnss_libvirt_impl -and /libnss_libvirt_guest_impl. Will ask about a proper fix on libvirt -dev list. - -Index: libvirt-4.6.0/tools/Makefile.am -=================================================================== ---- libvirt-4.6.0.orig/tools/Makefile.am -+++ libvirt-4.6.0/tools/Makefile.am -@@ -525,6 +525,9 @@ nss_libnss_libvirt_impl_la_CFLAGS = \ - $(AM_CFLAGS) \ - $(NULL) - -+nss_libnss_libvirt_impl_la_LDFLAGS = \ -+ -ldl -+ - nss_libnss_libvirt_impl_la_LIBADD = \ - ../gnulib/lib/libgnu.la \ - ../src/libvirt-nss.la -@@ -552,6 +555,9 @@ nss_libnss_libvirt_guest_impl_la_CFLAGS - $(AM_CFLAGS) \ - $(NULL) - -+nss_libnss_libvirt_guest_impl_la_LDFLAGS = \ -+ -ldl -+ - nss_libnss_libvirt_guest_impl_la_LIBADD = \ - ../gnulib/lib/libgnu.la \ - ../src/libvirt-nss.la From 839a998776e4d07d182359653c2ec75ec32bb342bac064c94d88b4da60eb15dc Mon Sep 17 00:00:00 2001 From: James Fehlig Date: Tue, 14 Aug 2018 17:18:37 +0000 Subject: [PATCH 2/2] Add two more patches to the list of revert patches in the changelog OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=702 --- libvirt.changes | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libvirt.changes b/libvirt.changes index bf4379f..d540b8b 100644 --- a/libvirt.changes +++ b/libvirt.changes @@ -17,7 +17,9 @@ Tue Aug 14 03:23:24 UTC 2018 - jfehlig@suse.com 63f6e0e9-revert-jansson9.patch, 8687eba-revert-jansson10.patch, e96e71d8-revert-jansson11.patch, - d99a8959-revert-jansson12.patch + d99a8959-revert-jansson12.patch, + 074a7e14-revert-jansson13.patch, + 86db0db9-revert-jansson14.patch ------------------------------------------------------------------- Mon Aug 13 18:06:51 UTC 2018 - jfehlig@suse.com