Restconf returns error when RPC generates "ok" reply [https://github.com/clicon/clixon/issues/69]

This commit is contained in:
Olof hagsand 2019-01-18 20:55:30 +01:00
parent 66f80e9304
commit 906b93cae0
3 changed files with 17 additions and 3 deletions

View file

@ -134,6 +134,7 @@
* <!DOCTYPE (ie DTD) is not supported. * <!DOCTYPE (ie DTD) is not supported.
### Corrected Bugs ### Corrected Bugs
* Restconf returns error when RPC generates "ok" reply [https://github.com/clicon/clixon/issues/69]
* xsd regular expression support for character classes [https://github.com/clicon/clixon/issues/68] * xsd regular expression support for character classes [https://github.com/clicon/clixon/issues/68]
* added support for \c, \d, \w, \W, \s, \S. * added support for \c, \d, \w, \W, \s, \S.
* Removing newlines from XML data [https://github.com/clicon/clixon/issues/65] * Removing newlines from XML data [https://github.com/clicon/clixon/issues/65]

View file

@ -614,12 +614,18 @@ netconf_application_rpc(clicon_handle h,
else /* Send to backend */ else /* Send to backend */
if (clicon_rpc_netconf_xml(h, xml_parent(xn), xret, NULL) < 0) if (clicon_rpc_netconf_xml(h, xml_parent(xn), xret, NULL) < 0)
goto done; goto done;
/* Sanity check of outgoing XML */ /* Sanity check of outgoing XML
* For now, skip outgoing checks.
* (1) Does not handle <ok/> properly
* (2) Uncertain how validation errors should be logged/handled
*/
if (0)
if ((youtput = yang_find((yang_node*)yrpc, Y_OUTPUT, NULL)) != NULL){ if ((youtput = yang_find((yang_node*)yrpc, Y_OUTPUT, NULL)) != NULL){
xoutput=xpath_first(*xret, "/"); xoutput=xpath_first(*xret, "/");
xml_spec_set(xoutput, youtput); /* needed for xml_spec_populate */ xml_spec_set(xoutput, youtput); /* needed for xml_spec_populate */
if (xml_apply(xoutput, CX_ELMNT, xml_spec_populate, yspec) < 0) if (xml_apply(xoutput, CX_ELMNT, xml_spec_populate, yspec) < 0)
goto done; goto done;
if ((ret = xml_yang_validate_all_top(xoutput, cbret)) < 0) if ((ret = xml_yang_validate_all_top(xoutput, cbret)) < 0)
goto done; goto done;
if (ret == 0){ if (ret == 0){

View file

@ -1390,7 +1390,7 @@ api_operations_post_output(clicon_handle h,
} }
#endif #endif
/* Validate output (in case handlers are wrong) */ /* Validate output (in case handlers are wrong) */
if (youtput==NULL){ if (youtput==NULL){
/* Special case, no yang output /* Special case, no yang output
* RFC 7950 7.14.4 * RFC 7950 7.14.4
* If the RPC operation invocation succeeded and no output parameters * If the RPC operation invocation succeeded and no output parameters
@ -1428,10 +1428,17 @@ api_operations_post_output(clicon_handle h,
} }
else{ else{
xml_spec_set(xoutput, youtput); /* needed for xml_spec_populate */ xml_spec_set(xoutput, youtput); /* needed for xml_spec_populate */
if (0){
/* Sanity check of outgoing XML
* For now, skip outgoing checks.
* (1) Does not handle <ok/> properly
* (2) Uncertain how validation errors should be logged/handled
*/
if (xml_apply(xoutput, CX_ELMNT, xml_spec_populate, yspec) < 0) if (xml_apply(xoutput, CX_ELMNT, xml_spec_populate, yspec) < 0)
goto done; goto done;
if ((ret = xml_yang_validate_all(xoutput, cbret)) < 0) if ((ret = xml_yang_validate_all(xoutput, cbret)) < 0)
goto done; goto done;
if (ret == 1 && if (ret == 1 &&
(ret = xml_yang_validate_add(xoutput, cbret)) < 0) (ret = xml_yang_validate_add(xoutput, cbret)) < 0)
goto done; goto done;
@ -1446,7 +1453,7 @@ api_operations_post_output(clicon_handle h,
goto done; goto done;
goto fail; goto fail;
} }
}
/* Clear namespace of parameters */ /* Clear namespace of parameters */
x = NULL; x = NULL;
while ((x = xml_child_each(xoutput, x, CX_ELMNT)) != NULL) { while ((x = xml_child_each(xoutput, x, CX_ELMNT)) != NULL) {