From d58ffb2c72a462358716919d5fd9a16cbefc9fa1 Mon Sep 17 00:00:00 2001 From: Olof hagsand Date: Thu, 25 May 2017 15:10:51 +0200 Subject: [PATCH] Strings in xmldb_put not properly encoded, eg eth/0 became eth.00000 --- CHANGELOG.md | 2 ++ configure | 6 +++--- configure.ac | 4 ++-- datastore/text/clixon_xmldb_text.c | 18 ++++++++++++++---- lib/src/clixon_proto_client.c | 4 ++-- 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0083e82a..9a99916f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Clixon CHANGELOG +- Strings in xmldb_put not properly encoded, eg eth/0 became eth.00000 + ## 3.3.0 May 2017 diff --git a/configure b/configure index d48a768e..5a53cb5e 100755 --- a/configure +++ b/configure @@ -2136,7 +2136,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu CLIXON_VERSION_MAJOR="3" CLIXON_VERSION_MINOR="3" -CLIXON_VERSION_PATCH="0" +CLIXON_VERSION_PATCH="1" CLIXON_VERSION="\"${CLIXON_VERSION_MAJOR}.${CLIXON_VERSION_MINOR}.${CLIXON_VERSION_PATCH}\"" # Fix to specific version (eg 3.5) or head (3) CLIGEN_VERSION="3" @@ -2172,8 +2172,8 @@ _ACEOF # Bind to specific CLIgen version -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: CLIXON version is ${CLIXON_VERSION}_PRE1" >&5 -$as_echo "CLIXON version is ${CLIXON_VERSION}_PRE1" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: CLIXON version is ${CLIXON_VERSION}_PRE" >&5 +$as_echo "CLIXON version is ${CLIXON_VERSION}_PRE" >&6; } ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do diff --git a/configure.ac b/configure.ac index c7f30742..0232b9c6 100644 --- a/configure.ac +++ b/configure.ac @@ -43,7 +43,7 @@ AC_INIT(lib/clixon/clixon.h.in) CLIXON_VERSION_MAJOR="3" CLIXON_VERSION_MINOR="3" -CLIXON_VERSION_PATCH="0" +CLIXON_VERSION_PATCH="1" CLIXON_VERSION="\"${CLIXON_VERSION_MAJOR}.${CLIXON_VERSION_MINOR}.${CLIXON_VERSION_PATCH}\"" # Fix to specific version (eg 3.5) or head (3) CLIGEN_VERSION="3" @@ -62,7 +62,7 @@ AC_SUBST(CLIXON_VERSION_MAJOR) AC_SUBST(CLIXON_VERSION_MINOR) AC_SUBST(CLIGEN_VERSION) # Bind to specific CLIgen version -AC_MSG_RESULT(CLIXON version is ${CLIXON_VERSION}_PRE1) +AC_MSG_RESULT(CLIXON version is ${CLIXON_VERSION}_PRE) AC_CANONICAL_TARGET AC_SUBST(CC) diff --git a/datastore/text/clixon_xmldb_text.c b/datastore/text/clixon_xmldb_text.c index 6ef443e8..4014426f 100644 --- a/datastore/text/clixon_xmldb_text.c +++ b/datastore/text/clixon_xmldb_text.c @@ -458,7 +458,8 @@ text_apipath_modify(char *api_path, int i; int j; char *name; - char *restval; + char *restval_enc; + char *restval = NULL; yang_stmt *y = NULL; yang_stmt *ykey; cxobj *x = NULL; @@ -490,9 +491,16 @@ text_apipath_modify(char *api_path, i = 1; while (i name:x restval=1,2 */ - if ((restval = index(name, '=')) != NULL){ - *restval = '\0'; - restval++; + /* restval is RFC 3896 encoded */ + if (restval){ + free(restval); + restval = NULL; + } + if ((restval_enc = index(name, '=')) != NULL){ + *restval_enc = '\0'; + restval_enc++; + if (percent_decode(restval_enc, &restval) < 0) + goto done; } if (y == NULL) /* top-node */ y = yang_find_topnode(yspec, name); @@ -646,6 +654,8 @@ text_apipath_modify(char *api_path, ok: retval = 0; done: + if (restval) + free(restval); if (vec) free(vec); if (valvec) diff --git a/lib/src/clixon_proto_client.c b/lib/src/clixon_proto_client.c index 03558c57..a942306f 100644 --- a/lib/src/clixon_proto_client.c +++ b/lib/src/clixon_proto_client.c @@ -260,7 +260,7 @@ clicon_rpc_get_config(clicon_handle h, if (xpath && strlen(xpath)) cprintf(cb, "", xpath); cprintf(cb, ""); - if ((msg = clicon_msg_encode(cbuf_get(cb))) == NULL) + if ((msg = clicon_msg_encode("%s", cbuf_get(cb))) == NULL) goto done; if (clicon_rpc_msg(h, msg, &xret, NULL) < 0) goto done; @@ -325,7 +325,7 @@ clicon_rpc_edit_config(clicon_handle h, if (xmlstr) cprintf(cb, "%s", xmlstr); cprintf(cb, ""); - if ((msg = clicon_msg_encode(cbuf_get(cb))) == NULL) + if ((msg = clicon_msg_encode("%s", cbuf_get(cb))) == NULL) goto done; if (clicon_rpc_msg(h, msg, &xret, NULL) < 0) goto done;