|
Lines 571-576
Link Here
|
| 571 |
|
571 |
|
| 572 |
# establish a temporary file on request |
572 |
# establish a temporary file on request |
| 573 |
if [ ".$gen_tmpfile" = .yes ]; then |
573 |
if [ ".$gen_tmpfile" = .yes ]; then |
|
|
574 |
# create (explicitly) secure temporary directory |
| 574 |
if [ ".$TMPDIR" != . ]; then |
575 |
if [ ".$TMPDIR" != . ]; then |
| 575 |
tmpdir="$TMPDIR" |
576 |
tmpdir="$TMPDIR" |
| 576 |
elif [ ".$TEMPDIR" != . ]; then |
577 |
elif [ ".$TEMPDIR" != . ]; then |
|
Lines 578-587
Link Here
|
| 578 |
else |
579 |
else |
| 579 |
tmpdir="/tmp" |
580 |
tmpdir="/tmp" |
| 580 |
fi |
581 |
fi |
| 581 |
tmpfile="$tmpdir/.shtool.$$" |
582 |
tmpdir="$tmpdir/.shtool.$$" |
| 582 |
rm -f $tmpfile >/dev/null 2>&1 |
583 |
( umask 077 |
| 583 |
touch $tmpfile |
584 |
rm -rf "$tmpdir" >/dev/null 2>&1 || true |
| 584 |
chmod 600 $tmpfile |
585 |
mkdir "$tmpdir" >/dev/null 2>&1 |
|
|
586 |
if [ $? -ne 0 ]; then |
| 587 |
echo "$msgprefix:Error: failed to create temporary directory \`$tmpdir'" 1>&2 |
| 588 |
exit 1 |
| 589 |
fi |
| 590 |
) |
| 591 |
|
| 592 |
# create (implicitly) secure temporary file |
| 593 |
tmpfile="$tmpdir/shtool.tmp" |
| 594 |
touch "$tmpfile" |
| 585 |
fi |
595 |
fi |
| 586 |
|
596 |
|
| 587 |
# utility function: map string to lower case |
597 |
# utility function: map string to lower case |
|
Lines 598-604
Link Here
|
| 598 |
shtool_exit () { |
608 |
shtool_exit () { |
| 599 |
rc="$1" |
609 |
rc="$1" |
| 600 |
if [ ".$gen_tmpfile" = .yes ]; then |
610 |
if [ ".$gen_tmpfile" = .yes ]; then |
| 601 |
rm -f $tmpfile >/dev/null 2>&1 || true |
611 |
rm -rf "$tmpdir" >/dev/null 2>&1 || true |
| 602 |
fi |
612 |
fi |
| 603 |
exit $rc |
613 |
exit $rc |
| 604 |
} |
614 |
} |
|
Lines 3057-3063
Link Here
|
| 3057 |
files="$*" |
3071 |
files="$*" |
| 3058 |
|
3072 |
|
| 3059 |
# walk through the file list and expand archives members |
3073 |
# walk through the file list and expand archives members |
| 3060 |
tmpdir=`echo $archive | sed -e 's;[^/]*$;.arx;'` |
3074 |
ar_tmpdir=`echo $archive | sed -e 's;[^/]*$;.arx;'` |
| 3061 |
nfiles='' |
3075 |
nfiles='' |
| 3062 |
if [ ".$files" != . ]; then |
3076 |
if [ ".$files" != . ]; then |
| 3063 |
for file in $files; do |
3077 |
for file in $files; do |
|
Lines 3067-3079
Link Here
|
| 3067 |
fi |
3081 |
fi |
| 3068 |
case $file in |
3082 |
case $file in |
| 3069 |
*.a ) |
3083 |
*.a ) |
| 3070 |
if [ ! -d $tmpdir ]; then |
3084 |
if [ ! -d $ar_tmpdir ]; then |
| 3071 |
if [ ".$opt_t" = .yes ]; then |
3085 |
if [ ".$opt_t" = .yes ]; then |
| 3072 |
echo "mkdir $tmpdir" 1>&2 |
3086 |
echo "mkdir $ar_tmpdir" 1>&2 |
| 3073 |
fi |
3087 |
fi |
| 3074 |
mkdir $tmpdir |
3088 |
mkdir $ar_tmpdir |
| 3075 |
fi |
3089 |
fi |
| 3076 |
case $tmpdir in |
3090 |
case $ar_tmpdir in |
| 3077 |
.arx ) |
3091 |
.arx ) |
| 3078 |
from="../$file" |
3092 |
from="../$file" |
| 3079 |
;; |
3093 |
;; |
|
Lines 3084-3099
Link Here
|
| 3084 |
;; |
3098 |
;; |
| 3085 |
esac |
3099 |
esac |
| 3086 |
if [ ".$opt_t" = .yes ]; then |
3100 |
if [ ".$opt_t" = .yes ]; then |
| 3087 |
echo "(cd $tmpdir && $ar_prg x $from)" 1>&2 |
3101 |
echo "(cd $ar_tmpdir && $ar_prg x $from)" 1>&2 |
| 3088 |
fi |
3102 |
fi |
| 3089 |
(cd $tmpdir && eval $ar_prg x $from) |
3103 |
(cd $ar_tmpdir && eval $ar_prg x $from) |
| 3090 |
if [ $? -ne 0 ]; then |
3104 |
if [ $? -ne 0 ]; then |
| 3091 |
echo "$msgprefix:Error: member extraction failed for archive: $file" 1>&2 |
3105 |
echo "$msgprefix:Error: member extraction failed for archive: $file" 1>&2 |
| 3092 |
shtool_exit 1 |
3106 |
shtool_exit 1 |
| 3093 |
fi |
3107 |
fi |
| 3094 |
for member in - `eval $ar_prg t $file | sed -e '/_\.SYMDEF/d'`; do |
3108 |
for member in - `eval $ar_prg t $file | sed -e '/_\.SYMDEF/d'`; do |
| 3095 |
[ ".$member" = .- ] && continue |
3109 |
[ ".$member" = .- ] && continue |
| 3096 |
nfiles="$nfiles $tmpdir/$member" |
3110 |
nfiles="$nfiles $ar_tmpdir/$member" |
| 3097 |
done |
3111 |
done |
| 3098 |
;; |
3112 |
;; |
| 3099 |
* ) |
3113 |
* ) |
|
Lines 3114-3124
Link Here
|
| 3114 |
fi |
3128 |
fi |
| 3115 |
|
3129 |
|
| 3116 |
# cleanup and die gracefully |
3130 |
# cleanup and die gracefully |
| 3117 |
if [ -d $tmpdir ]; then |
3131 |
if [ -d $ar_tmpdir ]; then |
| 3118 |
if [ ".$opt_t" = .yes ]; then |
3132 |
if [ ".$opt_t" = .yes ]; then |
| 3119 |
echo "rm -rf $tmpdir" 1>&2 |
3133 |
echo "rm -rf $ar_tmpdir" 1>&2 |
| 3120 |
fi |
3134 |
fi |
| 3121 |
rm -rf $tmpdir |
3135 |
rm -rf $ar_tmpdir |
| 3122 |
fi |
3136 |
fi |
| 3123 |
|
3137 |
|
| 3124 |
shtool_exit 0 |
3138 |
shtool_exit 0 |