Imported Upstream version 1.1.11
[platform/upstream/libmtp.git] / hotplug.sh.in
1 #!/bin/bash
2
3 INSTALL="@INSTALL@"
4 HOTPLUGPATH=/etc/hotplug
5 SCRIPTNAME=libmtp.sh
6 USERMAP=libmtp.usermap
7 UDEVPATH=/etc/udev/rules.d
8 UDEVRULES=libmtp.rules
9 HALBASEPATH=/usr/share/hal/fdi/information
10 HALPATH=/usr/share/hal/fdi/information/20thirdparty
11 HALRULES=libmtp.fdi
12
13 # See if the parameter script ($2), device ($3) and productid ($4)
14 # are already defined in the usermap ($1)
15 function 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.
42 function 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
75 if 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
87 fi
88
89 # Check for HAL next
90 if 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
101 fi
102
103
104 # Check prerequisites
105 COMMAND=`which grep 2> /dev/null`
106 if [ "x${COMMAND}" = "x" ];
107 then
108     echo "Missing grep program. Fatal error."
109     exit 1
110 fi
111 COMMAND=`which awk 2> /dev/null`
112 if [ "x${COMMAND}" = "x" ];
113 then
114     echo "Missing awk program. Fatal error."
115     exit 1
116 fi
117 if [ "x${USER}" != "xroot" ];
118 then
119     echo "WARNING: this program should be run as root!"
120 fi
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
129 if test -d ${HOTPLUGPATH}
130 then
131     echo "Hotplug in ${HOTPLUGPATH}"
132 else
133     echo "Hotplug missing on this system. Cannot install."
134     exit 1
135 fi
136
137 if test -d ${HOTPLUGPATH}/usb
138 then
139     echo "Has usb subdirectory."
140 else
141     mkdir ${HOTPLUGPATH}/usb
142 fi
143
144 echo "Installing script."
145 ${INSTALL} libmtp.sh ${HOTPLUGPATH}/usb
146 echo "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.
154 echo "Checking hotplugging CVS version..."
155 echo "/etc/hotplug/usb/*.usermap support was added in august 2002"
156 EDITMAP="yes"
157 CVSTAG=`grep '\$Id:' /etc/hotplug/usb.agent`
158 if [ "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
173 fi
174 if [ "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
181 fi
182
183 echo "Hotplugging successfully installed."
184
185 exit 0
186