aboutsummaryrefslogtreecommitdiff
path: root/kiss
diff options
context:
space:
mode:
Diffstat (limited to 'kiss')
-rwxr-xr-xkiss34
1 files changed, 29 insertions, 5 deletions
diff --git a/kiss b/kiss
index 5cd8cb4..88a758f 100755
--- a/kiss
+++ b/kiss
@@ -72,18 +72,28 @@ pkg_find() {
# in $KISS_PATH/*.
[ "$KISS_PATH" ] || die "\$KISS_PATH needs to be set"
+ # Turn the argument list into variables as we reset
+ # the list below.
+ query=$1
+ match=$2
+
# Find the repository containing a package.
# Searches installed packages if the package is absent
# from the repositories.
# See [1] at top of script.
# shellcheck disable=2046,2086
- set -- "$1" $(IFS=:; find $KISS_PATH "$sys_db" -maxdepth 1 -name "$1")
+ set -- $(IFS=:; find $KISS_PATH "$sys_db" -maxdepth 1 -name "$1")
# A package may also not be found due to a repository not being
# readable by the current user. Either way, we need to die here.
- [ "$2" ] || die "Package '$1' not in any repository"
+ [ "$1" ] || die "Package '$query' not in any repository"
- printf '%s\n' "$2"
+ # Show all search results if called from 'kiss search', else
+ # print only the first match.
+ case $match in
+ all) printf '%s\n' "$@" ;;
+ *) printf '%s\n' "$1" ;;
+ esac
}
pkg_list() {
@@ -845,6 +855,20 @@ args() {
# arguments despite trapping the error ('|| :').
shift "$(($# > 0 ? 1 : 0))"
+ # Unless this is a search, sanitize the user's input. The call to
+ # 'pkg_find()' supports basic globbing, ensure input doesn't expand
+ # to anything except for when this behavior is needed.
+ #
+ # This handles the globbing characters '*', '!', '[' and ']' as per:
+ # https://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html
+ [ "$action" != search ] && [ "$action" != s ] &&
+ case $* in
+ *'*'*|*'!'*|*'['*|*']'*)
+ log kiss "$action $*"
+ die "Arguments contain invalid characters"
+ ;;
+ esac
+
# Parse some arguments earlier to remove the need to duplicate code.
case $action in
c|checksum|s|search)
@@ -938,11 +962,11 @@ args() {
;;
s|search)
- for pkg; do pkg_find "$pkg"; done
+ for pkg; do pkg_find "$pkg" all; done
;;
v|version|-v|--version)
- log kiss 0.40.0
+ log kiss 0.41.0
;;
h|help|-h|--help|'')