From 344dcacf6fbb36c5c8cfe5e6af36c924ad914d84 Mon Sep 17 00:00:00 2001 From: Olof Hagsand Date: Sun, 6 Dec 2020 11:22:26 +0000 Subject: [PATCH] * Second fix of https://github.com/clicon/clixon/issues/158 * Actually there is an error of duplicate rpc-replies, but it should be detected in the backend not here --- apps/restconf/restconf_err.c | 8 ++++++-- apps/restconf/restconf_methods_post.c | 9 +++++++-- test/test_copy_config.sh | 1 - 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/apps/restconf/restconf_err.c b/apps/restconf/restconf_err.c index 8839b878..f6064483 100644 --- a/apps/restconf/restconf_err.c +++ b/apps/restconf/restconf_err.c @@ -418,6 +418,10 @@ api_return_err(clicon_handle h, goto done; } } +#if 1 + if (clicon_debug_get()) + clicon_log_xml(LOG_DEBUG, xerr, "%s Send error:", __FUNCTION__); +#endif if (xml_name_set(xerr, "error") < 0) goto done; tagstr = xml_body(xtag); @@ -431,7 +435,7 @@ api_return_err(clicon_handle h, goto done; switch (media){ case YANG_DATA_XML: - clicon_debug(1, "%s code:%d err:%s", __FUNCTION__, code, cbuf_get(cb)); + clicon_debug(1, "%s code:%d", __FUNCTION__, code); if (pretty){ cprintf(cb, " \n"); if (clicon_xml2cbuf(cb, xerr, 2, pretty, -1) < 0) @@ -446,7 +450,7 @@ api_return_err(clicon_handle h, } break; case YANG_DATA_JSON: - clicon_debug(1, "%s code:%d err:%s", __FUNCTION__, code, cbuf_get(cb)); + clicon_debug(1, "%s code:%d", __FUNCTION__, code); if (pretty){ cprintf(cb, "{\n\"ietf-restconf:errors\" : "); if (xml2json_cbuf(cb, xerr, pretty) < 0) diff --git a/apps/restconf/restconf_methods_post.c b/apps/restconf/restconf_methods_post.c index 16964d3e..936aaaff 100644 --- a/apps/restconf/restconf_methods_post.c +++ b/apps/restconf/restconf_methods_post.c @@ -614,8 +614,13 @@ api_operations_post_output(clicon_handle h, clicon_debug(1, "%s", __FUNCTION__); /* Validate that exactly only tag with exactly one element child */ if ((xoutput = xml_child_i_type(xret, 0, CX_ELMNT)) == NULL || - strcmp(xml_name(xoutput),"rpc-reply") != 0 || - xml_child_nr_type(xoutput, CX_ELMNT) != 1){ + strcmp(xml_name(xoutput),"rpc-reply") != 0 + /* See https://github.com/clicon/clixon/issues/158 + * This is an internal error, they should not be double but the error should not be detected + * here, it should be detected in the backend plugin caller. + || xml_child_nr_type(xrpc, CX_ELMNT) != 1 XXX backend can have multiple callbacks + */ + ){ if (netconf_malformed_message_xml(&xerr, "restconf RPC does not have single input") < 0) goto done; if ((xe = xpath_first(xerr, NULL, "rpc-error")) == NULL){ diff --git a/test/test_copy_config.sh b/test/test_copy_config.sh index f6f88e18..4697f0ba 100755 --- a/test/test_copy_config.sh +++ b/test/test_copy_config.sh @@ -176,7 +176,6 @@ expectpart "$(curl $CURLOPTS -X POST -H "Content-Type: application/yang-data+xml # Here running is empty new "Check running empty" expecteof "$clixon_netconf -qf $cfg" 0 "]]>]]>" "^]]>]]>$" -exit if [ $BE -ne 0 ]; then new "Kill backend"