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
This commit is contained in:
James Fehlig 2018-08-14 17:05:16 +00:00 committed by Git OBS Bridge
parent 145c421e41
commit 4daedcf6c9
18 changed files with 2452 additions and 50 deletions

View File

@ -0,0 +1,28 @@
commit 074a7e14780e6aff78c7305c7dcad059a998c08a
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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

View File

@ -0,0 +1,37 @@
commit 54f2b5e330aa20c9745b2545fc88973539015b98
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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 */

View File

@ -0,0 +1,40 @@
commit 5a58b5ed6803e71e32e5d6f8c6e3b68874d085fb
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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 <http://www.gnu.org/licenses/>.
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

View File

@ -0,0 +1,73 @@
commit 63f6e0e95036a0634ee8147ee7a463c4066fa720
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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);

View File

@ -0,0 +1,496 @@
commit 6c3d66ac7409579752765c12e65adccec30e24fc
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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 <jansson.h>
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
- * <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <config.h>
-
-#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 <dlfcn.h>
-
-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
- * <http://www.gnu.org/licenses/>.
- *
- */
-
-
-#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 <jansson.h>
-
-# 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_ */

View File

@ -0,0 +1,174 @@
commit 6f99de314855296d52cdf0badcab5b12213f2ca4
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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);

View File

@ -0,0 +1,29 @@
commit 8687eba5ca9a78b3a74a7c4e162d80633b8d877b
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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
/*

View File

@ -0,0 +1,82 @@
commit 86db0db979c39df278f03dbf3b4239c873ddb637
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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 <http://www.gnu.org/licenses/>.
-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])
-])

View File

@ -0,0 +1,31 @@
commit 8e373e6d80afa3b212464b8b1a9faa36ee684472
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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

View File

@ -0,0 +1,53 @@
commit 9ed59012d3ccdf8365f5e8119959017849bc89fd
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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) {

View File

@ -0,0 +1,36 @@
commit b56950fd277c0e31cbdf3a0e5b3c944f9857789a
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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:

View File

@ -0,0 +1,712 @@
commit d99a89592d65ab8adb51d695134bd347648d825f
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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 <jansson.h>
-
-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 <config.h>
-#if defined(WITH_LIBXL) && defined(WITH_JANSSON)
+#if defined(WITH_LIBXL) && defined(WITH_YAJL)
# include "virmock.h"
# include <sys/stat.h>
# include <unistd.h>
@@ -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)
" <host name='example.org' port='6000'/>\n"
"</source>\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)
"<source protocol='vxhs' name='c6718f6b-0401-441d-a8c3-1f0064d75ee0'>\n"
" <host name='example.com' port='9999'/>\n"
"</source>\n");
-#endif /* WITH_JANSSON */
+#endif /* WITH_YAJL */
cleanup:
/* Final cleanup */

View File

@ -0,0 +1,570 @@
commit e96e71d8d07eff9324f4df059dfcebaf0fe2eda9
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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 <yajl/yajl_gen.h>
+# include <yajl/yajl_parse.h>
+
+# 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 <jansson.h>
static virJSONValuePtr

View File

@ -0,0 +1,30 @@
commit f204cf51035f51b979dec18ee526e418139fa874
Author: Ján Tomko <jtomko@redhat.com>
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 <jtomko@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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