Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- system=`uname`
- PLIST=""
- contactUsOnError="Aborting patching.\nPlease, contact Rutoken technical support (hotline@rutoken.ru) for this incident."
- preface="Usage: $0 [path/to/Info.plist]\nThis script makes ccid driver support ccid devices by Aktiv Co.\nIf patched, original Info.plist is backed up to Info.plist.old."
- echo -e $preface
- if [ ! -n "$1" ] ; then
- if [[ $system -eq "Linux" ]] ; then
- `pkg-config --help &>/dev/null`
- if [ $? -eq 0 ] ; then
- PLIST=`pkg-config libpcsclite --variable=usbdropdir`
- PLIST=$PLIST"/ifd-ccid.bundle/Contents/Info.plist"
- else
- echo "Warning: pkg-config utility not found. Using default Info.plist path"
- PLIST="/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
- fi
- elif [[ $system -eq "Darwin" ]] ; then
- PLIST="/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist"
- fi
- else
- PLIST="$1"
- fi
- if [ -f $PLIST ] ; then
- echo "Patching of $PLIST has started"
- else
- echo "Error: File $PLIST not found. Please, specify correct path to Info.plist. Exit."
- echo -e $contactUsOnError
- exit 1
- fi
- if [ ! -w $PLIST ] ; then
- echo "Have no write permission for that file. Try sudo $0 $PLIST. Exit."
- exit 1
- fi
- if [ ! -r $PLIST ] ; then
- echo "Have no read permission for that file. Try sudo $0 $PLIST. Exit."
- exit 1
- fi
- aktivDevs=( "Aktiv_Rutoken_ECP:0x0A89:0x0030 Aktiv_Rutoken_lite:0x0A89:0x0025 Aktiv_PINPad_Ex:0x0A89:0x0080 Aktiv_PINPad_In:0x0A89:0x0081" )
- oldFileCreated=0
- for item in $aktivDevs
- do
- ifdFriendlyNamesLineNum=( `sed -n '/<key>ifdFriendlyName<\/key>/=' $PLIST` )
- ifdVendorIDLineNum=( `sed -n '/<key>ifdVendorID<\/key>/=' $PLIST` )
- ifdProductIDLineNum=( `sed -n '/<key>ifdProductID<\/key>/=' $PLIST` )
- if [ ! "${#ifdFriendlyNamesLineNum[@]}" -eq 1 ] ; then
- echo "Error: Info.plist has corrupt ifdFriendlyName section. Exit."
- echo -e $contactUsOnError
- exit 1
- fi
- if [ ! "${#ifdVendorIDLineNum[@]}" -eq 1 ] ; then
- echo "Error: Info.plist has corrupt ifdVendorID section. Exit."
- echo -e $contactUsOnError
- exit 1
- fi
- if [ ! "${#ifdProductIDLineNum[@]}" -eq 1 ] ; then
- echo "Error: Info.plist has corrupt ifdProductID section. Exit."
- echo -e $contactUsOnError
- exit 1
- fi
- needAdd=0
- aktivDev=( `echo $item | sed 's/:/\n/g'` )
- devName=`echo ${aktivDev[0]} | sed 's/_/ /g'`
- devVid=${aktivDev[1]}
- devPid=${aktivDev[2]}
- echo "Checking $devName..."
- devNameLineNums=( `sed -n "/${devName}/=" $PLIST` )
- if [ ! -z "${devNameLineNums[0]}" ] ; then
- localNeedAdd=0
- for devNameLineNum in $devNameLineNums
- do
- #test, if other arrays match
- localNeedAdd=0
- vidExpectedNum=`echo $devNameLineNum-$ifdFriendlyNamesLineNum+$ifdVendorIDLineNum | bc`
- if [ -z `sed -n "$vidExpectedNum""p" $PLIST | grep $devVid` ] ; then
- localNeedAdd=1
- fi
- pidExpectedNum=`echo $devNameLineNum-$ifdFriendlyNamesLineNum+$ifdProductIDLineNum | bc`
- if [ -z `sed -n "$pidExpectedNum""p" $PLIST | grep $devPid` ] ; then
- localNeedAdd=1
- fi
- if [ $localNeedAdd -eq 0 ] ; then
- break;
- fi
- done
- needAdd=$localNeedAdd
- if [ $needAdd -eq 1 ] ; then
- echo "Warning! $PLIST seems to be corrupt: VID&PID do not match device name"
- fi
- else
- needAdd=1
- fi
- if [ $needAdd -eq 1 ] ; then
- echo "$devName will be added to Info.plist"
- if [ $oldFileCreated -eq 0 ] ; then
- `cp -f "$PLIST" "$PLIST".old`
- if [ $? -eq 0 ] ; then
- oldFileCreated=1
- else
- echo "Can't store original file. Exit"
- exit 1
- fi
- fi
- ifdVendorIDLineNum=`sed -n '/<key>ifdVendorID<\/key>/=' $PLIST`
- vidLineNum=`echo $ifdVendorIDLineNum + 2 | bc`
- `sed -i "$vidLineNum""i\\\\\t\t<string>""$devVid""<\/string>" $PLIST`
- ifdProductIDLineNum=`sed -n '/<key>ifdProductID<\/key>/=' $PLIST`
- pidLineNum=`echo $ifdProductIDLineNum + 2 | bc`
- `sed -i "$pidLineNum""i\\\\\t\t<string>""$devPid""<\/string>" $PLIST`
- ifdFriendlyNamesLineNum=`sed -n '/<key>ifdFriendlyName<\/key>/=' $PLIST`
- nameLineNum=`echo $ifdFriendlyNamesLineNum + 2 | bc`
- `sed -i "$nameLineNum""i\\\\\t\t<string>""$devName""<\/string>" $PLIST`
- else
- echo "$devName is already in Info.plist"
- fi
- done
- echo "$PLIST is patched successfully"
- if [ $oldFileCreated -eq 1 ] ; then
- echo "Original Info.plist is stored to $PLIST.old"
- fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement