diff --git a/QnetLink.cpp b/QnetLink.cpp index c38cecd..cdc1037 100644 --- a/QnetLink.cpp +++ b/QnetLink.cpp @@ -54,7 +54,7 @@ #include "QnetLink.h" #include "Utilities.h" -#define LINK_VERSION "QnetLink-422" +#define LINK_VERSION "QnetLink-509" #ifndef BIN_DIR #define BIN_DIR "/usr/local/bin" #endif @@ -889,6 +889,7 @@ void CQnetLink::Process() } while (keep_running) { + static bool loadG = false; time(&tnow); if (keep_running && (tnow - hb) > 0) { /* send heartbeat to connected donglers */ @@ -2733,12 +2734,9 @@ void CQnetLink::Process() } else if (0==memcmp(dsvt.hdr.urcall, " ", 6) && dsvt.hdr.urcall[7]=='X') { // execute a script if (dsvt.hdr.urcall[6] != ' ') { // there has to be a char here - bool user_ok = true; if (admin.size()>0 && admin.end()==admin.find(call)) { // only admins (if defined) can execute scripts - printf("%s not found in the link_admin list!\n", call); - user_ok = false; - } - if (user_ok) { + printf("%s not found in admin list, ignoring script %c request\n", call, dsvt.hdr.urcall[6]); + } else { memset(system_cmd, '\0', sizeof(system_cmd)); snprintf(system_cmd, FILENAME_MAX, "%s/exec_%c.sh %s %c &", BIN_DIR, dsvt.hdr.urcall[6], call, dsvt.hdr.rpt1[7]); printf("Executing %s\n", system_cmd); @@ -2746,19 +2744,26 @@ void CQnetLink::Process() } } } - else if (0==memcmp(dsvt.hdr.urcall, " ", 6) && dsvt.hdr.urcall[6]=='D' && admin.find(call)!=admin.end()) { // only ADMIN can block dongle users - if (dsvt.hdr.urcall[7] == '1') { - max_dongles = saved_max_dongles; - printf("Dongle connections are now allowed\n"); - } else if (dsvt.hdr.urcall[7] == '0') { - inbound_list.clear(); - max_dongles = 0; - printf("Dongle connections are now disallowed\n"); + else if (0==memcmp(dsvt.hdr.urcall, " ", 6) && dsvt.hdr.urcall[6]=='D') { // only ADMIN can block dongle users + if (admin.size()>0 && admin.end()==admin.find(call)) { + printf("%s not found in admin list, ignoring dongle gate request\n", call); + } else { + if (dsvt.hdr.urcall[7] == '1') { + max_dongles = saved_max_dongles; + printf("Dongle connections are now allowed by %s\n", call); + } else if (dsvt.hdr.urcall[7] == '0') { + inbound_list.clear(); + max_dongles = 0; + printf("Dongle connections are now disallowed by %s\n", call); + } } } else if (0==memcmp(dsvt.hdr.urcall, " F", CALL_SIZE) && admin.find(call)!=admin.end()) { // only ADMIN can reload gwys.txt - qnDB.ClearGW(); - LoadGateways(gwys); + if (admin.size()>0 && admin.end()==admin.find(call)) { + printf("%s not found in admin list, ignoring gwys read request\n", call); + } else { + loadG = true; + } } } @@ -3020,6 +3025,11 @@ void CQnetLink::Process() notify_msg[i][0] = '\0'; } } + if (loadG && 0x0U==(tracing[0].streamid | tracing[1].streamid | tracing[2].streamid)) { + qnDB.ClearGW(); + LoadGateways(gwys); + loadG = false; + } } }