From f195973b7bd080bc4d14aae574e63e89c2e2c86b Mon Sep 17 00:00:00 2001 From: David Cantrell Date: Sep 19 2009 06:22:33 +0000 Subject: - Update dhclient-script with handlers for DHCPv6 states --- diff --git a/dhclient-script b/dhclient-script index 928e1f1..90caeac 100755 --- a/dhclient-script +++ b/dhclient-script @@ -105,6 +105,32 @@ make_resolv_conf() { rm -f ${rscf} fix_context /etc/resolv.conf + elif [ -n "${new_dhcp6_name_servers}" ] || + [ -n "${new_dhcp6_domain_search}" ]; then + save_previous /etc/resolv.conf + rscf="$(mktemp /tmp/XXXXXX)" + echo "; generated by /sbin/dhclient-script" > ${rscf} + + if [ -n "${SEARCH}" ]; then + echo "search ${SEARCH}" >> $rscf + else + if [ -n "${new_dhcp6_domain_search}" ]; then + echo "search ${new_dhcp6_domain_search//\\032/ }" >> ${rscf} + fi + fi + + if [ -n "${RES_OPTIONS}" ]; then + echo "options ${RES_OPTIONS}" >> ${rscf} + fi + + for nameserver in ${new_dhcp6_name_servers} ; do + echo "nameserver ${nameserver}" >> ${rscf} + done + + change_resolv_conf ${rscf} + rm -f ${rscf} + + fix_context /etc/resolv.conf fi } @@ -376,6 +402,55 @@ dhconfig() { fi } +dh6config() { + case "${reason}" in + BOUND6) + if [ -n "${new_ip6_address}" ] || + [ -n "${new_ip6_prefixlen}" ]; then + exit_with_hooks 2 + fi + + ip -f inet6 addr add ${new_ip6_address}/${new_ip6_prefixlen} \ + dev ${interface} scope global + make_resolv_conf + + break + ;; + + RENEW6|REBIND6) + if [ ! "${new_dhcp6_name_servers}" = "${old_dhcp6_name_servers}" ] || + [ ! "${new_dhcp6_domain_search}" = "${old_dhcp6_domain_search}" ]; then + make_resolv_conf + fi + + break + ;; + + DEPREF6) + if [ -n "${new_ip6_prefixlen}" ]; then + exit_with_hooks 2 + fi + + ip -f inet6 addr change ${new_ip6_address}/${new_ip6_prefixlen} \ + dev ${interface} scope global preferred_lft 0 + + break + ;; + esac + + # execute any additional client side configuration scripts we have + if [ -d ${ETCDIR}/dhclient.d ]; then + for f in ${ETCDIR}/dhclient.d/*.sh ; do + if [ -x ${f} ]; then + subsystem="${f%.sh}" + subsystem="${subsystem##*/}" + . ${f} + "${subsystem}_config" + fi + done + fi +} + get_prefix() { ip="${1}" nm="${2}" @@ -457,6 +532,16 @@ case "${reason}" in exit_with_hooks 0 ;; + PREINIT6) + # ensure interface is up + ip link set ${interface} up + + # remove any stale addresses from aborted clients + ip -f inet6 addr flush dev ${interface} scope global permanent + + exit_with_hooks 0 + ;; + ARPCHECK|ARPSEND) if [ -z "${new_ip_address}" ] || [ -z "${interface}" ] || arping -q -f -c 2 -w 3 -D -I ${interface} ${new_ip_address}; then @@ -471,6 +556,40 @@ case "${reason}" in exit_with_hooks 0 ;; + BOUND6|RENEW6|REBIND6|DEPREF6) + dh6config + exit_with_hooks 0 + ;; + + EXPIRE6|RELEASE6|STOP6) + if [ -n "${old_ip6_address}" ] || [ -n "${old_ip6_prefixlen}" ]; then + exit_with_hooks 2 + fi + + ip -f inet6 addr del ${old_ip6_address}/${old_ip6_prefixlen} \ + dev ${interface} + + # execute any additional client side configuration scripts we have + if [ -d ${ETCDIR}/dhclient.d ]; then + for f in ${ETCDIR}/dhclient.d/*.sh ; do + if [ -x ${f} ]; then + subsystem="${f%.sh}" + subsystem="${subsystem##*/}" + . ${f} + "${subsystem}_restore" + fi + done + fi + + if [ -x ${ETCDIR}/dhclient-${interface}-down-hooks ]; then + . ${ETCDIR}/dhclient-${interface}-down-hooks + elif [ -x ${ETCDIR}/dhclient-down-hooks ]; then + . ${ETCDIR}/dhclient-down-hooks + fi + + exit_with_hooks 0 + ;; + EXPIRE|FAIL|RELEASE|STOP) # only restore config files if there are no other dhclient processes # running (#306381) diff --git a/dhcp.spec b/dhcp.spec index 3894ff7..770ce5a 100644 --- a/dhcp.spec +++ b/dhcp.spec @@ -13,7 +13,7 @@ Summary: Dynamic host configuration protocol software Name: dhcp Version: %{basever}p1 -Release: 8%{?dist} +Release: 9%{?dist} # NEVER CHANGE THE EPOCH on this package. The previous maintainer (prior to # dcantrell maintaining the package) made incorrect use of the epoch and # that's why it is at 12 now. It should have never been used, but it was. @@ -479,6 +479,9 @@ fi %attr(0644,root,root) %{_mandir}/man3/omapi.3.gz %changelog +* Fri Sep 18 2009 David Cantrell - 12:4.1.0p1-9 +- Update dhclient-script with handlers for DHCPv6 states + * Wed Aug 26 2009 David Cantrell - 12:4.1.0p1-8 - Conditionalize restorecon calls in post scriptlets (#519479)