View | Details | Raw Unified | Return to bug 86168
Collapse All | Expand All

(-)shtool (-16 / +26 lines)
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

Return to bug 86168