From 8d6014683fd4b572a62fc387a4870e03e560ab7f Mon Sep 17 00:00:00 2001 From: Vincent Li Date: Sun, 13 Oct 2024 20:45:24 +0000 Subject: [PATCH] xdp-geoip: safe call to xdpgeoip init script Signed-off-by: Vincent Li --- config/rootfiles/common/misc-progs | 1 + html/cgi-bin/location-block.cgi | 7 ++++++ src/misc-progs/Makefile | 2 +- src/misc-progs/xdpgeoipctrl.c | 40 ++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/misc-progs/xdpgeoipctrl.c diff --git a/config/rootfiles/common/misc-progs b/config/rootfiles/common/misc-progs index 0a65bd7ba..e13faf825 100644 --- a/config/rootfiles/common/misc-progs +++ b/config/rootfiles/common/misc-progs @@ -43,3 +43,4 @@ usr/local/bin/loxilbctrl usr/local/bin/keepalivedctrl usr/local/bin/xdpdnsctrl usr/local/bin/xdpsnictrl +usr/local/bin/xdpgeoipctrl diff --git a/html/cgi-bin/location-block.cgi b/html/cgi-bin/location-block.cgi index 4480e5f5b..5caf2d279 100644 --- a/html/cgi-bin/location-block.cgi +++ b/html/cgi-bin/location-block.cgi @@ -85,6 +85,13 @@ if ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) { } &General::writehash("$settingsfile", \%settings); + + # Check if we want to disable locationblock. + if ( $settings{'LOCATIONBLOCK_ENABLED'} eq "on" ) { + &General::system('/usr/local/bin/xdpgeoipctrl', 'start'); + } else { + &General::system('/usr/local/bin/xdpgeoipctrl', 'stop'); + } } &Header::openpage($Lang::tr{'locationblock configuration'}, 1, ''); diff --git a/src/misc-progs/Makefile b/src/misc-progs/Makefile index 73d487688..0450a0cbf 100644 --- a/src/misc-progs/Makefile +++ b/src/misc-progs/Makefile @@ -32,7 +32,7 @@ SUID_PROGS = squidctrl sshctrl ipfirereboot \ smartctrl clamavctrl addonctrl pakfire mpfirectrl wlanapctrl \ setaliases urlfilterctrl updxlratorctrl fireinfoctrl rebuildroutes \ getconntracktable wirelessclient torctrl ddnsctrl unboundctrl \ - captivectrl ddosctrl loxilbctrl keepalivedctrl xdpdnsctrl xdpsnictrl + captivectrl ddosctrl loxilbctrl keepalivedctrl xdpdnsctrl xdpsnictrl xdpgeoipctrl OBJS = $(patsubst %,%.o,$(PROGS) $(SUID_PROGS)) diff --git a/src/misc-progs/xdpgeoipctrl.c b/src/misc-progs/xdpgeoipctrl.c new file mode 100644 index 000000000..bdd0009f2 --- /dev/null +++ b/src/misc-progs/xdpgeoipctrl.c @@ -0,0 +1,40 @@ +/* This file is part of the BPFire Firewall. + * + * This program is distributed under the terms of the GNU General Public + * Licence. See the file COPYING for details. + * + */ + +#include +#include +#include +#include +#include +#include +#include "setuid.h" + +int main(int argc, char *argv[]) { + + if (!(initsetuid())) + exit(1); + + if (argc < 2) { + fprintf(stderr, "\nNo argument given.\n\nxdpgeoipctrl (start|stop|restart)\n\n"); + exit(1); + } + + if (strcmp(argv[1], "start") == 0) { + safe_system("/etc/rc.d/init.d/xdpgeoip start"); + } else if (strcmp(argv[1], "stop") == 0) { + safe_system("/etc/rc.d/init.d/xdpgeoip stop"); + } else if (strcmp(argv[1], "restart") == 0) { + safe_system("/etc/rc.d/init.d/xdpgeoip restart"); + } else if (strcmp(argv[1], "status") == 0) { + safe_system("/etc/rc.d/init.d/xdpgeoip status"); + } else { + fprintf(stderr, "\nBad argument given.\n\nxdpgeoipctrl (start|stop|restart|status)\n\n"); + exit(1); + } + + return 0; +}