#!/bin/bash

PREREQ="udev"

prereqs()
{
    echo "$PREREQ"
}

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

. /scripts/functions
. /scripts/security-functions

if ! grep -q " ${rootmnt} .*rw" /proc/mounts; then
	mount -o remount,rw ${ROOT} ${rootmnt}
fi

MODULE_DIR="/lib/modules/$(uname -r)/ksaf"

cmdline=$(cat /proc/cmdline)

CONFIG_DIR=${rootmnt}/etc/ksaf/mod_conf

insmod_kmod_for_conf()
{
	local found_flag=0
	local PARAMS=""
	local conf_name=""

	for mod_conf in $CONFIG_DIR/*.conf; do
		if [ -f "$mod_conf" ]; then
			conf_name="${mod_conf##*/}"
			conf_name="${conf_name%.conf}"
			if [ "$conf_name" == "$1" ]; then
				PARAMS=$(cat "$mod_conf")
				modprobe $1 $PARAMS
				found_flag=1
			fi
		fi
	done

	if [ "$found_flag" -eq 0 ]; then
		modprobe "$1"
	fi
}

insmod_kbox()
{
	if echo "$cmdline" | grep -qE 'security=([^,]+,)*[^,]*box([^,]*|$)'; then
		insmod_kmod_for_conf $1
	fi
}

if echo "$cmdline" | grep -qE 'lsm=([^,]+,)*[^,]*ksaf([^,]*|$)'; then
	if [ -d "$MODULE_DIR" ]; then
		# 遍历目录中的所有 .ko 文件
		for module in $MODULE_DIR/*.ko; do
			if [ -f "$module" ]; then
				module_name="${module##*/}"
				module_name="${module_name%.ko}"
				if [ "$module_name" != "ksaf_main" ]; then
					#附加组件ko需要通过配置文件读取参数，并加载
					if [ "$module_name" == "kysec2-kbox" ]; then
						insmod_kbox $module_name
					else
						insmod_kmod_for_conf $module_name		
					fi
				fi
			fi
		done
	fi
fi
