diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/client.c | 10 | ||||
-rw-r--r-- | src/core.c | 1 | ||||
-rw-r--r-- | src/rest.c | 10 | ||||
-rw-r--r-- | src/rest.h | 1 |
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; @@ -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); } @@ -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); @@ -72,6 +72,7 @@ struct og_client { uint32_t speed; uint32_t seq; struct { + const char *cmd; const char *output; uint32_t retcode; } shell; |