#!/bin/sh
# Import foo/bar=baz from environment variables into the debconf db.
set -e
export DEBIAN_FRONTEND=none
. /usr/share/debconf/confmodule

# The hostname parameter might have been consumed by the kernel already
# (kernel parameter since v6.0-rc1):
if [ "$(hostname)" != '(none)' -a "$(hostname)" != '?' ]; then
	# Propagate accordingly so that the debconf magic can happen as usual
	# (#1031643):
	hostname="$(hostname)"

	# Unset in UTS so that netcfg doesn't see an already-set hostname, which
	# would defeat the idea of supplying a default value (#1035349).
	#
	# Notes:
	#  - If using `hostname ''`, busybox's hostname would return '?' instead
	#    of '(none)'; the former happens when the first character of the
	#    nodename member of the utsname struct is null; the latter is the
	#    actual default string, courtesy of CONFIG_DEFAULT_HOSTNAME since
	#    2011, and of the hardcoded '(none)' before then.
	#  - netcfg's dhcp.c detects both empty string and '(none)', so setting
	#    either of those should work equally well.
	#  - Settle for '(none)' to stay in line with what would have happened
	#    if the kernel hadn't started considering hostname to be a kernel
	#    parameter: the default value would have been kept.
	hostname '(none)'
fi

NEWLINE='
'
OLDIFS=$IFS
IFS=$NEWLINE
for line in $(env); do
	var="${line%%=*}"
	val="${line#[!=]*=}"
	# support preseeding without forcing seen flag
	if [ "${var%\?}" != "$var" ]; then
		var="${var%\?}"
		seen=
	else
		seen=1
	fi
	# grep out the normal variables with no slashes
	varnoslash="${var##*/*}"
	if [ "$val" != "" ]; then
		if [ "$varnoslash" != "" ]; then
			var=$(grep "^$varnoslash[[:space:]]" /etc/preseed_aliases) || true
			var=${var#*[[:space:]]}
		fi
		if [ "$var" != "" ]; then
			owner="${var%:*}"
			if [ "$owner" = "$var" ]; then
				owner="d-i"
			fi
			var="${var#*:}"
			
			# remove single quotes from around value
			val="${val#\'}"
			val="${val%\'}"
			# remove double quotes (user can type those for values
			# with spaces)
			val="${val#\"}"
			val="${val%\"}"
			
			IFS=$OLDIFS
			if ! db_set "$var" "$val"; then
				db_register debian-installer/dummy "$var"
				db_set "$var" "$val"
				db_subst "$var" ID "$var"
			fi
			
			if db_metaget "$var" type; then
				type="$RET"
			else
				type=unknown
			fi
			echo "$owner $var $type $val" >> /var/lib/preseed/log

			if [ "$seen" ]; then
				db_fset "$var" seen true
			else
				echo "$owner $var seen false" >> /var/lib/preseed/log
			fi
			IFS=$NEWLINE
		fi
	fi
done
