Fixed exit from ip verification function

This commit is contained in:
Andrey Savihin 2020-02-17 14:35:18 +03:00
parent e1445c69db
commit c53040da3b
1 changed files with 14 additions and 14 deletions

View File

@ -160,29 +160,29 @@ check_ip_is_internal(){
local IPRE='\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)'; local IPRE='\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)';
local IP=($(echo "$1" | sed -ne 's:^'"$IPRE"'/.*$:\1 \2 \3 \4:p')); local IP=($(echo "$1" | sed -ne 's:^'"$IPRE"'/.*$:\1 \2 \3 \4:p'));
local MASK=($(echo "$1" | sed -ne 's:^[^/]*/'"$IPRE"'$:\1 \2 \3 \4:p')) local MASK=($(echo "$1" | sed -ne 's:^[^/]*/'"$IPRE"'$:\1 \2 \3 \4:p'))
if [ ${#MASK[@]} -ne 4 ]; then if [ ${#MASK[@]} -ne 4 ]; then
local BITCNT=($(echo "$1" | sed -ne 's:^[^/]*/\([0-9]\+\)$:\1:p')) local BITCNT=($(echo "$1" | sed -ne 's:^[^/]*/\([0-9]\+\)$:\1:p'))
BITCNT=$(( ((2**${BITCNT})-1) << (32-${BITCNT}) )) BITCNT=$(( ((2**${BITCNT})-1) << (32-${BITCNT}) ))
for (( I=0; I<4; I++ )); do for (( I=0; I<4; I++ )); do
MASK[$I]=$(( ($BITCNT >> (8 * (3 - $I))) & 255 )) MASK[$I]=$(( ($BITCNT >> (8 * (3 - $I))) & 255 ))
done done
fi fi
local NETWORK=() local NETWORK=()
for (( I=0; I<4; I++ )); do for (( I=0; I<4; I++ )); do
NETWORK[$I]=$(( ${IP[$I]} & ${MASK[$I]} )) NETWORK[$I]=$(( ${IP[$I]} & ${MASK[$I]} ))
done done
local INIP=($(echo "$2" | sed -ne 's:^'"$IPRE"'$:\1 \2 \3 \4:p')) local INIP=($(echo "$2" | sed -ne 's:^'"$IPRE"'$:\1 \2 \3 \4:p'))
for (( I=0; I<4; I++ )); do for (( I=0; I<4; I++ )); do
[[ $(( ${INIP[$I]} & ${MASK[$I]} )) -ne ${NETWORK[$I]} ]] && exit 0; [[ $(( ${INIP[$I]} & ${MASK[$I]} )) -ne ${NETWORK[$I]} ]] && return 1; #false
done done
echo "true" return 0; #true
} }
normalize_subnet(){ normalize_subnet(){