diff --git a/advanced/Scripts/webpage.sh b/advanced/Scripts/webpage.sh index 5ccdf733..220a0b31 100755 --- a/advanced/Scripts/webpage.sh +++ b/advanced/Scripts/webpage.sh @@ -19,6 +19,7 @@ readonly FTLconf="/etc/pihole/pihole-FTL.conf" readonly dhcpstaticconfig="/etc/dnsmasq.d/04-pihole-static-dhcp.conf" readonly dnscustomfile="/etc/pihole/custom.list" readonly dnscustomcnamefile="/etc/dnsmasq.d/05-pihole-custom-cname.conf" +readonly dnscustomnsfile="/etc/dnsmasq.d/07-pihole-custom-ns.conf" readonly gravityDBfile="/etc/pihole/gravity.db" @@ -787,6 +788,66 @@ RemoveCustomCNAMERecord() { fi } +AddCustomNSRecord() { + echo -e " ${TICK} Adding custom NS record..." + + domain="${args[2]}" + target="${args[3]}" + reload="${args[4]}" + + validDomain="$(checkDomain "${domain}")" + if [[ -n "${validDomain}" ]]; then + validTarget="$(checkDomain "${target}")" + if [[ -n "${validTarget}" ]]; then + if [ "${validDomain}" = "${validTarget}" ]; then + echo " ${CROSS} Domain and target are the same. This would cause a DNS loop." + exit 1 + else + echo "server=/${validDomain}/${validTarget}" >> "${dnscustomnsfile}" + fi + else + echo " ${CROSS} Invalid Target Passed!" + exit 1 + fi + else + echo " ${CROSS} Invalid Domain passed!" + exit 1 + fi + # Restart dnsmasq to load new custom NS records only if reload is not false + if [[ ! $reload == "false" ]]; then + RestartDNS + fi +} + +RemoveCustomNSRecord() { + echo -e " ${TICK} Removing custom NS record..." + + domain="${args[2]}" + target="${args[3]}" + reload="${args[4]}" + + validDomain="$(checkDomain "${domain}")" + if [[ -n "${validDomain}" ]]; then + validTarget="$(checkDomain "${target}")" + if [[ -n "${validTarget}" ]]; then + validDomain=$(escapeDots "${validDomain}") + validTarget=$(escapeDots "${validTarget}") + sed -i "/^server=\/${validDomain}\/${validTarget}$/Id" "${dnscustomnsfile}" + else + echo " ${CROSS} Invalid Target Passed!" + exit 1 + fi + else + echo " ${CROSS} Invalid Domain passed!" + exit 1 + fi + + # Restart dnsmasq to update removed custom NS records only if $reload not false + if [[ ! $reload == "false" ]]; then + RestartDNS + fi +} + SetRateLimit() { local rate_limit_count rate_limit_interval reload rate_limit_count="${args[2]}" @@ -836,6 +897,8 @@ main() { "removecustomdns" ) RemoveCustomDNSAddress;; "addcustomcname" ) AddCustomCNAMERecord;; "removecustomcname" ) RemoveCustomCNAMERecord;; + "addcustomns" ) AddCustomNSRecord;; + "removecustomns" ) RemoveCustomNSRecord;; "ratelimit" ) SetRateLimit;; * ) helpFunc;; esac