# # Script fragment to make dhclient supply nameserver information to resolvconf # # Tips: # * Be careful about changing the environment since this is sourced # * This script fragment uses bash features # * As of isc-dhcp-client 4.2 the "reason" (for running the script) can be one of the following. # (Listed on man page:) MEDIUM(0) PREINIT(0) BOUND(M) RENEW(M) REBIND(M) REBOOT(M) EXPIRE(D) FAIL(D) RELEASE(D) STOP(D) NBI(-) TIMEOUT(M) # (Also used in master script:) ARPCHECK(0), ARPSEND(0) # (Also used in master script:) PREINIT6(0) BOUND6(M) RENEW6(M) REBIND6(M) DEPREF6(0) EXPIRE6(D) RELEASE6(D) STOP6(D) # (0) = master script does not run make_resolv_conf # (M) = master script runs make_resolv_conf # (D) = master script downs interface # (-) = master script does nothing with this if [ -x /sbin/resolvconf ] ; then # For safety, first undefine the nasty default make_resolv_conf() make_resolv_conf() { : ; } case "$reason" in BOUND|RENEW|REBIND|REBOOT|TIMEOUT) # Define a resolvconf-compatible m_r_c() function # It gets run later (or, in the TIMEOUT case, MAY get run later) make_resolv_conf() { local R local N R="" if [ "$new_domain_name_servers" ] && [ "$new_domain_name" ] ; then R="${R}domain $new_domain_name " fi if [ "$new_domain_name_servers" ] && [ "$new_domain_search" ] ; then R="${R}search $new_domain_search " fi for N in $new_domain_name_servers ; do R="${R}nameserver $N " done [ ! "$interface" ] || echo -n "$R" | /sbin/resolvconf -a "${interface}.dhclient" } ;; BOUND6|RENEW6|REBIND6) # Define a resolvconf-compatible m_r_c() function # It gets run later (or, in the TIMEOUT case, MAY get run later) make_resolv_conf() { local R local N local N_LOW local ZONE_ID R="" if [ "$new_dhcp6_name_servers" ] && [ "$new_dhcp6_domain_search" ] ; then R="${R}search $new_dhcp6_domain_search " fi for N in $new_dhcp6_name_servers ; do # If the nameserver has a link-local address # then add a zone ID (interface name) to it. N_LOW="$(echo "$N" | tr '[:upper:]' '[:lower:]')" if expr "$N_LOW" : ^fe80:: >/dev/null ; then ZONE_ID="%$interface" else ZONE_ID="" fi R="${R}nameserver $N$ZONE_ID " done [ ! "$interface" ] || echo -n "$R" | /sbin/resolvconf -a "${interface}.ip6.dhclient" } ;; EXPIRE|FAIL|RELEASE|STOP) # Delete resolv.conf info [ ! "$interface" ] || /sbin/resolvconf -d "${interface}.dhclient" ;; EXPIRE6|RELEASE6|STOP6) # Delete resolv.conf info [ ! "$interface" ] || /sbin/resolvconf -d "${interface}.ip6.dhclient" ;; esac fi