[Ovirt-devel] [PATCH node 2/2] Change DNS setup to match NTP. rhbz#508677

Alan Pevec apevec at redhat.com
Fri Jul 10 01:48:34 UTC 2009


From: Darryl L. Pierce <dpierce at redhat.com>

Rather than expecting the DNS entries to be on one line, they are now
entered as two separate entries.

Also fixes a bug that caused the first DNS entry to be lost when a
second entry was provided.

In both cases, the input is collected in a colon-delimited string that
is then processed. This is to provide consistency between the
interactive setup and the automated setup.

Signed-off-by: Darryl L. Pierce <dpierce at redhat.com>
---
 scripts/ovirt-config-networking |   55 +++++++++++++++++++++++++-------------
 scripts/ovirt-functions         |   18 ++++++++++++
 2 files changed, 54 insertions(+), 19 deletions(-)

diff --git a/scripts/ovirt-config-networking b/scripts/ovirt-config-networking
index e751535..6765354 100755
--- a/scripts/ovirt-config-networking
+++ b/scripts/ovirt-config-networking
@@ -223,17 +223,30 @@ function configure_dns
     if [ -z "$AUTO" ]; then
         if has_configured_interface true; then
             while true; do
-                printf "\n"
-                echo "Enter up to two DNS servers separated by commas:"
-                if [ -n "$OVIRT_DNS" ]; then
-                    echo "Press Enter for defaults: ($OVIRT_DNS)"
-                fi
-                read -ep ": "
-                DNS=$REPLY
-
-                if [ -z "$DNS" ]; then
-                    DNS=$OVIRT_DNS
-                fi
+                for dns in first second; do
+                    while true; do
+                        printf "\n"
+                        read -ep "Please enter the ${dns} DNS server (or ENTER to exit): "
+                        if [[ -z "${REPLY}" ]]; then
+                            if [[ -z "${DNS}" ]]; then
+                                printf "\nAborted...\n"
+                                return
+                            else
+                                break
+                            fi
+                        fi
+                        if is_valid_ipv4 $REPLY; then
+                            if [[ -z "${DNS}" ]]; then
+                                DNS="${REPLY}"
+                            elif [[ -n "${REPLY}" ]]; then
+                                DNS="${DNS}:${REPLY}"
+                            fi
+                            break
+                        else
+                            printf "${REPLY} is an invalid address.\n"
+                        fi
+                    done
+                done
 
                 printf "\n"
                 ask_yes_or_no "Is this correct (y/n/a)?" true true
@@ -247,12 +260,11 @@ function configure_dns
     fi
 
     if [ -n "$DNS" ]; then
-        DNS1=$(echo "$DNS" | awk -F, '{print $1}')
-        DNS2=$(echo "$DNS" | awk -F, '{print $2}')
+        DNS1=$(echo "$DNS" | awk -F\: '{print $1}')
+        DNS2=$(echo "$DNS" | awk -F\: '{print $2}')
 
-        test -n "$DNS1" && IF_CONFIG="set $IF_ROOT/DNS1 $DNS1"
-        test -n "$DNS2" && IF_CONFIG="set $IF_ROOT/DNS2 $DNS2"
-        printf "$IF_CONFIG\n" >> $IF_FILENAME
+        test -n "$DNS1" && printf "set $IF_ROOT/DNS1 $DNS1\n" >> $IF_FILENAME
+        test -n "$DNS2" && printf "set $IF_ROOT/DNS2 $DNS2\n" >> $IF_FILENAME
     fi
 }
 
@@ -272,7 +284,11 @@ function configure_ntp
 
 	        if [ -z "$REPLY" ]; then break; fi
 
-	        NTPSERVERS="$NTPSERVERS $REPLY"
+                if is_valid_ipv4 $REPLY; then
+                    NTPSERVERS="${NTPSERVERS}:${REPLY}"
+                else
+                    printf "${REPLY} is an invalid address.\n"
+                fi
 	    done
         fi
     fi
@@ -292,10 +308,11 @@ save\n" > $ntpconf
 
     if [ -n "$NTPSERVERS" ]; then
         offset=1
-	for server in $NTPSERVERS; do
+        SERVERS=$(echo $NTPSERVERS | awk 'BEGIN{FS=":"}{for (i=1; i<=NF; i++) print $i}')
+        for server in $SERVERS; do
             printf "set /files/etc/ntp.conf/server[${offset}] ${server}\n" >> $ntpconf
             offset=$(echo "$offset+1" | bc)
-	done
+        done
     fi
 }
 
diff --git a/scripts/ovirt-functions b/scripts/ovirt-functions
index ecde762..81db36b 100755
--- a/scripts/ovirt-functions
+++ b/scripts/ovirt-functions
@@ -654,6 +654,24 @@ ask_yes_or_no () {
     done
 }
 
+# Verifies the address entered is a valid IPv4 address.
+is_valid_ipv4 () {
+    local address=${1}
+    local result=1
+
+    if [[ "$address" =~ "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" ]]; then
+        OIFS=$IFS
+        IFS='.'
+        ip=($address)
+        IFS=$OIFS
+        [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
+            && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
+        result=$?
+    fi
+
+    return $result
+}
+
 # execute a function if called as a script, e.g.
 #   ovirt-functions ovirt_store_config /etc/hosts
 
-- 
1.6.2.5




More information about the ovirt-devel mailing list