#!/bin/sh /etc/rc.common

USE_PROCD=1
START=18
STOP=51

PROG=/usr/bin/hickory-dns
CONF=/etc/hickory-dns/forwarder.toml
CONF_DIR=/etc/hickory-dns
TSIG_KEY=/etc/hickory-dns/update.key

RUN_USER=nobody
RUN_GROUP=nogroup

prepare_config_dir() {
    [ -d "$CONF_DIR" ] || mkdir -p "$CONF_DIR"

    chown -R "$RUN_USER:$RUN_GROUP" "$CONF_DIR" 2>/dev/null || true

    find "$CONF_DIR" -type d -exec chmod 755 {} \; 2>/dev/null || true
    find "$CONF_DIR" -type f -exec chmod 644 {} \; 2>/dev/null || true
}

generate_tsig_key() {
    if [ ! -f "$TSIG_KEY" ]; then
        dd if=/dev/urandom bs=32 count=1 of="$TSIG_KEY" 2>/dev/null
    fi

    chown "$RUN_USER:$RUN_GROUP" "$TSIG_KEY" 2>/dev/null || true
    chmod 400 "$TSIG_KEY" 2>/dev/null || true
}

start_service() {
    prepare_config_dir
    generate_tsig_key

    procd_open_instance hickory-dns
    procd_set_param command "$PROG" -c "$CONF" -q
    procd_set_param stdout 1
    procd_set_param stderr 1
    procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
    procd_close_instance hickory-dns

    procd_open_instance ipv6-neigh
    procd_set_param command /usr/bin/ipv6-neigh-wrapper
    procd_set_param stdout 1
    procd_set_param stderr 1
    procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
    procd_close_instance ipv6-neigh
}
