diff options
| author | Rafał Miłecki | 2019-09-11 09:21:59 +0000 |
|---|---|---|
| committer | Rafał Miłecki | 2019-09-16 04:49:25 +0000 |
| commit | 62dc8c0efe1e8acd694b893effd973a295c5b676 (patch) | |
| tree | 0e235ecd497aa00a54914dfcb0988a423588ffcd | |
| parent | 2710c65ae1bdaa33b36a0a257ebe35771a48b88f (diff) | |
| download | procd-62dc8c0efe1e8acd694b893effd973a295c5b676.tar.gz | |
system: sysupgrade: send reply on error
This provides some meaningful info on why sysupgrade has failed.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: Jo-Philipp Wich <jo@mein.io>
| -rw-r--r-- | system.c | 25 |
1 files changed, 21 insertions, 4 deletions
@@ -508,6 +508,21 @@ static const struct blobmsg_policy sysupgrade_policy[__SYSUPGRADE_MAX] = { [SYSUPGRADE_OPTIONS] = { .name = "options", .type = BLOBMSG_TYPE_TABLE }, }; +static void sysupgrade_error(struct ubus_context *ctx, + struct ubus_request_data *req, + const char *message) +{ + void *c; + + blob_buf_init(&b, 0); + + c = blobmsg_open_table(&b, "error"); + blobmsg_add_string(&b, "message", message); + blobmsg_close_table(&b, c); + + ubus_send_reply(ctx, req, b.head); +} + static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) @@ -534,8 +549,10 @@ static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj, if (!tb[SYSUPGRADE_PATH] || !tb[SYSUPGRADE_PREFIX]) return UBUS_STATUS_INVALID_ARGUMENT; - if (validate_firmware_image_call(blobmsg_get_string(tb[SYSUPGRADE_PATH]))) + if (validate_firmware_image_call(blobmsg_get_string(tb[SYSUPGRADE_PATH]))) { + sysupgrade_error(ctx, req, "Firmware image couldn't be validated"); return UBUS_STATUS_UNKNOWN_ERROR; + } blobmsg_parse(validation_policy, __VALIDATION_MAX, validation, blob_data(b.head), blob_len(b.head)); @@ -545,14 +562,14 @@ static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj, if (!valid) { if (!forceable) { - fprintf(stderr, "Firmware image is broken and cannot be installed\n"); + sysupgrade_error(ctx, req, "Firmware image is broken and cannot be installed"); return UBUS_STATUS_NOT_SUPPORTED; } else if (!tb[SYSUPGRADE_FORCE] || !blobmsg_get_bool(tb[SYSUPGRADE_FORCE])) { - fprintf(stderr, "Firmware image is invalid\n"); + sysupgrade_error(ctx, req, "Firmware image is invalid"); return UBUS_STATUS_NOT_SUPPORTED; } } else if (!allow_backup && tb[SYSUPGRADE_BACKUP]) { - fprintf(stderr, "Firmware image doesn't allow preserving a backup\n"); + sysupgrade_error(ctx, req, "Firmware image doesn't allow preserving a backup"); return UBUS_STATUS_NOT_SUPPORTED; } |