diff --git a/FTL.h b/FTL.h index e18e35fe..575ababe 100644 --- a/FTL.h +++ b/FTL.h @@ -231,3 +231,4 @@ bool database; long int lastdbindex; bool travis; bool DBdeleteoldqueries; +bool rereadgravity; diff --git a/main.c b/main.c index ff56364b..f748bc29 100644 --- a/main.c +++ b/main.c @@ -137,6 +137,16 @@ int main (int argc, char* argv[]) { while(((time(NULL)%DBinterval) == 0)) sleepms(100); } + + // Handle SIGHUP + if(rereadgravity) + { + enable_thread_lock("pihole_main_thread"); + // Have to re-read gravity files + rereadgravity = false; + read_gravity_files(); + disable_thread_lock("pihole_main_thread"); + } } diff --git a/parser.c b/parser.c index e80e97a7..ac768b92 100644 --- a/parser.c +++ b/parser.c @@ -704,16 +704,6 @@ void process_pihole_log(int file) validate_access_oTfd(timeidx, forwardID, __LINE__, __FUNCTION__, __FILE__); overTime[timeidx].forwarddata[forwardID]++; } - else if((strstr(readbuffer,"IPv6") != NULL) && - (strstr(readbuffer,"DBus") != NULL) && - (strstr(readbuffer,"i18n") != NULL) && - (strstr(readbuffer,"DHCP") != NULL) && - !initialscan) - { - // dnsmasq restartet - logg("dnsmasq process restarted"); - read_gravity_files(); - } // Save file pointer position, because we might have to repeat // reading the next line if dnsmasq hasn't finished writing it diff --git a/signals.c b/signals.c index 8b905bdc..4514f0b3 100644 --- a/signals.c +++ b/signals.c @@ -12,6 +12,7 @@ volatile sig_atomic_t killed = 0; int FTLstarttime = 0; +bool rereadgravity = false; static void SIGTERM_handler(int sig, siginfo_t *si, void *unused) { @@ -69,10 +70,16 @@ static void SIGSEGV_handler(int sig, siginfo_t *si, void *unused) static void SIGUSR1_handler(int signum) { - logg("NOTICE: Received signal SIGUSR1"); + logg("NOTICE: Received signal SIGUSR1 - re-parsing log files"); flush = true; } +static void SIGHUP_handler(int signum) +{ + logg("NOTICE: Received signal SIGHUP - re-reading gravity files"); + rereadgravity = true; +} + void handle_signals(void) { // Catch SIGTERM @@ -126,6 +133,17 @@ void handle_signals(void) sigaction(SIGUSR1, &USR1action, NULL); } + // Catch SIGHUP + sigaction (SIGHUP, NULL, &old_action); + if(old_action.sa_handler != SIG_IGN) + { + struct sigaction HUPaction; + memset(&HUPaction, 0, sizeof(struct sigaction)); + sigemptyset(&HUPaction.sa_mask); + HUPaction.sa_handler = &SIGHUP_handler; + sigaction(SIGHUP, &HUPaction, NULL); + } + // Log start time of FTL FTLstarttime = time(NULL); }