leafref bug

This commit is contained in:
Olof Hagsand 2017-12-09 20:48:29 +01:00
parent 4742fde1e9
commit 0076a8b838
9 changed files with 91 additions and 42 deletions

View file

@ -15,11 +15,15 @@
* Changed XML creation and parse API for more coherency and closer YANG/XML integration. A new yang spec parameter has been added (default NULL) and functions have been removed and renamed. You may need to change the XML calls as follows.
* xml_new(name, parent) --> xml_new(name, xn_parent, yspec)
* xml_new_spec(name, parent, spec) --> xml_new(name, parent, spec)
* clicon_xml_parse(&xt, format, ...) --> xml_parse_va(&xt, yspec, format, ...)
* clicon_xml_parse_file(fd, &xt, endtag) --> xml_parse_file(fd, endtag, yspec, &xt)
* clicon_xml_parse_string(&str, &xt) --> xml_parse_string(str, yspec, &xt)
* xml_parse(str, xt) --> xml_parse_string(str, yspec, &xt)
* clicon_xml_parse(&xt, format, ...) --> xml_parse_va(&xt, yspec, format, ...)
* clicon_xml_parse_str(str, &xt) --> xml_parse_string(str, yspec, &xt)
* xml_parse(str, xt) --> xml_parse_string(str, yspec, &xt)
* Backward compatibility is enabled by (will be removed in 3.5.0:
```
configure --with-xml-compat
```
## 3.3.3 (25 November 2017)

View file

@ -209,8 +209,7 @@ expand_dbvar(void *h,
else
bodystr = xml_body(x);
if (bodystr == NULL){
clicon_err(OE_CFG, 0, "No xml body");
goto done;
continue; /* no body, cornercase */
}
/* detect duplicates */
for (k=0; k<j; k++){

41
configure vendored
View file

@ -632,6 +632,7 @@ CPP
OBJEXT
EXEEXT
ac_ct_CC
with_xml_compat
with_config_compat
with_startup_compat
with_keyvalue
@ -712,6 +713,7 @@ with_keyvalue
with_qdbm
with_startup_compat
with_config_compat
with_xml_compat
'
ac_precious_vars='build_alias
host_alias
@ -1351,7 +1353,8 @@ Optional Packages:
--with-keyvalue enable support for key-value xmldb datastore
--with-qdbm=dir Use QDBM here, if keyvalue
--with-startup-compat Backward compatibility of backend startup commands
--with-config-compat Backward compatibility of ocnfiguration file
--with-config-compat Backward compatibility of configuration file
--with-xml-compat Backward compatibility of XML API
Some influential environment variables:
CC C compiler command
@ -2347,8 +2350,12 @@ test -n "$target_alias" &&
# If yes, compile apps/restconf
# If yes, compile datastore/keyvalue
# If yes, backward compatible backend startup
# If yes, backward compatible .conf configuration
# If yes, backward compatible with 3.3.2 backend startup
# If yes, backward compatible with 3.3.2 .conf configuration
# If yes, backward compatible with 3.3.3 XML api new and parse functions
#
ac_ext=c
@ -3966,7 +3973,6 @@ fi
echo "Using QDBM here: ${with_qdbm}"
CPPFLAGS="-I${with_qdbm}/include ${CPPFLAGS}"
LDFLAGS="-L${with_qdbm}/lib ${LDFLAGS}"
fi
# Problem: depot.h may be in qdbm/depot.h.
for ac_header in depot.h
@ -4047,7 +4053,8 @@ fi
fi
# This is for backward compatibility of backend startup commands
# This is for backward compatibility of backend startup commands in 3.3.3
# Will be removed in 3.4.0
# Check whether --with-startup_compat was given.
if test "${with_startup_compat+set}" = set; then :
@ -4064,7 +4071,8 @@ _ACEOF
fi
# This is for backward compatibility of .conf configuration file
# This is for backward compatibility of .conf configuration file in 3.3.3
# Will be removed in 3.4.0
# Check whether --with-config_compat was given.
if test "${with_config_compat+set}" = set; then :
@ -4081,6 +4089,24 @@ _ACEOF
fi
# This is for backward compatibility of XML create and parse API in 3.4.0
# Will be removed in 3.5.0
# Check whether --with-xml_compat was given.
if test "${with_xml_compat+set}" = set; then :
withval=$with_xml_compat;
else
with_xml_compat=no
fi
if test "x${with_xml_compat}" == xyes; then
cat >>confdefs.h <<_ACEOF
#define XML_COMPAT $with_xml_compat
_ACEOF
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5
$as_echo_n "checking for crypt in -lcrypt... " >&6; }
if ${ac_cv_lib_crypt_crypt+:} false; then :
@ -4328,9 +4354,6 @@ _ACEOF
# See also datastore/keyvalue/Makefile in with_keyvalue clause above
ac_config_files="$ac_config_files Makefile lib/Makefile lib/src/Makefile lib/clixon/Makefile apps/Makefile apps/cli/Makefile apps/backend/Makefile apps/netconf/Makefile apps/restconf/Makefile include/Makefile etc/Makefile etc/clixonrc example/Makefile example/docker/Makefile docker/Makefile docker/cli/Makefile docker/cli/Dockerfile docker/backend/Makefile docker/backend/Dockerfile docker/netconf/Makefile docker/netconf/Dockerfile datastore/Makefile datastore/text/Makefile yang/Makefile doc/Makefile"

View file

@ -80,8 +80,12 @@ AC_SUBST(AR)
AC_SUBST(RANLIB)
AC_SUBST(with_restconf) # If yes, compile apps/restconf
AC_SUBST(with_keyvalue) # If yes, compile datastore/keyvalue
AC_SUBST(with_startup_compat) # If yes, backward compatible backend startup
AC_SUBST(with_config_compat) # If yes, backward compatible .conf configuration
# If yes, backward compatible with 3.3.2 backend startup
AC_SUBST(with_startup_compat)
# If yes, backward compatible with 3.3.2 .conf configuration
AC_SUBST(with_config_compat)
# If yes, backward compatible with 3.3.3 XML api new and parse functions
AC_SUBST(with_xml_compat)
#
AC_PROG_CC()
@ -157,7 +161,8 @@ if test "x${with_keyvalue}" == xyes; then
AC_CONFIG_FILES(datastore/keyvalue/Makefile)
fi
# This is for backward compatibility of backend startup commands
# This is for backward compatibility of backend startup commands in 3.3.3
# Will be removed in 3.4.0
AC_ARG_WITH([startup_compat],
[AS_HELP_STRING([--with-startup-compat],[Backward compatibility of backend startup commands])],
[],
@ -166,15 +171,27 @@ if test "x${with_startup_compat}" == xyes; then
AC_DEFINE_UNQUOTED(BACKEND_STARTUP_COMPAT, $with_startup_compat, [Backward compatible backend startup command-line options])
fi
# This is for backward compatibility of .conf configuration file
# This is for backward compatibility of .conf configuration file in 3.3.3
# Will be removed in 3.4.0
AC_ARG_WITH([config_compat],
[AS_HELP_STRING([--with-config-compat],[Backward compatibility of ocnfiguration file])],
[AS_HELP_STRING([--with-config-compat],[Backward compatibility of configuration file])],
[],
[with_config_compat=no])
if test "x${with_config_compat}" == xyes; then
AC_DEFINE_UNQUOTED(CONFIG_COMPAT, $with_config_compat, [Backward compatible of .conf configuration files])
fi
# Clixon 3.4.0 changes XML creation and parse API
# Set this for backward compat and migration.
# Will be removed in 3.5.0
AC_ARG_WITH([xml_compat],
[AS_HELP_STRING([--with-xml-compat],[Backward compatibility of XML API])],
[],
[with_xml_compat=no])
if test "x${with_xml_compat}" == xyes; then
AC_DEFINE_UNQUOTED(XML_COMPAT, $with_xml_compat, [Backward compatible of XML API])
fi
AC_CHECK_LIB(crypt, crypt)
AC_CHECK_HEADERS(crypt.h)

View file

@ -138,6 +138,9 @@
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Backward compatible of XML API */
#undef XML_COMPAT
/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
`char[]'. */
#undef YYTEXT_POINTER

View file

@ -56,6 +56,8 @@
#undef CLIXON_VERSION_MINOR
#undef CLIXON_VERSION_PATCH
#undef XML_COMPAT
/*
* Use this constant to disable some prototypes that should not be visible outside the lib.
* This is an alternative to use separate internal include files.

View file

@ -38,6 +38,10 @@
#ifndef _CLIXON_XML_H
#define _CLIXON_XML_H
/*
* Constants
*/
/*
* Types
*/
@ -113,12 +117,6 @@ cxobj *xml_child_each(cxobj *xparent, cxobj *xprev, enum cxobj_type type);
cxobj **xml_childvec_get(cxobj *x);
int xml_childvec_set(cxobj *x, int len);
#ifdef OBSOLETE /* Changed in 3.3.3, see CHANGELOG */
/* Changed: */
cxobj *xml_new(char *name, cxobj *xn_parent);
/* Removed: */
cxobj *xml_new_spec(char *name, cxobj *xn_parent, void *spec);
#endif
cxobj *xml_new(char *name, cxobj *xn_parent, yang_stmt *spec);
yang_stmt *xml_spec(cxobj *x);
int xml_spec_set(cxobj *x, yang_stmt *spec);
@ -142,15 +140,6 @@ int xml_free(cxobj *xn);
int xml_print(FILE *f, cxobj *xn);
int clicon_xml2file(FILE *f, cxobj *xn, int level, int prettyprint);
int clicon_xml2cbuf(cbuf *xf, cxobj *xn, int level, int prettyprint);
#ifdef OBSOLETE /* Changed in 3.3.3, see CHANGELOG */
/* Changed: */
int clicon_xml_parse(cxobj **cxtop, char *format, ...);
int clicon_xml_parse_file(int fd, cxobj **xml_top, char *endtag);
int clicon_xml_parse_str(char *str, cxobj **xml_top);
/* Removed: */
int xml_parse(char *str, yang_spec *yspec, cxobj *xt);
int clicon_xml_parse_string(char **str, cxobj **xml_top);
#endif
int xml_parse_file(int fd, char *endtag, yang_spec *yspec, cxobj **xt);
int xml_parse_string(const char *str, yang_spec *yspec, cxobj **xml_top);
int xml_parse_va(cxobj **xt, yang_spec *yspec, const char *format, ...);
@ -180,4 +169,16 @@ int xml_hash_add(cxobj *x);
int xml_hash_rm_only(cxobj *x);
int xml_hash_rm_entry(cxobj *x);
#ifdef XML_COMPAT /* See CHANGELOG */
/* MANUAL CHANGE: xml_new(name, parent) --> xml_new(name, parent, NULL) */
#define xml_new_spec(name, parent) xml_new(name, parent, NULL)
#define clicon_xml_parse(xt, fmt, ...) xml_parse_va(xt, NULL, fmt, __VA_ARGS__)
#define clicon_xml_parse_file(fd, xt, etag) xml_parse_file(fd, etag, NULL, xt)
#define clicon_xml_parse_string(strp, xt) xml_parse_string(*strp, NULL, xt)
#define clicon_xml_parse_str(str, xt) xml_parse_string(str, NULL, xt)
#define xml_parse(str, xt) xml_parse_string(str, NULL, &xt)
#endif
#endif /* _CLIXON_XML_H */

View file

@ -955,11 +955,13 @@ clicon_xml2file(FILE *f,
cxobj *xc;
int hasbody;
int haselement;
char *val;
name = xml_name(x);
namespace = xml_namespace(x);
switch(xml_type(x)){
case CX_BODY:
if ((val = xml_value(x)) != NULL) /* incomplete tree */
fprintf(f, "%s", xml_value(x));
break;
case CX_ATTR:
@ -1191,7 +1193,7 @@ xmltree2cbuf(cbuf *cb,
* @see xml_parse_va
*/
static int
xml_parse(const char *str,
_xml_parse(const char *str,
yang_spec *yspec,
cxobj *xt)
{
@ -1297,7 +1299,7 @@ xml_parse_file(int fd,
if (*xt == NULL)
if ((*xt = xml_new(XML_TOP_SYMBOL, NULL, NULL)) == NULL)
goto done;
if (xml_parse(ptr, yspec, *xt) < 0)
if (_xml_parse(ptr, yspec, *xt) < 0)
goto done;
break;
}
@ -1349,7 +1351,7 @@ xml_parse_string(const char *str,
if (*xtop == NULL)
if ((*xtop = xml_new(XML_TOP_SYMBOL, NULL, NULL)) == NULL)
return -1;
return xml_parse(str, yspec, *xtop);
return _xml_parse(str, yspec, *xtop);
}
/*! Read XML from var-arg list and parse it into xml tree
@ -1397,7 +1399,7 @@ xml_parse_va(cxobj **xtop,
if (*xtop == NULL)
if ((*xtop = xml_new(XML_TOP_SYMBOL, NULL, NULL)) == NULL)
goto done;
if (xml_parse(str, yspec, *xtop) < 0)
if (_xml_parse(str, yspec, *xtop) < 0)
goto done;
retval = 0;
done:

View file

@ -680,10 +680,8 @@ match_base_child(cxobj *x0,
cvi = NULL; i = 0;
while ((cvi = cvec_each(cvk, cvi)) != NULL) {
keyname = cv_string_get(cvi);
if ((b1 = xml_find_body(x1c, keyname)) == NULL){
clicon_err(OE_UNIX, errno, "key %s not found", keyname);
goto done;
}
if ((b1 = xml_find_body(x1c, keyname)) == NULL)
goto ok; /* not found */
b1vec[i++] = b1;
}
/* Iterate over x0 tree to (1) find a child that matches name