set_password() {
	local user="$1"
	local passwd="$2"

	[ -z "$passwd" ] && passwd="$(mkpasswd admin01)"

	sed -i -e "s:^$user\:[^\:]*\::$user\:$passwd\::" /etc/shadow
}

migrate_pasword() {
	local user=$1
	local spwd root_pwd

	spwd="$(sed -ne "/^$user:/s/^$user:\([^:]*\):.*$/\1/p" /etc/shadow)"
	[ -n "${spwd#[\!x]}" ] && {
		return 0
	}

	root_pwd="$(sed -ne "/^root:/s/^root:\([^:]*\):.*$/\1/p" /etc/shadow)"
	[ -z "${root_pwd#[\!x]}" ] && {
		return 0
	}

	set_password "$user" "$root_pwd"
}

push_password() {
	local user=$1
	local passwd hash salt spwd
	spwd="$(sed -ne "/^$user:/s/^$user:\([^:]*\):.*$/\1/p" /etc/shadow)"
	[ -n "$spwd" ] && [ "$spwd" != "!" ] && {
		return 1
	}

	passwd=$(mnf_info -x)
	[ "$passwd" = "N/A" ] || [ -z "$passwd" ] && {
		set_password "$user"
		return 0
	}

	#sanity check
	hash="${passwd##*$}"
	salt="${passwd%\$*}"
	salt="${salt##*$}"

	[ "${#salt}" = 8 ] || [ "${#salt}" = 16 ] || {
		set_password "$user"
		return 0
	}

	[ "${#hash}" = 22 ] || [ "${#hash}" = 43 ] || [ "${#hash}" = 86 ] || {
		set_password "$user"
		return 0
	}

	set_password "$user" "$passwd"
}

set_passwords() {
	push_password root 
	if [ $? -eq 1 ]; then
	#root password is already set, probably upgrading with keep settings
		migrate_pasword admin
	else
		push_password admin
	fi
}

boot_hook_add preinit_main set_passwords 
