#1061 add timeout to pending scheduled commands

Pending schedule commands can deny ogLive boot of clients due
to filling of pending cmd queue with commands such as "Iniciar Sesión".

For example: Using RemotePC to serve clients that do not boot into
ogLive will fill up the pending command queue with "Iniciar Sesión".

Introduce a safety timeout for pending (scheduled) commands to
avoid this situation.
master
Jose M. Guisado 2021-09-06 10:24:19 +00:00 committed by OpenGnSys Support Team
parent 5558fbcf0b
commit 2d68f8a0ec
3 changed files with 14 additions and 0 deletions

View File

@ -186,14 +186,25 @@ static void og_agent_reset_state(struct og_client *cli)
memset(cli->buf, 0, sizeof(cli->buf));
}
#define OG_AGENT_CMD_TIMEOUT 900
static void og_agent_deliver_pending_cmd(struct og_client *cli)
{
struct timeval now, elapsed;
const struct og_cmd *cmd;
cmd = og_cmd_find(inet_ntoa(cli->addr.sin_addr));
if (!cmd)
return;
gettimeofday(&now, NULL);
timersub(&now, &cmd->tv, &elapsed);
if (elapsed.tv_sec >= OG_AGENT_CMD_TIMEOUT) {
og_dbi_update_action(cmd->id, false);
og_cmd_free(cmd);
return;
}
og_send_request(cmd->method, cmd->type, &cmd->params, cmd->json);
cli->last_cmd_id = cmd->id;

View File

@ -2323,6 +2323,7 @@ static void og_cmd_init(struct og_cmd *cmd, enum og_rest_method method,
cmd->params.ips_array[0] = strdup(cmd->ip);
cmd->params.ips_array_len = 1;
cmd->json = root;
gettimeofday(&cmd->tv, NULL);
}
static int og_cmd_legacy_wol(const char *input, struct og_cmd *cmd)

View File

@ -2,6 +2,7 @@
#define OG_REST_H
#include <ev.h>
#include <sys/time.h>
extern struct ev_loop *og_loop;
@ -89,6 +90,7 @@ struct og_cmd {
enum og_rest_method method;
struct og_msg_params params;
json_t *json;
struct timeval tv;
};
const struct og_cmd *og_cmd_find(const char *client_ip);