From 43da5addedee0bfd2b62b3ea565c0f06c4c0d715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Tue, 14 Aug 2018 14:55:05 +0200 Subject: Don't use jansson for JSON encoding. It has borken integer parsing New patches: Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch Revert-Remove-virJSONValueNewStringLen.patch Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIENT.patch Revert-tests-qemucapsprobe-Fix-output-after-switching-to-.patch Revert-build-require-Jansson-if-QEMU-driver-is-enabled.patch Revert-util-jsoncompat-Stub-out-virJSONInitialize-when-co.patch Revert-Switch-from-yajl-to-Jansson.patch Revert-remote-daemon-Make-sure-that-JSON-symbols-are-prop.patch Revert-build-remove-references-to-WITH_YAJL-for-SETUID_RP.patch Revert-build-add-with-jansson.patch Revert-Remove-functions-using-yajl.patch Revert-build-switch-with-qemu-default-from-yes-to-check.patch Revert-tests-also-skip-qemuagenttest-with-old-jansson.patch Revert-util-avoid-symbol-clash-between-json-libraries.patch Revert "Depend on libjansson4" This reverts commit 42d718c778de95cb61431d0aa49cb9c055ecde7c. Revert "Use jansson instead of yajl" This reverts commit d53b4b1dc792673476d98b21e3aff284a875cabc. Closes: #906116 --- debian/control | 5 +- .../Revert-Remove-functions-using-yajl.patch | 574 ++++++++++++++++ .../Revert-Remove-virJSONValueNewStringLen.patch | 79 +++ .../Revert-Switch-from-yajl-to-Jansson.patch | 739 +++++++++++++++++++++ debian/patches/Revert-build-add-with-jansson.patch | 92 +++ ...ove-references-to-WITH_YAJL-for-SETUID_RP.patch | 33 + ...require-Jansson-if-QEMU-driver-is-enabled.patch | 34 + ...witch-with-qemu-default-from-yes-to-check.patch | 44 ++ ...-undef-WITH_JANSSON-for-SETUID_RPC_CLIENT.patch | 32 + ...vert-m4-Introduce-STABLE_ORDERING_JANSSON.patch | 187 ++++++ ...emon-Make-sure-that-JSON-symbols-are-prop.patch | 59 ++ ...-also-skip-qemuagenttest-with-old-jansson.patch | 35 + ...ucapsprobe-Fix-output-after-switching-to-.patch | 40 ++ ...avoid-symbol-clash-between-json-libraries.patch | 509 ++++++++++++++ ...compat-Stub-out-virJSONInitialize-when-co.patch | 42 ++ debian/patches/series | 14 + debian/rules | 1 + 17 files changed, 2516 insertions(+), 3 deletions(-) create mode 100644 debian/patches/Revert-Remove-functions-using-yajl.patch create mode 100644 debian/patches/Revert-Remove-virJSONValueNewStringLen.patch create mode 100644 debian/patches/Revert-Switch-from-yajl-to-Jansson.patch create mode 100644 debian/patches/Revert-build-add-with-jansson.patch create mode 100644 debian/patches/Revert-build-remove-references-to-WITH_YAJL-for-SETUID_RP.patch create mode 100644 debian/patches/Revert-build-require-Jansson-if-QEMU-driver-is-enabled.patch create mode 100644 debian/patches/Revert-build-switch-with-qemu-default-from-yes-to-check.patch create mode 100644 debian/patches/Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIENT.patch create mode 100644 debian/patches/Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch create mode 100644 debian/patches/Revert-remote-daemon-Make-sure-that-JSON-symbols-are-prop.patch create mode 100644 debian/patches/Revert-tests-also-skip-qemuagenttest-with-old-jansson.patch create mode 100644 debian/patches/Revert-tests-qemucapsprobe-Fix-output-after-switching-to-.patch create mode 100644 debian/patches/Revert-util-avoid-symbol-clash-between-json-libraries.patch create mode 100644 debian/patches/Revert-util-jsoncompat-Stub-out-virJSONInitialize-when-co.patch diff --git a/debian/control b/debian/control index 00fbb478a..a470288a2 100644 --- a/debian/control +++ b/debian/control @@ -31,8 +31,8 @@ Build-Depends: libpolkit-gobject-1-dev, libcap-ng-dev [linux-any], libnl-3-dev [linux-any], - libjansson-dev, libnl-route-3-dev [linux-any], + libyajl-dev, libpcap0.8-dev, libnuma-dev [amd64 arm64 i386 ia64 mips mipsel powerpc ppc64 ppc64el], numad [amd64 arm64 i386 ia64 mips mipsel powerpc ppc64 ppc64el], @@ -236,8 +236,7 @@ Description: Libvirt daemon configuration files Package: libvirt0 Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, - libjansson4, +Depends: ${shlibs:Depends}, ${misc:Depends} Recommends: lvm2 [linux-any] Breaks: selinux-policy-default (<< 2:2.20131214-1~), selinux-policy-mls (<< 2:2.20131214-1~) Description: library for interfacing with different virtualization systems diff --git a/debian/patches/Revert-Remove-functions-using-yajl.patch b/debian/patches/Revert-Remove-functions-using-yajl.patch new file mode 100644 index 000000000..8e1d34f51 --- /dev/null +++ b/debian/patches/Revert-Remove-functions-using-yajl.patch @@ -0,0 +1,574 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:40:11 +0200 +Subject: 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 80274bc..608ba85 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 diff --git a/debian/patches/Revert-Remove-virJSONValueNewStringLen.patch b/debian/patches/Revert-Remove-virJSONValueNewStringLen.patch new file mode 100644 index 000000000..7ce141f06 --- /dev/null +++ b/debian/patches/Revert-Remove-virJSONValueNewStringLen.patch @@ -0,0 +1,79 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:39:56 +0200 +Subject: 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 fc386e1..a5e88a9 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 01a387b..80274bc 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 0d5a7ef..75f7f17 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); diff --git a/debian/patches/Revert-Switch-from-yajl-to-Jansson.patch b/debian/patches/Revert-Switch-from-yajl-to-Jansson.patch new file mode 100644 index 000000000..fdec91451 --- /dev/null +++ b/debian/patches/Revert-Switch-from-yajl-to-Jansson.patch @@ -0,0 +1,739 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:40:18 +0200 +Subject: 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 4113579..ab8e97a 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 082b7b1..951a74e 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 8d4c43a..c4ea010 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 702e900..db0a29c 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) \ +@@ -993,14 +993,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 fb0d4a8..d4a2379 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 71b2b93..a222656 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 608ba85..29530dc 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 302b50e..21a6c82 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 9cc361d..baf2b3c 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 a9758c4..b814461 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 232b34f..2f79986 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 9a387cf..0c335ab 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 641ec4f..4aec175 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 e3b7b97..5b9152b 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 8e57a1b..f0921e3 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 2fb96c6..5b1e0db 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 0967ef4..0db3279 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 0967ef4..0db3279 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 b8af682..0532053 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 c11615f..e9b2632 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 fe51488..41b42e6 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 0a047c2..546c6d6 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 cbc961d..6f4957f 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 b20b5a8..68d0307 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 */ diff --git a/debian/patches/Revert-build-add-with-jansson.patch b/debian/patches/Revert-build-add-with-jansson.patch new file mode 100644 index 000000000..2f8d47b10 --- /dev/null +++ b/debian/patches/Revert-build-add-with-jansson.patch @@ -0,0 +1,92 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:41:14 +0200 +Subject: 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 71666ba..411fbe5 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 206d6a5..0000000 +--- 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]) +-]) diff --git a/debian/patches/Revert-build-remove-references-to-WITH_YAJL-for-SETUID_RP.patch b/debian/patches/Revert-build-remove-references-to-WITH_YAJL-for-SETUID_RP.patch new file mode 100644 index 000000000..22b18d10c --- /dev/null +++ b/debian/patches/Revert-build-remove-references-to-WITH_YAJL-for-SETUID_RP.patch @@ -0,0 +1,33 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:40:02 +0200 +Subject: 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 0567212..24117bb 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 + + /* diff --git a/debian/patches/Revert-build-require-Jansson-if-QEMU-driver-is-enabled.patch b/debian/patches/Revert-build-require-Jansson-if-QEMU-driver-is-enabled.patch new file mode 100644 index 000000000..fe111dd4b --- /dev/null +++ b/debian/patches/Revert-build-require-Jansson-if-QEMU-driver-is-enabled.patch @@ -0,0 +1,34 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:39:39 +0200 +Subject: 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 2d9992d..ddb2834 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 diff --git a/debian/patches/Revert-build-switch-with-qemu-default-from-yes-to-check.patch b/debian/patches/Revert-build-switch-with-qemu-default-from-yes-to-check.patch new file mode 100644 index 000000000..495815812 --- /dev/null +++ b/debian/patches/Revert-build-switch-with-qemu-default-from-yes-to-check.patch @@ -0,0 +1,44 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:39:48 +0200 +Subject: 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 ddb2834..80e1d3a 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 diff --git a/debian/patches/Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIENT.patch b/debian/patches/Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIENT.patch new file mode 100644 index 000000000..c61fe0a44 --- /dev/null +++ b/debian/patches/Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIENT.patch @@ -0,0 +1,32 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:40:25 +0200 +Subject: 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 24117bb..063e30f 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 diff --git a/debian/patches/Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch b/debian/patches/Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch new file mode 100644 index 000000000..2949cffbf --- /dev/null +++ b/debian/patches/Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch @@ -0,0 +1,187 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:39:33 +0200 +Subject: 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 ab4c020..206d6a5 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 d22b4b7..9a387cf 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 28f903a..641ec4f 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 9b13dde..8e57a1b 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 3c0eecb..2fb96c6 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 5e12430..b8af682 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 1826c4f..c11615f 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 d352d37..d42413d 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 420531d..6e3e998 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 277fb06..cbc961d 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); diff --git a/debian/patches/Revert-remote-daemon-Make-sure-that-JSON-symbols-are-prop.patch b/debian/patches/Revert-remote-daemon-Make-sure-that-JSON-symbols-are-prop.patch new file mode 100644 index 000000000..80689bf96 --- /dev/null +++ b/debian/patches/Revert-remote-daemon-Make-sure-that-JSON-symbols-are-prop.patch @@ -0,0 +1,59 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:38:38 +0200 +Subject: 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 70dfcc5..fc386e1 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 8bbc381..9f3a5f3 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) { diff --git a/debian/patches/Revert-tests-also-skip-qemuagenttest-with-old-jansson.patch b/debian/patches/Revert-tests-also-skip-qemuagenttest-with-old-jansson.patch new file mode 100644 index 000000000..7022dd130 --- /dev/null +++ b/debian/patches/Revert-tests-also-skip-qemuagenttest-with-old-jansson.patch @@ -0,0 +1,35 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:39:25 +0200 +Subject: 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 b3d737d..232b34f 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 + diff --git a/debian/patches/Revert-tests-qemucapsprobe-Fix-output-after-switching-to-.patch b/debian/patches/Revert-tests-qemucapsprobe-Fix-output-after-switching-to-.patch new file mode 100644 index 000000000..002f26de4 --- /dev/null +++ b/debian/patches/Revert-tests-qemucapsprobe-Fix-output-after-switching-to-.patch @@ -0,0 +1,40 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:39:09 +0200 +Subject: 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 049b162..5936975 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: diff --git a/debian/patches/Revert-util-avoid-symbol-clash-between-json-libraries.patch b/debian/patches/Revert-util-avoid-symbol-clash-between-json-libraries.patch new file mode 100644 index 000000000..9c1a03230 --- /dev/null +++ b/debian/patches/Revert-util-avoid-symbol-clash-between-json-libraries.patch @@ -0,0 +1,509 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:39:16 +0200 +Subject: 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 19ae55c..4113579 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 5cefccf..702e900 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 \ +@@ -960,8 +960,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 \ +@@ -1000,6 +998,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 8ef9ee1..71b2b93 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 5bab662..01a387b 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 6c853e9..0000000 +--- 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 d9b7765..0000000 +--- 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_ */ diff --git a/debian/patches/Revert-util-jsoncompat-Stub-out-virJSONInitialize-when-co.patch b/debian/patches/Revert-util-jsoncompat-Stub-out-virJSONInitialize-when-co.patch new file mode 100644 index 000000000..dff29dff9 --- /dev/null +++ b/debian/patches/Revert-util-jsoncompat-Stub-out-virJSONInitialize-when-co.patch @@ -0,0 +1,42 @@ +From: =?utf-8?q?J=C3=A1n_Tomko?= +Date: Mon, 13 Aug 2018 13:38:46 +0200 +Subject: 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 ffbeb54..6c853e9 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 */ diff --git a/debian/patches/series b/debian/patches/series index a580d05dd..df393fc3b 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -15,3 +15,17 @@ Set-defaults-for-zfs-tools.patch Pass-GPG_TTY-env-var-to-the-ssh-binary.patch apparmor-Allow-virt-aa-helper-to-access-the-name-service-.patch debian/Prefer-sbin-over-usr-sbin.patch +Revert-remote-daemon-Make-sure-that-JSON-symbols-are-prop.patch +Revert-util-jsoncompat-Stub-out-virJSONInitialize-when-co.patch +Revert-tests-qemucapsprobe-Fix-output-after-switching-to-.patch +Revert-util-avoid-symbol-clash-between-json-libraries.patch +Revert-tests-also-skip-qemuagenttest-with-old-jansson.patch +Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch +Revert-build-require-Jansson-if-QEMU-driver-is-enabled.patch +Revert-build-switch-with-qemu-default-from-yes-to-check.patch +Revert-Remove-virJSONValueNewStringLen.patch +Revert-build-remove-references-to-WITH_YAJL-for-SETUID_RP.patch +Revert-Remove-functions-using-yajl.patch +Revert-Switch-from-yajl-to-Jansson.patch +Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIENT.patch +Revert-build-add-with-jansson.patch diff --git a/debian/rules b/debian/rules index 3f5b2d455..2a8f2a918 100755 --- a/debian/rules +++ b/debian/rules @@ -98,6 +98,7 @@ DEB_CONFIGURE_EXTRA_ARGS := \ $(WITH_OPENVZ) \ --with-avahi \ --with-sasl \ + --with-yajl \ --with-ssh2 \ --with-polkit \ $(WITH_UDEV) \ -- cgit v1.2.3