Replacing remaining badrequest() with proper restconf error msg.

This commit is contained in:
Olof hagsand 2018-04-22 20:13:54 +02:00
parent 3ed1c98556
commit 1913407e52
14 changed files with 153 additions and 75 deletions

View file

@ -526,22 +526,25 @@ netconf_access_denied_xml(cxobj **xret,
char *message)
{
int retval =-1;
cbuf *cbret = NULL;
if ((cbret = cbuf_new()) == NULL){
clicon_err(OE_XML, errno, "cbuf_new");
goto done;
cxobj *xerr;
if (*xret == NULL){
if ((*xret = xml_new("rpc-reply", NULL, NULL)) == NULL)
goto done;
}
if (netconf_access_denied(cbret, type, message) < 0)
else if (xml_name_set(*xret, "rpc-reply") < 0)
goto done;
if (xml_parse_string(cbuf_get(cbret), NULL, xret) < 0)
if ((xerr = xml_new("rpc-error", *xret, NULL)) == NULL)
goto done;
if (xml_rootchild(*xret, 0, xret) < 0)
if (xml_parse_va(&xerr, NULL, "<error-tag>access-denied</error-tag>"
"<error-type>%s</error-type>"
"<error-severity>error</error-severity>", type) < 0)
goto done;
if (message && xml_parse_va(&xerr, NULL, "<error-message>%s</error-message>",
message) < 0)
goto done;
retval = 0;
done:
if (cbret)
cbuf_free(cbret);
return retval;
}
@ -835,22 +838,25 @@ netconf_operation_failed_xml(cxobj **xret,
char *message)
{
int retval =-1;
cbuf *cbret = NULL;
if ((cbret = cbuf_new()) == NULL){
clicon_err(OE_XML, errno, "cbuf_new");
goto done;
cxobj *xerr;
if (*xret == NULL){
if ((*xret = xml_new("rpc-reply", NULL, NULL)) == NULL)
goto done;
}
if (netconf_operation_failed(cbret, type, message) < 0)
else if (xml_name_set(*xret, "rpc-reply") < 0)
goto done;
if (xml_parse_string(cbuf_get(cbret), NULL, xret) < 0)
if ((xerr = xml_new("rpc-error", *xret, NULL)) == NULL)
goto done;
if (xml_rootchild(*xret, 0, xret) < 0)
if (xml_parse_va(&xerr, NULL, "<error-tag>operation-failed</error-tag>"
"<error-type>%s</error-type>"
"<error-severity>error</error-severity>", type) < 0)
goto done;
if (message && xml_parse_va(&xerr, NULL, "<error-message>%s</error-message>",
message) < 0)
goto done;
retval = 0;
done:
if (cbret)
cbuf_free(cbret);
return retval;
}
@ -892,3 +898,39 @@ netconf_malformed_message(cbuf *cb,
clicon_err(OE_XML, errno, "cprintf");
goto done;
}
/*! Create Netconf malformed-message error XML tree according to RFC 6241 App A
*
* A message could not be handled because it failed to be parsed correctly.
* For example, the message is not well-formed XML or it uses an
* invalid character set.
* @param[out] xret Error XML tree
* @param[in] message Error message
* @note New in :base:1.1
*/
int
netconf_malformed_message_xml(cxobj **xret,
char *message)
{
int retval =-1;
cxobj *xerr;
if (*xret == NULL){
if ((*xret = xml_new("rpc-reply", NULL, NULL)) == NULL)
goto done;
}
else if (xml_name_set(*xret, "rpc-reply") < 0)
goto done;
if ((xerr = xml_new("rpc-error", *xret, NULL)) == NULL)
goto done;
if (xml_parse_va(&xerr, NULL, "<error-tag>malformed-message</error-tag>"
"<error-type>rpc</error-type>"
"<error-severity>error</error-severity>") < 0)
goto done;
if (message && xml_parse_va(&xerr, NULL, "<error-message>%s</error-message>",
message) < 0)
goto done;
retval = 0;
done:
return retval;
}

View file

@ -34,8 +34,9 @@
***** END LICENSE BLOCK *****
* Database specification parser cli syntax
* (Cloned from cligen parser)
* Yang parser. Hopefully useful but not complete
* @see https://tools.ietf.org/html/rfc6020 YANG 1.0
* @see https://tools.ietf.org/html/rfc7950 YANG 1.1
*/
#ifndef _CLIXON_YANG_PARSE_H_
#define _CLIXON_YANG_PARSE_H_

View file

@ -1,8 +1,4 @@
/*
* Yang 1.0 parser according to RFC6020.
* It is hopefully useful but not complete
* RFC7950 defines Yang version 1.1
*
***** BEGIN LICENSE BLOCK *****
Copyright (C) 2009-2018 Olof Hagsand and Benny Holmgren
@ -34,8 +30,9 @@
***** END LICENSE BLOCK *****
* Database specification parser cli syntax
* (Cloned from cligen parser)
* Yang parser. Hopefully useful but not complete
* @see https://tools.ietf.org/html/rfc6020 YANG 1.0
* @see https://tools.ietf.org/html/rfc7950 YANG 1.1
*/
%{

View file

@ -1,7 +1,4 @@
/*
* Yang 1.0 parser according to RFC6020.
* It is hopefully useful but not complete
* RFC7950 defines Yang version 1.1
*
***** BEGIN LICENSE BLOCK *****
@ -34,6 +31,9 @@
***** END LICENSE BLOCK *****
* Yang parser. Hopefully useful but not complete
* @see https://tools.ietf.org/html/rfc6020 YANG 1.0
* @see https://tools.ietf.org/html/rfc7950 YANG 1.1
*/