From 5b7b79852efb93cb5273f22e991cbef6bc9e36c4 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Sat, 18 Aug 2018 17:04:26 +0000 Subject: [PATCH] community/libvirt to 4.6.0-3 --- ...DLOPEN_LIBS-to-libraries-introducing.patch | 49 ++ ...x-link-errors-in-tools-nss-and-tests.patch | 48 ++ ...emon-Make-sure-that-JSON-symbols-are.patch | 63 ++ ...compat-Stub-out-virJSONInitialize-wh.patch | 46 ++ ...ucapsprobe-Fix-output-after-switchin.patch | 45 ++ ...d-symbol-clash-between-json-librarie.patch | 514 ++++++++++++ ...o-skip-qemuagenttest-with-old-jansso.patch | 40 + ...m4-Introduce-STABLE_ORDERING_JANSSON.patch | 191 +++++ ...uire-Jansson-if-QEMU-driver-is-enabl.patch | 39 + ...tch-with-qemu-default-from-yes-to-ch.patch | 49 ++ ...vert-Remove-virJSONValueNewStringLen.patch | 83 ++ ...ove-references-to-WITH_YAJL-for-SETU.patch | 38 + ...3-Revert-Remove-functions-using-yajl.patch | 578 ++++++++++++++ ...4-Revert-Switch-from-yajl-to-Jansson.patch | 743 ++++++++++++++++++ ...ef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch | 37 + .../0016-Revert-build-add-with-jansson.patch | 96 +++ community/libvirt/PKGBUILD | 49 +- 17 files changed, 2705 insertions(+), 3 deletions(-) create mode 100644 community/libvirt/0001-Revert-src-Move-DLOPEN_LIBS-to-libraries-introducing.patch create mode 100644 community/libvirt/0002-Revert-Fix-link-errors-in-tools-nss-and-tests.patch create mode 100644 community/libvirt/0003-Revert-remote-daemon-Make-sure-that-JSON-symbols-are.patch create mode 100644 community/libvirt/0004-Revert-util-jsoncompat-Stub-out-virJSONInitialize-wh.patch create mode 100644 community/libvirt/0005-Revert-tests-qemucapsprobe-Fix-output-after-switchin.patch create mode 100644 community/libvirt/0006-Revert-util-avoid-symbol-clash-between-json-librarie.patch create mode 100644 community/libvirt/0007-Revert-tests-also-skip-qemuagenttest-with-old-jansso.patch create mode 100644 community/libvirt/0008-Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch create mode 100644 community/libvirt/0009-Revert-build-require-Jansson-if-QEMU-driver-is-enabl.patch create mode 100644 community/libvirt/0010-Revert-build-switch-with-qemu-default-from-yes-to-ch.patch create mode 100644 community/libvirt/0011-Revert-Remove-virJSONValueNewStringLen.patch create mode 100644 community/libvirt/0012-Revert-build-remove-references-to-WITH_YAJL-for-SETU.patch create mode 100644 community/libvirt/0013-Revert-Remove-functions-using-yajl.patch create mode 100644 community/libvirt/0014-Revert-Switch-from-yajl-to-Jansson.patch create mode 100644 community/libvirt/0015-Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch create mode 100644 community/libvirt/0016-Revert-build-add-with-jansson.patch diff --git a/community/libvirt/0001-Revert-src-Move-DLOPEN_LIBS-to-libraries-introducing.patch b/community/libvirt/0001-Revert-src-Move-DLOPEN_LIBS-to-libraries-introducing.patch new file mode 100644 index 000000000..13e79c3a1 --- /dev/null +++ b/community/libvirt/0001-Revert-src-Move-DLOPEN_LIBS-to-libraries-introducing.patch @@ -0,0 +1,49 @@ +From c020527f8d734061253f8bfd1ca996cb774b35ba Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:37:53 +0200 +Subject: [PATCH 01/16] Revert "src: Move DLOPEN_LIBS to libraries introducing + the dependency" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This reverts commit 5d40272ea67c74049600e120095d1b42287ed2d2. + +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é +--- + tools/Makefile.am | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/tools/Makefile.am b/tools/Makefile.am +index 1452d984a0..26c887649e 100644 +--- a/tools/Makefile.am ++++ b/tools/Makefile.am +@@ -527,7 +527,8 @@ nss_libnss_libvirt_impl_la_CFLAGS = \ + + nss_libnss_libvirt_impl_la_LIBADD = \ + ../gnulib/lib/libgnu.la \ +- ../src/libvirt-nss.la ++ ../src/libvirt-nss.la \ ++ $(DLOPEN_LIBS) + + nss_libnss_libvirt_la_SOURCES = + nss_libnss_libvirt_la_LDFLAGS = \ +@@ -554,7 +555,8 @@ nss_libnss_libvirt_guest_impl_la_CFLAGS = \ + + nss_libnss_libvirt_guest_impl_la_LIBADD = \ + ../gnulib/lib/libgnu.la \ +- ../src/libvirt-nss.la ++ ../src/libvirt-nss.la \ ++ $(DLOPEN_LIBS) + + nss_libnss_libvirt_guest_la_SOURCES = + nss_libnss_libvirt_guest_la_LDFLAGS = \ +-- +2.18.0 + diff --git a/community/libvirt/0002-Revert-Fix-link-errors-in-tools-nss-and-tests.patch b/community/libvirt/0002-Revert-Fix-link-errors-in-tools-nss-and-tests.patch new file mode 100644 index 000000000..db896db10 --- /dev/null +++ b/community/libvirt/0002-Revert-Fix-link-errors-in-tools-nss-and-tests.patch @@ -0,0 +1,48 @@ +From 918ae02a60af28875876fbea649870ced686412c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:38:28 +0200 +Subject: [PATCH 02/16] Revert "Fix link errors in tools/nss and tests" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This reverts commit b3d9b08ef797e569b14cfa42d3dceba23c2a5b14. + +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é +--- + tools/Makefile.am | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/tools/Makefile.am b/tools/Makefile.am +index 26c887649e..1452d984a0 100644 +--- a/tools/Makefile.am ++++ b/tools/Makefile.am +@@ -527,8 +527,7 @@ nss_libnss_libvirt_impl_la_CFLAGS = \ + + nss_libnss_libvirt_impl_la_LIBADD = \ + ../gnulib/lib/libgnu.la \ +- ../src/libvirt-nss.la \ +- $(DLOPEN_LIBS) ++ ../src/libvirt-nss.la + + nss_libnss_libvirt_la_SOURCES = + nss_libnss_libvirt_la_LDFLAGS = \ +@@ -555,8 +554,7 @@ nss_libnss_libvirt_guest_impl_la_CFLAGS = \ + + nss_libnss_libvirt_guest_impl_la_LIBADD = \ + ../gnulib/lib/libgnu.la \ +- ../src/libvirt-nss.la \ +- $(DLOPEN_LIBS) ++ ../src/libvirt-nss.la + + nss_libnss_libvirt_guest_la_SOURCES = + nss_libnss_libvirt_guest_la_LDFLAGS = \ +-- +2.18.0 + diff --git a/community/libvirt/0003-Revert-remote-daemon-Make-sure-that-JSON-symbols-are.patch b/community/libvirt/0003-Revert-remote-daemon-Make-sure-that-JSON-symbols-are.patch new file mode 100644 index 000000000..bb4fde56c --- /dev/null +++ b/community/libvirt/0003-Revert-remote-daemon-Make-sure-that-JSON-symbols-are.patch @@ -0,0 +1,63 @@ +From fed899ac086a1ee511197d3cb7da28b925c53a65 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:38:38 +0200 +Subject: [PATCH 03/16] Revert "remote: daemon: Make sure that JSON symbols are + properly loaded at startup" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + src/libvirt_private.syms | 4 ---- + src/remote/remote_daemon.c | 4 ---- + 2 files changed, 8 deletions(-) + +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 70dfcc5e29..fc386e1699 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -2135,10 +2135,6 @@ virJSONValueObjectStealObject; + virJSONValueToString; + + +-# util/virjsoncompat.h +-virJSONInitialize; +- +- + # util/virkeycode.h + virKeycodeSetTypeFromString; + virKeycodeSetTypeToString; +diff --git a/src/remote/remote_daemon.c b/src/remote/remote_daemon.c +index 8bbc3818bb..9f3a5f38ad 100644 +--- a/src/remote/remote_daemon.c ++++ b/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) { +-- +2.18.0 + diff --git a/community/libvirt/0004-Revert-util-jsoncompat-Stub-out-virJSONInitialize-wh.patch b/community/libvirt/0004-Revert-util-jsoncompat-Stub-out-virJSONInitialize-wh.patch new file mode 100644 index 000000000..61fd95fea --- /dev/null +++ b/community/libvirt/0004-Revert-util-jsoncompat-Stub-out-virJSONInitialize-wh.patch @@ -0,0 +1,46 @@ +From 60cd8228e79151fbb2fe574161da5743937a0122 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:38:46 +0200 +Subject: [PATCH 04/16] Revert "util: jsoncompat: Stub out virJSONInitialize + when compiling without jansson" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + src/util/virjsoncompat.c | 13 +------------ + 1 file changed, 1 insertion(+), 12 deletions(-) + +diff --git a/src/util/virjsoncompat.c b/src/util/virjsoncompat.c +index ffbeb5488c..6c853e9bb5 100644 +--- a/src/util/virjsoncompat.c ++++ b/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 */ +-- +2.18.0 + diff --git a/community/libvirt/0005-Revert-tests-qemucapsprobe-Fix-output-after-switchin.patch b/community/libvirt/0005-Revert-tests-qemucapsprobe-Fix-output-after-switchin.patch new file mode 100644 index 000000000..c3e907f41 --- /dev/null +++ b/community/libvirt/0005-Revert-tests-qemucapsprobe-Fix-output-after-switchin.patch @@ -0,0 +1,45 @@ +From a588ecc2817db93ec22e5e2a8c9fdcfb59839875 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:39:09 +0200 +Subject: [PATCH 05/16] Revert "tests: qemucapsprobe: Fix output after + switching to jansson" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + tests/qemucapsprobemock.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/tests/qemucapsprobemock.c b/tests/qemucapsprobemock.c +index 049b16273a..5936975505 100644 +--- a/tests/qemucapsprobemock.c ++++ b/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(qemuMonitorPtr mon, + printLineSkipEmpty("\n", stdout); + + printLineSkipEmpty(json, stdout); +- printLineSkipEmpty("\n", stdout); + } + + cleanup: +-- +2.18.0 + diff --git a/community/libvirt/0006-Revert-util-avoid-symbol-clash-between-json-librarie.patch b/community/libvirt/0006-Revert-util-avoid-symbol-clash-between-json-librarie.patch new file mode 100644 index 000000000..d3eab5427 --- /dev/null +++ b/community/libvirt/0006-Revert-util-avoid-symbol-clash-between-json-librarie.patch @@ -0,0 +1,514 @@ +From e4fbf4535267b5fbf62048c9f241a5bf52fbba1b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:39:16 +0200 +Subject: [PATCH 06/16] Revert "util: avoid symbol clash between json + libraries" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + libvirt.spec.in | 2 - + src/Makefile.am | 8 +- + src/util/Makefile.inc.am | 3 +- + src/util/virjson.c | 9 +- + src/util/virjsoncompat.c | 274 --------------------------------------- + src/util/virjsoncompat.h | 88 ------------- + 6 files changed, 7 insertions(+), 377 deletions(-) + delete mode 100644 src/util/virjsoncompat.c + delete mode 100644 src/util/virjsoncompat.h + +diff --git a/libvirt.spec.in b/libvirt.spec.in +index 19ae55cdaf..4113579e47 100644 +--- a/libvirt.spec.in ++++ b/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 +diff --git a/src/Makefile.am b/src/Makefile.am +index a4f213480e..83263e69e5 100644 +--- a/src/Makefile.am ++++ b/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 + + +diff --git a/src/util/Makefile.inc.am b/src/util/Makefile.inc.am +index 8ef9ee1dfa..71b2b93c2d 100644 +--- a/src/util/Makefile.inc.am ++++ b/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) \ +diff --git a/src/util/virjson.c b/src/util/virjson.c +index 5bab662cd3..01a387b2f7 100644 +--- a/src/util/virjson.c ++++ b/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 *jsonstring) + 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 object, + json_t *json; + char *str = NULL; + +- if (virJSONInitialize() < 0) +- return NULL; +- + if (pretty) + flags |= JSON_INDENT(2); + else +diff --git a/src/util/virjsoncompat.c b/src/util/virjsoncompat.c +deleted file mode 100644 +index 6c853e9bb5..0000000000 +--- a/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 */ +diff --git a/src/util/virjsoncompat.h b/src/util/virjsoncompat.h +deleted file mode 100644 +index d9b7765a37..0000000000 +--- a/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_ */ +-- +2.18.0 + diff --git a/community/libvirt/0007-Revert-tests-also-skip-qemuagenttest-with-old-jansso.patch b/community/libvirt/0007-Revert-tests-also-skip-qemuagenttest-with-old-jansso.patch new file mode 100644 index 000000000..352c4aa83 --- /dev/null +++ b/community/libvirt/0007-Revert-tests-also-skip-qemuagenttest-with-old-jansso.patch @@ -0,0 +1,40 @@ +From bf66fef1df9fa1012849e01a888d359622816221 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:39:25 +0200 +Subject: [PATCH 07/16] Revert "tests: also skip qemuagenttest with old + jansson" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + tests/qemuagenttest.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tests/qemuagenttest.c b/tests/qemuagenttest.c +index b3d737d8a8..232b34f9cd 100644 +--- a/tests/qemuagenttest.c ++++ b/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 + +-- +2.18.0 + diff --git a/community/libvirt/0008-Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch b/community/libvirt/0008-Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch new file mode 100644 index 000000000..be63e77e6 --- /dev/null +++ b/community/libvirt/0008-Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch @@ -0,0 +1,191 @@ +From 89447ce3e5e96aa873bc35c6279899968ba9b97e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:39:33 +0200 +Subject: [PATCH 08/16] Revert "m4: Introduce STABLE_ORDERING_JANSSON" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + m4/virt-jansson.m4 | 3 --- + tests/qemublocktest.c | 5 ----- + tests/qemucapabilitiestest.c | 5 ----- + tests/qemucommandutiltest.c | 5 ----- + tests/qemuhotplugtest.c | 5 ----- + tests/qemumigparamstest.c | 5 ----- + tests/qemumonitorjsontest.c | 5 ----- + tests/virjsontest.c | 5 ----- + tests/virmacmaptest.c | 5 ----- + tests/virnetdaemontest.c | 5 ----- + 10 files changed, 48 deletions(-) + +diff --git a/m4/virt-jansson.m4 b/m4/virt-jansson.m4 +index ab4c020f62..206d6a5ced 100644 +--- a/m4/virt-jansson.m4 ++++ b/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],[ +diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c +index d22b4b754e..9a387cf063 100644 +--- a/tests/qemublocktest.c ++++ b/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; + +diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c +index 28f903a88c..641ec4f597 100644 +--- a/tests/qemucapabilitiestest.c ++++ b/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; +diff --git a/tests/qemucommandutiltest.c b/tests/qemucommandutiltest.c +index 9b13dde63f..8e57a1b79d 100644 +--- a/tests/qemucommandutiltest.c ++++ b/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; +diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c +index 3c0eecb079..2fb96c6158 100644 +--- a/tests/qemuhotplugtest.c ++++ b/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; +diff --git a/tests/qemumigparamstest.c b/tests/qemumigparamstest.c +index 5e12430991..b8af68211b 100644 +--- a/tests/qemumigparamstest.c ++++ b/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; +diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c +index 1826c4f297..c11615f7ac 100644 +--- a/tests/qemumonitorjsontest.c ++++ b/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; +diff --git a/tests/virjsontest.c b/tests/virjsontest.c +index d352d370fd..d42413d11d 100644 +--- a/tests/virjsontest.c ++++ b/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 }; \ +diff --git a/tests/virmacmaptest.c b/tests/virmacmaptest.c +index 420531dcdb..6e3e9984d1 100644 +--- a/tests/virmacmaptest.c ++++ b/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 }; \ +diff --git a/tests/virnetdaemontest.c b/tests/virnetdaemontest.c +index 277fb06385..cbc961dbaf 100644 +--- a/tests/virnetdaemontest.c ++++ b/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); +-- +2.18.0 + diff --git a/community/libvirt/0009-Revert-build-require-Jansson-if-QEMU-driver-is-enabl.patch b/community/libvirt/0009-Revert-build-require-Jansson-if-QEMU-driver-is-enabl.patch new file mode 100644 index 000000000..4e2315031 --- /dev/null +++ b/community/libvirt/0009-Revert-build-require-Jansson-if-QEMU-driver-is-enabl.patch @@ -0,0 +1,39 @@ +From a1bd0be0213fdeb8e8f34912ca346add5583db36 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:39:39 +0200 +Subject: [PATCH 09/16] Revert "build: require Jansson if QEMU driver is + enabled" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + m4/virt-driver-qemu.m4 | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/m4/virt-driver-qemu.m4 b/m4/virt-driver-qemu.m4 +index 2d9992d0dc..ddb2834705 100644 +--- a/m4/virt-driver-qemu.m4 ++++ b/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 +-- +2.18.0 + diff --git a/community/libvirt/0010-Revert-build-switch-with-qemu-default-from-yes-to-ch.patch b/community/libvirt/0010-Revert-build-switch-with-qemu-default-from-yes-to-ch.patch new file mode 100644 index 000000000..1d3b943ae --- /dev/null +++ b/community/libvirt/0010-Revert-build-switch-with-qemu-default-from-yes-to-ch.patch @@ -0,0 +1,49 @@ +From 724b5fc2fdd2377ad4df7deb1ed739711f4bcd9b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:39:48 +0200 +Subject: [PATCH 10/16] Revert "build: switch --with-qemu default from yes to + check" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + m4/virt-driver-qemu.m4 | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +diff --git a/m4/virt-driver-qemu.m4 b/m4/virt-driver-qemu.m4 +index ddb2834705..80e1d3ad46 100644 +--- a/m4/virt-driver-qemu.m4 ++++ b/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 +-- +2.18.0 + diff --git a/community/libvirt/0011-Revert-Remove-virJSONValueNewStringLen.patch b/community/libvirt/0011-Revert-Remove-virJSONValueNewStringLen.patch new file mode 100644 index 000000000..9198a74e7 --- /dev/null +++ b/community/libvirt/0011-Revert-Remove-virJSONValueNewStringLen.patch @@ -0,0 +1,83 @@ +From 53b6e8439a8d93244eb5c14a75a3e5e9ad420f52 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:39:56 +0200 +Subject: [PATCH 11/16] Revert "Remove virJSONValueNewStringLen" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + src/libvirt_private.syms | 1 + + src/util/virjson.c | 22 ++++++++++++++++++++++ + src/util/virjson.h | 1 + + 3 files changed, 24 insertions(+) + +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index fc386e1699..a5e88a9018 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -2098,6 +2098,7 @@ virJSONValueNewNumberUint; + virJSONValueNewNumberUlong; + virJSONValueNewObject; + virJSONValueNewString; ++virJSONValueNewStringLen; + virJSONValueObjectAdd; + virJSONValueObjectAddVArgs; + virJSONValueObjectAppend; +diff --git a/src/util/virjson.c b/src/util/virjson.c +index 01a387b2f7..80274bc6c5 100644 +--- a/src/util/virjson.c ++++ b/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) + { +diff --git a/src/util/virjson.h b/src/util/virjson.h +index 0d5a7ef753..75f7f17b44 100644 +--- a/src/util/virjson.h ++++ b/src/util/virjson.h +@@ -59,6 +59,7 @@ int virJSONValueObjectAddVArgs(virJSONValuePtr obj, va_list args) + + + 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); +-- +2.18.0 + diff --git a/community/libvirt/0012-Revert-build-remove-references-to-WITH_YAJL-for-SETU.patch b/community/libvirt/0012-Revert-build-remove-references-to-WITH_YAJL-for-SETU.patch new file mode 100644 index 000000000..97fc13952 --- /dev/null +++ b/community/libvirt/0012-Revert-build-remove-references-to-WITH_YAJL-for-SETU.patch @@ -0,0 +1,38 @@ +From 6c3eae3158686bd184dc87e0febbe70a12602614 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:40:02 +0200 +Subject: [PATCH 12/16] Revert "build: remove references to WITH_YAJL for + SETUID_RPC_CLIENT" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + config-post.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/config-post.h b/config-post.h +index 05672121f0..24117bbbd4 100644 +--- a/config-post.h ++++ b/config-post.h +@@ -44,6 +44,8 @@ + # undef WITH_SSH2 + # undef WITH_SYSTEMD_DAEMON + # undef WITH_VIRTUALPORT ++# undef WITH_YAJL ++# undef WITH_YAJL2 + #endif + + /* +-- +2.18.0 + diff --git a/community/libvirt/0013-Revert-Remove-functions-using-yajl.patch b/community/libvirt/0013-Revert-Remove-functions-using-yajl.patch new file mode 100644 index 000000000..7adb5ec3f --- /dev/null +++ b/community/libvirt/0013-Revert-Remove-functions-using-yajl.patch @@ -0,0 +1,578 @@ +From 37b2c6cd84d9c73b5b0fba789f1b808cde100b56 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:40:11 +0200 +Subject: [PATCH 13/16] Revert "Remove functions using yajl" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + src/util/virjson.c | 529 ++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 528 insertions(+), 1 deletion(-) + +diff --git a/src/util/virjson.c b/src/util/virjson.c +index 80274bc6c5..608ba85d67 100644 +--- a/src/util/virjson.c ++++ b/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 +-- +2.18.0 + diff --git a/community/libvirt/0014-Revert-Switch-from-yajl-to-Jansson.patch b/community/libvirt/0014-Revert-Switch-from-yajl-to-Jansson.patch new file mode 100644 index 000000000..f7d08b711 --- /dev/null +++ b/community/libvirt/0014-Revert-Switch-from-yajl-to-Jansson.patch @@ -0,0 +1,743 @@ +From 395cb24a696f1dc53c6501175636372330afa35e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:40:18 +0200 +Subject: [PATCH 14/16] Revert "Switch from yajl to Jansson" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + libvirt.spec.in | 4 +- + m4/virt-nss.m4 | 4 +- + m4/virt-yajl.m4 | 27 ++- + src/Makefile.am | 8 +- + src/qemu/qemu_driver.c | 2 +- + src/util/Makefile.inc.am | 4 +- + src/util/virjson.c | 211 ----------------------- + tests/Makefile.am | 12 +- + tests/cputest.c | 16 +- + tests/libxlxml2domconfigtest.c | 4 +- + tests/qemuagenttest.c | 2 +- + tests/qemublocktest.c | 1 - + tests/qemucapabilitiestest.c | 2 +- + tests/qemucaps2xmltest.c | 2 +- + tests/qemucommandutiltest.c | 2 +- + tests/qemuhotplugtest.c | 2 +- + tests/qemumigparamsdata/empty.json | 4 +- + tests/qemumigparamsdata/unsupported.json | 4 +- + tests/qemumigparamstest.c | 2 +- + tests/qemumonitorjsontest.c | 2 +- + tests/virmacmaptestdata/empty.json | 4 +- + tests/virmocklibxl.c | 4 +- + tests/virnetdaemontest.c | 2 +- + tests/virstoragetest.c | 4 +- + 24 files changed, 72 insertions(+), 257 deletions(-) + +diff --git a/libvirt.spec.in b/libvirt.spec.in +index 4113579e47..ab8e97a489 100644 +--- a/libvirt.spec.in ++++ b/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 \ +diff --git a/m4/virt-nss.m4 b/m4/virt-nss.m4 +index 082b7b14f6..951a74e835 100644 +--- a/m4/virt-nss.m4 ++++ b/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 +diff --git a/m4/virt-yajl.m4 b/m4/virt-yajl.m4 +index 8d4c43a6b2..c4ea0102a3 100644 +--- a/m4/virt-yajl.m4 ++++ b/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],[ +diff --git a/src/Makefile.am b/src/Makefile.am +index 83263e69e5..db8c8ebd1a 100644 +--- a/src/Makefile.am ++++ b/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 + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index fb0d4a8c7a..d4a2379e48 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -2092,7 +2092,7 @@ qemuDomainReboot(virDomainPtr dom, unsigned int flags) + */ + 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; +diff --git a/src/util/Makefile.inc.am b/src/util/Makefile.inc.am +index 71b2b93c2d..a22265606c 100644 +--- a/src/util/Makefile.inc.am ++++ b/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) \ +diff --git a/src/util/virjson.c b/src/util/virjson.c +index 608ba85d67..29530dcb15 100644 +--- a/src/util/virjson.c ++++ b/src/util/virjson.c +@@ -1985,217 +1985,6 @@ virJSONValueToString(virJSONValuePtr object, + } + + +-#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) +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 302b50e1cd..21a6c823d9 100644 +--- a/tests/Makefile.am ++++ b/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 = $(MOCKLIBS_LIBS) + + 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 +diff --git a/tests/cputest.c b/tests/cputest.c +index 9cc361d125..baf2b3c648 100644 +--- a/tests/cputest.c ++++ b/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 *data, + 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 + +diff --git a/tests/libxlxml2domconfigtest.c b/tests/libxlxml2domconfigtest.c +index a9758c40cb..b814461acc 100644 +--- a/tests/libxlxml2domconfigtest.c ++++ b/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 */ +diff --git a/tests/qemuagenttest.c b/tests/qemuagenttest.c +index 232b34f9cd..2f79986207 100644 +--- a/tests/qemuagenttest.c ++++ b/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 +diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c +index 9a387cf063..0c335abc5b 100644 +--- a/tests/qemublocktest.c ++++ b/tests/qemublocktest.c +@@ -309,7 +309,6 @@ testQemuDiskXMLToPropsValidateFile(const void *opaque) + goto cleanup; + + virBufferAdd(&buf, jsonstr, -1); +- virBufferAddLit(&buf, "\n"); + VIR_FREE(jsonstr); + } + +diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c +index 641ec4f597..4aec175968 100644 +--- a/tests/qemucapabilitiestest.c ++++ b/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 +diff --git a/tests/qemucaps2xmltest.c b/tests/qemucaps2xmltest.c +index e3b7b97925..5b9152b04d 100644 +--- a/tests/qemucaps2xmltest.c ++++ b/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 +diff --git a/tests/qemucommandutiltest.c b/tests/qemucommandutiltest.c +index 8e57a1b79d..f0921e3b93 100644 +--- a/tests/qemucommandutiltest.c ++++ b/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 +diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c +index 2fb96c6158..5b1e0db104 100644 +--- a/tests/qemuhotplugtest.c ++++ b/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 +diff --git a/tests/qemumigparamsdata/empty.json b/tests/qemumigparamsdata/empty.json +index 0967ef424b..0db3279e44 100644 +--- a/tests/qemumigparamsdata/empty.json ++++ b/tests/qemumigparamsdata/empty.json +@@ -1 +1,3 @@ +-{} ++{ ++ ++} +diff --git a/tests/qemumigparamsdata/unsupported.json b/tests/qemumigparamsdata/unsupported.json +index 0967ef424b..0db3279e44 100644 +--- a/tests/qemumigparamsdata/unsupported.json ++++ b/tests/qemumigparamsdata/unsupported.json +@@ -1 +1,3 @@ +-{} ++{ ++ ++} +diff --git a/tests/qemumigparamstest.c b/tests/qemumigparamstest.c +index b8af68211b..0532053722 100644 +--- a/tests/qemumigparamstest.c ++++ b/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 +diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c +index c11615f7ac..e9b2632655 100644 +--- a/tests/qemumonitorjsontest.c ++++ b/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 +diff --git a/tests/virmacmaptestdata/empty.json b/tests/virmacmaptestdata/empty.json +index fe51488c70..41b42e677b 100644 +--- a/tests/virmacmaptestdata/empty.json ++++ b/tests/virmacmaptestdata/empty.json +@@ -1 +1,3 @@ +-[] ++[ ++ ++] +diff --git a/tests/virmocklibxl.c b/tests/virmocklibxl.c +index 0a047c239f..546c6d6a43 100644 +--- a/tests/virmocklibxl.c ++++ b/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 */ +diff --git a/tests/virnetdaemontest.c b/tests/virnetdaemontest.c +index cbc961dbaf..6f4957fc4c 100644 +--- a/tests/virnetdaemontest.c ++++ b/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; + }; +diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c +index b20b5a8744..68d0307d5c 100644 +--- a/tests/virstoragetest.c ++++ b/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 */ +-- +2.18.0 + diff --git a/community/libvirt/0015-Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch b/community/libvirt/0015-Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch new file mode 100644 index 000000000..817f9e00f --- /dev/null +++ b/community/libvirt/0015-Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch @@ -0,0 +1,37 @@ +From 3a0ae97574bb1d8fd99b6b32e99785a754b59541 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:40:25 +0200 +Subject: [PATCH 15/16] Revert "build: undef WITH_JANSSON for + SETUID_RPC_CLIENT" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + config-post.h | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/config-post.h b/config-post.h +index 24117bbbd4..063e30fa37 100644 +--- a/config-post.h ++++ b/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 +-- +2.18.0 + diff --git a/community/libvirt/0016-Revert-build-add-with-jansson.patch b/community/libvirt/0016-Revert-build-add-with-jansson.patch new file mode 100644 index 000000000..e89e50590 --- /dev/null +++ b/community/libvirt/0016-Revert-build-add-with-jansson.patch @@ -0,0 +1,96 @@ +From adbe2263370aaa90bafa5d1d1da043bea63b5118 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= +Date: Mon, 13 Aug 2018 13:41:14 +0200 +Subject: [PATCH 16/16] Revert "build: add --with-jansson" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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é +--- + configure.ac | 6 +++--- + m4/virt-jansson.m4 | 29 ----------------------------- + 2 files changed, 3 insertions(+), 32 deletions(-) + delete mode 100644 m4/virt-jansson.m4 + +diff --git a/configure.ac b/configure.ac +index c6287f656a..c668630a79 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -250,7 +250,7 @@ LIBVIRT_ARG_FIREWALLD + LIBVIRT_ARG_FUSE + LIBVIRT_ARG_GLUSTER + LIBVIRT_ARG_HAL +-LIBVIRT_ARG_JANSSON ++LIBVIRT_ARG_LIBISCSI + LIBVIRT_ARG_LIBPCAP + LIBVIRT_ARG_LIBSSH + LIBVIRT_ARG_LIBXML +@@ -291,7 +291,7 @@ LIBVIRT_CHECK_FUSE + LIBVIRT_CHECK_GLUSTER + LIBVIRT_CHECK_GNUTLS + LIBVIRT_CHECK_HAL +-LIBVIRT_CHECK_JANSSON ++LIBVIRT_CHECK_LIBISCSI + LIBVIRT_CHECK_LIBNL + LIBVIRT_CHECK_LIBPARTED + LIBVIRT_CHECK_LIBPCAP +@@ -972,7 +972,7 @@ LIBVIRT_RESULT_FUSE + LIBVIRT_RESULT_GLUSTER + LIBVIRT_RESULT_GNUTLS + LIBVIRT_RESULT_HAL +-LIBVIRT_RESULT_JANSSON ++LIBVIRT_RESULT_LIBISCSI + LIBVIRT_RESULT_LIBNL + LIBVIRT_RESULT_LIBPCAP + LIBVIRT_RESULT_LIBSSH +diff --git a/m4/virt-jansson.m4 b/m4/virt-jansson.m4 +deleted file mode 100644 +index 206d6a5ced..0000000000 +--- a/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]) +-]) +-- +2.18.0 + diff --git a/community/libvirt/PKGBUILD b/community/libvirt/PKGBUILD index a710465ed..e2c50419d 100644 --- a/community/libvirt/PKGBUILD +++ b/community/libvirt/PKGBUILD @@ -10,7 +10,7 @@ pkgname=libvirt pkgver=4.6.0 -pkgrel=2 +pkgrel=3 pkgdesc="API for controlling virtualization engines (openvz,kvm,qemu,virtualbox,xen,etc)" arch=('x86_64') url="http://libvirt.org/" @@ -69,16 +69,59 @@ validpgpkeys=('C74415BA7C9C7F78F02E1DC34606B8A5DE95BC1F') source=("https://libvirt.org/sources/${pkgname}-${pkgver}.tar.xz"{,.asc} 'libvirtd.conf.d' 'libvirtd-guests.conf.d' - 'libvirt.sysusers.d') + 'libvirt.sysusers.d' + '0001-Revert-src-Move-DLOPEN_LIBS-to-libraries-introducing.patch' + '0002-Revert-Fix-link-errors-in-tools-nss-and-tests.patch' + '0003-Revert-remote-daemon-Make-sure-that-JSON-symbols-are.patch' + '0004-Revert-util-jsoncompat-Stub-out-virJSONInitialize-wh.patch' + '0005-Revert-tests-qemucapsprobe-Fix-output-after-switchin.patch' + '0006-Revert-util-avoid-symbol-clash-between-json-librarie.patch' + '0007-Revert-tests-also-skip-qemuagenttest-with-old-jansso.patch' + '0008-Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch' + '0009-Revert-build-require-Jansson-if-QEMU-driver-is-enabl.patch' + '0010-Revert-build-switch-with-qemu-default-from-yes-to-ch.patch' + '0011-Revert-Remove-virJSONValueNewStringLen.patch' + '0012-Revert-build-remove-references-to-WITH_YAJL-for-SETU.patch' + '0013-Revert-Remove-functions-using-yajl.patch' + '0014-Revert-Switch-from-yajl-to-Jansson.patch' + '0015-Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch' + '0016-Revert-build-add-with-jansson.patch') sha512sums=('beae0f1cafa73b9495d877979547bbc9b7ca2a7c3b213c5da92e6302b570d42df9d639f50380dbc0cebd6af983924dc27b1c81139c81dee0897f39a6a5158968' 'SKIP' 'fc0e16e045a2c84d168d42c97d9e14ca32ba0d86025135967f4367cf3fa663882eefb6923ebf04676ae763f4f459e5156d7221b36b47c835f9e531c6b6e0cd9d' 'ef221bae994ad0a15ab5186b7469132896156d82bfdc3ef3456447d5cf1af347401ef33e8665d5b2f76451f5457aee7ea01064d7b9223d6691c90c4456763258' - '7d1d535aaf739a6753f6819c49272c8d9b5f488e0a8553797499334a76b8631474e222b6048f2125b858e5ecc21e602face45dd02121f833d605b9ae58322982') + '7d1d535aaf739a6753f6819c49272c8d9b5f488e0a8553797499334a76b8631474e222b6048f2125b858e5ecc21e602face45dd02121f833d605b9ae58322982' + 'd77f916871482445aa7d75e1f1b048be4d0a4d04f90e85c6866d7b3ea7f2696367e333952679ed089a99a8c3b4d0c65cfb498dad1758e21637d60984c676ba06' + '5bfcae0d1fccc082793b57115241f88fdb5085fa00da73943a1a0043f29290af67a5ddad27b4b2784b54bc945e1c6df53299e9ae299d7771852452aaf7bf5a8a' + 'a4b22dc08b92600910da08508fcb4bd4a2d27346eb45e9d8bc571149309f7aca762fe16d523bf662d88f4ceb3c3ac8a1ce33759e794444fac50713e40b6cb302' + '0b37d65045b942cdbe7480217baa06fbdd747a380c85397c88a59fea2af1a92d87e283b5e9534796ecadd66039fd370d62ce3223267991bdc978201f5416244f' + '6e4b33c866e9e7e27ab85a709a45a6d591b2f9a209b3352c8835ec582b810d0b632e9d328590075d119317d360974a0dc411280d68483a38f3405eced6458f0b' + '6e9f05297f1dc671b4564b041661a6bb35f1667c641388ba2d3971c9961a73a139f4c8b24db86792c2165ff49260c72123214e61442e63398325f0b434ff2cf9' + 'e31377b9da9defdc4bfbc645a805fd83a5617e6150b0348f30c3f0892834066a26695f8b19bef2deea62486743383139e83b15c452f02947cb3d29b7ffc4d861' + '80cc5ee53fc490b86fb62bdf966441020b4798e94a93e05c1319249e066246e0bafc7b4b97a3c6c10a0d44632c6b228b015ff9dc677c60112a07523c823ee24c' + 'a455409fb97e191f3c2e8510906d7da659212ced5163c4a37ca206ab1c348933c0cf0c0f1479ff2ad9076d42c73b35147757da43a96a079a40a385cf334ce5bc' + 'bd82f3865c2a641877e91bc7ba92b09268caca1dd9cd0ba64e53bdd88965ba37d7a66c07b1d8dedc5d4254de4bfc08ba5bcafd47caa91d10921a185d88392b8b' + '6251c32e2d9681fb5ee477f535160688793f80957bac2e693bc47592a076b3878d5b071b1d1d8fcc28d2c9127567b28d93067e02d1342cbd72e38191e1c0f2f8' + 'b271b72c910ce1d872d6d16cde4b4796309b8ede2fe150398ef094ab8a84284f81c9a1a6a795d25264c098cbab81c990d963132a112e215f6e32bd2fe561849a' + '74458eab69e570c3b4531f722db6d84cd83c534cf1bb60d38d6e2c5c44fdecaa73bfae250c14c787b4761d9edf01ef70d72617d52d14c63c1ee660e0cd8541a3' + 'ee1b532579b74aea3cca308f51263693f42c19f946698a647a807258017689dfb4cebd778ccfdd7cb1fea68f55b7575754f1871ba0590e234e125b57afc5c8ea' + '9196b4cd7aa9c7af188bbd9ce4028dda4b04ea316546a5639e291a542663ac78c7deafc639f311b6c1aaa0878690b2e8e0e4e5c4bbe706c54c9cbf2d92960ad9' + 'dca08fbdb2e1e088dbeb0d0b192f78cc63f010a7398111a8a71fcc392e23e0176ce84eb3577c12bc6c9da097db3802dab99d7dea91bf00504ecc930f8ab841e9') prepare() { cd "${srcdir}/${pkgname}-${pkgver}" + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + [[ $src = *.patch ]] || continue + msg2 "Applying patch $src..." + patch -Np1 < "../$src" + done + + autoreconf -vi + sed -i 's|/sysconfig/|/conf.d/|g' \ src/remote/libvirtd.service.in \ tools/{libvirt-guests.service,libvirt-guests.sh,virt-pki-validate}.in \