- Pagination: enabled LIST_PAGINATION and remobved constant

- Changed logic on how to find clixon_restconf in pseudo plugin
- Removed ==== in constants to avoid conflict with git merge
- Remove assert
- Added fuzzing for netconf
This commit is contained in:
Olof hagsand 2021-09-23 13:22:40 +02:00
parent 47141089c2
commit b70e22096e
28 changed files with 114 additions and 155 deletions

View file

@ -57,7 +57,6 @@
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <assert.h>
#include <netinet/in.h>
/* cligen */
@ -394,7 +393,10 @@ from_client_edit_config(clicon_handle h,
goto ok;
}
}
assert(cbuf_len(cbret) == 0);
if (cbuf_len(cbret) != 0){
clicon_err(OE_NETCONF, EINVAL, "Internal error: cbret is not empty");
goto done;
}
cprintf(cbret, "<rpc-reply xmlns=\"%s\"><ok", NETCONF_BASE_NAMESPACE);
if (clicon_data_get(h, "objectexisted", &val) == 0)
cprintf(cbret, " objectexisted=\"%s\"", val);
@ -1367,7 +1369,10 @@ from_client(int s,
int eof = 0;
clicon_debug(1, "%s", __FUNCTION__);
// assert(s == ce->ce_s);
if (s != ce->ce_s){
clicon_err(OE_NETCONF, EINVAL, "Internal error: s != ce->ce_s");
goto done;
}
if (clicon_msg_rcv(ce->ce_s, &msg, &eof) < 0)
goto done;
if (eof)

View file

@ -389,8 +389,6 @@ get_nacm_and_reply(clicon_handle h,
return retval;
}
#ifdef LIST_PAGINATION
/*! Help function for parsing restconf query parameter and setting netconf attribute
*
* If not "unbounded", parse and set a numeric value
@ -652,7 +650,6 @@ get_list_pagination(clicon_handle h,
xml_free(xret);
return retval;
}
#endif /* LIST_PAGINATION */
/*! Common get/get-config code for retrieving configuration and state information.
*
@ -692,11 +689,9 @@ get_common(clicon_handle h,
cbuf *cbmsg = NULL; /* For error msg */
char *xpath0;
cbuf *cbreason = NULL;
#ifdef LIST_PAGINATION
int list_pagination = 0;
char *valstr;
cxobj *x;
#endif /* LIST_PAGINATION */
clicon_debug(1, "%s", __FUNCTION__);
username = clicon_username_get(h);
@ -736,7 +731,6 @@ get_common(clicon_handle h,
goto ok;
}
}
#ifdef LIST_PAGINATION
/* Check if list pagination */
if ((x = xml_find_type(xe, NULL, "list-pagination", CX_ELMNT)) != NULL &&
(valstr = xml_body(x)) != NULL &&
@ -752,7 +746,6 @@ get_common(clicon_handle h,
goto done;
goto ok;
}
#endif /* LIST_PAGINATION */
/* Read configuration */
switch (content){
case CONTENT_CONFIG: /* config data only */

View file

@ -246,9 +246,11 @@ restconf_pseudo_process_control(clicon_handle h)
int i;
int nr;
cbuf *cb = NULL;
char *dir = NULL;
char *dir0 = NULL;
char *dir1 = NULL;
char *pgm;
struct stat fstat;
int found = 0;
nr = 10;
if ((argv = calloc(nr, sizeof(char *))) == NULL){
@ -265,19 +267,32 @@ restconf_pseudo_process_control(clicon_handle h)
* If not, use the Makefile
* Use PATH?
*/
if ((dir = clicon_option_str(h, "CLICON_RESTCONF_INSTALLDIR")) == NULL){
if ((dir = CLIXON_CONFIG_SBINDIR) == NULL){
clicon_err(OE_RESTCONF, EINVAL, "Both option CLICON_RESTCONF_INSTALLDIR and makefile constant CLIXON_CONFIG_SBINDIR are NULL which make sit not possible to know where clixon_restconf is installed(shouldnt happen)");
goto done;
if ((dir0 = clicon_option_str(h, "CLICON_RESTCONF_INSTALLDIR")) != NULL){
cprintf(cb, "%s/clixon_restconf", dir0);
pgm = cbuf_get(cb);
if (stat(pgm, &fstat) == 0){ /* Sanity check: program exists */
clicon_debug(1, "Found %s", pgm);
found++;
}
else
clicon_debug(1, "Not found: %s", pgm);
}
cprintf(cb, "%s/clixon_restconf", dir);
pgm = cbuf_get(cb);
/* Sanity check: program exists */
if (stat(pgm, &fstat) < 0) {
clicon_err(OE_FATAL, errno, "%s, you may have set CLICON_BACKEND_RESTCONF_PROCESS but clixon_restconf is not found in %s. Try overriding with CLICON_RESTCONF_INSTALLDIR",
pgm,
CLIXON_CONFIG_SBINDIR);
if (!found &&
(dir1 = CLIXON_CONFIG_SBINDIR) != NULL){
cbuf_reset(cb);
cprintf(cb, "%s/clixon_restconf", dir1);
pgm = cbuf_get(cb);
clicon_debug(1, "Looking for %s", pgm);
if (stat(pgm, &fstat) == 0){ /* Sanity check: program exists */
clicon_debug(1, "Found %s", pgm);
found++;
}
else
clicon_debug(1, "Not found: %s", pgm);
}
if (!found){
clicon_err(OE_RESTCONF, 0, "clixon_restconf not found in neither CLICON_RESTCONF_INSTALLDIR(%s) nor CLIXON_CONFIG_SBINDIR(%s). Try overriding with CLICON_RESTCONF_INSTALLDIR",
dir0, dir1);
goto done;
}
argv[i++] = pgm;