[OpenWrt-Devel] [PATCH procd] system: refuse sysupgrade with backup if it's unsupported

Rafał Miłecki zajec5 at gmail.com
Wed Sep 11 04:34:41 EDT 2019


From: Rafał Miłecki <rafal at milecki.pl>

Don't allow it if validation methods marked firmware as not supporting a
backup.

Signed-off-by: Rafał Miłecki <rafal at milecki.pl>
---
 system.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/system.c b/system.c
index 98fcb66..2a5d5bc 100644
--- a/system.c
+++ b/system.c
@@ -515,15 +515,17 @@ static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj,
 	enum {
 		VALIDATION_VALID,
 		VALIDATION_FORCEABLE,
+		VALIDATION_ALLOW_BACKUP,
 		__VALIDATION_MAX
 	};
 	static const struct blobmsg_policy validation_policy[__VALIDATION_MAX] = {
 		[VALIDATION_VALID] = { .name = "valid", .type = BLOBMSG_TYPE_BOOL },
 		[VALIDATION_FORCEABLE] = { .name = "forceable", .type = BLOBMSG_TYPE_BOOL },
+		[VALIDATION_ALLOW_BACKUP] = { .name = "allow_backup", .type = BLOBMSG_TYPE_BOOL },
 	};
 	struct blob_attr *validation[__VALIDATION_MAX];
 	struct blob_attr *tb[__SYSUPGRADE_MAX];
-	bool valid, forceable;
+	bool valid, forceable, allow_backup;
 
 	if (!msg)
 		return UBUS_STATUS_INVALID_ARGUMENT;
@@ -539,6 +541,7 @@ static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj,
 
 	valid = validation[VALIDATION_VALID] && blobmsg_get_bool(validation[VALIDATION_VALID]);
 	forceable = validation[VALIDATION_FORCEABLE] && blobmsg_get_bool(validation[VALIDATION_FORCEABLE]);
+	allow_backup = validation[VALIDATION_ALLOW_BACKUP] && blobmsg_get_bool(validation[VALIDATION_ALLOW_BACKUP]);
 
 	if (!valid) {
 		if (!forceable) {
@@ -548,6 +551,9 @@ static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj,
 			fprintf(stderr, "Firmware image is invalid\n");
 			return UBUS_STATUS_NOT_SUPPORTED;
 		}
+	} else if (!allow_backup && tb[SYSUPGRADE_BACKUP]) {
+		fprintf(stderr, "Firmware image doesn't allow preserving a backup\n");
+		return UBUS_STATUS_NOT_SUPPORTED;
 	}
 
 	sysupgrade_exec_upgraded(blobmsg_get_string(tb[SYSUPGRADE_PREFIX]),
-- 
2.21.0


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list