#include #include "attack_step_execution.h" #include "executor.h" #include "mape_k.h" #include "pentest_state.h" void attack_step_exec_init(struct attack_step_exec_ctx *ase_c, struct attack_step *a_s, struct active_attack *a_a) { ase_c->a_s = a_s; ase_c->a_a = a_a; } static void attack_step_run(struct task *t); static void attack_step_ctrl(struct task *t); void attack_step_exec(struct exec_cmd *cmd) { struct task *t_as_run = task_engine_create_task(attack_step_run,attack_step_ctrl,cmd,cmd); task_engine_add_task(t_as_run,0); } static void attack_step_run(struct task *t) { struct exec_cmd *cmd = task_get_ctx(t); struct attack_step_exec_ctx *ase_c= cmd_get_ctx(cmd); struct executor *ex = cmd_get_executor(cmd); struct arc_model *a_m = ex->mape_k->k_b.model; struct attack_step *a_s = ase_c->a_s; struct active_attack *a_a = ase_c->a_a; char *target = ase_c->a_a->target; bool res = false; printf("[%s:%s] Initializing\n",ase_c->a_s->name,ase_c->a_a->target); if(a_s->guard(a_m,target)) { pthread_mutex_lock(&cmd->lock); //set the state to running a_a->cur_step_state = AAS_RUN; pthread_mutex_unlock(&cmd->lock); res = a_s->run(a_m,target); if(res) { printf("[%s:%s] Success\n",ase_c->a_s->name,ase_c->a_a->target); } else { printf("[%s:%s] Failed\n",ase_c->a_s->name,ase_c->a_a->target); } } pthread_mutex_lock(&cmd->lock); a_a->cur_res = res; pthread_mutex_unlock(&cmd->lock); } static void attack_step_ctrl(struct task *t) { struct exec_cmd *cmd = task_get_ctx(t); struct attack_step_exec_ctx *ase_c= cmd_get_ctx(cmd); struct active_attack *a_a = ase_c->a_a; a_a->cur_step_state = AAS_DONE; cmd_set_status(cmd,CMD_DONE); cmd->done(cmd); }