From d741915ecdcf8930ccb3bd23eec1da2f0d000483 Mon Sep 17 00:00:00 2001 From: Pavel Ivashchenko Date: Mon, 30 Sep 2019 15:57:10 +0000 Subject: [PATCH] vtysh: fix searching commands in parent nodes Do not check parent command nodes in case of ambiguous and incomplete commands Signed-off-by: Pavel Ivashchenko --- lib/command.c | 4 ++++ vtysh/vtysh.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/lib/command.c b/lib/command.c index 04f2bd95a0..d126229f04 100644 --- a/lib/command.c +++ b/lib/command.c @@ -1135,6 +1135,7 @@ int cmd_execute_command(vector vline, struct vty *vty, return saved_ret; if (ret != CMD_SUCCESS && ret != CMD_WARNING + && ret != CMD_ERR_AMBIGUOUS && ret != CMD_ERR_INCOMPLETE && ret != CMD_NOT_MY_INSTANCE && ret != CMD_WARNING_CONFIG_FAILED) { /* This assumes all nodes above CONFIG_NODE are childs of * CONFIG_NODE */ @@ -1146,6 +1147,7 @@ int cmd_execute_command(vector vline, struct vty *vty, ret = cmd_execute_command_real(vline, FILTER_RELAXED, vty, cmd); if (ret == CMD_SUCCESS || ret == CMD_WARNING + || ret == CMD_ERR_AMBIGUOUS || ret == CMD_ERR_INCOMPLETE || ret == CMD_NOT_MY_INSTANCE || ret == CMD_WARNING_CONFIG_FAILED) return ret; @@ -1330,6 +1332,7 @@ int command_config_read_one_line(struct vty *vty, if (!(use_daemon && ret == CMD_SUCCESS_DAEMON) && !(!use_daemon && ret == CMD_ERR_NOTHING_TODO) && ret != CMD_SUCCESS && ret != CMD_WARNING + && ret != CMD_ERR_AMBIGUOUS && ret != CMD_ERR_INCOMPLETE && ret != CMD_NOT_MY_INSTANCE && ret != CMD_WARNING_CONFIG_FAILED && vty->node != CONFIG_NODE) { int saved_node = vty->node; @@ -1338,6 +1341,7 @@ int command_config_read_one_line(struct vty *vty, while (!(use_daemon && ret == CMD_SUCCESS_DAEMON) && !(!use_daemon && ret == CMD_ERR_NOTHING_TODO) && ret != CMD_SUCCESS && ret != CMD_WARNING + && ret != CMD_ERR_AMBIGUOUS && ret != CMD_ERR_INCOMPLETE && vty->node > CONFIG_NODE) { vty->node = node_parent(vty->node); if (vty->xpath_index > 0) diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index 08126f6885..0c7a7471b1 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -492,6 +492,7 @@ static int vtysh_execute_func(const char *line, int pager) */ while (ret != CMD_SUCCESS && ret != CMD_SUCCESS_DAEMON && ret != CMD_WARNING && ret != CMD_WARNING_CONFIG_FAILED + && ret != CMD_ERR_AMBIGUOUS && ret != CMD_ERR_INCOMPLETE && vty->node > CONFIG_NODE) { vty->node = node_parent(vty->node); ret = cmd_execute(vty, line, &cmd, 1); @@ -777,6 +778,7 @@ int vtysh_mark_file(const char *filename) */ while (ret != CMD_SUCCESS && ret != CMD_SUCCESS_DAEMON && ret != CMD_WARNING && ret != CMD_WARNING_CONFIG_FAILED + && ret != CMD_ERR_AMBIGUOUS && ret != CMD_ERR_INCOMPLETE && vty->node > CONFIG_NODE) { vty->node = node_parent(vty->node); ret = cmd_execute_command_strict(vline, vty, &cmd);