* The following backward compatible options to configure have been obsoleted. If you havent already migrated this code you must do this now.
* Backend startup modes prior to 3.3.3. As enabled with `configure --with-startup-compat`. Configure option CLICON_USE_STARTUP_CONFIG is also obsoleted. * Configuration files (non-XML) prior to 3.3.3. As enabled with `configure --with-config-compat`. The template clicon.conf.cpp files are also removed. * Clixon XML C-lib prior to 3.4.0. As enabled with `configure --with-xml-compat`
This commit is contained in:
parent
75848a8e30
commit
3758c8dab4
11 changed files with 11 additions and 529 deletions
|
|
@ -4,6 +4,12 @@
|
|||
|
||||
### Major changes:
|
||||
### Minor changes:
|
||||
|
||||
* The following backward compatible options to configure have been obsoleted. If you havent already migrated this code you must do this now.
|
||||
* Backend startup modes prior to 3.3.3. As enabled with `configure --with-startup-compat`. Configure option CLICON_USE_STARTUP_CONFIG is also obsoleted.
|
||||
* Configuration files (non-XML) prior to 3.3.3. As enabled with `configure --with-config-compat`. The template clicon.conf.cpp files are also removed.
|
||||
* Clixon XML C-lib prior to 3.4.0. As enabled with `configure --with-xml-compat`
|
||||
|
||||
### Corrected Bugs
|
||||
### Known issues
|
||||
|
||||
|
|
|
|||
13
Makefile.in
13
Makefile.in
|
|
@ -56,7 +56,7 @@ SUBDIRS = lib apps include etc datastore yang
|
|||
|
||||
.PHONY: doc all clean depend $(SUBDIRS) install loc TAGS .config.status docker
|
||||
|
||||
all: $(SUBDIRS) clixon.conf.cpp clixon.mk
|
||||
all: $(SUBDIRS) clixon.mk
|
||||
|
||||
$(SUBDIRS):
|
||||
(cd $@ && $(MAKE) $(MFLAGS) all)
|
||||
|
|
@ -65,16 +65,11 @@ depend:
|
|||
for i in $(SUBDIRS) doc example docker; \
|
||||
do (cd $$i && $(MAKE) $(MFLAGS) depend); done
|
||||
|
||||
# template clixon.conf file
|
||||
clixon.conf.cpp: clixon.conf.cpp.cpp
|
||||
$(CPP) -P -x assembler-with-cpp -Dprefix=$(prefix) -Dlocalstatedir=$(localstatedir) -Dsysconfdir=$(sysconfdir) -Ddatadir=$(datadir) -Dlibdir=$(libdir) $< > $@
|
||||
|
||||
clixon.mk: clixon.mk.cpp
|
||||
$(CPP) -P -traditional-cpp -x assembler-with-cpp -Dprefix=$(prefix) -Dlocalstatedir=$(localstatedir) -Dsysconfdir=$(sysconfdir) -Ddatadir=$(datadir) -Dlibdir=$(libdir) $< > $@
|
||||
|
||||
install: clixon.conf.cpp clixon.mk
|
||||
install: clixon.mk
|
||||
install -d -m 755 $(DESTDIR)$(datadir)/clixon
|
||||
install -m 755 clixon.conf.cpp $(DESTDIR)$(datadir)/clixon
|
||||
install -m 755 clixon.mk $(DESTDIR)$(datadir)/clixon
|
||||
for i in $(SUBDIRS) doc; \
|
||||
do (cd $$i; $(MAKE) $(MFLAGS) $@)||exit 1; done; \
|
||||
|
|
@ -88,7 +83,6 @@ install-include:
|
|||
uninstall:
|
||||
for i in $(SUBDIRS) doc example docker; \
|
||||
do (cd $$i && $(MAKE) $(MFLAGS) $@)||exit 1; done;
|
||||
rm -f $(DESTDIR)$(datadir)/clixon/clixon.conf.cpp
|
||||
rm -f $(DESTDIR)$(datadir)/clixon/clixon.mk
|
||||
|
||||
doc:
|
||||
|
|
@ -106,8 +100,7 @@ clean:
|
|||
|
||||
distclean:
|
||||
rm -f Makefile TAGS config.status config.log *~ .depend
|
||||
rm -rf autom4te.cache
|
||||
rm -rf clixon.conf.cpp clixon.mk build-root/rpmbuild
|
||||
rm -rf autom4te.cache clixon.mk build-root/rpmbuild
|
||||
rm -f build-root/*.tar.xz build-root/*.rpm extras/rpm/Makefile
|
||||
for i in $(SUBDIRS) doc example docker; \
|
||||
do (cd $$i && $(MAKE) $(MFLAGS) $@); done
|
||||
|
|
|
|||
|
|
@ -73,11 +73,7 @@
|
|||
#include "backend_handle.h"
|
||||
|
||||
/* Command line options to be passed to getopt(3) */
|
||||
#ifdef BACKEND_STARTUP_COMPAT
|
||||
#define BACKEND_OPTS "hD:f:d:b:Fzu:P:1s:c:IRCrg:y:x:" /* substitute s: for IRCc:r */
|
||||
#else
|
||||
#define BACKEND_OPTS "hD:f:d:b:Fzu:P:1s:c:g:y:x:" /* substitute s: for IRCc:r */
|
||||
#endif
|
||||
|
||||
/*! Terminate. Cannot use h after this */
|
||||
static int
|
||||
|
|
@ -142,12 +138,6 @@ usage(char *argv0, clicon_handle h)
|
|||
" -P <file>\tPid filename (default: %s)\n"
|
||||
" -s <mode>\tSpecify backend startup mode: none|startup|running|init (replaces -IRCr\n"
|
||||
" -c <file>\tLoad extra xml configuration, but don't commit.\n"
|
||||
#ifdef BACKEND_STARTUP_COMPAT
|
||||
" -I\t\tInitialize running state database\n"
|
||||
" -R\t\tCall plugin_reset() in plugins to reset system state in running db (use with -I)\n"
|
||||
" -C\t\tCall plugin_reset() in plugins to reset system state in candidate db (use with -I)\n"
|
||||
" -r\t\tReload running database\n"
|
||||
#endif /* BACKEND_STARTUP_COMPAT */
|
||||
" -g <group>\tClient membership required to this group (default: %s)\n"
|
||||
" -y <file>\tOverride yang spec file (dont include .yang suffix)\n"
|
||||
" -x <plugin>\tXMLDB plugin\n",
|
||||
|
|
@ -270,161 +260,6 @@ plugin_start_useroptions(clicon_handle h,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef BACKEND_STARTUP_COMPAT
|
||||
/*! Initialize running-config from file application configuration
|
||||
*
|
||||
* @param[in] h clicon handle
|
||||
* @param[in] extraxml_file clicon application configuration file
|
||||
* @param[in] running_db Name of running db
|
||||
* @retval 0 OK
|
||||
* @retval -1 Error. clicon_err set
|
||||
*/
|
||||
static int
|
||||
rundb_main(clicon_handle h,
|
||||
char *extraxml_file)
|
||||
{
|
||||
int retval = -1;
|
||||
int fd = -1;
|
||||
cxobj *xt = NULL;
|
||||
cxobj *xn;
|
||||
|
||||
if (xmldb_create(h, "tmp") < 0)
|
||||
goto done;
|
||||
if (xmldb_copy(h, "running", "tmp") < 0)
|
||||
goto done;
|
||||
if ((fd = open(extraxml_file, O_RDONLY)) < 0){
|
||||
clicon_err(OE_UNIX, errno, "open(%s)", extraxml_file);
|
||||
goto done;
|
||||
}
|
||||
if (xml_parse_file(fd, &xt, "</clicon>") < 0)
|
||||
goto done;
|
||||
if ((xn = xml_child_i(xt, 0)) != NULL)
|
||||
if (xmldb_put(h, "tmp", OP_MERGE, xn) < 0)
|
||||
goto done;
|
||||
if (candidate_commit(h, "tmp") < 0)
|
||||
goto done;
|
||||
if (xmldb_delete(h, "tmp") < 0)
|
||||
goto done;
|
||||
retval = 0;
|
||||
done:
|
||||
if (xt)
|
||||
xml_free(xt);
|
||||
if (fd != -1)
|
||||
close(fd);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int
|
||||
candb_reset(clicon_handle h)
|
||||
{
|
||||
int retval = -1;
|
||||
|
||||
if (xmldb_copy(h, "running", "tmp") < 0)
|
||||
goto done;
|
||||
/* Request plugins to reset system state, eg initiate running from system
|
||||
* -R
|
||||
*/
|
||||
if (plugin_reset_state(h, "tmp") < 0)
|
||||
goto done;
|
||||
if (candidate_commit(h, "tmp") < 0)
|
||||
goto done;
|
||||
retval = 0;
|
||||
done:
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*! Legacy (old-style) startup mode where flags -IRCcr was used
|
||||
*/
|
||||
static int
|
||||
fragmented_startup_mode(clicon_handle h,
|
||||
char *argv0,
|
||||
int argc,
|
||||
char *argv[],
|
||||
int reload_running,
|
||||
int init_rundb,
|
||||
int reset_state_candidate,
|
||||
int reset_state_running,
|
||||
char *extraxml_file)
|
||||
{
|
||||
int retval = -1;
|
||||
|
||||
/* First check for startup config */
|
||||
if (clicon_option_int(h, "CLICON_USE_STARTUP_CONFIG") > 0){
|
||||
if (xmldb_exists(h, "startup") == 1){
|
||||
/* copy startup config -> running */
|
||||
if (xmldb_copy(h, "startup", "running") < 0)
|
||||
goto done;
|
||||
}
|
||||
else
|
||||
if (db_reset(h, "running") < 0)
|
||||
goto done;
|
||||
if (xmldb_create(h, "candidate") < 0)
|
||||
goto done;
|
||||
if (xmldb_copy(h, "running", "candidate") < 0)
|
||||
goto done;
|
||||
}
|
||||
/* If running exists and reload_running set, make a copy to candidate */
|
||||
if (reload_running){
|
||||
if (xmldb_exists(h, "running") != 1){
|
||||
clicon_log(LOG_NOTICE, "%s: -r (reload running) option given but no running_db found, proceeding without", __PROGRAM__);
|
||||
reload_running = 0; /* void it, so we dont commit candidate below */
|
||||
}
|
||||
else
|
||||
if (xmldb_copy(h, "running", "candidate") < 0)
|
||||
goto done;
|
||||
}
|
||||
/* Init running db
|
||||
* -I or if it isnt there
|
||||
*/
|
||||
if (init_rundb || xmldb_exists(h, "running") != 1){
|
||||
if (db_reset(h, "running") < 0)
|
||||
goto done;
|
||||
}
|
||||
/* If candidate does not exist, create it from running */
|
||||
if (xmldb_exists(h, "candidate") != 1){
|
||||
if (xmldb_create(h, "candidate") < 0)
|
||||
goto done;
|
||||
if (xmldb_copy(h, "running", "candidate") < 0)
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Load plugins and call plugin_init() */
|
||||
if (plugin_initiate(h) != 0)
|
||||
goto done;
|
||||
|
||||
if (reset_state_candidate){
|
||||
if (candb_reset(h) < 0)
|
||||
goto done;
|
||||
}
|
||||
else
|
||||
if (reset_state_running){
|
||||
if (plugin_reset_state(h, "running") < 0)
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (plugin_start_useroptions(h, argv0, argc, argv) <0)
|
||||
goto done;
|
||||
|
||||
if (reload_running){
|
||||
/* This could be a failed validation, and we should not fail for that */
|
||||
(void)candidate_commit(h, "candidate");
|
||||
}
|
||||
|
||||
/* Have we specified a config file to load? eg
|
||||
* -c [<file>]
|
||||
*/
|
||||
if (extraxml_file)
|
||||
if (rundb_main(h, extraxml_file) < 0)
|
||||
goto done;
|
||||
/* Initiate the shared candidate. */
|
||||
if (xmldb_copy(h, "running", "candidate") < 0)
|
||||
goto done;
|
||||
retval = 0;
|
||||
done:
|
||||
return retval;
|
||||
}
|
||||
#endif /* BACKEND_STARTUP_COMPAT */
|
||||
|
||||
/*! Merge xml in filename into database
|
||||
*/
|
||||
static int
|
||||
|
|
@ -648,12 +483,6 @@ main(int argc, char **argv)
|
|||
int foreground;
|
||||
int once;
|
||||
enum startup_mode_t startup_mode;
|
||||
#ifdef BACKEND_STARTUP_COMPAT
|
||||
int init_rundb = 0;
|
||||
int reset_state_running = 0;
|
||||
int reset_state_candidate = 0;
|
||||
int reload_running = 0;
|
||||
#endif
|
||||
char *extraxml_file;
|
||||
char *config_group;
|
||||
char *argv0 = argv[0];
|
||||
|
|
@ -769,20 +598,6 @@ main(int argc, char **argv)
|
|||
case 'c': /* Load application config */
|
||||
extraxml_file = optarg;
|
||||
break;
|
||||
#ifdef BACKEND_STARTUP_COMPAT
|
||||
case 'I': /* Initiate running db */
|
||||
init_rundb++;
|
||||
break;
|
||||
case 'R': /* Reset state directly into running */
|
||||
reset_state_running++;
|
||||
break;
|
||||
case 'C': /* Reset state into candidate and then commit it */
|
||||
reset_state_candidate++;
|
||||
break;
|
||||
case 'r': /* Reload running */
|
||||
reload_running++;
|
||||
break;
|
||||
#endif /* BACKEND_STARTUP_COMPAT */
|
||||
case 'g': /* config socket group */
|
||||
clicon_option_str_set(h, "CLICON_SOCK_GROUP", optarg);
|
||||
break;
|
||||
|
|
@ -890,19 +705,9 @@ main(int argc, char **argv)
|
|||
goto done;
|
||||
/* If startup mode is not defined, eg via OPTION or -s, assume old method */
|
||||
startup_mode = clicon_startup_mode(h);
|
||||
if (startup_mode == -1){ /* Old style, fragmented mode, phase out */
|
||||
#ifdef BACKEND_STARTUP_COMPAT
|
||||
if (fragmented_startup_mode(h,
|
||||
argv0, argc, argv,
|
||||
reload_running, init_rundb,
|
||||
reset_state_candidate, reset_state_running,
|
||||
extraxml_file
|
||||
) < 0)
|
||||
goto done;
|
||||
#else
|
||||
if (startup_mode == -1){
|
||||
clicon_log(LOG_ERR, "Startup mode undefined. Specify option CLICON_STARTUP_MODE or specify -s option to clicon_backend.\n");
|
||||
goto done;
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
/* Init running db if it is not there
|
||||
|
|
|
|||
|
|
@ -42,19 +42,5 @@ clixon_DBSPECDIR=prefix/share/$(APPNAME)
|
|||
clixon_SYSCONFDIR=sysconfdir
|
||||
clixon_LOCALSTATEDIR=localstatedir/$(APPNAME)
|
||||
clixon_LIBDIR=libdir/$(APPNAME)
|
||||
clixon_DATADIR=datadir/clixon
|
||||
clixon_DATADIR=datadir/clixon # for system yang files
|
||||
|
||||
# Rules for the clixon application configuration file.
|
||||
# The clixon applications should be started with this fileas its -f argument.
|
||||
# Typically installed in sysconfdir
|
||||
# Example: APPNAME=myapp --> clixon_cli -f /usr/local/etc/myapp.conf
|
||||
# The two variants are if there is a .conf.local file or not
|
||||
.PHONY: $(APPNAME).conf
|
||||
ifneq (,$(wildcard ${APPNAME}.conf.local))
|
||||
${APPNAME}.conf: ${clixon_DATADIR}/clixon.conf.cpp ${APPNAME}.conf.local
|
||||
$(CPP) -P -x assembler-with-cpp -DAPPNAME=$(APPNAME) $< > $@
|
||||
cat ${APPNAME}.conf.local >> $@
|
||||
else
|
||||
${APPNAME}.conf: ${clixon_DATADIR}/clixon.conf.cpp
|
||||
$(CPP) -P -x assembler-with-cpp -DAPPNAME=$(APPNAME) $< > $@
|
||||
endif
|
||||
|
|
|
|||
71
configure
vendored
71
configure
vendored
|
|
@ -632,9 +632,6 @@ CPP
|
|||
OBJEXT
|
||||
EXEEXT
|
||||
ac_ct_CC
|
||||
with_xml_compat
|
||||
with_config_compat
|
||||
with_startup_compat
|
||||
with_keyvalue
|
||||
with_restconf
|
||||
RANLIB
|
||||
|
|
@ -712,9 +709,6 @@ with_cligen
|
|||
with_restconf
|
||||
with_keyvalue
|
||||
with_qdbm
|
||||
with_startup_compat
|
||||
with_config_compat
|
||||
with_xml_compat
|
||||
'
|
||||
ac_precious_vars='build_alias
|
||||
host_alias
|
||||
|
|
@ -1353,9 +1347,6 @@ Optional Packages:
|
|||
--without-restconf disable support for restconf
|
||||
--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 configuration file
|
||||
--with-xml-compat Backward compatibility of XML API
|
||||
|
||||
Some influential environment variables:
|
||||
CC C compiler command
|
||||
|
|
@ -2357,13 +2348,6 @@ test -n "$target_alias" &&
|
|||
|
||||
# If yes, compile apps/restconf
|
||||
# If yes, compile datastore/keyvalue
|
||||
# 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
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
|
|
@ -4061,61 +4045,6 @@ fi
|
|||
|
||||
fi
|
||||
|
||||
# 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 :
|
||||
withval=$with_startup_compat;
|
||||
else
|
||||
with_startup_compat=no
|
||||
fi
|
||||
|
||||
if test "x${with_startup_compat}" == xyes; then
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define BACKEND_STARTUP_COMPAT $with_startup_compat
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
# 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 :
|
||||
withval=$with_config_compat;
|
||||
else
|
||||
with_config_compat=no
|
||||
fi
|
||||
|
||||
if test "x${with_config_compat}" == xyes; then
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define CONFIG_COMPAT $with_config_compat
|
||||
_ACEOF
|
||||
|
||||
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
|
||||
|
||||
# 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 :
|
||||
|
|
|
|||
38
configure.ac
38
configure.ac
|
|
@ -86,13 +86,6 @@ AC_SUBST(AR)
|
|||
AC_SUBST(RANLIB)
|
||||
AC_SUBST(with_restconf) # If yes, compile apps/restconf
|
||||
AC_SUBST(with_keyvalue) # If yes, compile datastore/keyvalue
|
||||
# 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()
|
||||
AC_PROG_CPP
|
||||
|
|
@ -168,37 +161,6 @@ if test "x${with_keyvalue}" == xyes; then
|
|||
AC_CONFIG_FILES(datastore/keyvalue/Makefile)
|
||||
fi
|
||||
|
||||
# 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])],
|
||||
[],
|
||||
[with_startup_compat=no])
|
||||
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 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 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)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
/* include/clixon_config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Backward compatible backend startup command-line options */
|
||||
#undef BACKEND_STARTUP_COMPAT
|
||||
|
||||
/* Clixon data dir for system yang files etc */
|
||||
#undef CLIXON_DATADIR
|
||||
|
||||
|
|
@ -18,9 +15,6 @@
|
|||
/* Clixon version string */
|
||||
#undef CLIXON_VERSION_STRING
|
||||
|
||||
/* Backward compatible of .conf configuration files */
|
||||
#undef CONFIG_COMPAT
|
||||
|
||||
/* Define to 1 if you have the `alphasort' function. */
|
||||
#undef HAVE_ALPHASORT
|
||||
|
||||
|
|
@ -138,9 +132,6 @@
|
|||
/* 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
|
||||
|
|
|
|||
|
|
@ -56,8 +56,6 @@
|
|||
#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.
|
||||
|
|
|
|||
|
|
@ -161,16 +161,4 @@ int xml_body_uint32(cxobj *xb, uint32_t *val);
|
|||
int xml_operation(char *opstr, enum operation_type *op);
|
||||
char *xml_operation2str(enum operation_type op);
|
||||
|
||||
#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 */
|
||||
|
|
|
|||
|
|
@ -183,168 +183,6 @@ clicon_option_readfile_xml(clicon_hash_t *copt,
|
|||
return retval;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
|
||||
/*! Read filename and set values to global options registry
|
||||
* For legacy configuration file, ie not xml
|
||||
* @see clicon_option_readfile_xml
|
||||
*/
|
||||
static int
|
||||
clicon_option_readfile(clicon_hash_t *copt,
|
||||
const char *filename)
|
||||
{
|
||||
struct stat st;
|
||||
char opt[1024];
|
||||
char val[1024];
|
||||
char line[1024];
|
||||
char *cp;
|
||||
FILE *f = NULL;
|
||||
int retval = -1;
|
||||
|
||||
if (filename == NULL || !strlen(filename)){
|
||||
clicon_err(OE_UNIX, 0, "Not specified");
|
||||
goto done;
|
||||
}
|
||||
if (stat(filename, &st) < 0){
|
||||
clicon_err(OE_UNIX, errno, "%s", filename);
|
||||
goto done;
|
||||
}
|
||||
if (!S_ISREG(st.st_mode)){
|
||||
clicon_err(OE_UNIX, 0, "%s is not a regular file", filename);
|
||||
goto done;
|
||||
}
|
||||
if ((f = fopen(filename, "r")) == NULL) {
|
||||
clicon_err(OE_UNIX, errno, "configure file: %s", filename);
|
||||
return -1;
|
||||
}
|
||||
clicon_debug(2, "Reading config file %s", __FUNCTION__, filename);
|
||||
while (fgets(line, sizeof(line), f)) {
|
||||
if ((cp = strchr(line, '\n')) != NULL) /* strip last \n */
|
||||
*cp = '\0';
|
||||
/* Trim out comments, strip whitespace, and remove CR */
|
||||
if ((cp = strchr(line, '#')) != NULL)
|
||||
memcpy(cp, "\n", 2);
|
||||
if (sscanf(line, "%s %s", opt, val) < 2)
|
||||
continue;
|
||||
if ((hash_add(copt,
|
||||
opt,
|
||||
val,
|
||||
strlen(val)+1)) == NULL)
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
done:
|
||||
if (f)
|
||||
fclose(f);
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*! Set default values of some options that may not appear in config-file
|
||||
*/
|
||||
static int
|
||||
clicon_option_default(clicon_hash_t *copt)
|
||||
{
|
||||
char *val;
|
||||
int retval = 0;
|
||||
|
||||
if (!hash_lookup(copt, "CLICON_YANG_MODULE_MAIN")){
|
||||
if (hash_add(copt, "CLICON_YANG_MODULE_MAIN", "clicon", strlen("clicon")+1) < 0)
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_SOCK_GROUP")){
|
||||
val = CLICON_SOCK_GROUP;
|
||||
if (hash_add(copt, "CLICON_SOCK_GROUP", val, strlen(val)+1) < 0)
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_CLI_MODE")){
|
||||
if (hash_add(copt, "CLICON_CLI_MODE", "base", strlen("base")+1) < 0)
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_MASTER_PLUGIN")){
|
||||
val = CLICON_MASTER_PLUGIN;
|
||||
if (hash_add(copt, "CLICON_MASTER_PLUGIN", val, strlen(val)+1) < 0)
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_CLI_GENMODEL")){
|
||||
if (hash_add(copt, "CLICON_CLI_GENMODEL", "1", strlen("1")+1) < 0)
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_CLI_GENMODEL_TYPE")){
|
||||
if (hash_add(copt, "CLICON_CLI_GENMODEL_TYPE", "VARS", strlen("VARS")+1) < 0)
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_AUTOCOMMIT")){
|
||||
if (hash_add(copt, "CLICON_AUTOCOMMIT", "0", strlen("0")+1) < 0)
|
||||
goto done;
|
||||
}
|
||||
/* Legacy is 1 but default should really be 0. New apps should use 0 */
|
||||
if (!hash_lookup(copt, "CLICON_CLI_VARONLY")){
|
||||
if (hash_add(copt, "CLICON_CLI_VARONLY", "1", strlen("1")+1) < 0)
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_CLI_GENMODEL_COMPLETION")){
|
||||
if (hash_add(copt, "CLICON_CLI_GENMODEL_COMPLETION", "1", strlen("1")+1) < 0)
|
||||
goto done;
|
||||
}
|
||||
/* Default is to use line-scrolling */
|
||||
if (!hash_lookup(copt, "CLICON_CLI_LINESCROLLING")){
|
||||
if (hash_add(copt, "CLICON_CLI_LINESCROLLING", "1", strlen("1")+1) < 0)
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
done:
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*! Check that options are set
|
||||
*/
|
||||
static int
|
||||
clicon_option_sanity(clicon_hash_t *copt)
|
||||
{
|
||||
int retval = -1;
|
||||
|
||||
if (!hash_lookup(copt, "CLICON_CLI_DIR")){
|
||||
clicon_err(OE_UNIX, 0, "CLICON_CLI_DIR not defined in config file");
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_CLISPEC_DIR")){
|
||||
clicon_err(OE_UNIX, 0, "CLICON_CLISPEC_DIR not defined in config file");
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_BACKEND_DIR")){
|
||||
clicon_err(OE_UNIX, 0, "CLICON_BACKEND_DIR not defined in config file");
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_NETCONF_DIR")){
|
||||
clicon_err(OE_UNIX, 0, "CLICON_NETCONF_DIR not defined in config file");
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_RESTCONF_DIR")){
|
||||
clicon_err(OE_UNIX, 0, "CLICON_RESTCONF_DIR not defined in config file");
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_YANG_DIR")){
|
||||
clicon_err(OE_UNIX, 0, "CLICON_YANG_DIR not defined in config file");
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_XMLDB_DIR")){
|
||||
clicon_err(OE_UNIX, 0, "CLICON_XMLDB_DIR not defined in config file");
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_SOCK")){
|
||||
clicon_err(OE_UNIX, 0, "CLICON_SOCK not defined in config file");
|
||||
goto done;
|
||||
}
|
||||
if (!hash_lookup(copt, "CLICON_BACKEND_PIDFILE")){
|
||||
clicon_err(OE_UNIX, 0, "CLICON_BACKEND_PIDFILE not defined in config file");
|
||||
goto done;
|
||||
}
|
||||
retval = 0;
|
||||
done:
|
||||
return retval;
|
||||
}
|
||||
#endif /* CONFIG_COMPAT */
|
||||
|
||||
/*! Initialize option values
|
||||
*
|
||||
* Set default options, Read config-file, Check that all values are set.
|
||||
|
|
@ -389,19 +227,8 @@ clicon_options_main(clicon_handle h)
|
|||
xml_child_sort = 0;
|
||||
}
|
||||
else {
|
||||
#ifdef CONFIG_COMPAT
|
||||
/* Set default options */
|
||||
if (clicon_option_default(copt) < 0) /* init registry from file */
|
||||
goto done;
|
||||
/* Read configfile */
|
||||
if (clicon_option_readfile(copt, configfile) < 0)
|
||||
goto done;
|
||||
if (clicon_option_sanity(copt) < 0)
|
||||
goto done;
|
||||
#else /* CONFIG_COMPAT */
|
||||
clicon_err(OE_CFG, 0, "%s: suffix %s not recognized (Run ./configure --with-config-compat?)", configfile, suffix);
|
||||
goto done;
|
||||
#endif /* CONFIG_COMPAT */
|
||||
}
|
||||
retval = 0;
|
||||
done:
|
||||
|
|
|
|||
|
|
@ -26,9 +26,6 @@ fi
|
|||
if [ ! -f $DIR/usr/local/share/clixon/clixon.mk ]; then
|
||||
err $DIR/usr/local/share/clixon/clixon.mk
|
||||
fi
|
||||
if [ ! -f $DIR/usr/local/share/clixon/clixon.conf.cpp ]; then
|
||||
err $DIR/usr/local/share/clixon/clixon.conf.cpp
|
||||
fi
|
||||
if [ ! -f $DIR/usr/local/share/clixon/clixon-config* ]; then
|
||||
err $DIR/usr/local/share/clixon/clixon-config*
|
||||
fi
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue