mirror of
https://github.com/docker-mailserver/docker-mailserver.git
synced 2024-01-19 02:48:50 +00:00
41 lines
871 B
Bash
41 lines
871 B
Bash
|
#! /bin/bash
|
||
|
|
||
|
function _mask_ip_digit
|
||
|
{
|
||
|
if [[ ${1} -ge 8 ]]
|
||
|
then
|
||
|
MASK=255
|
||
|
elif [[ ${1} -le 0 ]]
|
||
|
then
|
||
|
MASK=0
|
||
|
else
|
||
|
VALUES=(0 128 192 224 240 248 252 254 255)
|
||
|
MASK=${VALUES[${1}]}
|
||
|
fi
|
||
|
|
||
|
local DVAL=${2}
|
||
|
((DVAL&=MASK))
|
||
|
|
||
|
echo "${DVAL}"
|
||
|
}
|
||
|
|
||
|
# Transforms a specific IP with CIDR suffix
|
||
|
# like 1.2.3.4/16 to subnet with cidr suffix
|
||
|
# like 1.2.0.0/16.
|
||
|
# Assumes correct IP and subnet are provided.
|
||
|
function _sanitize_ipv4_to_subnet_cidr
|
||
|
{
|
||
|
local DIGIT_PREFIX_LENGTH="${1#*/}"
|
||
|
|
||
|
declare -a MASKED_DIGITS DIGITS
|
||
|
IFS='.' ; read -r -a DIGITS < <(echo "${1%%/*}") ; unset IFS
|
||
|
|
||
|
for ((i = 0 ; i < 4 ; i++))
|
||
|
do
|
||
|
MASKED_DIGITS[i]=$(_mask_ip_digit "${DIGIT_PREFIX_LENGTH}" "${DIGITS[i]}")
|
||
|
DIGIT_PREFIX_LENGTH=$((DIGIT_PREFIX_LENGTH - 8))
|
||
|
done
|
||
|
|
||
|
echo "${MASKED_DIGITS[0]}.${MASKED_DIGITS[1]}.${MASKED_DIGITS[2]}.${MASKED_DIGITS[3]}/${1#*/}"
|
||
|
}
|