#!/bin/sh

PREREQ="iscsi"

prereqs() {
	echo "$PREREQ"
}

case "$1" in
	prereqs)
		prereqs
		exit 0
	;;
esac

. /scripts/functions

DDL_CONF="/etc/ddl.conf"
RESOLV_CONF="/etc/resolv.conf"

DNS_DOMAIN_MARKER=""
SELECTED_FILE=""
DNS_SERVERS=""

read_ddl_value() {
	key="$1"
	file="$2"

	[ -f "$file" ] || return 0

	sed -n "
		s/[[:space:]]*#.*\$//
		s/^[[:space:]]*$key[[:space:]]*=[[:space:]]*//p
	" "$file" | tail -n 1 | sed "
		s/^[[:space:]]*//
		s/[[:space:]]*$//
		s/^['\"]//
		s/['\"]$//
	"
}

config_domain_name="$(read_ddl_value "domain-name" "$DDL_CONF")"

if [ -n "$config_domain_name" ]; then
	DNS_DOMAIN_MARKER="$config_domain_name"
fi

if [ -z "$DNS_DOMAIN_MARKER" ]; then
	log_warning_msg "domain-name is not set in $DDL_CONF"
	exit 0
fi

log_begin_msg "Creating resolv.conf from DHCP"
log_begin_msg "Using DHCP domain marker: $DNS_DOMAIN_MARKER"

read_net_config() {
	file="$1"

	unset DEVICE PROTO IPV4ADDR IPV4BROADCAST IPV4NETMASK
	unset IPV4GATEWAY IPV4DNS0 IPV4DNS1 IPV4DNS2
	unset HOSTNAME DNSDOMAIN NISDOMAIN ROOTSERVER ROOTPATH
	unset filename UPTIME DHCPLEASETIME DOMAINSEARCH

	. "$file"
}

add_dns() {
	dns="$1"

	[ -n "$dns" ] || return 0
	[ "$dns" != "0.0.0.0" ] || return 0

	case " $DNS_SERVERS " in
		*" $dns "*) ;;
		*) DNS_SERVERS="$DNS_SERVERS $dns" ;;
	esac
}

for file in /run/net-*.conf /run/net-*.conf.*; do
	[ -f "$file" ] || continue

	read_net_config "$file"

	log_begin_msg "Checking DHCP config: $file domain=$DNSDOMAIN device=$DEVICE"

	if [ "$DNSDOMAIN" = "$DNS_DOMAIN_MARKER" ]; then
		SELECTED_FILE="$file"
		break
	fi
done

if [ -z "$SELECTED_FILE" ]; then
	log_warning_msg "No DHCP config found with DNSDOMAIN=$DNS_DOMAIN_MARKER"
	exit 0
fi

log_begin_msg "Selected DHCP config for resolv.conf: $SELECTED_FILE"

read_net_config "$SELECTED_FILE"

add_dns "$IPV4DNS0"
add_dns "$IPV4DNS1"
add_dns "$IPV4DNS2"

if [ -z "$DNS_SERVERS" ]; then
	log_warning_msg "Selected DHCP config has no valid DNS servers: $SELECTED_FILE"
	exit 0
fi

mkdir -p /etc

{
	echo "# Generated in initramfs from DHCP"
	echo "# Source: $SELECTED_FILE"
	echo "# DHCP domain marker: $DNS_DOMAIN_MARKER"

	if [ -n "$DNSDOMAIN" ]; then
		echo "search $DNSDOMAIN"
	fi

	for dns in $DNS_SERVERS; do
		echo "nameserver $dns"
	done
} > "$RESOLV_CONF"

log_success_msg "Created $RESOLV_CONF:$DNS_SERVERS"

exit 0
