--- a/client/scripts/bsdos
+++ b/client/scripts/bsdos
@@ -1,40 +1,46 @@
 #!/bin/sh
 
 make_resolv_conf() {
+  if [ x"$PEER_DNS" != x ] && [ x$"PEER_DNS" != xyes ]; then
+    return 0
+  fi
+  local conf=
   if [ x"$new_domain_name_servers" != x ]; then
-    cat /dev/null > /etc/resolv.conf.dhclient
     if [ "x$new_domain_search" != x ]; then
-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
+      conf="${conf}search ${new_domain_search}\n"
     elif [ "x$new_domain_name" != x ]; then
       # Note that the DHCP 'Domain Name Option' is really just a domain
       # name, and that this practice of using the domain name option as
       # a search path is both nonstandard and deprecated.
-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
+      conf="${conf}search ${new_domain_name}\n"
     fi
     for nameserver in $new_domain_name_servers; do
-      echo nameserver $nameserver >> /etc/resolv.conf.dhclient
+      conf="${conf}nameserver ${nameserver}\n"
     done
-
-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
-    cat /dev/null > /etc/resolv.conf.dhclient6
-    chmod 644 /etc/resolv.conf.dhclient6
-
     if [ "x${new_dhcp6_domain_search}" != x ] ; then
-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
+      conf="${conf}search ${new_dhcp6_domain_search}\n"
     fi
     for nameserver in ${new_dhcp6_name_servers} ; do
       # If the nameserver has a link-local address
       # add a <zone_id> (interface name) to it.
       case $nameserver in
 	  fe80:*) zone_id="%$interface";;
 	  FE80:*) zone_id="%$interface";;
 	  *)      zone_id='';;
       esac
-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
+      conf="${conf}nameserver ${nameserver}$zone_id\n"
     done
+  fi
 
-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
+  if [ x"$conf" != x ]; then
+    conf="# Generated by dhclient or interface $interface\n${conf}"
+    if type resolvconf >/dev/null 2>&1; then
+      printf "${conf}" | resolvconf -a $interface
+    else
+      printf "${conf}" > /etc/resolv.conf
+      chmod 644 /etc/resolv.conf
+    fi
   fi
 }
 
--- a/client/scripts/freebsd
+++ b/client/scripts/freebsd
@@ -11,73 +11,45 @@
 fi
 
 make_resolv_conf() {
+  if [ x"$PEER_DNS" != x ] && [ x$"PEER_DNS" != xyes ]; then
+    return 0
+  fi
+  local conf=
   if [ x"$new_domain_name_servers" != x ]; then
-    ( cat /dev/null > /etc/resolv.conf.dhclient )
-    exit_status=$?
-    if [ $exit_status -ne 0 ]; then
-      $LOGGER "Unable to create /etc/resolv.conf.dhclient: Error $exit_status"
-    else
-      if [ "x$new_domain_search" != x ]; then
-	( echo search $new_domain_search >> /etc/resolv.conf.dhclient )
-	exit_status=$?
-      elif [ "x$new_domain_name" != x ]; then
-	# Note that the DHCP 'Domain Name Option' is really just a domain
-	# name, and that this practice of using the domain name option as
-	# a search path is both nonstandard and deprecated.
-	( echo search $new_domain_name >> /etc/resolv.conf.dhclient )
-	exit_status=$?
-      fi
-      for nameserver in $new_domain_name_servers; do
-	if [ $exit_status -ne 0 ]; then
-	  break
-	fi
-	( echo nameserver $nameserver >>/etc/resolv.conf.dhclient )
-	exit_status=$?
-      done
-
-      # If there were no errors, attempt to mv the new file into place.
-      if [ $exit_status -eq 0 ]; then
-	( mv /etc/resolv.conf.dhclient /etc/resolv.conf )
-	exit_status=$?
-      fi
-
-      if [ $exit_status -ne 0 ]; then
-	$LOGGER "Error while writing new /etc/resolv.conf."
-      fi
+    if [ "x$new_domain_search" != x ]; then
+      conf="${conf}search ${new_domain_search}\n"
+    elif [ "x$new_domain_name" != x ]; then
+      # Note that the DHCP 'Domain Name Option' is really just a domain
+      # name, and that this practice of using the domain name option as
+      # a search path is both nonstandard and deprecated.
+      conf="${conf}search ${new_domain_name}\n"
     fi
+    for nameserver in $new_domain_name_servers; do
+      conf="${conf}nameserver ${nameserver}\n"
+    done
   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
-    ( cat /dev/null > /etc/resolv.conf.dhclient6 )
-    exit_status=$?
-    if [ $exit_status -ne 0 ] ; then
-      $LOGGER "Unable to create /etc/resolv.conf.dhclient6: Error $exit_status"
-    else
-      if [ "x${new_dhcp6_domain_search}" != x ] ; then
-	( echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6 )
-	exit_status=$?
-      fi
-      for nameserver in ${new_dhcp6_name_servers} ; do
-	if [ $exit_status -ne 0 ] ; then
-	  break
-	fi
 	# If the nameserver has a link-local address
 	# add a <zone_id> (interface name) to it.
 	case $nameserver in
 	    fe80:*) zone_id="%$interface";;
 	    FE80:*) zone_id="%$interface";;
 	    *)      zone_id='';;
 	esac
-	( echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6 )
-	exit_status=$?
-      done
-
-      if [ $exit_status -eq 0 ] ; then
-        ( mv /etc/resolv.conf.dhclient6 /etc/resolv.conf )
-	exit_status=$?
-      fi
+    if [ "x${new_dhcp6_domain_search}" != x ] ; then
+      conf="${conf}search ${new_dhcp6_domain_search}\n"
+    fi
+    for nameserver in ${new_dhcp6_name_servers} ; do
+      conf="${conf}nameserver ${nameserver}$zone_id\n"
+    done
+  fi
 
-      if [ $exit_status -ne 0 ] ; then
-	$LOGGER "Error while writing new /etc/resolv.conf."
-      fi
+  if [ x"$conf" != x ]; then
+    conf="# Generated by dhclient or interface $interface\n${conf}"
+    if type resolvconf >/dev/null 2>&1; then
+      printf "${conf}" | resolvconf -a $interface
+    else
+      printf "${conf}" > /etc/resolv.conf
+      chmod 644 /etc/resolv.conf
     fi
   fi
 }
--- a/client/scripts/linux
+++ b/client/scripts/linux
@@ -26,44 +26,49 @@
 ip=/sbin/ip
 
 make_resolv_conf() {
+  if [ x"$PEER_DNS" != x ] && [ x$"PEER_DNS" != xyes ]; then
+    return 0
+  fi
+  local conf=
   if [ x"$new_domain_name_servers" != x ]; then
-    cat /dev/null > /etc/resolv.conf.dhclient
-    chmod 644 /etc/resolv.conf.dhclient
-    if [ x"$new_domain_search" != x ]; then
-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
-    elif [ x"$new_domain_name" != x ]; then
+    if [ "x$new_domain_search" != x ]; then
+      conf="${conf}search ${new_domain_search}\n"
+    elif [ "x$new_domain_name" != x ]; then
       # Note that the DHCP 'Domain Name Option' is really just a domain
       # name, and that this practice of using the domain name option as
       # a search path is both nonstandard and deprecated.
-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
+      conf="${conf}search ${new_domain_name}\n"
     fi
     for nameserver in $new_domain_name_servers; do
-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
+      conf="${conf}nameserver ${nameserver}\n"
     done
-
-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
-    cat /dev/null > /etc/resolv.conf.dhclient6
-    chmod 644 /etc/resolv.conf.dhclient6
-
     if [ "x${new_dhcp6_domain_search}" != x ] ; then
-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
+      conf="${conf}search ${new_dhcp6_domain_search}\n"
     fi
     shopt -s nocasematch 
     for nameserver in ${new_dhcp6_name_servers} ; do
       # If the nameserver has a link-local address
       # add a <zone_id> (interface name) to it.
       if  [[ "$nameserver" =~ ^fe80:: ]]
       then
 	zone_id="%$interface"
       else
 	zone_id=
       fi
-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
+      conf="${conf}nameserver ${nameserver}$zone_id\n"
     done
     shopt -u nocasematch 
+  fi
 
-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
+  if [ x"$conf" != x ]; then
+    conf="# Generated by dhclient or interface $interface\n${conf}"
+    if type resolvconf >/dev/null 2>&1; then
+      printf "${conf}" | resolvconf -a $interface
+    else
+      printf "${conf}" > /etc/resolv.conf
+      chmod 644 /etc/resolv.conf
+    fi
   fi
 }
 
--- a/client/scripts/netbsd
+++ b/client/scripts/netbsd
@@ -1,40 +1,46 @@
 #!/bin/sh
 
 make_resolv_conf() {
-  if [ "x$new_domain_name" != x ] && [ x"$new_domain_name_servers" != x ]; then
-    cat /dev/null > /etc/resolv.conf.dhclient
-    if [ "x$new_domain_search" != x ]; then
-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
-    elif [ "x$new_domain_name" != x ]; then
+  if [ x"$PEER_DNS" != x ] && [ x$"PEER_DNS" != xyes ]; then
+    return 0
+  fi
+  local conf=
+  if [ x"$new_domain_name_servers" != x ]; then
+    if [ "x$new_domain_search" != x ]; then
+      conf="${conf}search ${new_domain_search}\n"
+    elif [ "x$new_domain_name" != x ]; then
       # Note that the DHCP 'Domain Name Option' is really just a domain
       # name, and that this practice of using the domain name option as
       # a search path is both nonstandard and deprecated.
-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
+      conf="${conf}search ${new_domain_name}\n"
     fi
     for nameserver in $new_domain_name_servers; do
-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
+      conf="${conf}nameserver ${nameserver}\n"
     done
-
-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
-    cat /dev/null > /etc/resolv.conf.dhclient6
-    chmod 644 /etc/resolv.conf.dhclient6
-
     if [ "x${new_dhcp6_domain_search}" != x ] ; then
-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
+      conf="${conf}search ${new_dhcp6_domain_search}\n"
     fi
     for nameserver in ${new_dhcp6_name_servers} ; do
       # If the nameserver has a link-local address
       # add a <zone_id> (interface name) to it.
       case $nameserver in
 	fe80:*) zone_id="%$interface";;
 	FE80:*) zone_id="%$interface";;
 	*)      zone_id='';;
       esac
-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
+      conf="${conf}nameserver ${nameserver}$zone_id\n"
     done
+  fi
 
-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
+  if [ x"$conf" != x ]; then
+    conf="# Generated by dhclient or interface $interface\n${conf}"
+    if type resolvconf >/dev/null 2>&1; then
+      printf "${conf}" | resolvconf -a $interface
+    else
+      printf "${conf}" > /etc/resolv.conf
+      chmod 644 /etc/resolv.conf
+    fi
   fi
 }
 
--- a/client/scripts/openbsd
+++ b/client/scripts/openbsd
@@ -1,40 +1,46 @@
 #!/bin/sh
 
 make_resolv_conf() {
-  if [ x"$new_domain_name_servers" != x ]; then
-    cat /dev/null > /etc/resolv.conf.dhclient
-    if [ x"$new_domain_search" != x ]; then
-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
-    elif [ x"$new_domain_name" != x ]; then
+  if [ x"$PEER_DNS" != x ] && [ x$"PEER_DNS" != xyes ]; then
+    return 0
+  fi
+  local conf=
+  if [ x"$new_domain_name_servers" != x ]; then
+    if [ "x$new_domain_search" != x ]; then
+      conf="${conf}search ${new_domain_search}\n"
+    elif [ "x$new_domain_name" != x ]; then
       # Note that the DHCP 'Domain Name Option' is really just a domain
       # name, and that this practice of using the domain name option as
       # a search path is both nonstandard and deprecated.
-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
+      conf="${conf}search ${new_domain_name}\n"
     fi
     for nameserver in $new_domain_name_servers; do
-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
+      conf="${conf}nameserver ${nameserver}\n"
     done
-
-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
-    cat /dev/null > /etc/resolv.conf.dhclient6
-    chmod 644 /etc/resolv.conf.dhclient6
-
     if [ "x${new_dhcp6_domain_search}" != x ] ; then
-      echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
+      conf="${conf}search ${new_dhcp6_domain_search}\n"
     fi
     for nameserver in ${new_dhcp6_name_servers} ; do
       # If the nameserver has a link-local address
       # add a <zone_id> (interface name) to it.
       case $nameserver in
 	fe80:*) zone_id="%$interface";;
 	FE80:*) zone_id="%$interface";;
 	*)      zone_id='';;
       esac
-      echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
+      conf="${conf}nameserver ${nameserver}$zone_id\n"
     done
+  fi
 
-    mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
+  if [ x"$conf" != x ]; then
+    conf="# Generated by dhclient or interface $interface\n${conf}"
+    if type resolvconf >/dev/null 2>&1; then
+      printf "${conf}" | resolvconf -a $interface
+    else
+      printf "${conf}" > /etc/resolv.conf
+      chmod 644 /etc/resolv.conf
+    fi
   fi
 }
 
--- a/client/scripts/solaris
+++ b/client/scripts/solaris
@@ -1,21 +1,39 @@
 #!/bin/sh  
 
 make_resolv_conf() {
+  if [ x"$PEER_DNS" != x ] && [ x$"PEER_DNS" != xyes ]; then
+    return 0
+  fi
+  local conf=
   if [ x"$new_domain_name_servers" != x ]; then
-    cat /dev/null > /etc/resolv.conf.dhclient
-    if [ x"$new_domain_search" != x ]; then
-      echo search $new_domain_search >> /etc/resolv.conf.dhclient
-    elif [ x"$new_domain_name" != x ]; then
+    if [ "x$new_domain_search" != x ]; then
+      conf="${conf}search ${new_domain_search}\n"
+    elif [ "x$new_domain_name" != x ]; then
       # Note that the DHCP 'Domain Name Option' is really just a domain
       # name, and that this practice of using the domain name option as
       # a search path is both nonstandard and deprecated.
-      echo search $new_domain_name >> /etc/resolv.conf.dhclient
+      conf="${conf}search ${new_domain_name}\n"
     fi
     for nameserver in $new_domain_name_servers; do
-      echo nameserver $nameserver >>/etc/resolv.conf.dhclient
+      conf="${conf}nameserver ${nameserver}\n"
+    done
+  elif [ "x${new_dhcp6_name_servers}" != x ] ; then
+    if [ "x${new_dhcp6_domain_search}" != x ] ; then
+      conf="${conf}search ${new_dhcp6_domain_search}\n"
+    fi
+    for nameserver in ${new_dhcp6_name_servers} ; do
+      conf="${conf}nameserver ${nameserver}\n"
     done
+  fi
 
-    mv /etc/resolv.conf.dhclient /etc/resolv.conf
+  if [ x"$conf" != x ]; then
+    conf="# Generated by dhclient or interface $interface\n${conf}"
+    if type resolvconf >/dev/null 2>&1; then
+      printf "${conf}" | resolvconf -a $interface
+    else
+      printf "${conf}" > /etc/resolv.conf
+      chmod 644 /etc/resolv.conf
+    fi
   fi
 }
 
