aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2019-10-22 18:38:01 +0200
committerlaforge <laforge@osmocom.org>2019-10-28 19:15:29 +0000
commita0c8195ad37292ab800a6c777fc28383995b4b64 (patch)
tree039f73a1546dfd238af4f89aef66789e0742eaf5
parentea2afb21d69f5227263f6b227edcb1e9cc5b0e54 (diff)
vty: Return error if cmd returns CMD_WARNING while reading cfg file
Otherwise bad configurations can easily sneak in and produce unexpected behavior. Change-Id: Ic9c1b566ec4a459f03e6319cf369691903cf9d00
-rw-r--r--src/vty/command.c3
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/vty/fail_cmd_ret_warning.cfg3
-rw-r--r--tests/vty/vty_test.c20
-rw-r--r--tests/vty/vty_test.ok4
5 files changed, 29 insertions, 2 deletions
diff --git a/src/vty/command.c b/src/vty/command.c
index a36f30a3..6a9d18af 100644
--- a/src/vty/command.c
+++ b/src/vty/command.c
@@ -2631,8 +2631,7 @@ int config_from_file(struct vty *vty, FILE * fp)
ret = cmd_execute_command_strict(vline, vty, NULL);
cmd_free_strvec(vline);
- if (ret != CMD_SUCCESS && ret != CMD_WARNING
- && ret != CMD_ERR_NOTHING_TODO) {
+ if (ret != CMD_SUCCESS && ret != CMD_ERR_NOTHING_TODO) {
if (indent) {
talloc_free(indent);
indent = NULL;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index e0993b16..60213ed3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -293,6 +293,7 @@ EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) \
vty/fail_not_de-indented.cfg \
vty/fail_tabs_and_spaces.cfg \
vty/fail_too_much_indent.cfg \
+ vty/fail_cmd_ret_warning.cfg \
vty/ok.cfg \
vty/ok_empty_parent.cfg \
vty/ok_ignore_blank.cfg \
diff --git a/tests/vty/fail_cmd_ret_warning.cfg b/tests/vty/fail_cmd_ret_warning.cfg
new file mode 100644
index 00000000..b03f02ae
--- /dev/null
+++ b/tests/vty/fail_cmd_ret_warning.cfg
@@ -0,0 +1,3 @@
+return-success
+return-warning
+return-success
diff --git a/tests/vty/vty_test.c b/tests/vty/vty_test.c
index 30efb9af..0d68a6c0 100644
--- a/tests/vty/vty_test.c
+++ b/tests/vty/vty_test.c
@@ -421,8 +421,27 @@ DEFUN(cfg_ambiguous_str_2, cfg_ambiguous_str_2_cmd,
return CMD_SUCCESS;
}
+DEFUN(cfg_ret_success, cfg_ret_success_cmd,
+ "return-success",
+ "testing return success\n")
+{
+ printf("Called: 'return-success'\n");
+ return CMD_SUCCESS;
+}
+
+DEFUN(cfg_ret_warning, cfg_ret_warning_cmd,
+ "return-warning",
+ "testing return warning\n")
+{
+ printf("Called: 'return-warning'\n");
+ return CMD_WARNING;
+}
+
void test_vty_add_cmds()
{
+ install_element(CONFIG_NODE, &cfg_ret_warning_cmd);
+ install_element(CONFIG_NODE, &cfg_ret_success_cmd);
+
install_element(CONFIG_NODE, &cfg_level1_cmd);
install_node(&level1_node, NULL);
install_element(LEVEL1_NODE, &cfg_level1_child_cmd);
@@ -524,6 +543,7 @@ int main(int argc, char **argv)
test_exit_by_indent("fail_tabs_and_spaces.cfg", -EINVAL);
test_exit_by_indent("ok_indented_root.cfg", 0);
test_exit_by_indent("ok_empty_parent.cfg", 0);
+ test_exit_by_indent("fail_cmd_ret_warning.cfg", -EINVAL);
test_is_cmd_ambiguous();
diff --git a/tests/vty/vty_test.ok b/tests/vty/vty_test.ok
index 2f76ff91..0b5ac9c0 100644
--- a/tests/vty/vty_test.ok
+++ b/tests/vty/vty_test.ok
@@ -286,6 +286,10 @@ called level2 node k
called level3 node k
called level1 child cmd k
got rc=0
+reading file fail_cmd_ret_warning.cfg, expecting rc=-22
+Called: 'return-success'
+Called: 'return-warning'
+got rc=-22
Going to test is_cmd_ambiguous()
Going to execute 'ambiguous_nr'
Called: 'ambiguous_nr [<0-23>]' (argc=0)