1#!/bin/bash 2 3INSTALL="@INSTALL@" 4HOTPLUGPATH=/etc/hotplug 5SCRIPTNAME=libmtp.sh 6USERMAP=libmtp.usermap 7UDEVPATH=/etc/udev/rules.d 8UDEVRULES=libmtp.rules 9HALBASEPATH=/usr/share/hal/fdi/information 10HALPATH=/usr/share/hal/fdi/information/20thirdparty 11HALRULES=libmtp.fdi 12 13# See if the parameter script ($2), device ($3) and productid ($4) 14# are already defined in the usermap ($1) 15function inmap { 16 while read LINE; do 17 if [ "x${LINE}" != "x" ]; then 18 firstword=`echo ${LINE} | awk '{ print $1 }'` 19 if [ ${firstword} != "#" ]; then 20 # This is a device line entry 21 script=${firstword} 22 manid=`echo ${LINE} | awk '{ print $3 }'` 23 productid=`echo ${LINE} | awk '{ print $4 }'` 24 # Skip blank products... 25 if [ "x${script}" = "x$2" ]; then 26 if [ "x${manid}" = "x$3" ]; then 27 if [ "x${productid}" = "x$4" ]; then 28 echo "yes" 29 return 0 30 fi 31 fi 32 fi 33 fi 34 fi 35 done < $1 36 echo "no" 37 return 0 38} 39 40# Scan the usermap $2 for all devices in $1 to see if they are already 41# there, else patch the usermap. 42function patchusermap { 43 # Nullify comment 44 comment="" 45 while read LINE; do 46 if [ "x$LINE" != "x" ]; then 47 firstword=`echo ${LINE} | awk '{ print $1 }'` 48 if [ ${firstword} = "#" ]; then 49 # This is a comment line, save it. 50 comment=${LINE} 51 else 52 # This is a device line entry 53 script=${firstword} 54 manid=`echo ${LINE} | awk '{ print $3 }'` 55 productid=`echo ${LINE} | awk '{ print $4 }'` 56 # Skip blank products... 57 if [ "x${manid}" != "x" ]; then 58 # See if this product is already in the usermap 59 echo "Checking for product ${productid} in $2..." 60 if [ `inmap $2 ${script} ${manid} ${productid}` = "no" ]; then 61 echo "Not present, adding to hotplug map." 62 echo ${comment} >> $2 63 echo ${LINE} >> $2 64 comment="" 65 else 66 echo "Already installed." 67 fi 68 fi 69 fi 70 fi 71 done < $1 72} 73 74# Check for udev first 75if test -d ${UDEVPATH} ; then 76 echo "You seem to have udev on your system. Installing udev rules..." 77 ${INSTALL} ${UDEVRULES} ${UDEVPATH} 78 echo "You may need additional setup to get correct permissions on your device." 79 echo "See the INSTALL file for information." 80 echo "Do you also want to install HAL support or the old hotplug support (y/n)?" 81 read IN 82 if [ "$IN" = "y" ] || [ "$IN" = "Y" ]; then 83 echo "Continuing..." 84 else 85 exit 0 86 fi 87fi 88 89# Check for HAL next 90if test -d ${HALBASEPATH} ; then 91 echo "You seem to have HAL on your system. Installing HAL rules..." 92 mkdir -p ${HALPATH} 93 ${INSTALL} ${HALRULES} ${HALPATH} 94 echo "Do you also want to install the old hotplug support (y/n)?" 95 read IN 96 if [ "$IN" = "y" ] || [ "$IN" = "Y" ]; then 97 echo "Continuing..." 98 else 99 exit 0 100 fi 101fi 102 103 104# Check prerequisites 105COMMAND=`which grep 2> /dev/null` 106if [ "x${COMMAND}" = "x" ]; 107then 108 echo "Missing grep program. Fatal error." 109 exit 1 110fi 111COMMAND=`which awk 2> /dev/null` 112if [ "x${COMMAND}" = "x" ]; 113then 114 echo "Missing awk program. Fatal error." 115 exit 1 116fi 117if [ "x${USER}" != "xroot" ]; 118 echo "WARNING: this program should be run as root!" 119fi 120 121 122# This script locates the hotplug distribution on a certain host 123# and sets up userland hotplugging scripts according to rules. 124# The in-parameters are the hotplug directory and the name of a 125# file of hotplug device entries and a script to be executed for 126# these deviced. 127 128if test -d ${HOTPLUGPATH} 129then 130 echo "Hotplug in ${HOTPLUGPATH}" 131else 132 echo "Hotplug missing on this system. Cannot install." 133 exit 1 134fi 135 136if test -d ${HOTPLUGPATH}/usb 137then 138 echo "Has usb subdirectory." 139else 140 mkdir ${HOTPLUGPATH}/usb 141fi 142 143echo "Installing script." 144${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb 145echo "Installing usermap." 146${INSTALL} -m 644 ${USERMAP} ${HOTPLUGPATH}/usb 147# If we find a usb.usermap file, and we see that this distribution 148# of hotplug does not support private usermaps, then we need to 149# patch the usb.usermap file. 150# 151# Create a merged file, diff the files to each other, and if there 152# were mismatches, then patch the installed file. 153echo "Checking hotplugging CVS version..." 154echo "/etc/hotplug/usb/*.usermap support was added in august 2002" 155EDITMAP="yes" 156CVSTAG=`grep '\$Id:' /etc/hotplug/usb.agent` 157if [ "x${CVSTAG}" != "x" ]; then 158 DATE=`echo ${CVSTAG} | awk '{ print $5 }'` 159 echo "Hotplug version seems to be from ${DATE}" 160 YEAR=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $1; }'` 161 MONTH=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $2; }'` 162 DAY=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $3; }'` 163 if [ "${YEAR}" -gt "2002" ]; then 164 EDITMAP="no" 165 else 166 if [ "${YEAR}" -eq "2002" ]; then 167 if [ "${MONTH}" -ge "08" ]; then 168 EDITMAP="no" 169 fi 170 fi 171 fi 172fi 173if [ "x${EDITMAP}" == "xyes" ]; then 174 echo "We need to edit the ${HOTPLUGPATH}/usb.usermap if it exists..." 175 if test -f ${HOTPLUGPATH}/usb.usermap 176 then 177 echo "We have a usb.usermap..." 178 patchusermap ${USERMAP} /etc/hotplug/usb.usermap 179 fi 180fi 181 182echo "Hotplugging successfully installed." 183 184exit 0 185 186