#!/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.

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

# if we dont have a resolv peer file, just go away
[ ! -f "${resolvpeer}" ] && exit 0

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

        echo "${LN}" >> "${dest}"
    done
}

rm_resolv_peer()
{
    logger -t "$0" "removing stale peerdns file"
    rm -f "${resolvpeer}"
}

do_resolv_peer()
{
    logger -t "$0" "new peerdns file on interface $1..."

    # some temporaries
    ppconftmp=$(mktemp /tmp/XXXXXX)
    ppmasqtmp=$(mktemp /tmp/XXXXXX)

    resolvlast="/etc/resolv-dhcp-$1.conf"

    echo "# Generated by NSC network management." > "${ppconftmp}"

    process_peer "$1" "${ppconftmp}" "${ppmasqtmp}" < "${resolvpeer}"

    if [ -s "${resolvmasq}" ]; then
        echo "nameserver 127.0.0.1" >> "${ppconftmp}"
    fi

    # now save everything
    mv -f "${ppconftmp}" "${resolvconf}"

    if [ -s "${ppmasqtmp}" ]; then
        mv -f "${ppmasqtmp}" "${resolvmasq}"
    else
        rm -f "${ppmasqtmp}"
    fi

    mv -f "${resolvpeer}" "${resolvlast}"

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

case "$1-$2"
in
    *-lo) rm_resolv_peer "$2" ;;
    up-*) do_resolv_peer "$2" ;;
esac
