#!/bin/sh

# Copyright (C) 2014  Sangoma Technologies Corp.
# All Rights Reserved.
#
# Author(s):
# Leonardo Lang <lang@sangoma.com>
#
# This code is Sangoma Technologies Confidential Property.
# Use of and access to this code is covered by a previously executed
# non-disclosure agreement between Sangoma Technologies and the Recipient.
# This code is being supplied for evaluation purposes only and is not to be
# used for any other purpose.

resolvconf="/etc/resolv.conf"
resolvpeer="/etc/resolv-peerdns.conf"
resolvmasq="/etc/resolv.dnsmasq"

process_peer()
{
    while IFS="" read LN; do
        grep -F -q "${LN}" "${resolvconf}" "${resolvmasq}" 2>/dev/null; ret=$?
        if [ $ret -ne 1 ]; then
            continue
        fi

        dest="$2"
        case "${LN}" in
            *nameserver*)
                if [ -s "${resolvmasq}" ]; then
                    dest="$3"
                fi
            ;;
        esac

        echo "${LN} ;; peerdns $1" >> "${dest}"
    done
}

process_conf()
{
    grep -v ";; peerdns $1" < "${resolvconf}" > "$2"
    grep -v ";; peerdns $1" < "${resolvmasq}" > "$3"
}

fix_resolv_files()
{
    # some temporaries
    rsctmp=$(mktemp /tmp/XXXXXX)
    rsmtmp=$(mktemp /tmp/XXXXXX)
    ppctmp=$(mktemp /tmp/XXXXXX)
    ppmtmp=$(mktemp /tmp/XXXXXX)

    process_conf "$1" ${rsctmp} ${rsmtmp}
    process_peer "$1" ${ppctmp} ${ppmtmp} < "${resolvpeer}"

    rm -f "${resolvpeer}"

    newctmp=$(mktemp /tmp/XXXXXX)
    newmtmp=$(mktemp /tmp/XXXXXX)

    cat "${rsctmp}" "${ppctmp}" > "${newctmp}"
    cat "${rsmtmp}" "${ppmtmp}" > "${newmtmp}"

    mv -f "${newctmp}" "${resolvconf}"
    mv -f "${newmtmp}" "${resolvmasq}"

    /sbin/restorecon "${resolvconf}"
    /sbin/restorecon "${resolvmasq}"

    rm -f "${rsctmp}" "${ppctmp}" "${rsmtmp}" "${ppmtmp}"
}

case "$1"
in
    "up")
        [ -f /etc/resolv-peerdns.conf ] && \
            fix_resolv_files "$2"
    ;;
esac
