@@ -791,117 +791,27 @@ is_alias_format_valid() {
791791
792792# IP format validator
793793is_ip_format_valid () {
794- object_name=${2-ip}
795- ip_regex=' ([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'
796- ip_clean=$( echo " ${1%/* } " )
797- if ! [[ $ip_clean =~ ^$ip_regex \. $ip_regex \. $ip_regex \. $ip_regex $ ]]; then
798- check_result " $E_INVALID " " invalid $object_name format :: $1 "
799- fi
800- if [ $1 != " $ip_clean " ]; then
801- ip_cidr=" $ip_clean /"
802- ip_cidr=$( echo " ${1# $ip_cidr } " )
803- if [[ " $ip_cidr " -gt 32 ]] || [[ " $ip_cidr " =~ [:alnum:] ]]; then
804- check_result " $E_INVALID " " invalid $object_name format :: $1 "
805- fi
806- fi
794+ object_name=${2-ip}
795+ valid=$( $HESTIA_PHP -r ' $ip="$argv[1]"; echo (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? 0 : 1);' $1 ) ;
796+ if [ " $valid " -ne 0 ]; then
797+ check_result " $E_INVALID " " invalid $object_name :: $1 "
798+ fi
807799}
808800
809801# IPv6 format validator
810802is_ipv6_format_valid () {
811- object_name=${2-ipv6}
812- ip_regex=' ([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'
813- t_ip=$( echo $1 | awk -F / ' {print $1}' )
814- t_cidr=$( echo $1 | awk -F / ' {print $2}' )
815- valid_cidr=1
816-
817- WORD=" [0-9A-Fa-f]\{1,4\}"
818- # flat address, no compressed words
819- FLAT=" ^${WORD} \(:${WORD} \)\{7\}$"
820-
821- COMP2=" ^\(${WORD} :\)\{1,1\}\(:${WORD} \)\{1,6\}$"
822- COMP3=" ^\(${WORD} :\)\{1,2\}\(:${WORD} \)\{1,5\}$"
823- COMP4=" ^\(${WORD} :\)\{1,3\}\(:${WORD} \)\{1,4\}$"
824- COMP5=" ^\(${WORD} :\)\{1,4\}\(:${WORD} \)\{1,3\}$"
825- COMP6=" ^\(${WORD} :\)\{1,5\}\(:${WORD} \)\{1,2\}$"
826- COMP7=" ^\(${WORD} :\)\{1,6\}\(:${WORD} \)\{1,1\}$"
827- # trailing :: edge case, includes case of only :: (all 0's)
828- EDGE_TAIL=" ^\(\(${WORD} :\)\{1,7\}\|:\):$"
829- # leading :: edge case
830- EDGE_LEAD=" ^:\(:${WORD} \)\{1,7\}$"
831-
832- echo $t_ip | grep --silent " \(${FLAT} \)\|\(${COMP2} \)\|\(${COMP3} \)\|\(${COMP4} \)\|\(${COMP5} \)\|\(${COMP6} \)\|\(${COMP7} \)\|\(${EDGE_TAIL} \)\|\(${EDGE_LEAD} \)"
833- if [ $? -ne 0 ]; then
834- check_result " $E_INVALID " " invalid $object_name format :: $1 "
835- fi
836-
837- if [ -n " $( echo $1 | grep ' /' ) " ]; then
838- if [[ " $t_cidr " -lt 0 ]] || [[ " $t_cidr " -gt 128 ]]; then
839- valid_cidr=0
840- fi
841- if ! [[ " $t_cidr " =~ ^[0-9]+$ ]]; then
842- valid_cidr=0
843- fi
844- fi
845- if [ " $valid_cidr " -eq 0 ]; then
846- check_result " $E_INVALID " " invalid $object_name format :: $1 "
847- fi
803+ object_name=${2-ipv6}
804+ valid=$( $HESTIA_PHP -r ' $ip="$argv[1]"; echo (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ? 0 : 1);' $1 ) ;
805+ if [ " $valid " -ne 0 ]; then
806+ check_result " $E_INVALID " " invalid $object_name :: $1 "
807+ fi
848808}
849809
850810is_ip46_format_valid () {
851- t_ip=$( echo $1 | awk -F / ' {print $1}' )
852- t_cidr=$( echo $1 | awk -F / ' {print $2}' )
853- valid_octets=0
854- valid_cidr=1
855- for octet in ${t_ip// ./ } ; do
856- if [[ $octet =~ ^[0-9]{1,3}$ ]] && [[ $octet -le 255 ]]; then
857- (( ++ valid_octets))
858- fi
859- done
860-
861- if [ -n " $( echo $1 | grep ' /' ) " ]; then
862- if [[ " $t_cidr " -lt 0 ]] || [[ " $t_cidr " -gt 32 ]]; then
863- valid_cidr=0
864- fi
865- if ! [[ " $t_cidr " =~ ^[0-9]+$ ]]; then
866- valid_cidr=0
867- fi
868- fi
869- if [ " $valid_octets " -lt 4 ] || [ " $valid_cidr " -eq 0 ]; then
870- # Check IPV6
871- ipv6_valid=" "
872- WORD=" [0-9A-Fa-f]\{1,4\}"
873- # flat address, no compressed words
874- FLAT=" ^${WORD} \(:${WORD} \)\{7\}$"
875-
876- COMP2=" ^\(${WORD} :\)\{1,1\}\(:${WORD} \)\{1,6\}$"
877- COMP3=" ^\(${WORD} :\)\{1,2\}\(:${WORD} \)\{1,5\}$"
878- COMP4=" ^\(${WORD} :\)\{1,3\}\(:${WORD} \)\{1,4\}$"
879- COMP5=" ^\(${WORD} :\)\{1,4\}\(:${WORD} \)\{1,3\}$"
880- COMP6=" ^\(${WORD} :\)\{1,5\}\(:${WORD} \)\{1,2\}$"
881- COMP7=" ^\(${WORD} :\)\{1,6\}\(:${WORD} \)\{1,1\}$"
882- # trailing :: edge case, includes case of only :: (all 0's)
883- EDGE_TAIL=" ^\(\(${WORD} :\)\{1,7\}\|:\):$"
884- # leading :: edge case
885- EDGE_LEAD=" ^:\(:${WORD} \)\{1,7\}$"
886-
887- echo $t_ip | grep --silent " \(${FLAT} \)\|\(${COMP2} \)\|\(${COMP3} \)\|\(${COMP4} \)\|\(${COMP5} \)\|\(${COMP6} \)\|\(${COMP7} \)\|\(${EDGE_TAIL} \)\|\(${EDGE_LEAD} \)"
888- if [ $? -ne 0 ]; then
889- ipv6_valid=" INVALID"
890- fi
891-
892- if [ -n " $( echo $1 | grep ' /' ) " ]; then
893- if [[ " $t_cidr " -lt 0 ]] || [[ " $t_cidr " -gt 128 ]]; then
894- valid_cidr=0
895- fi
896- if ! [[ " $t_cidr " =~ ^[0-9]+$ ]]; then
897- valid_cidr=0
898- fi
899- fi
900-
901- if [ -n " $ipv6_valid " ] || [ " $valid_cidr " -eq 0 ]; then
902- check_result " $E_INVALID " " invalid IP format :: $1 "
903- fi
904- fi
811+ valid=$( $HESTIA_PHP -r ' $ip="$argv[1]"; echo (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6) ? 0 : 1);' $1 ) ;
812+ if [ " $valid " -ne 0 ]; then
813+ check_result " $E_INVALID " " invalid IP format :: $1 "
814+ fi
905815}
906816
907817# Proxy extention format validator
0 commit comments