From e2bdbeef6d40fb02f32d893012104591e5d094e6 Mon Sep 17 00:00:00 2001
From: Thomas Woerner <twoerner@redhat.com>
Date: Wed, 7 Aug 2024 14:51:52 +0200
Subject: [PATCH] infra/image system-services: Fix DNS forwarder

The DNS forwarder is set while deploying the IPA server. This forwarder
might not be correct later on.

The old /etc/resolv.conf is copied to /etc/resolv.conf.fixnet by the
fixnet service and later on the fixipaip service is trying to get the
nameserver from the copied file. If the retrieval failed of if the
namesever is 127.0.0.1, then the nameserver will be set to 8.8.8.8.

After fixing the IP addresses for the forward and reverse zone, also the
forwarder is set for the dnsserver "${HOSTNAME}".
---
 infra/image/system-service/fixipaip.sh | 9 ++++++++-
 infra/image/system-service/fixnet.sh   | 6 +++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/infra/image/system-service/fixipaip.sh b/infra/image/system-service/fixipaip.sh
index 599aa15..2330b01 100755
--- a/infra/image/system-service/fixipaip.sh
+++ b/infra/image/system-service/fixipaip.sh
@@ -44,11 +44,16 @@ if [ -z "${PTR}" ] || [ -n "${PTR//[0-9]}" ]; then
     echo "ERROR: Failed to get PTR from IPv4 address: '${PTR}'"
     exit 1
 fi
+FORWARDER=$(grep -s -m 1 ^nameserver /etc/resolv.conf.fixnet | cut -d" " -f 2)
+if [ -z "${FORWARDER}" ] || [ "${FORWARDER}" == "127.0.0.1" ]; then
+    FORWARDER="8.8.8.8"
+fi
 
-echo "Fix IPA IP:"
+echo "Fix IPA:"
 echo "  HOSTNAME: '${HOSTNAME}'"
 echo "  IP: '${IP}'"
 echo "  PTR: '${PTR}'"
+echo "  FORWARDER: '${FORWARDER}'"
 
 if ! echo "SomeADMINpassword" | kinit -c "${KRB5CCNAME}"
 then
@@ -77,6 +82,8 @@ for zone in ${ZONES}; do
     fi
 done
 
+ipa dnsserver-mod "${HOSTNAME}" --forwarder="${FORWARDER}"
+
 kdestroy -c "${KRB5CCNAME}" -A
 
 exit 0
diff --git a/infra/image/system-service/fixnet.sh b/infra/image/system-service/fixnet.sh
index e4ee3df..0bf6d03 100755
--- a/infra/image/system-service/fixnet.sh
+++ b/infra/image/system-service/fixnet.sh
@@ -51,7 +51,11 @@ else
     echo -e "$IP\t${HOSTNAME} ${HOSTNAME%%.*}" >> /etc/hosts
 fi
 
-echo "nameserver 127.0.0.1" > /etc/resolv.conf
+cp -a /etc/resolv.conf /etc/resolv.conf.fixnet
+cat > /etc/resolv.conf <<EOF
+search ${HOSTNAME#*.}
+nameserver 127.0.0.1
+EOF
 
 echo "/etc/hosts:"
 cat "/etc/hosts"
-- 
GitLab