#!/bin/sh

. /etc/control.d/functions

CONFIG=/etc/udev/rules.d/90-qemu-kvm.rules
DEVICE=/dev/kvm

new_fmode public 666 root root
new_fmode vmusers 660 root vmusers
new_fmode restricted 600 root root

new_subst public \
	'^KERNEL=="kvm",[[:space:]]*MODE="0666",[[:space:]]*GROUP="[^"]*"[[:space:]]*$' \
	's/^KERNEL=="kvm",[[:space:]]*MODE="[^"]*",[[:space:]]*GROUP="[^"]*"[[:space:]]*$/KERNEL=="kvm", MODE="0666", GROUP="root"/g'
new_subst vmusers \
	'^KERNEL=="kvm",[[:space:]]*MODE="0660",[[:space:]]*GROUP="vmusers"[[:space:]]*$' \
	's/^KERNEL=="kvm",[[:space:]]*MODE="[^"]*",[[:space:]]*GROUP="[^"]*"[[:space:]]*$/KERNEL=="kvm", MODE="0660", GROUP="vmusers"/g'
new_subst restricted \
	'^KERNEL=="kvm",[[:space:]]*MODE="0600",[[:space:]]*GROUP="[^"]*"[[:space:]]*$' \
	's/^KERNEL=="kvm",[[:space:]]*MODE="[^"]*",[[:space:]]*GROUP="[^"]*"[[:space:]]*$/KERNEL=="kvm", MODE="0600", GROUP="root"/g'

new_summary "KVM Accelerator (kvm)"
new_help public "Any user can use kvm"
new_help vmusers "Only 'vmusers' group members can use kvm"
new_help restricted "Only root can use kvm"

# Backwards compatibility 
test "$*" = kvm && set - vmusers

control_subst "$CONFIG" "$*" || exit 1

is_builtin_mode "$*" || {
	# Fix device permissions if udev is not used for some reason
	if [ -c "$DEVICE" ]; then
		control_fmode "$DEVICE" "$*" || exit 1
	fi

	# Make udev apply permissions and additional rules if any
	if mountpoint -q /dev && [ -w /sys/class/misc/kvm/uevent ]; then
		echo add > /sys/class/misc/kvm/uevent ||:
	fi
}
