summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOpenGnSys Support Team <soporte-og@soleta.eu>2024-06-21 15:04:47 +0200
committerOpenGnSys Support Team <soporte-og@soleta.eu>2024-06-21 15:05:26 +0200
commit6cbe69e89e716f81a71f7541e2e0f036b297a2fc (patch)
treee6564b12103c1a19c07bfb702aee70c65ad3629d /src
parent12d5caf6a6af5cb4870d375e185341909fc61b7e (diff)
rest: add cmd to shell/output
Add "cmd" field to json that provides the original command string, so it is provided with the output and the return code.
Diffstat (limited to 'src')
-rw-r--r--src/client.c10
-rw-r--r--src/core.c1
-rw-r--r--src/rest.c10
-rw-r--r--src/rest.h1
4 files changed, 19 insertions, 3 deletions
diff --git a/src/client.c b/src/client.c
index 46baab8..3affaed 100644
--- a/src/client.c
+++ b/src/client.c
@@ -171,7 +171,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;
+ const char *cmd = NULL, *output = NULL;
uint32_t retcode;
const char *key;
json_t *value;
@@ -181,7 +181,11 @@ static int og_resp_shell_run(struct og_client *cli, json_t *data)
return -1;
json_object_foreach(data, key, value) {
- if (!strcmp(key, "out")) {
+ if (!strcmp(key, "cmd")) {
+ err = og_json_parse_string(value, &cmd);
+ if (err < 0)
+ return err;
+ } else if (!strcmp(key, "out")) {
err = og_json_parse_string(value, &output);
if (err < 0)
return err;
@@ -199,7 +203,9 @@ static int og_resp_shell_run(struct og_client *cli, json_t *data)
return -1;
}
+ free((void *)cli->shell.cmd);
free((void *)cli->shell.output);
+ cli->shell.cmd = strdup(cmd);
cli->shell.output = strdup(output);
cli->shell.retcode = retcode;
diff --git a/src/core.c b/src/core.c
index eaed6bb..5ac7802 100644
--- a/src/core.c
+++ b/src/core.c
@@ -32,6 +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.cmd);
free((void *)cli->shell.output);
free(cli);
}
diff --git a/src/rest.c b/src/rest.c
index e61add0..4dc7515 100644
--- a/src/rest.c
+++ b/src/rest.c
@@ -777,7 +777,7 @@ static int og_cmd_run_get(json_t *element, struct og_msg_params *params,
return -1;
for (i = 0; i < params->ips_array_len; i++) {
- json_t *object, *output, *addr;
+ json_t *object, *output, *addr, *cmd;
struct og_client *cli;
cli = og_client_find(params->ips_array[i]);
@@ -797,6 +797,14 @@ static int og_cmd_run_get(json_t *element, struct og_msg_params *params,
}
json_object_set_new(object, "addr", addr);
+ cmd = json_string(cli->shell.cmd);
+ if (!cmd) {
+ json_decref(object);
+ json_decref(array);
+ return -1;
+ }
+ json_object_set_new(object, "cmd", cmd);
+
output = json_string(cli->shell.output);
if (!output) {
json_decref(object);
diff --git a/src/rest.h b/src/rest.h
index 0fb1776..60edccb 100644
--- a/src/rest.h
+++ b/src/rest.h
@@ -72,6 +72,7 @@ struct og_client {
uint32_t speed;
uint32_t seq;
struct {
+ const char *cmd;
const char *output;
uint32_t retcode;
} shell;