Blame hotplug.sh.in

Packit b0f24f
#!/bin/bash
Packit b0f24f
Packit b0f24f
INSTALL="@INSTALL@"
Packit b0f24f
HOTPLUGPATH=/etc/hotplug
Packit b0f24f
SCRIPTNAME=libmtp.sh
Packit b0f24f
USERMAP=libmtp.usermap
Packit b0f24f
UDEVPATH=/etc/udev/rules.d
Packit b0f24f
UDEVRULES=libmtp.rules
Packit b0f24f
HALBASEPATH=/usr/share/hal/fdi/information
Packit b0f24f
HALPATH=/usr/share/hal/fdi/information/20thirdparty
Packit b0f24f
HALRULES=libmtp.fdi
Packit b0f24f
Packit b0f24f
# See if the parameter script ($2), device ($3) and productid ($4)
Packit b0f24f
# are already defined in the usermap ($1)
Packit b0f24f
function inmap {
Packit b0f24f
    while read LINE; do
Packit b0f24f
	if [ "x${LINE}" != "x" ]; then
Packit b0f24f
	    firstword=`echo ${LINE} | awk '{ print $1 }'`
Packit b0f24f
	    if [ ${firstword} != "#" ]; then
Packit b0f24f
	        # This is a device line entry
Packit b0f24f
		script=${firstword}
Packit b0f24f
		manid=`echo ${LINE} | awk '{ print $3 }'`
Packit b0f24f
		productid=`echo ${LINE} | awk '{ print $4 }'`
Packit b0f24f
		# Skip blank products...
Packit b0f24f
		if [ "x${script}" = "x$2" ]; then
Packit b0f24f
		    if [ "x${manid}" = "x$3" ]; then
Packit b0f24f
			if [ "x${productid}" = "x$4" ]; then
Packit b0f24f
			    echo "yes"
Packit b0f24f
			    return 0
Packit b0f24f
			fi
Packit b0f24f
		    fi
Packit b0f24f
		fi
Packit b0f24f
	    fi
Packit b0f24f
	fi
Packit b0f24f
    done < $1
Packit b0f24f
    echo "no"
Packit b0f24f
    return 0
Packit b0f24f
}
Packit b0f24f
Packit b0f24f
# Scan the usermap $2 for all devices in $1 to see if they are already
Packit b0f24f
# there, else patch the usermap.
Packit b0f24f
function patchusermap {
Packit b0f24f
    # Nullify comment
Packit b0f24f
    comment=""
Packit b0f24f
    while read LINE; do
Packit b0f24f
	if [ "x$LINE" != "x" ]; then
Packit b0f24f
	    firstword=`echo ${LINE} | awk '{ print $1 }'`
Packit b0f24f
	    if [ ${firstword} = "#" ]; then
Packit b0f24f
	    # This is a comment line, save it.
Packit b0f24f
		comment=${LINE}
Packit b0f24f
	    else
Packit b0f24f
	        # This is a device line entry
Packit b0f24f
		script=${firstword}
Packit b0f24f
		manid=`echo ${LINE} | awk '{ print $3 }'`
Packit b0f24f
		productid=`echo ${LINE} | awk '{ print $4 }'`
Packit b0f24f
		# Skip blank products...
Packit b0f24f
		if [ "x${manid}" != "x" ]; then
Packit b0f24f
	            # See if this product is already in the usermap
Packit b0f24f
		    echo "Checking for product ${productid} in $2..."
Packit b0f24f
		    if [ `inmap $2 ${script} ${manid} ${productid}` = "no" ]; then
Packit b0f24f
			echo "Not present, adding to hotplug map."
Packit b0f24f
			echo ${comment} >> $2
Packit b0f24f
			echo ${LINE} >> $2
Packit b0f24f
			comment=""
Packit b0f24f
		    else
Packit b0f24f
			echo "Already installed."
Packit b0f24f
		    fi
Packit b0f24f
		fi
Packit b0f24f
	    fi
Packit b0f24f
	fi
Packit b0f24f
    done < $1
Packit b0f24f
}
Packit b0f24f
Packit b0f24f
# Check for udev first
Packit b0f24f
if test -d ${UDEVPATH} ; then
Packit b0f24f
    echo "You seem to have udev on your system. Installing udev rules..."
Packit b0f24f
    ${INSTALL} ${UDEVRULES} ${UDEVPATH}
Packit b0f24f
    echo "You may need additional setup to get correct permissions on your device."
Packit b0f24f
    echo "See the INSTALL file for information."
Packit b0f24f
    echo "Do you also want to install HAL support or the old hotplug support (y/n)?"
Packit b0f24f
    read IN
Packit b0f24f
    if [ "$IN" = "y" ] || [ "$IN" = "Y" ]; then
Packit b0f24f
	echo "Continuing..."
Packit b0f24f
    else
Packit b0f24f
	exit 0
Packit b0f24f
    fi
Packit b0f24f
fi
Packit b0f24f
Packit b0f24f
# Check for HAL next
Packit b0f24f
if test -d ${HALBASEPATH} ; then
Packit b0f24f
    echo "You seem to have HAL on your system. Installing HAL rules..."
Packit b0f24f
    mkdir -p ${HALPATH}
Packit b0f24f
    ${INSTALL} ${HALRULES} ${HALPATH}
Packit b0f24f
    echo "Do you also want to install the old hotplug support (y/n)?"
Packit b0f24f
    read IN
Packit b0f24f
    if [ "$IN" = "y" ] || [ "$IN" = "Y" ]; then
Packit b0f24f
	echo "Continuing..."
Packit b0f24f
    else
Packit b0f24f
	exit 0
Packit b0f24f
    fi
Packit b0f24f
fi
Packit b0f24f
Packit b0f24f
Packit b0f24f
# Check prerequisites
Packit b0f24f
COMMAND=`which grep 2> /dev/null`
Packit b0f24f
if [ "x${COMMAND}" = "x" ];
Packit b0f24f
then
Packit b0f24f
    echo "Missing grep program. Fatal error."
Packit b0f24f
    exit 1
Packit b0f24f
fi
Packit b0f24f
COMMAND=`which awk 2> /dev/null`
Packit b0f24f
if [ "x${COMMAND}" = "x" ];
Packit b0f24f
then
Packit b0f24f
    echo "Missing awk program. Fatal error."
Packit b0f24f
    exit 1
Packit b0f24f
fi
Packit b0f24f
if [ "x${USER}" != "xroot" ];
Packit b0f24f
then
Packit b0f24f
    echo "WARNING: this program should be run as root!"
Packit b0f24f
fi
Packit b0f24f
Packit b0f24f
Packit b0f24f
# This script locates the hotplug distribution on a certain host
Packit b0f24f
# and sets up userland hotplugging scripts according to rules.
Packit b0f24f
# The in-parameters are the hotplug directory and the name of a
Packit b0f24f
# file of hotplug device entries and a script to be executed for
Packit b0f24f
# these deviced.
Packit b0f24f
Packit b0f24f
if test -d ${HOTPLUGPATH}
Packit b0f24f
then
Packit b0f24f
    echo "Hotplug in ${HOTPLUGPATH}"
Packit b0f24f
else
Packit b0f24f
    echo "Hotplug missing on this system. Cannot install."
Packit b0f24f
    exit 1
Packit b0f24f
fi
Packit b0f24f
Packit b0f24f
if test -d ${HOTPLUGPATH}/usb
Packit b0f24f
then
Packit b0f24f
    echo "Has usb subdirectory."
Packit b0f24f
else
Packit b0f24f
    mkdir ${HOTPLUGPATH}/usb
Packit b0f24f
fi
Packit b0f24f
Packit b0f24f
echo "Installing script."
Packit b0f24f
${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb
Packit b0f24f
echo "Installing usermap."
Packit b0f24f
${INSTALL} -m 644 ${USERMAP} ${HOTPLUGPATH}/usb
Packit b0f24f
# If we find a usb.usermap file, and we see that this distribution
Packit b0f24f
# of hotplug does not support private usermaps, then we need to
Packit b0f24f
# patch the usb.usermap file.
Packit b0f24f
#
Packit b0f24f
# Create a merged file, diff the files to each other, and if there
Packit b0f24f
# were mismatches, then patch the installed file.
Packit b0f24f
echo "Checking hotplugging CVS version..."
Packit b0f24f
echo "/etc/hotplug/usb/*.usermap support was added in august 2002"
Packit b0f24f
EDITMAP="yes"
Packit b0f24f
CVSTAG=`grep '\$Id:' /etc/hotplug/usb.agent`
Packit b0f24f
if [ "x${CVSTAG}" != "x" ]; then
Packit b0f24f
    DATE=`echo ${CVSTAG} | awk '{ print $5 }'`
Packit b0f24f
    echo "Hotplug version seems to be from ${DATE}"
Packit b0f24f
    YEAR=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $1; }'`
Packit b0f24f
    MONTH=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $2; }'`
Packit b0f24f
    DAY=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $3; }'`
Packit b0f24f
    if [ "${YEAR}" -gt "2002" ]; then
Packit b0f24f
	EDITMAP="no"
Packit b0f24f
    else
Packit b0f24f
	if [ "${YEAR}" -eq "2002" ]; then
Packit b0f24f
	    if [ "${MONTH}" -ge "08" ]; then
Packit b0f24f
		EDITMAP="no"
Packit b0f24f
	    fi
Packit b0f24f
	fi
Packit b0f24f
    fi
Packit b0f24f
fi
Packit b0f24f
if [ "x${EDITMAP}" == "xyes" ]; then
Packit b0f24f
    echo "We need to edit the ${HOTPLUGPATH}/usb.usermap if it exists..."
Packit b0f24f
    if test -f ${HOTPLUGPATH}/usb.usermap
Packit b0f24f
    then
Packit b0f24f
	echo "We have a usb.usermap..."
Packit b0f24f
	patchusermap ${USERMAP} /etc/hotplug/usb.usermap
Packit b0f24f
    fi
Packit b0f24f
fi
Packit b0f24f
Packit b0f24f
echo "Hotplugging successfully installed."
Packit b0f24f
Packit b0f24f
exit 0
Packit b0f24f