base-files: sysupgrade: Allow downloading of firmware images using HTTPS
[openwrt/staging/hauke.git] / package / base-files / files / sbin / sysupgrade
index c747c4eaad84f70c2a13c3dcb79f8e989aea118e..f42974360cfdcdd439a86736af27f49e032daba6 100755 (executable)
@@ -96,12 +96,31 @@ EOF
 # prevent messages from clobbering the tarball when using stdout
 [ "$CONF_BACKUP" = "-" ] && export VERBOSE=0
 
+
+list_conffiles() {
+       awk '
+               BEGIN { conffiles = 0 }
+               /^Conffiles:/ { conffiles = 1; next }
+               !/^ / { conffiles = 0; next }
+               conffiles == 1 { print }
+       ' /usr/lib/opkg/status
+}
+
+list_changed_conffiles() {
+       # Cannot handle spaces in filenames - but opkg cannot either...
+       list_conffiles | while read file csum; do
+               [ -r "$file" ] || continue
+
+               echo "${csum}  ${file}" | sha256sum -sc - || echo "$file"
+       done
+}
+
 add_uci_conffiles() {
        local file="$1"
        ( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \
                /etc/sysupgrade.conf /lib/upgrade/keep.d/* 2>/dev/null) \
                -type f -o -type l 2>/dev/null;
-         opkg list-changed-conffiles ) | sort -u > "$file"
+         list_changed_conffiles ) | sort -u > "$file"
        return 0
 }
 
@@ -117,8 +136,7 @@ add_overlayfiles() {
 }
 
 # hooks
-sysupgrade_image_check="fwtool_check_image platform_check_image"
-sysupgrade_pre_upgrade="fwtool_pre_upgrade"
+sysupgrade_image_check="fwtool_check_signature fwtool_check_image platform_check_image"
 
 if [ $SAVE_OVERLAY = 1 ]; then
        [ ! -d /overlay/upper/etc ] && {
@@ -147,6 +165,11 @@ do_save_conffiles() {
        v "Saving config files..."
        [ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V=""
        tar c${TAR_V}zf "$conf_tar" -T "$CONFFILES" 2>/dev/null
+       if [ "$?" -ne 0 ]; then
+               echo "Failed to create the configuration backup."
+               rm -f "$conf_tar"
+               exit 1
+       fi
 
        rm -f "$CONFFILES"
 }
@@ -180,7 +203,8 @@ type platform_check_image >/dev/null 2>/dev/null || {
 }
 
 case "$IMAGE" in
-       http://*)
+       http://*|\
+       https://*)
                wget -O/tmp/sysupgrade.img "$IMAGE"
                IMAGE=/tmp/sysupgrade.img
                ;;
@@ -245,10 +269,8 @@ else
        rm -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap
 fi
 
-run_hooks "" $sysupgrade_pre_upgrade
-
 install_bin /sbin/upgraded
-v "Commencing upgrade. All shell sessions will be closed now."
+v "Commencing upgrade. Closing all shell sessions."
 
 COMMAND='. /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2'