Advertisement
Guest User

add_aktiv

a guest
Dec 25th, 2012
504
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.25 KB | None | 0 0
  1. #!/bin/bash
  2. system=`uname`
  3. PLIST=""
  4. contactUsOnError="Aborting patching.\nPlease, contact Rutoken technical support (hotline@rutoken.ru) for this incident."
  5. 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."
  6. echo -e $preface
  7. if [ ! -n "$1" ] ; then
  8.     if [[ $system -eq "Linux" ]] ; then
  9.         `pkg-config --help &>/dev/null`
  10.         if [ $? -eq 0 ] ; then
  11.             PLIST=`pkg-config libpcsclite --variable=usbdropdir`
  12.             PLIST=$PLIST"/ifd-ccid.bundle/Contents/Info.plist"
  13.         else
  14.             echo "Warning: pkg-config utility not found. Using default Info.plist path"
  15.             PLIST="/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
  16.         fi
  17.     elif [[ $system -eq "Darwin" ]] ; then
  18.         PLIST="/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist"
  19.     fi
  20. else
  21.     PLIST="$1"
  22. fi
  23. if [ -f $PLIST ] ; then
  24.     echo "Patching of $PLIST has started"
  25. else
  26.     echo "Error: File $PLIST not found. Please, specify correct path to Info.plist. Exit."
  27.     echo -e $contactUsOnError
  28.     exit 1
  29. fi
  30.  
  31. if [ ! -w $PLIST ] ; then
  32.     echo "Have no write permission for that file. Try sudo $0 $PLIST. Exit."
  33.     exit 1
  34. fi
  35. if [ ! -r $PLIST ] ; then
  36.     echo "Have no read permission for that file. Try sudo $0 $PLIST. Exit."
  37.     exit 1
  38. fi
  39. aktivDevs=( "Aktiv_Rutoken_ECP:0x0A89:0x0030 Aktiv_Rutoken_lite:0x0A89:0x0025 Aktiv_PINPad_Ex:0x0A89:0x0080 Aktiv_PINPad_In:0x0A89:0x0081" )
  40. oldFileCreated=0
  41. for item in $aktivDevs
  42. do
  43.     ifdFriendlyNamesLineNum=( `sed -n '/<key>ifdFriendlyName<\/key>/=' $PLIST` )
  44.     ifdVendorIDLineNum=( `sed -n '/<key>ifdVendorID<\/key>/=' $PLIST` )
  45.     ifdProductIDLineNum=( `sed -n '/<key>ifdProductID<\/key>/=' $PLIST` )
  46.  
  47.     if [ ! "${#ifdFriendlyNamesLineNum[@]}" -eq 1 ] ; then
  48.         echo "Error: Info.plist has corrupt ifdFriendlyName section. Exit."
  49.         echo -e $contactUsOnError
  50.         exit 1 
  51.     fi
  52.  
  53.     if [ ! "${#ifdVendorIDLineNum[@]}" -eq 1 ] ; then
  54.         echo "Error: Info.plist has corrupt ifdVendorID section. Exit."
  55.         echo -e $contactUsOnError
  56.         exit 1 
  57.     fi
  58.  
  59.     if [ ! "${#ifdProductIDLineNum[@]}" -eq 1 ] ; then
  60.         echo "Error: Info.plist has corrupt ifdProductID section. Exit."
  61.         echo -e $contactUsOnError
  62.         exit 1 
  63.     fi
  64.  
  65.     needAdd=0
  66.     aktivDev=( `echo $item | sed 's/:/\n/g'` )
  67.     devName=`echo ${aktivDev[0]} | sed 's/_/ /g'`
  68.     devVid=${aktivDev[1]}
  69.     devPid=${aktivDev[2]}
  70.     echo "Checking $devName..."
  71.     devNameLineNums=( `sed -n "/${devName}/=" $PLIST` )
  72.     if [ ! -z "${devNameLineNums[0]}" ] ; then
  73.         localNeedAdd=0
  74.         for devNameLineNum in $devNameLineNums
  75.         do
  76.             #test, if other arrays match
  77.             localNeedAdd=0
  78.             vidExpectedNum=`echo $devNameLineNum-$ifdFriendlyNamesLineNum+$ifdVendorIDLineNum | bc`
  79.             if [ -z `sed -n "$vidExpectedNum""p" $PLIST | grep $devVid` ] ; then
  80.                 localNeedAdd=1
  81.             fi
  82.             pidExpectedNum=`echo $devNameLineNum-$ifdFriendlyNamesLineNum+$ifdProductIDLineNum | bc`
  83.             if [ -z `sed -n "$pidExpectedNum""p" $PLIST | grep $devPid` ] ; then
  84.                 localNeedAdd=1
  85.             fi
  86.             if [ $localNeedAdd -eq 0 ] ; then
  87.                 break;         
  88.             fi
  89.         done
  90.         needAdd=$localNeedAdd
  91.         if [ $needAdd -eq 1 ] ; then
  92.             echo "Warning! $PLIST seems to be corrupt: VID&PID do not match device name"
  93.         fi
  94.     else
  95.         needAdd=1
  96.     fi
  97.     if [ $needAdd -eq 1 ] ; then
  98.         echo "$devName will be added to Info.plist"
  99.         if [ $oldFileCreated -eq 0 ]  ; then
  100.             `cp -f "$PLIST" "$PLIST".old`
  101.             if [ $? -eq 0 ] ; then
  102.                 oldFileCreated=1
  103.             else
  104.                 echo "Can't store original file. Exit"
  105.                 exit 1
  106.             fi
  107.         fi     
  108.         ifdVendorIDLineNum=`sed -n '/<key>ifdVendorID<\/key>/=' $PLIST`
  109.         vidLineNum=`echo $ifdVendorIDLineNum + 2 | bc` 
  110.         `sed -i "$vidLineNum""i\\\\\t\t<string>""$devVid""<\/string>" $PLIST`
  111.  
  112.         ifdProductIDLineNum=`sed -n '/<key>ifdProductID<\/key>/=' $PLIST`
  113.         pidLineNum=`echo $ifdProductIDLineNum + 2 | bc`
  114.         `sed -i "$pidLineNum""i\\\\\t\t<string>""$devPid""<\/string>" $PLIST`
  115.  
  116.         ifdFriendlyNamesLineNum=`sed -n '/<key>ifdFriendlyName<\/key>/=' $PLIST`
  117.         nameLineNum=`echo $ifdFriendlyNamesLineNum + 2 | bc`
  118.         `sed -i "$nameLineNum""i\\\\\t\t<string>""$devName""<\/string>" $PLIST`
  119.     else
  120.         echo "$devName is already in Info.plist"
  121.     fi
  122. done
  123. echo "$PLIST is patched successfully"
  124. if [ $oldFileCreated -eq 1 ] ; then
  125.     echo "Original Info.plist is stored to $PLIST.old"
  126. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement