From f46d6753706a56eecac638cdb9c9a4dee1e1bfee Mon Sep 17 00:00:00 2001 From: Olof Hagsand Date: Tue, 20 Dec 2022 09:35:07 +0100 Subject: [PATCH] Netconf: remove operations attribute from edit-config operations Added `ISO/IEC 10646` encodings to XML parser: `&#[0-9]+;` and `&#[0-9a-fA-F]+;` --- CHANGELOG.md | 1 + lib/src/clixon_datastore_write.c | 15 ++++++++++++--- lib/src/clixon_xml_parse.l | 2 ++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0bac0ef..9d9e4cf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,7 @@ Developers may need to change their code ### Minor features +* Added `ISO/IEC 10646` encodings to XML parser: `&#[0-9]+;` and `&#[0-9a-fA-F]+;` * Added `CLIXON_CLIENT_SSH` to client API to communicate remotely via SSH netconf sub-system ### Corrected Bugs diff --git a/lib/src/clixon_datastore_write.c b/lib/src/clixon_datastore_write.c index cc3056f2..e97d4ac5 100644 --- a/lib/src/clixon_datastore_write.c +++ b/lib/src/clixon_datastore_write.c @@ -92,7 +92,7 @@ * @param[in] name Attribute name * @param[in] ns (Expected)Namespace of attribute * @param[out] cbret Error message (if retval=0) - * @param[out] valp Pointer to value (if retval=1) + * @param[out] valp Malloced value (if retval=1) * @retval -1 Error * @retval 0 Failed (cbret set) * @retval 1 OK @@ -120,8 +120,13 @@ attr_ns_value(cxobj *x, } /* the attribute exists, but not w expected namespace */ if (ns == NULL || - strcmp(ans, ns) == 0) - val = xml_value(xa); + strcmp(ans, ns) == 0){ + if ((val = strdup(xml_value(xa))) == NULL){ + clicon_err(OE_UNIX, errno, "malloc"); + goto done; + } + xml_purge(xa); + } } *valp = val; retval = 1; @@ -963,6 +968,8 @@ text_modify(clicon_handle h, } /* else Y_CONTAINER */ retval = 1; done: + if (opstr) + free(opstr); if (nscx1) xml_nsctx_free(nscx1); /* Remove dangling added objects */ @@ -1135,6 +1142,8 @@ text_modify_top(clicon_handle h, // ok: retval = 1; done: + if (opstr) + free(opstr); return retval; fail: /* cbret set */ retval = 0; diff --git a/lib/src/clixon_xml_parse.l b/lib/src/clixon_xml_parse.l index 620c4984..786c7427 100644 --- a/lib/src/clixon_xml_parse.l +++ b/lib/src/clixon_xml_parse.l @@ -146,6 +146,8 @@ ncname {namestart}{namechar}* "gt;" { BEGIN(_XY->xy_lex_state); clixon_xml_parselval.string = ">"; return CHARDATA;} "apos;" { BEGIN(_XY->xy_lex_state); clixon_xml_parselval.string = "'"; return CHARDATA;} "quot;" { BEGIN(_XY->xy_lex_state); clixon_xml_parselval.string = "\""; return CHARDATA;} +"#"[0-9]+";" { BEGIN(_XY->xy_lex_state); clixon_xml_parselval.string = "\""; return CHARDATA; /* ISO/IEC 10646 */ } +"#x"[0-9a-fA-F]+";" { BEGIN(_XY->xy_lex_state); clixon_xml_parselval.string = "\""; return CHARDATA;} \n { clixon_xml_parselval.string = yytext;_XY->xy_linenum++; return (CHARDATA);} "]]>" { BEGIN(_XY->xy_lex_state); clixon_xml_parselval.string = yytext; return CHARDATA;}