From ef7a934b9d274919459dc47e437f8362d773a243 Mon Sep 17 00:00:00 2001 From: William Wernert Date: Tue, 12 Jan 2021 11:01:04 -0500 Subject: [PATCH] [feat] Add functions for input validation --- salt/common/tools/sbin/so-common | 83 ++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/salt/common/tools/sbin/so-common b/salt/common/tools/sbin/so-common index a012f2ed9..b3b621a68 100755 --- a/salt/common/tools/sbin/so-common +++ b/salt/common/tools/sbin/so-common @@ -233,6 +233,89 @@ __check_apt_lock() { return $lock } +valid_cidr() { + # Verify there is a backslash in the string + echo "$1" | grep -qP "^[^/]+/[^/]+$" || return 1 + + local cidr + local ip + + cidr=$(echo "$1" | sed 's/.*\///') + ip=$(echo "$1" | sed 's/\/.*//' ) + + if valid_ip4 "$ip"; then + [[ $cidr =~ ([0-9]|[1-2][0-9]|3[0-2]) ]] && return 0 || return 1 + else + return 1 + fi +} + +valid_cidr_list() { + local all_valid=0 + + IFS="," read -r -a net_arr <<< "$1" + + for net in "${net_arr[@]}"; do + valid_cidr "$net" || all_valid=1 + done + + return $all_valid +} + +valid_dns_list() { + local all_valid=0 + + read -r -a dns_arr <<< "$1" + + for addr in "${dns_arr[@]}"; do + valid_ip4 "$addr" || all_valid=1 + done + + return $all_valid +} + +valid_fqdn() { + local fqdn=$1 + + echo "$fqdn" | grep -qP '(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\.)+[a-zA-Z]{2,63}$)' \ + && return 0 \ + || return 1 +} + +valid_hostname() { + local hostname=$1 + + [[ $hostname =~ ^[a-zA-Z0-9\-]+$ ]] && [[ $hostname != 'localhost' ]] && return 0 || return 1 +} + +valid_ip4() { + local ip=$1 + + echo "$ip" | grep -qP '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' && return 0 || return 1 +} + +valid_int() { + local num=$1 + local min=${2:-1} + local max=${3:-1000} + + [[ $num =~ ^[0-9]*$ ]] && [[ $num -ge $min ]] && [[ $num -le $max ]] && return 0 || return 1 +} + +valid_string() { + local str=$1 + local min_length=${2:-1} + local max_length=${3:-64} + + echo "$str" | grep -qP '^\S+$' && [[ ${#str} -ge $min_length ]] && [[ ${#str} -le $max_length ]] && return 0 || return 1 +} + +valid_username() { + local user=$1 + + echo "$user" | grep -qP '^[a-z_]([a-z0-9_-]{0,31}|[a-z0-9_-]{0,30}\$)$' && return 0 || return 1 +} + wait_for_web_response() { url=$1 expected=$2