#!/bin/bash
# 14 Apr 2005 Makaski Shinomiya <shino@pos.to>
# fixed by Masanori Shimada <shi_ma@k6.dion.ne.jp>
# this script shall be called from murasaki
#
MYNAME=$(basename $0)
CLASS=scanner
# 
#LOGFILE=/tmp/$MYNAME.log
LOGFILE=/dev/console
SYSLOGFILE=/var/log/messages
PERMS=/etc/security/console.perms
MODE=$(grep "console.*$CLASS" $PERMS | sed -e 's/^[^0-9]*\([0-9]*\)[^0-9].*$/\1/')
[ "$MODE" = ""  ] && MODE=600

debug() {
    [ -w "$LOGFILE" ] && echo "$*" >> $LOGFILE
    /usr/bin/logger -t $MYNAME -- "$*"
}

debug  "$0 $1"

[ "$1" = "start" ] || exit

[ "$(/sbin/pidof $MYNAME)" = "" ] || exit ;# to aboid multiple call

for i in run lock
do
  if [ -f /var/$i/console.lock ]; then
    USER=$(cat /var/$i/console.lock)
    break
  fi
done

LINE=$(grep MATCH\(libusbscanner\) $SYSLOGFILE | tail -n 1)
VENDOR=$(echo $LINE|sed -e 's/^.*vendor:\([0-9a-fx]*\).*$/\1/' | tr -d x)
PROD=$(echo $LINE|sed -e 's/^.*product:\([0-9a-fx]*\).*$/\1/' | tr -d x)
debug "Vendor=$VENDOR ProductID=$PROD"
LINE=$(grep -B 2 "^P:.*Vendor=${VENDOR}.ProdID=${PROD}" /proc/bus/usb/devices | grep '^T:' | tail -n 1)
debug "$LINE"
BUSNO=$(echo "$LINE" | sed -e 's/^.*Bus=[^0-9]*//' -e 's/[^0-9].*//')
case $BUSNO in
	[0-9][0-9]) BUSNO="0$BUSNO" ;;
	[0-9])      BUSNO="00$BUSNO" ;;
esac
DEVNO=$(echo "$LINE" | sed -e 's/^.*Dev#=[^0-9]*//' -e 's/[^0-9].*//')
case $DEVNO in
	[0-9][0-9]) DEVNO="0$DEVNO" ;;
	[0-9])      DEVNO="00$DEVNO" ;;
esac

debug "Bus number=$BUSNO; Device number=$DEVNO; Console user=$USER"
[ "$BUSNO" = "" ] && exit 1
[ "$DEVNO" = "" ] && exit 1
[ "$USER"  = "" ] && exit 1

[ "USER" = "" ] && exit

chown $USER /proc/bus/usb/$BUSNO/$DEVNO && \
chmod $MODE /proc/bus/usb/$BUSNO/$DEVNO && \
debug "changed /proc/bus/usb/$BUSNO/$DEVNO owned by $USER"

sleep 1                       ;# to aboid multiple call
exit
