base-files: use JSON for storing firmware validation info
[openwrt/staging/jow.git] / package / base-files / files / usr / libexec / validate_firmware_image
diff --git a/package/base-files/files/usr/libexec/validate_firmware_image b/package/base-files/files/usr/libexec/validate_firmware_image
new file mode 100755 (executable)
index 0000000..a07796c
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/system.sh
+. /usr/share/libubox/jshn.sh
+
+include /lib/upgrade
+
+VALID=1
+FORCEABLE=1
+
+# Mark image as invalid but still possible to install
+notify_firmware_invalid() {
+       VALID=0
+}
+
+# Mark image as broken (impossible to install)
+notify_firmware_broken() {
+       VALID=0
+       FORCEABLE=0
+}
+
+# Add result of validation test
+notify_firmware_test_result() {
+       local old_ns
+
+       json_set_namespace validate_firmware_image old_ns
+       json_add_boolean "$1" "$2"
+       json_set_namespace $old_ns
+}
+
+err_to_bool() {
+       [ "$1" -ne 0 ] && echo 0 || echo 1
+}
+
+fwtool_check_signature "$1" >&2
+FWTOOL_SIGNATURE=$?
+[ "$FWTOOL_SIGNATURE" -ne 0 ] && notify_firmware_invalid
+
+fwtool_check_image "$1" >&2
+FWTOOL_DEVICE_MATCH=$?
+[ "$FWTOOL_DEVICE_MATCH" -ne 0 ] && notify_firmware_invalid
+
+json_set_namespace validate_firmware_image old_ns
+json_init
+       json_add_object "tests"
+               json_add_boolean fwtool_signature "$(err_to_bool $FWTOOL_SIGNATURE)"
+               json_add_boolean fwtool_device_match "$(err_to_bool $FWTOOL_DEVICE_MATCH)"
+
+               # Call platform_check_image() here so it can add its test
+               # results and still mark image properly.
+               json_set_namespace $old_ns
+               platform_check_image "$1" >&2 || notify_firmware_invalid
+               json_set_namespace validate_firmware_image old_ns
+       json_close_object
+       json_add_boolean valid "$VALID"
+       json_add_boolean forceable "$FORCEABLE"
+json_dump -i
+json_set_namespace $old_ns