~ubuntu-branches/ubuntu/maverick/bumprace/maverick

« back to all changes in this revision

Viewing changes to install-sh

  • Committer: Bazaar Package Importer
  • Author(s): Christian T. Steigies
  • Date: 2005-04-13 22:50:44 UTC
  • mfrom: (2.1.1 warty)
  • Revision ID: james.westby@ubuntu.com-20050413225044-t1anrzoaigie8i3r
Tags: 1.4.6-4
really, really fix buffer overflow by applying patches in configure,
removing patches in clean target (closes: #302493)

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
 
57
57
while [ x"$1" != x ]; do
58
58
    case $1 in
59
 
        -c) instcmd="$cpprog"
 
59
        -c) instcmd=$cpprog
60
60
            shift
61
61
            continue;;
62
62
 
79
79
            shift
80
80
            continue;;
81
81
 
82
 
        -s) stripcmd="$stripprog"
 
82
        -s) stripcmd=$stripprog
83
83
            shift
84
84
            continue;;
85
85
 
106
106
 
107
107
if [ x"$src" = x ]
108
108
then
109
 
        echo "install:  no input file specified"
 
109
        echo "$0: no input file specified" >&2
110
110
        exit 1
111
111
else
112
 
        true
 
112
        :
113
113
fi
114
114
 
115
115
if [ x"$dir_arg" != x ]; then
116
116
        dst=$src
117
117
        src=""
118
 
        
119
 
        if [ -d $dst ]; then
 
118
 
 
119
        if [ -d "$dst" ]; then
120
120
                instcmd=:
121
121
                chmodcmd=""
122
122
        else
123
 
                instcmd=mkdir
 
123
                instcmd=$mkdirprog
124
124
        fi
125
125
else
126
126
 
127
127
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
128
 
# might cause directories to be created, which would be especially bad 
 
128
# might cause directories to be created, which would be especially bad
129
129
# if $src (and thus $dsttmp) contains '*'.
130
130
 
131
 
        if [ -f $src -o -d $src ]
 
131
        if [ -f "$src" ] || [ -d "$src" ]
132
132
        then
133
 
                true
 
133
                :
134
134
        else
135
 
                echo "install:  $src does not exist"
 
135
                echo "$0: $src does not exist" >&2
136
136
                exit 1
137
137
        fi
138
 
        
 
138
 
139
139
        if [ x"$dst" = x ]
140
140
        then
141
 
                echo "install:  no destination specified"
 
141
                echo "$0: no destination specified" >&2
142
142
                exit 1
143
143
        else
144
 
                true
 
144
                :
145
145
        fi
146
146
 
147
147
# If destination is a directory, append the input filename; if your system
148
148
# does not like double slashes in filenames, you may need to add some logic
149
149
 
150
 
        if [ -d $dst ]
 
150
        if [ -d "$dst" ]
151
151
        then
152
 
                dst="$dst"/`basename $src`
 
152
                dst=$dst/`basename "$src"`
153
153
        else
154
 
                true
 
154
                :
155
155
        fi
156
156
fi
157
157
 
158
158
## this sed command emulates the dirname command
159
 
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
 
159
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
160
160
 
161
161
# Make sure that the destination directory exists.
162
162
#  this part is taken from Noah Friedman's mkinstalldirs script
163
163
 
164
164
# Skip lots of stat calls in the usual case.
165
165
if [ ! -d "$dstdir" ]; then
166
 
defaultIFS='    
167
 
'
168
 
IFS="${IFS-${defaultIFS}}"
 
166
defaultIFS='
 
167
        '
 
168
IFS="${IFS-$defaultIFS}"
169
169
 
170
 
oIFS="${IFS}"
 
170
oIFS=$IFS
171
171
# Some sh's can't handle IFS=/ for some reason.
172
172
IFS='%'
173
 
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
174
 
IFS="${oIFS}"
 
173
set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
 
174
IFS=$oIFS
175
175
 
176
176
pathcomp=''
177
177
 
178
178
while [ $# -ne 0 ] ; do
179
 
        pathcomp="${pathcomp}${1}"
 
179
        pathcomp=$pathcomp$1
180
180
        shift
181
181
 
182
 
        if [ ! -d "${pathcomp}" ] ;
 
182
        if [ ! -d "$pathcomp" ] ;
183
183
        then
184
 
                $mkdirprog "${pathcomp}"
 
184
                $mkdirprog "$pathcomp"
185
185
        else
186
 
                true
 
186
                :
187
187
        fi
188
188
 
189
 
        pathcomp="${pathcomp}/"
 
189
        pathcomp=$pathcomp/
190
190
done
191
191
fi
192
192
 
193
193
if [ x"$dir_arg" != x ]
194
194
then
195
 
        $doit $instcmd $dst &&
 
195
        $doit $instcmd "$dst" &&
196
196
 
197
 
        if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
198
 
        if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
199
 
        if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
200
 
        if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
 
197
        if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
 
198
        if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
 
199
        if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
 
200
        if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
201
201
else
202
202
 
203
203
# If we're going to rename the final executable, determine the name now.
204
204
 
205
 
        if [ x"$transformarg" = x ] 
 
205
        if [ x"$transformarg" = x ]
206
206
        then
207
 
                dstfile=`basename $dst`
 
207
                dstfile=`basename "$dst"`
208
208
        else
209
 
                dstfile=`basename $dst $transformbasename | 
 
209
                dstfile=`basename "$dst" $transformbasename |
210
210
                        sed $transformarg`$transformbasename
211
211
        fi
212
212
 
213
213
# don't allow the sed command to completely eliminate the filename
214
214
 
215
 
        if [ x"$dstfile" = x ] 
 
215
        if [ x"$dstfile" = x ]
216
216
        then
217
 
                dstfile=`basename $dst`
 
217
                dstfile=`basename "$dst"`
218
218
        else
219
 
                true
 
219
                :
220
220
        fi
221
221
 
222
 
# Make a temp file name in the proper directory.
 
222
# Make a couple of temp file names in the proper directory.
223
223
 
224
224
        dsttmp=$dstdir/#inst.$$#
 
225
        rmtmp=$dstdir/#rm.$$#
 
226
 
 
227
# Trap to clean up temp files at exit.
 
228
 
 
229
        trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
 
230
        trap '(exit $?); exit' 1 2 13 15
225
231
 
226
232
# Move or copy the file name to the temp name
227
233
 
228
 
        $doit $instcmd $src $dsttmp &&
229
 
 
230
 
        trap "rm -f ${dsttmp}" 0 &&
 
234
        $doit $instcmd "$src" "$dsttmp" &&
231
235
 
232
236
# and set any options; do chmod last to preserve setuid bits
233
237
 
235
239
# ignore errors from any of these, just make sure not to ignore
236
240
# errors from the above "$doit $instcmd $src $dsttmp" command.
237
241
 
238
 
        if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
239
 
        if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
240
 
        if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
241
 
        if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
 
242
        if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
 
243
        if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
 
244
        if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
 
245
        if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
 
246
 
 
247
# Now remove or move aside any old file at destination location.  We try this
 
248
# two ways since rm can't unlink itself on some systems and the destination
 
249
# file might be busy for other reasons.  In this case, the final cleanup
 
250
# might fail but the new file should still install successfully.
 
251
 
 
252
{
 
253
        if [ -f "$dstdir/$dstfile" ]
 
254
        then
 
255
                $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
 
256
                $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
 
257
                {
 
258
                  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
 
259
                  (exit 1); exit
 
260
                }
 
261
        else
 
262
                :
 
263
        fi
 
264
} &&
242
265
 
243
266
# Now rename the file to the real destination.
244
267
 
245
 
        $doit $rmcmd -f $dstdir/$dstfile &&
246
 
        $doit $mvcmd $dsttmp $dstdir/$dstfile 
 
268
        $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
247
269
 
248
270
fi &&
249
271
 
 
272
# The final little trick to "correctly" pass the exit status to the exit trap.
250
273
 
251
 
exit 0
 
274
{
 
275
        (exit 0); exit
 
276
}