summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOpenGnSys Support Team <soporte-og@soleta.eu>2024-06-21 14:10:13 +0200
committerOpenGnSys Support Team <soporte-og@soleta.eu>2024-06-21 14:12:02 +0200
commit12d5caf6a6af5cb4870d375e185341909fc61b7e (patch)
tree11809851babe6041b5705447e9e53f876bcaf7a7
parent98fab52b74ea9cbf7bdac7a022504fc6be90be88 (diff)
rest: add retcode to shell/output
Add retcode field to specify return code of shell invocation.
-rw-r--r--src/client.c11
-rw-r--r--src/core.c2
-rw-r--r--src/rest.c3
-rw-r--r--src/rest.h5
4 files changed, 16 insertions, 5 deletions
diff --git a/src/client.c b/src/client.c
index 9989462..46baab8 100644
--- a/src/client.c
+++ b/src/client.c
@@ -172,6 +172,7 @@ static int og_resp_probe(struct og_client *cli, json_t *data)
static int og_resp_shell_run(struct og_client *cli, json_t *data)
{
const char *output = NULL;
+ uint32_t retcode;
const char *key;
json_t *value;
int err = -1;
@@ -184,7 +185,12 @@ static int og_resp_shell_run(struct og_client *cli, json_t *data)
err = og_json_parse_string(value, &output);
if (err < 0)
return err;
+ } else if (!strcmp(key, "retcode")) {
+ err = og_json_parse_uint(value, &retcode);
+ if (err < 0)
+ return err;
}
+
}
if (!output) {
@@ -193,8 +199,9 @@ static int og_resp_shell_run(struct og_client *cli, json_t *data)
return -1;
}
- free((void *)cli->shell_output);
- cli->shell_output = strdup(output);
+ free((void *)cli->shell.output);
+ cli->shell.output = strdup(output);
+ cli->shell.retcode = retcode;
return 0;
}
diff --git a/src/core.c b/src/core.c
index 24fee79..eaed6bb 100644
--- a/src/core.c
+++ b/src/core.c
@@ -32,7 +32,7 @@ static void og_client_release(struct ev_loop *loop, struct og_client *cli)
ev_timer_stop(loop, &cli->timer);
ev_io_stop(loop, &cli->io);
close(cli->io.fd);
- free((void *)cli->shell_output);
+ free((void *)cli->shell.output);
free(cli);
}
diff --git a/src/rest.c b/src/rest.c
index d8bb773..e61add0 100644
--- a/src/rest.c
+++ b/src/rest.c
@@ -797,13 +797,14 @@ static int og_cmd_run_get(json_t *element, struct og_msg_params *params,
}
json_object_set_new(object, "addr", addr);
- output = json_string(cli->shell_output);
+ output = json_string(cli->shell.output);
if (!output) {
json_decref(object);
json_decref(array);
return -1;
}
json_object_set_new(object, "output", output);
+ json_object_set_new(object, "retcode", json_integer(cli->shell.retcode));
json_array_append_new(array, object);
}
diff --git a/src/rest.h b/src/rest.h
index 4880c6a..0fb1776 100644
--- a/src/rest.h
+++ b/src/rest.h
@@ -71,7 +71,10 @@ struct og_client {
bool autorun;
uint32_t speed;
uint32_t seq;
- const char *shell_output;
+ struct {
+ const char *output;
+ uint32_t retcode;
+ } shell;
};
void og_client_add(struct og_client *cli);