1#!/bin/sh - 2# 3# $NetBSD: 99-ugen-perms-tigard,v 1.1 2024/03/30 06:42:10 thorpej Exp $ 4# 5# Look for a Tigard (https://github.com/tigard-tools/tigard) debug 6# board and change the permissions to 0660. 7# 8# Written by Jason R. Thorpe, March 2024. Public domain. 9# 10 11export LC_ALL=C 12 13event="$1" 14shift 15devices=$@ 16 17orig_perms=0600 18new_perms=0660 19 20orig_group=wheel 21new_group=wheel 22 23device_name=tigard 24 25is_target_device() 26{ 27 local vendor_string 28 local product_string 29 30 vendor_string="$(drvctl -p $1 vendor-string)" 31 product_string="$(drvctl -p $1 product-string)" 32 33 if [ x"$vendor_string" = x"SecuringHardware.com" -a \ 34 x"$product_string" = x"Tigard V1.1" ]; then 35 echo "yes" 36 return 37 fi 38 39 echo "no" 40} 41 42set_permissions() 43{ 44 if [ x$(is_target_device $1) = xyes ]; then 45 chgrp $new_group /dev/"${2}".* 46 chmod $new_perms /dev/"${2}".* 47 # 48 # We need to create a symlink here to remember 49 # the ugen device node that was used, since we 50 # can't recover it from the device name that 51 # comes from the kernel later because we get the 52 # event *after* the device is gone, and thus 53 # cannot query any properties. 54 # 55 rm -f /dev/${1}-${device_name} 56 ln -sf ${2} /dev/${1}-${device_name} 57 fi 58} 59 60restore_permissions() 61{ 62 if [ -h "/dev/${1}-${device_name}" ]; then 63 devnode=$(readlink "/dev/${1}-${device_name}") 64 if [ x"$devnode" != x ]; then 65 chmod $orig_perms /dev/"${devnode}".* 66 chgrp $orig_group /dev/"${devnode}".* 67 fi 68 rm -f "/dev/${1}-${device_name}" 69 fi 70} 71 72get_ugen_devnode() 73{ 74 # Because "ugen" and "ugenif" share the same /dev/ugenN.* 75 # namespace, we have to query an additional property to 76 # determine which one it is. 77 local ugen_unit 78 79 ugen_unit=$(drvctl -p $1 ugen-unit) 80 case "$ugen_unit" in 81 [0-9]*) 82 echo "ugen$ugen_unit" 83 ;; 84 esac 85} 86 87for device in $devices; do 88 case $device in 89 ugensa*) 90 # Ignore ugensa(4). 91 ;; 92 ugen*) 93 case $event in 94 device-attach) 95 devnode=$(get_ugen_devnode $1) 96 if [ x"$devnode" != x ]; then 97 set_permissions $device $devnode 98 fi 99 ;; 100 device-detach) 101 restore_permissions $device 102 ;; 103 esac 104 esac 105done 106