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" ];
118then
119    echo "WARNING: this program should be run as root!"
120fi
121
122
123# This script locates the hotplug distribution on a certain host
124# and sets up userland hotplugging scripts according to rules.
125# The in-parameters are the hotplug directory and the name of a
126# file of hotplug device entries and a script to be executed for
127# these deviced.
128
129if test -d ${HOTPLUGPATH}
130then
131    echo "Hotplug in ${HOTPLUGPATH}"
132else
133    echo "Hotplug missing on this system. Cannot install."
134    exit 1
135fi
136
137if test -d ${HOTPLUGPATH}/usb
138then
139    echo "Has usb subdirectory."
140else
141    mkdir ${HOTPLUGPATH}/usb
142fi
143
144echo "Installing script."
145${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb
146echo "Installing usermap."
147${INSTALL} -m 644 ${USERMAP} ${HOTPLUGPATH}/usb
148# If we find a usb.usermap file, and we see that this distribution
149# of hotplug does not support private usermaps, then we need to
150# patch the usb.usermap file.
151#
152# Create a merged file, diff the files to each other, and if there
153# were mismatches, then patch the installed file.
154echo "Checking hotplugging CVS version..."
155echo "/etc/hotplug/usb/*.usermap support was added in august 2002"
156EDITMAP="yes"
157CVSTAG=`grep '\$Id:' /etc/hotplug/usb.agent`
158if [ "x${CVSTAG}" != "x" ]; then
159    DATE=`echo ${CVSTAG} | awk '{ print $5 }'`
160    echo "Hotplug version seems to be from ${DATE}"
161    YEAR=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $1; }'`
162    MONTH=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $2; }'`
163    DAY=`echo ${DATE} | awk 'BEGIN { FS="/"} {print $3; }'`
164    if [ "${YEAR}" -gt "2002" ]; then
165	EDITMAP="no"
166    else
167	if [ "${YEAR}" -eq "2002" ]; then
168	    if [ "${MONTH}" -ge "08" ]; then
169		EDITMAP="no"
170	    fi
171	fi
172    fi
173fi
174if [ "x${EDITMAP}" == "xyes" ]; then
175    echo "We need to edit the ${HOTPLUGPATH}/usb.usermap if it exists..."
176    if test -f ${HOTPLUGPATH}/usb.usermap
177    then
178	echo "We have a usb.usermap..."
179	patchusermap ${USERMAP} /etc/hotplug/usb.usermap
180    fi
181fi
182
183echo "Hotplugging successfully installed."
184
185exit 0
186
187