=================================================================== RCS file: /cvs/openbsd/fw_update/fw_install.sh,v retrieving revision 1.125 retrieving revision 1.126 diff -u -r1.125 -r1.126 --- openbsd/fw_update/fw_install.sh 2021/12/25 00:27:56 1.125 +++ openbsd/fw_update/fw_install.sh 2021/12/25 00:34:00 1.126 @@ -1,5 +1,5 @@ #!/bin/ksh -# $OpenBSD: fw_install.sh,v 1.125 2021/12/25 00:27:56 afresh1 Exp $ +# $OpenBSD: fw_install.sh,v 1.126 2021/12/25 00:34:00 afresh1 Exp $ # # Copyright (c) 2021 Andrew Hewus Fresh # @@ -40,6 +40,14 @@ INSTALL=true LOCALSRC= +unset FTPPID +REMOVE_LOCALSRC=false +cleanup() { + [ "${FTPPID:-}" ] && kill -TERM -"$FTPPID" 2>/dev/null + "$REMOVE_LOCALSRC" && rm -rf "$LOCALSRC" +} +trap cleanup EXIT + tmpdir() { local _i=1 _dir @@ -57,7 +65,7 @@ } fetch() { - local _src="${FWURL}/${1##*/}" _dst=$1 _user=_file _pid _exit _error='' + local _src="${FWURL}/${1##*/}" _dst=$1 _user=_file _exit _error='' # If we're not in the installer, # we have su(1) and doas(1) is unlikely to be configured. @@ -72,14 +80,12 @@ exec /usr/bin/doas -u "$_user" \ /usr/bin/ftp -N "${0##/}" -D 'Get/Verify' $flags -o- "$_src" > "$_dst" fi - ) & _pid=$! + ) & FTPPID=$! set +o monitor - trap "kill -TERM '-$_pid' 2>/dev/null; exit 1" EXIT INT QUIT ABRT TERM - SECONDS=0 _last=0 - while kill -0 -"$_pid" 2>/dev/null; do + while kill -0 -"$FTPPID" 2>/dev/null; do if [[ $SECONDS -gt 12 ]]; then set -- $( ls -ln "$_dst" 2>/dev/null ) if [[ $_last -ne $5 ]]; then @@ -87,7 +93,7 @@ SECONDS=0 sleep 1 else - kill -INT -"$_pid" + kill -INT -"$FTPPID" _error=" (timed out)" fi else @@ -96,11 +102,11 @@ done set +o errexit - wait "$_pid" + wait "$FTPPID" _exit=$? set -o errexit - trap "" EXIT INT QUIT ABRT TERM + unset FTPPID if [ "$_exit" -ne 0 ]; then rm -f "$_dst" @@ -352,6 +358,7 @@ if [ ! "$LOCALSRC" ]; then LOCALSRC="$( tmpdir "${DESTDIR}/tmp/${0##*/}" )" + REMOVE_LOCALSRC=true fi CFILE="$LOCALSRC/$CFILE"