#!/bin/bash
#
# Install Script for the  USB Smartcard reader series.
#
#

iname=eps1k

shlib=libifd_eps1k.so

rel=`uname -r`
min=`uname -r | cut -f2 -d.`
moddir=/lib/modules
initdir=""
rlvdir=""
PCSCVER=1.2.0

echo
echo Installing USB Smartcard reader...
echo

#check whether the current user is root
if test $(id -ur) != 0; then
	echo
	echo "You should logon as root user!"
	echo 
	exit -1
fi

#
# check if module for this Kernel version exists
#
echo 
echo Install epass1000 driver
echo

if [ -f Makefile ]; then
 make clean;make;make install
 if [ $? != 0 ]; then
  echo Could not copy driver-module, exiting
  exit -1
 fi
fi


#
# check if pcsc-lite is installed
#
if [ -x /sbin/pcscd ]; then
	PCSCD=/sbin/pcscd
elif [ -x /usr/local/sbin/pcscd ]; then
	PCSCD=/usr/local/sbin/pcscd
elif [ -x /usr/local/bin/pcscd ]; then
	PCSCD=/usr/local/bin/pcscd
elif [ -x /usr/sbin/pcscd ]; then
	PCSCD=/usr/sbin/pcscd
else
	PCSCD=null
fi

if [ -f /usr/lib/libpcsclite.so ]; then
  pcsclib=/usr/lib
elif [ -f /usr/local/lib/libpcsclite.so ]; then
  pcsclib=/usr/local/lib
elif [ -d /usr/pcsc/lib ]; then
  pcsclib=/usr/pcsc/lib
elif [ -d /usr/local/pcsc/lib ]; then
  pcsclib=/usr/local/pcsc/lib
elif [ -d /usr/lib/pcsc ];then
  pcsclib=/usr/lib/pcsc 
else
  echo PCSC-Lite is not installed.
  echo Go visit http://www.linuxnet.com
  echo Recommand download pcsc-lite-1.2.0 and install it
  exit
fi

#
# copy the pcsc-shared library to its proper place
#

cp ifdapi/$shlib $pcsclib

#
# create the entries in reader.conf
#

PCSCVER=`$PCSCD -v | cut -c 19-23 | grep "1.2"`
if [ $PCSCVER == 1.2.9 ]; then

grep -q "FT VR1000" /etc/reader.conf 2> /dev/null
if [ $? != 0 ]; then
  cp /etc/reader.conf /etc/reader.conf.bak 2> /dev/null
  cat >> /etc/reader.conf << eof

FRIENDLYNAME		"FT VR1000"
DEVICENAME		:GEN_SMART_RDR
LIBPATH			$pcsclib/$shlib
CHANNELID		0x00000001

FRIENDLYNAME		"FT VR1000"
DEVICENAME		:GEN_SMART_RDR
LIBPATH			$pcsclib/$shlib
CHANNELID		0x10000001

FRIENDLYNAME		"FT VR1000"
DEVICENAME		:GEN_SMART_RDR
LIBPATH			$pcsclib/$shlib
CHANNELID		0x20000001

FRIENDLYNAME		"FT VR1000"
DEVICENAME		:GEN_SMART_RDR
LIBPATH			$pcsclib/$shlib
CHANNELID		0x30000001

#FRIENDLYNAME		"FT VR1000"
#DEVICENAME		:GEN_SMART_RDR
#LIBPATH		$pcsclib/$shlib
#CHANNELID		0x40000001

#FRIENDLYNAME		"FT VR1000"
#DEVICENAME		:GEN_SMART_RDR
#LIBPATH		$pcsclib/$shlib
#CHANNELID		0x50000001

#FRIENDLYNAME		"FT VR1000"
#DEVICENAME		:GEN_SMART_RDR
#LIBPATH		$pcsclib/$shlib
#CHANNELID		0x60000001

#FRIENDLYNAME		"FT VR1000"
#DEVICENAME		:GEN_SMART_RDR
#LIBPATH		$pcsclib/$shlib
#CHANNELID		0x70000001

eof
fi

else

grep -q "FT VR1000" /etc/reader.conf 2> /dev/null
if [ $? != 0 ]; then
  cp /etc/reader.conf /etc/reader.conf.bak 2> /dev/null
  cat >> /etc/reader.conf << eof

FRIENDLYNAME		"FT VR1000"
DEVICENAME		USBTOKEN
LIBPATH			$pcsclib/$shlib
CHANNELID		0x00000001

FRIENDLYNAME		"FT VR1000"
DEVICENAME		USBTOKEN
LIBPATH			$pcsclib/$shlib
CHANNELID		0x10000001

FRIENDLYNAME		"FT VR1000"
DEVICENAME		USBTOKEN
LIBPATH			$pcsclib/$shlib
CHANNELID		0x20000001

FRIENDLYNAME		"FT VR1000"
DEVICENAME		USBTOKEN
LIBPATH			$pcsclib/$shlib
CHANNELID		0x30000001

#FRIENDLYNAME		"FT VR1000"
#DEVICENAME		USBTOKEN
#LIBPATH		$pcsclib/$shlib
#CHANNELID		0x40000001

#FRIENDLYNAME		"FT VR1000"
#DEVICENAME		USBTOKEN
#LIBPATH		$pcsclib/$shlib
#CHANNELID		0x50000001

#FRIENDLYNAME		"FT VR1000"
#DEVICENAME		USBTOKEN
#LIBPATH		$pcsclib/$shlib
#CHANNELID		0x60000001

#FRIENDLYNAME		"FT VR1000"
#DEVICENAME		USBTOKEN
#LIBPATH		$pcsclib/$shlib
#CHANNELID		0x70000001

eof
fi

fi
#
# create init-script and symlink into runlevels
#
echo 
echo Setup init-script
echo
mod_min=misc
if [ $min == 6 ]; then
	drvname=epass.ko
else
	drvname=epass.o
fi
if [ -f /etc/redhat-release ]; then
  rh=1
  initdir=/etc/init.d
  rlvldir=/etc/rc.d
cat > $initdir/$iname << eof
#!/bin/sh
#eps1k Module Loader
#

. $initdir/functions # RedHat

RETVAL=0
case "\$1" in
  start)
	echo -n Starting $iname:
	/sbin/insmod $moddir/\`uname -r\`/$mod_min/$drvname 2>/dev/null
	RETVAL=\$?
	;;
  stop)
	echo -n Stoping $iname:
	/sbin/rmmod  epass 2>/dev/null
	RETVAL=\$?
	;;
  restart|reload)
	echo Restarting $iname ....
	\$0 stop && \$0 start
	RETVAL=\$?
	;;
  *)
	echo "Usage: $iname {start|stop|restart|reload}"
	exit 1
esac
exit $RETVAL
eof

elif [ -f /etc/SuSE-release ]; then
  sus=1
  initdir=/etc/init.d
  rlvldir=/etc/init.d
cat > $initdir/$iname << eof
#!/bin/sh
# eps1k Module Loader
#
#

. /etc/rc.status # SuSE

rc_reset
case "\$1" in
  start)
	echo -n Starting $iname
	/sbin/insmod $moddir/\`uname -r\`/$mod_min/$drvname 2>/dev/null
	rc_status -v
	;;
  stop)
	echo -n Shutting down $iname
	/sbin/rmmod epass 2>/dev/null
	rc_status -v
	;;
  restart|reload)
	echo Restarting $iname ....
	\$0 stop && \$0 start
	rc_status
	;;
  *)
	echo "Usage: $iname {start|stop|restart|reload}"
	exit 1
esac
rc_exit
eof

else
  initdir=/etc/init.d
  rlvldir=/etc
cat > $initdir/$iname << eof
#!/bin/sh
#eps1k Module Loader
#
case "\$1" in
  start)
	echo -n Starting $iname...
	/sbin/insmod $moddir/\`uname -r\`/$mod_min/$drvname
	;;
  stop)
	echo -n Stoping $iname...
	/sbin/rmmod epass
	;;
  restart|reload)
	echo Restarting $iname:
	\$0 stop && \$0 start
	;;
  *)
	echo "Usage: $iname {start|stop|restart|reload}"
	exit 1
esac
exit
eof

fi

chmod a+x $initdir/$iname

declare -i i=2
while [ $i -lt 6 ]; do
  ln -sf $initdir/$iname $rlvldir/rc$i.d/S01$iname;
  ln -sf $initdir/$iname $rlvldir/rc$i.d/K21$iname;
  i=$((i+1))
done

# Finally, load the kernel module
echo Attempting to start the $iname kernel module
/sbin/rmmod epass 2>/dev/null
sh $initdir/$iname start
echo
echo Installation finished
