fix resolv.conf issue on plc
[myplc.git] / plc.d / dns
index 9b5b192..adf6c7f 100755 (executable)
--- a/plc.d/dns
+++ b/plc.d/dns
 . /etc/plc.d/functions
 . /etc/planetlab/plc_config
 
+SIGNATURE="; generated by /etc/plc.d/dns --- DO NOT REMOVE THIS TEXT!"
+
 # Be verbose
 set -x
 
 case "$1" in
     start)
-       if [ "$PLC_DNS_ENABLED" != "1" ] ; then
-           exit 0
+       if [ $PLC_DNS_ENABLED -eq 1 ] ; then
+           MESSAGE="Starting DNS server"
+           dialog "$MESSAGE"
+
+           dns-config
+           check
        fi
 
-       MESSAGE=$"Starting DNS server"
-       dialog "$MESSAGE"
+       # Set up nameservers
+       if [ -n "$PLC_NET_DNS1" -o -n "$PLC_NET_DNS2" ] ; then
+           MESSAGE="Configuring resolv.conf"
+           dialog "$MESSAGE"
 
-       dns-config
-       check
+           rfile=$(mktemp)
+           (
+               echo $SIGNATURE
+               [ -n "$PLC_NET_DNS1" ] && echo "nameserver $PLC_NET_DNS1"
+               [ -n "$PLC_NET_DNS2" -a "$PLC_NET_DNS1" != "$PLC_NET_DNS2" ] && echo "nameserver $PLC_NET_DNS2"
+           ) > $rfile
+           
+           if [ $PLC_DNS_ENABLED -eq 1 ] ; then
+               cp $rfile /etc/plc_resolv.conf
+               chmod 444 /etc/plc_resolv.conf
+               ourfile=$(grep "$SIGNATURE" /etc/resolv.conf| wc -l)
+               if [ $ourfile -eq 0 ] ; then
+                   cp /etc/resolv.conf /etc/resolv.bak
+                   echo $SIGNATURE > /etc/resolv.conf
+                   echo nameserver 127.0.0.1 >> /etc/resolv.conf
+                   chmod 444 /etc/resolv.conf
+               fi
+           else
+               cp /etc/resolv.conf /etc/resolv.bak
+           fi
+           mv -f $rfile /etc/resolv.conf
+           chmod 444 /etc/resolv.conf
+       fi
 
-       plc_daemon dnsmasq
-       check
+       if [ $PLC_DNS_ENABLED -eq 1 ] ; then
+           plc_daemon dnsmasq
+           check
+       fi
 
        result "$MESSAGE"
        ;;
 
     stop)
-       MESSAGE=$"Stopping DNS server"
+       MESSAGE=$"Reverting /etc/resolv.conf"
        dialog "$MESSAGE"
-
-       killproc plc_dnsmasq
+       if [ -f "/etc/resolv.bak" ] ; then
+           ourfile=$(grep "$SIGNATURE" /etc/resolv.bak | wc -l)
+           if [ $ourfile -ne 0 ] ; then 
+               dialog "WARNING: original /etc/resolv.conf was generated by etc/plc.d/dns"              
+           fi
+           mv -f /etc/resolv.bak /etc/resolv.conf
+       fi
        check
+       result ""
+       if [ $PLC_DNS_ENABLED -eq 1 ] ; then
+           MESSAGE=$"Removing /etc/plc_hosts"
+           dialog "$MESSAGE"
+           [ -f "/etc/plc_hosts" ] && rm -f /etc/plc_hosts
+           result ""
+       fi
+
+       if [ $PLC_DNS_ENABLED -eq 1 ] ; then
+           MESSAGE="Stopping DNS server"
+           dialog "$MESSAGE"
+           killproc plc_dnsmasq
+           check
+           result ""
+       fi
 
-       result "$MESSAGE"
        ;;
 esac