#!/bin/bash
#
# dhclient-enter-hooks script. This script is created by redborder
# and is used to manage how resolv.conf file is generated.
#
# Author: Alberto Rodríguez <arodriguez@redborder.com>
#


make_resolv_conf() {
    [ "${PEERDNS}" = "no" ] && return

    if [ "${reason}" = "RENEW" ] &&
       [ "${new_domain_name}" = "${old_domain_name}" ] &&
       [ "${new_domain_name_servers}" = "${old_domain_name_servers}" ]; then
        return
    fi

    if [ -n "${new_domain_name}" ] ||
       [ -n "${new_domain_name_servers}" ] ||
       [ -n "${new_domain_search}" ]; then
        rscf="$(mktemp ${TMPDIR:-/tmp}/XXXXXX)"
        [[ -z "${rscf}" ]] && return
        echo "; generated by /usr/sbin/dhclient-script" > ${rscf}

        if [ -n "${SEARCH}" ]; then
            search="${SEARCH}"
        else
            if [ -n "${new_domain_search}" ]; then
                # Remove instaces of \032 (#450042)
                search="${new_domain_search//\\032/ }"
            elif [ -n "${new_domain_name}" ]; 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.
                search="${new_domain_name}"
            fi
        fi

        if [ -n "${search}" ]; then
            echo "search ${search}" >> $rscf
        fi

        if [ -n "${RES_OPTIONS}" ]; then
            echo "options ${RES_OPTIONS}" >> ${rscf}
        fi

        for nameserver in ${new_domain_name_servers} ; do
            echo "nameserver ${nameserver}" >> ${rscf}
        done

        # REDBORDER MODIFICATION ###########################################
        cp ${rscf} /etc/redborder/original_resolv.conf
        #change_resolv_conf ${rscf}
        ######################################################################

        rm -f ${rscf}

        if [ -n "${search}" ]; then
            eventually_add_hostnames_domain_to_search "${search}"
        fi
    elif [ -n "${new_dhcp6_name_servers}" ] ||
         [ -n "${new_dhcp6_domain_search}" ]; then
        rscf="$(mktemp ${TMPDIR:-/tmp}/XXXXXX)"
        [[ -z "${rscf}" ]] && return
        echo "; generated by /usr/sbin/dhclient-script" > ${rscf}

        if [ -n "${SEARCH}" ]; then
            search="${SEARCH}"
        else
            if [ -n "${new_dhcp6_domain_search}" ]; then
                search="${new_dhcp6_domain_search//\\032/ }"
            fi
        fi

        if [ -n "${search}" ]; then
            echo "search ${search}" >> $rscf
        fi

        if [ -n "${RES_OPTIONS}" ]; then
            echo "options ${RES_OPTIONS}" >> ${rscf}
        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" >> ${rscf}
        done
        shopt -u nocasematch

        change_resolv_conf ${rscf}
        rm -f ${rscf}

        if [ -n "${search}" ]; then
            eventually_add_hostnames_domain_to_search "${search}"
        fi
    fi
}
