[BACK]Return to fw_install.sh CVS log [TXT][DIR] Up to [local] / openbsd / fw_update

Diff for /openbsd/fw_update/fw_install.sh between version 1.59 and 1.65

version 1.59, 2021/12/09 02:08:03 version 1.65, 2021/12/09 02:51:25
Line 61 
Line 61 
 fetch() {  fetch() {
         local _file=$1 _user=_file _exit          local _file=$1 _user=_file _exit
   
         >"$_file"  
         chown "$_user" "$_file"  
   
         # If we're not in the installer, we have su(1)          # If we're not in the installer, we have su(1)
         # and doas(1) is unlikely to be configured.          # and doas(1) is unlikely to be configured.
         if [ -x /usr/bin/su ]; then          if [ -x /usr/bin/su ]; then
                 /usr/bin/su -s /bin/ksh "$_user" -c \                  /usr/bin/su -s /bin/ksh "$_user" -c \
                     "/usr/bin/ftp -D 'Get/Verify' -Vm \                      "/usr/bin/ftp -D 'Get/Verify' -Vm \
                         -o '$_file' '${FWURL}/${_file}'"                          -o- '${FWURL}/${_file}'" > "$_file"
                 _exit="$?"                  _exit="$?"
         else          else
                 /usr/bin/doas -u "$_user" \                  /usr/bin/doas -u "$_user" \
                     ftp -D 'Get/Verify' -Vm \                      ftp -D 'Get/Verify' -Vm \
                         -o "$_file" "${FWURL}/${_file}"                          -o- "${FWURL}/${_file}" > "$_file"
                 _exit="$?"                  _exit="$?"
         fi          fi
   
Line 83 
Line 80 
                 echo "Cannot fetch $_file" >&2                  echo "Cannot fetch $_file" >&2
                 return 1                  return 1
         fi          fi
   
         chown root "$_file"  
 }  }
   
 verify() {  verify() {
Line 187 
Line 182 
 }  }
   
 usage() {  usage() {
         echo "Usage: fw_install [ driver | file [ ... ] ]"          echo "Usage: fw_install [ -d dir | -L dir ] [ driver | file [ ... ] ]"
         exit 2          exit 2
 }  }
   
 while getopts '?' name  DOWNLOADDIR=
   LOCALDIR=
   while getopts d:L: name
 do  do
        case "$name" in         case "$name" in
          d) DOWNLOADDIR=$OPTARG ;;
          L) LOCALDIR=$OPTARG    ;;
        ?) usage 2 ;;         ?) usage 2 ;;
        esac         esac
 done  done
 shift $((OPTIND - 1))  shift $((OPTIND - 1))
   
   if [[ -n "$DOWNLOADDIR" && -n "$LOCALDIR" ]]; then
           echo "Cannot use -d and -L" >&2
           usage 2
   fi
   
 set -A devices -- "$@"  set -A devices -- "$@"
   
 [ "${devices[*]:-}" ] ||  [ "${devices[*]:-}" ] ||
     set -A devices -- $( devices_needing_firmware )      set -A devices -- $( devices_needing_firmware )
   
 if [ ! "${devices:-}" ]; then  if [ ! "${devices[*]:-}" ]; then
         echo "No devices found which need firmware files to be downloaded."          echo "No devices found which need firmware files to be downloaded."
         exit          exit
 fi  fi
Line 217 
Line 221 
         d=$( firmware_devicename "$f" )          d=$( firmware_devicename "$f" )
         [ "$f" = "$d" ] && f="$( echo "$f"-firmware-*.tgz | sed '$!d' )"          [ "$f" = "$d" ] && f="$( echo "$f"-firmware-*.tgz | sed '$!d' )"
         if [ -e "$f" ]; then          if [ -e "$f" ]; then
                   if [ "$DOWNLOADDIR" ]; then
                           echo "Cannot download local file $f" >&2
                           exit 2
                   fi
                 devices[$i]="$d:$( realpath "$f" )"                  devices[$i]="$d:$( realpath "$f" )"
         fi          fi
         i=$((i + 1))          i=$((i + 1))
 done  done
   
 TMPDIR=$( tmpdir "${DESTDIR}/tmp/fw_install" )  if [ "$DOWNLOADDIR" ]; then
 cd "$TMPDIR"          if ! cd "$DOWNLOADDIR"; then
                   echo "Unable to use $DOWNLOADDIR, make sure it is a directory"
                   exit 2
           fi
   elif [ "$LOCALDIR" ]; then
           if ! cd "$LOCALDIR"; then
                   echo "Unable to use $LOCALDIR, make sure it is a directory"
                   exit 2
           fi
   else
           TMPDIR=$( tmpdir "${DESTDIR}/tmp/fw_install" )
           cd "$TMPDIR"
   fi
   
 # To unpriv we need to let the unpriv user into this dir  if ! [[ -n "$LOCALDIR" && -e "$CFILE" ]]; then
 chmod go+x .          fetch "$CFILE"
           ! signify -qVep "$FWPUB_KEY" -x "$CFILE" -m "$CFILE" &&
               echo "Signature check of SHA256.sig failed" >&2 && exit 1
   fi
   
 fetch "$CFILE"  
 ! signify -qVep "$FWPUB_KEY" -x "$CFILE" -m "$CFILE" &&  
     echo "Signature check of SHA256.sig failed" >&2 && exit 1  
   
 for d in "${devices[@]}"; do  for d in "${devices[@]}"; do
         f="${d##*:}"          f="${d##*:}"
         if [ "$f" = "$d" ]; then          if [ "$f" = "$d" ]; then
                 f=$( firmware_filename "$d" || true )                  f=$( firmware_filename "$d" || true )
                 [ "$f" ] || continue                  [ "$f" ] || continue
         else          else
             d="${d%:*}"                  d="${d%:*}"
         fi          fi
   
         set -A installed -- $( installed_firmware "$d" )          set -A installed -- $( installed_firmware "$d" )
   
         if [ "${installed:-}" ]; then          if [ ! "$DOWNLOADDIR" ] && [ "${installed[*]:-}" ]; then
                 for i in "${installed[@]:-}"; do                  for i in "${installed[@]}"; do
                         if [ "${f##*/}" = "$i.tgz" ]; then                          if [ "${f##*/}" = "$i.tgz" ]; then
                                 echo "$i already installed"                                  echo "$i already installed"
                                 continue 2                                  continue 2
Line 253 
Line 272 
         fi          fi
   
         if [ ! -e "$f" ]; then          if [ ! -e "$f" ]; then
                   [ "$LOCALDIR" ] && echo "Cannot install $f, not found" >&2 && continue
                 fetch  "$f" || continue                  fetch  "$f" || continue
                 verify "$f" || continue                  verify "$f" || continue
           elif [ "$DOWNLOADDIR" ]; then
                   echo "Already have $f"
                   verify "$f" || continue
         fi          fi
   
         if [ "${installed:-}" ]; then          [ "$DOWNLOADDIR" ] && continue
   
           if [ "${installed[*]:-}" ]; then
                 for i in "${installed[@]}"; do                  for i in "${installed[@]}"; do
                         delete_firmware "$i"                          delete_firmware "$i"
                 done                  done

Legend:
Removed from v.1.59  
changed lines
  Added in v.1.65

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>