#!/bin/sh
#
# $NetBSD: nsd,v 1.2 2018/09/07 16:51:12 christos Exp $
#

# PROVIDE: named
# REQUIRE: NETWORKING mountcritremote syslogd
# BEFORE:  DAEMON
# KEYWORD: chrootdir

$_rc_subr_loaded . /etc/rc.subr

name="nsd"
rcvar=$name
command="/usr/sbin/${name}"
pidfile="/var/run/${name}.pid"
required_files="/etc/${name}/${name}.conf"
start_precmd="nsd_precmd"

nsd_migrate()
{
       local src="$1"
       local dst="$2$1"
       echo "Migrating $src to $dst"
(
       diff=false
       cd "$src"
       mkdir -p "$dst"
       for f in $(find . -type f)
       do
               f="${f##./}"
               case "$f" in
               */*)
                       ds="$(dirname "$f")"
                       dd="$dst/$ds"
                       mkdir -p "$dd"
                       chmod "$(stat -f "%p" "$ds" |
                           sed -e 's/.*\([0-7][0-7][0-7][0-7]\)$/\1/g')" "$dd"
                       chown "$(stat -f %u:%g "$ds")" "$dd"
                       ;;
               *)
                       ;;
               esac
               if [ -r "$dst/$f" ]
               then
                       if ! cmp "$f" "$dst/$f"; then
                               diff=true
                       fi
               else
                       cp -p "$f" "$dst/$f"
               fi
       done
       if $diff; then
               echo "Cannot complete migration because files are different"
               echo "Run 'diff -r $src $dst' resolve the differences"
       else
               rm -fr "$src"
               ln -s "$dst" "$src"
       fi
)
}

nsd_precmd()
{
       if [ -z "${nsd_chrootdir}" ]; then
               return
       fi

       if [ ! -h /etc/nsd ]; then
               nsd_migrate /etc/nsd ${nsd_chrootdir}
       fi
       ln -sf "${nsd_chrootdir}${pidfile}" "${pidfile}"
}

load_rc_config $name
run_rc_command "$1"