#!/bin/sh

. /etc/control.d/functions

CONFIG=/etc/udev/rules.d/90-qemu-kvm.rules
DEVICE1=/dev/kvm
DEVICE2=/dev/vhost-net

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

setup_rule() {
	new_subst "$1" \
		"^[[:space:]]*KERNEL==(\"kvm\"|\"vhost-net\"),[[:space:]]*MODE=\"$2\",[[:space:]]*GROUP=\"$3\"[[:space:]]*\$" \
		"s/MODE=\"[^\"]*\",[[:space:]]*GROUP=\"[^\"]*\"/MODE=\"$2\", GROUP=\"$3\"/g"
}

setup_rule public 0666 root
setup_rule vmusers 0660 vmusers
setup_rule restricted 0600 root

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 "$DEVICE1" ]; then
		control_fmode "$DEVICE1" "$*" || exit 1
	fi
	if [ -c "$DEVICE2" ]; then
		control_fmode "$DEVICE2" "$*" || exit 1
	fi

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