diff --git a/advanced/Scripts/webpage.sh b/advanced/Scripts/webpage.sh index 8075990b..1f7cc728 100755 --- a/advanced/Scripts/webpage.sh +++ b/advanced/Scripts/webpage.sh @@ -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" diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 5d7e0b94..28001831 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -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