Merge pull request #3510 from pi-hole/fix/ip_validation_setdns

Also validate IPV6 in the `setdns` function
This commit is contained in:
Adam Warner 2020-06-25 17:58:55 +01:00 committed by GitHub
commit 49f099e382
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 1 deletions

View file

@ -260,7 +260,7 @@ SetDNSServers() {
local ip
ip="${array[index]//\\#/#}"
if valid_ip "${ip}" ; then
if valid_ip "${ip}" || valid_ip6 "${ip}" ; then
add_setting "PIHOLE_DNS_$((index+1))" "${ip}"
else
echo -e " ${CROSS} Invalid IP has been passed"

View file

@ -1031,6 +1031,24 @@ valid_ip() {
return "${stat}"
}
valid_ip6() {
local ip=${1}
local stat=1
# One IPv6 element is 16bit: 0000 - FFFF
local ipv6elem="[0-9a-fA-F]{1,4}"
# CIDR for IPv6 is 1- 128 bit
local v6cidr="(\\/([1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])){0,1}"
# build a full regex string from the above parts
local regex="^(((${ipv6elem}))((:${ipv6elem}))*::((${ipv6elem}))*((:${ipv6elem}))*|((${ipv6elem}))((:${ipv6elem})){7})${v6cidr}$"
[[ ${ip} =~ ${regex} ]]
stat=$?
# Return the exit code
return "${stat}"
}
# A function to choose the upstream DNS provider(s)
setDNS() {
# Local, named variables