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