From 26ab7e78ce54efdb0beb97619e77d2a562b665ea Mon Sep 17 00:00:00 2001 From: Olof hagsand Date: Sat, 24 Sep 2022 11:50:36 +0200 Subject: [PATCH] Fixed: XML encoding of with-default capability not done --- lib/src/clixon_netconf_lib.c | 16 +++++++++++----- lib/src/clixon_string.c | 1 + test/test_netconf_hello.sh | 2 +- test/test_netconf_ssh_callhome.sh | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/src/clixon_netconf_lib.c b/lib/src/clixon_netconf_lib.c index bf26e5cc..e8ff8836 100644 --- a/lib/src/clixon_netconf_lib.c +++ b/lib/src/clixon_netconf_lib.c @@ -1786,6 +1786,10 @@ netconf_hello_server(clicon_handle h, module_set_id) < 0) goto done; cprintf(cb, "%s", encstr); + if (encstr){ + free(encstr); + encstr = NULL; + } } cprintf(cb, "urn:ietf:params:netconf:capability:candidate:1.0"); cprintf(cb, "urn:ietf:params:netconf:capability:validate:1.1"); @@ -1793,7 +1797,9 @@ netconf_hello_server(clicon_handle h, cprintf(cb, "urn:ietf:params:netconf:capability:xpath:1.0"); cprintf(cb, "urn:ietf:params:netconf:capability:notification:1.0"); /* rfc6243 with-defaults capability modes */ - cprintf(cb, "urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,trim,report-all-tagged"); + cprintf(cb, ""); + xml_chardata_cbuf_append(cb, "urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,trim,report-all-tagged"); + cprintf(cb, ""); cprintf(cb, ""); if (session_id) cprintf(cb, "%lu", (long unsigned int)session_id); @@ -2091,10 +2097,10 @@ netconf_output(int s, /*! Encapsulate and send outgoing netconf packet as cbuf on socket * - * @param[in] h Clixon handle - * @param[in] cb Cligen buffer that contains the XML message - * @retval 0 OK - * @retval -1 Error + * @param[in] framing Framing type, ie EOM(1.0) or chunked (1.1) + * @param[in] cb Cligen buffer that contains the XML message + * @retval 0 OK + * @retval -1 Error * @note Assumes "cb" contains valid XML * @see netconf_output without encapsulation * @see netconf_hello_msg where framing is set diff --git a/lib/src/clixon_string.c b/lib/src/clixon_string.c index 3e07ae87..a602e4af 100644 --- a/lib/src/clixon_string.c +++ b/lib/src/clixon_string.c @@ -535,6 +535,7 @@ xml_chardata_encode(char **escp, /*! Escape characters according to XML definition and append to cbuf * @param[in] cb CLIgen buf * @param[in] str Not-encoded input string + * @retdata 0 OK * @see xml_chardata_encode for the generic function */ int diff --git a/test/test_netconf_hello.sh b/test/test_netconf_hello.sh index 4e90fcd1..ad5133f7 100755 --- a/test/test_netconf_hello.sh +++ b/test/test_netconf_hello.sh @@ -106,7 +106,7 @@ new "Netconf snd hello with prefix" expecteof "$clixon_netconf -qef $cfg" 0 "urn:ietf:params:netconf:base:1.1]]>]]>" '^$' new "netconf snd + rcv hello" -expecteof "$clixon_netconf -f $cfg" 0 "urn:ietf:params:netconf:base:1.1]]>]]>" "^urn:ietf:params:netconf:base:1.1urn:ietf:params:netconf:base:1.0urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=42urn:ietf:params:netconf:capability:candidate:1.0urn:ietf:params:netconf:capability:validate:1.1urn:ietf:params:netconf:capability:startup:1.0urn:ietf:params:netconf:capability:xpath:1.0urn:ietf:params:netconf:capability:notification:1.0urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,trim,report-all-tagged[0-9]*]]>]]>$" '^$' +expecteof "$clixon_netconf -f $cfg" 0 "urn:ietf:params:netconf:base:1.1]]>]]>" "^urn:ietf:params:netconf:base:1.1urn:ietf:params:netconf:base:1.0urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=42urn:ietf:params:netconf:capability:candidate:1.0urn:ietf:params:netconf:capability:validate:1.1urn:ietf:params:netconf:capability:startup:1.0urn:ietf:params:netconf:capability:xpath:1.0urn:ietf:params:netconf:capability:notification:1.0urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,trim,report-all-tagged[0-9]*]]>]]>$" '^$' new "Netconf snd hello with extra element" expecteof "$clixon_netconf -qef $cfg" 0 "urn:ietf:params:netconf:base:1.1]]>]]>" '^protocolunknown-elementextra-elementerrorUnrecognized hello/capabilities element]]>]]>$' '^$' diff --git a/test/test_netconf_ssh_callhome.sh b/test/test_netconf_ssh_callhome.sh index 1d5b5314..f87132f1 100755 --- a/test/test_netconf_ssh_callhome.sh +++ b/test/test_netconf_ssh_callhome.sh @@ -134,7 +134,7 @@ EOF new "Start Listener client" echo "ssh -s -F $sshcfg -v -i $key -o ProxyUseFdpass=yes -o ProxyCommand=\"clixon_netconf_ssh_callhome_client -a 127.0.0.1\" . netconf" #-F $sshcfg -expectpart "$(ssh -s -F $sshcfg -v -i $key -o ProxyUseFdpass=yes -o ProxyCommand="${clixon_netconf_ssh_callhome_client} -a 127.0.0.1" . netconf < $rpccmd)" 0 "urn:ietf:params:netconf:base:1.1urn:ietf:params:netconf:base:1.0urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=42urn:ietf:params:netconf:capability:candidate:1.0urn:ietf:params:netconf:capability:validate:1.1urn:ietf:params:netconf:capability:startup:1.0urn:ietf:params:netconf:capability:xpath:1.0urn:ietf:params:netconf:capability:notification:1.0urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,trim,report-all-tagged2" "" +expectpart "$(ssh -s -F $sshcfg -v -i $key -o ProxyUseFdpass=yes -o ProxyCommand="${clixon_netconf_ssh_callhome_client} -a 127.0.0.1" . netconf < $rpccmd)" 0 "urn:ietf:params:netconf:base:1.1urn:ietf:params:netconf:base:1.0urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=42urn:ietf:params:netconf:capability:candidate:1.0urn:ietf:params:netconf:capability:validate:1.1urn:ietf:params:netconf:capability:startup:1.0urn:ietf:params:netconf:capability:xpath:1.0urn:ietf:params:netconf:capability:notification:1.0urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,trim,report-all-tagged2" "" # Wait wait