--- a/client/scripts/bsdos +++ b/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 # If we're making confs, may as well make an ntp.conf too make_ntp_conf --- a/client/scripts/freebsd +++ b/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 (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 # If we're making confs, may as well make an ntp.conf too --- a/client/scripts/linux +++ b/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 # If we're making confs, may as well make an ntp.conf too --- a/client/scripts/netbsd +++ b/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 # If we're making confs, may as well make an ntp.conf too make_ntp_conf --- a/client/scripts/openbsd +++ b/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 # If we're making confs, may as well make an ntp.conf too make_ntp_conf --- 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 # If we're making confs, may as well make an ntp.conf too make_ntp_conf