--- dhcp-4.3.6/client/scripts/bsdos
+++ dhcp-4.3.6/client/scripts/bsdos
@@ -1,27 +1,25 @@
 #!/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
@@ -31,10 +29,18 @@
 	  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
 }
 
--- dhcp-4.3.6/client/scripts/freebsd
+++ dhcp-4.3.6/client/scripts/freebsd
@@ -11,54 +11,23 @@
 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
@@ -66,18 +35,21 @@
 	    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
 }
--- dhcp-4.3.6/client/scripts/linux
+++ dhcp-4.3.6/client/scripts/linux
@@ -35,16 +35,16 @@
 # update /etc/resolv.conf based on received values
 # This updated version mostly follows Debian script by Andrew Pollock et al.
 make_resolv_conf() {
-    local new_resolv_conf
+    if [ x"$PEER_DNS" != x ] && [ x"$PEER_DNS" != xyes ]; then
+	return 0
+    fi
+    local conf
 
     # DHCPv4
     if [ -n "$new_domain_search" ] || [ -n "$new_domain_name" ] ||
        [ -n "$new_domain_name_servers" ]; then
-        new_resolv_conf=/etc/resolv.conf.dhclient-new
-        rm -f $new_resolv_conf
-
         if [ -n "$new_domain_name" ]; then
-            echo domain ${new_domain_name%% *} >>$new_resolv_conf
+            conf="${conf}domain ${new_domain_name%% *}\n"
         fi
 
         if [ -n "$new_domain_search" ]; then
@@ -60,31 +60,23 @@
                     new_domain_search="$new_domain_name $new_domain_search"
                 fi
             fi
-            echo "search ${new_domain_search}" >> $new_resolv_conf
+            conf="${conf}search ${new_domain_search}\n"
         elif [ -n "$new_domain_name" ]; then
-            echo "search ${new_domain_name}" >> $new_resolv_conf
+            conf="${conf}search ${new_domain_name}\n"
         fi
 
         if [ -n "$new_domain_name_servers" ]; then
             for nameserver in $new_domain_name_servers; do
-                echo nameserver $nameserver >>$new_resolv_conf
+                conf="${conf}nameserver $nameserver\n"
             done
         else # keep 'old' nameservers
-            sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p /etc/resolv.conf >>$new_resolv_conf
+            conf="${conf}$(sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p /etc/resolv.conf)\n"
         fi
 
-	if [ -f /etc/resolv.conf ]; then
-	    chown --reference=/etc/resolv.conf $new_resolv_conf
-	    chmod --reference=/etc/resolv.conf $new_resolv_conf
-	fi
-        mv -f $new_resolv_conf /etc/resolv.conf
     # DHCPv6
     elif [ -n "$new_dhcp6_domain_search" ] || [ -n "$new_dhcp6_name_servers" ]; then
-        new_resolv_conf=/etc/resolv.conf.dhclient-new
-        rm -f $new_resolv_conf
-
         if [ -n "$new_dhcp6_domain_search" ]; then
-            echo "search ${new_dhcp6_domain_search}" >> $new_resolv_conf
+            conf="${conf}search ${new_dhcp6_domain_search}\n"
         fi
 
         if [ -n "$new_dhcp6_name_servers" ]; then
@@ -94,17 +86,21 @@
                    [ "${nameserver##FE80::}" != "$nameserver" ]; then
                     nameserver="${nameserver}%${interface}"
                 fi
-                echo nameserver $nameserver >>$new_resolv_conf
+                conf="${conf}nameserver $nameserver\n"
             done
         else # keep 'old' nameservers
-            sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p /etc/resolv.conf >>$new_resolv_conf
+            conf="${conf}$(sed -n /^\w*[Nn][Aa][Mm][Ee][Ss][Ee][Rr][Vv][Ee][Rr]/p /etc/resolv.conf)\n"
         fi
+    fi
 
-	if [ -f /etc/resolv.conf ]; then
-            chown --reference=/etc/resolv.conf $new_resolv_conf
-            chmod --reference=/etc/resolv.conf $new_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
-        mv -f $new_resolv_conf /etc/resolv.conf
     fi
 }
 
--- dhcp-4.3.6/client/scripts/netbsd
+++ dhcp-4.3.6/client/scripts/netbsd
@@ -1,27 +1,25 @@
 #!/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"$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
-      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
@@ -31,10 +29,18 @@
 	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
 }
 
--- dhcp-4.3.6/client/scripts/openbsd
+++ dhcp-4.3.6/client/scripts/openbsd
@@ -1,27 +1,25 @@
 #!/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
-
-    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
@@ -31,10 +29,18 @@
 	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
 }
 
--- dhcp-4.3.6/client/scripts/solaris
+++ dhcp-4.3.6/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
 }
 
