summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyrylo Yatsenko <hedrok@gmail.com>2025-06-23 13:38:16 +0300
committerKyrylo Yatsenko <hedrok@gmail.com>2025-06-23 13:38:16 +0300
commit2a7decbdcb9920a67cef18b326ddd5d294a2cd00 (patch)
tree4fe340544950822edf747dfc8579ceea8a17d8e7
parent74bb4ab312bbbce7a223d7fbb24cb742d05bf431 (diff)
downloadvyatta-cfg-2a7decbdcb9920a67cef18b326ddd5d294a2cd00.tar.gz
vyatta-cfg-2a7decbdcb9920a67cef18b326ddd5d294a2cd00.zip
cli: T6769: check commit arguments
Check usage: `commit [comment COMMENTTEXT]` Make any other option combination an error and don't pass other arguments to inner scripts. Before this commit command `commit` silently accepted any number of arguments, moreover given `spam1 comment hi1 spam2 comment hi2 spam3` parsing script silently ignored first `comment hi1`, has written `hi2` as comment and passed `spam1 spam2 spam3` to inner script. There are two options for inner scripts: /opt/vyatta/sbin/my_commit Code in vyatta-cfg/src/cli_bin.cpp$ argv is used to check script name and passed to doCommit which ignores it /usr/libexec/vyos/vyconf/bin/vy_commit vyos-1x/python/vyos/vyconf_session.py In similar way argv is used to determine script name Both don't use any arguments, so passing and collecting other arguments seems not needed and confusing
-rw-r--r--functions/interpreter/vyatta-cfg-run30
1 files changed, 14 insertions, 16 deletions
diff --git a/functions/interpreter/vyatta-cfg-run b/functions/interpreter/vyatta-cfg-run
index b466631..380cfa6 100644
--- a/functions/interpreter/vyatta-cfg-run
+++ b/functions/interpreter/vyatta-cfg-run
@@ -115,29 +115,27 @@ vyatta_config_commit ()
return 1;
fi
fi
- local comment="commit"
- local next=0
- local -a args=()
- for arg in "$@"; do
- if [ "$next" == "1" ]; then
- comment=$arg
- next=0;
- elif [ "$arg" == "comment" ]; then
- next=1
- elif [ "$arg" == "confirm" ]; then
- echo Use commit-confirm command
+
+ if [ $# -gt 0 ] ; then
+ if [ $# = 1 ] || [ $# -gt 2 ] || [ "$1" != "comment" ]; then
+ if [ "$1" == "confirm" ]; then
+ echo "Use commit-confirm command"
+ return 1
+ fi
+ echo "Error: commit accepts either no arugments, or optional 'comment'" \
+ "with comment text as second argument."
+ echo -e "\tUsage: 'commit [comment COMMENTTEXT]'"
return 1;
- else
- args[${#args[@]}]="$arg"
fi
- done
+ comment="$2"
+ fi
export COMMIT_COMMENT="$comment"
export COMMIT_VIA=cli
if test -f "/var/run/vyconf_backend"; then
- /usr/libexec/vyos/vyconf/bin/vy_commit "${args[@]}" 2>&1
+ /usr/libexec/vyos/vyconf/bin/vy_commit 2>&1
else
- /opt/vyatta/sbin/my_commit "${args[@]}" 2>&1
+ /opt/vyatta/sbin/my_commit 2>&1
fi
unset COMMIT_VIA
unset COMMIT_COMMENT