mirror of
https://github.com/gSpotx2f/ruantiblock_openwrt.git
synced 2026-05-13 14:10:59 +00:00
Standalone parser for user entries.
This commit is contained in:
@@ -10,9 +10,9 @@ LUCI_APP=1
|
||||
HTTPS_DNS_PROXY=1
|
||||
|
||||
OWRT_VERSION="25.12"
|
||||
RUAB_VERSION="2.1.10-r1"
|
||||
RUAB_MOD_LUA_VERSION="2.1.10-r1"
|
||||
RUAB_LUCI_APP_VERSION="2.1.10-r2"
|
||||
RUAB_VERSION="2.1.11-r1"
|
||||
RUAB_MOD_LUA_VERSION="2.1.11-r1"
|
||||
RUAB_LUCI_APP_VERSION="2.1.11-r1"
|
||||
BASE_URL="https://raw.githubusercontent.com/gSpotx2f/packages-openwrt/master"
|
||||
PKG_DIR="/tmp"
|
||||
|
||||
|
||||
@@ -10,9 +10,9 @@ LUCI_APP=1
|
||||
HTTPS_DNS_PROXY=1
|
||||
|
||||
OWRT_VERSION="24.10"
|
||||
RUAB_VERSION="2.1.10-r1"
|
||||
RUAB_MOD_LUA_VERSION="2.1.10-r1"
|
||||
RUAB_LUCI_APP_VERSION="2.1.10-r2"
|
||||
RUAB_VERSION="2.1.11-r1"
|
||||
RUAB_MOD_LUA_VERSION="2.1.11-r1"
|
||||
RUAB_LUCI_APP_VERSION="2.1.11-r1"
|
||||
BASE_URL="https://raw.githubusercontent.com/gSpotx2f/packages-openwrt/master"
|
||||
PKG_DIR="/tmp"
|
||||
|
||||
|
||||
@@ -5,8 +5,9 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-ruantiblock
|
||||
PKG_VERSION:=2.1.10
|
||||
PKG_RELEASE:=2
|
||||
PKG_VERSION:=2.1.11
|
||||
PKG_RELEASE:=1
|
||||
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/ruantiblock_openwrt>
|
||||
LUCI_TITLE:=LuCI support for ruantiblock
|
||||
LUCI_DEPENDS:=+ruantiblock
|
||||
LUCI_PKGARCH:=all
|
||||
|
||||
@@ -49,7 +49,6 @@ return view.extend({
|
||||
if(!i.rule) {
|
||||
continue;
|
||||
};
|
||||
|
||||
let set, bytes;
|
||||
i.rule.expr.forEach(e => {
|
||||
if(e.match && e.match.left && e.match.left.payload) {
|
||||
@@ -309,9 +308,8 @@ return view.extend({
|
||||
user_entries.append(
|
||||
E('tr', { 'class': 'tr' }, [
|
||||
E('td', { 'class': 'td left', 'style': 'word-wrap:break-word' },
|
||||
i.id),
|
||||
E('td', { 'class': 'td left',
|
||||
'id' : 'user_entries_' + i },
|
||||
i.id.slice(0, 114) + (i.id.length > 115 ? '...' : '')),
|
||||
E('td', { 'class': 'td left' },
|
||||
`CIDR: ${i.cidr}, IP: ${i.ip}, FQDN: ${i.fqdn}`),
|
||||
])
|
||||
);
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ruantiblock-mod-lua
|
||||
PKG_VERSION:=2.1.10
|
||||
PKG_VERSION:=2.1.11
|
||||
PKG_RELEASE:=1
|
||||
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/ruantiblock_openwrt>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ruantiblock-mod-py
|
||||
PKG_VERSION:=2.1.10
|
||||
PKG_VERSION:=2.1.11
|
||||
PKG_RELEASE:=1
|
||||
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/ruantiblock_openwrt>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ruantiblock
|
||||
PKG_VERSION:=2.1.10
|
||||
PKG_VERSION:=2.1.11
|
||||
PKG_RELEASE:=1
|
||||
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/ruantiblock_openwrt>
|
||||
|
||||
@@ -73,6 +73,7 @@ define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DATA) ./files/usr/share/ruantiblock/user_instances_common $(1)/usr/share/ruantiblock/user_instances_common
|
||||
$(INSTALL_DIR) $(1)/usr/libexec/ruantiblock
|
||||
$(INSTALL_BIN) ./files/usr/libexec/ruantiblock/ruab_route_check $(1)/usr/libexec/ruantiblock/ruab_route_check
|
||||
$(INSTALL_BIN) ./files/usr/libexec/ruantiblock/ruab_parser_user_entries $(1)/usr/libexec/ruantiblock/ruab_parser_user_entries
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) ./files/usr/bin/ruantiblock $(1)/usr/bin/ruantiblock
|
||||
endef
|
||||
|
||||
@@ -228,24 +228,24 @@ export DNSMASQ_DATA_FILE_USER_INSTANCES="${DNSMASQ_CONFDIR}/01-${NAME}_user_inst
|
||||
export DNSMASQ_DATA_FILE="${DNSMASQ_CONFDIR}/02-${NAME}.dnsmasq"
|
||||
|
||||
### Utilities
|
||||
AWK_CMD="awk"
|
||||
export AWK_CMD="awk"
|
||||
NFT_CMD="$(which nft)"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo " Error! Nftables doesn't exists" >&2
|
||||
exit 1
|
||||
fi
|
||||
LOGGER_CMD="$(which logger)"
|
||||
export LOGGER_CMD="$(which logger)"
|
||||
if [ $ENABLE_LOGGING = "1" -a $? -ne 0 ]; then
|
||||
echo " Logger doesn't exists" >&2
|
||||
ENABLE_LOGGING=0
|
||||
fi
|
||||
LOGGER_PARAMS="-t ${APP_NAME}"
|
||||
WGET_CMD="$(which wget)"
|
||||
export LOGGER_PARAMS="-t ${APP_NAME}"
|
||||
export WGET_CMD="$(which wget)"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo " Error! Wget doesn't exists" >&2
|
||||
exit 1
|
||||
fi
|
||||
WGET_PARAMS="--no-check-certificate -q -O"
|
||||
export WGET_PARAMS="--no-check-certificate -q -O"
|
||||
NSLOOKUP_CMD="$(which nslookup)"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo " Error! Nslookup doesn't exists" >&2
|
||||
@@ -256,6 +256,7 @@ if [ $? -ne 0 ]; then
|
||||
echo " Error! Iproute2 doesn't exists" >&2
|
||||
exit 1
|
||||
fi
|
||||
USER_ENTRIES_PARSER="${MODULES_DIR}/ruab_parser_user_entries"
|
||||
ROUTE_CHECK_EXEC="${MODULES_DIR}/ruab_route_check"
|
||||
export IP_DATA_FILE="${DATA_DIR}/${NAME}.ip"
|
||||
export IP_DATA_FILE_BYPASS="${DATA_DIR}/${NAME}_bypass.ip"
|
||||
@@ -298,7 +299,6 @@ NFT_FUNCTIONS="${SCRIPTS_DIR}/nft_functions"
|
||||
INFO_OUTPUT_FUNCTION="${SCRIPTS_DIR}/info_output"
|
||||
export IP_DATA_FILE_TMP="${IP_DATA_FILE}.tmp"
|
||||
export IP_DATA_FILE_USER_INSTANCES_TMP="${IP_DATA_FILE_USER_INSTANCES}.tmp"
|
||||
export DNSMASQ_DATA_FILE_TMP="${DNSMASQ_DATA_FILE}.tmp"
|
||||
export DNSMASQ_DATA_FILE_USER_INSTANCES_TMP="${DNSMASQ_DATA_FILE_USER_INSTANCES}.tmp"
|
||||
export DNSMASQ_DATA_FILE_TMP="${DNSMASQ_DATA_FILE}.tmp"
|
||||
export UPDATE_STATUS_FILE_TMP="${UPDATE_STATUS_FILE}.tmp"
|
||||
@@ -313,9 +313,6 @@ INSTANCES_CACHE="${RUN_FILES_DIR}/${NAME}.instances"
|
||||
DL_IPSET_URL=""
|
||||
DL_DMASK_URL=""
|
||||
DL_STAT_URL=""
|
||||
### for compatibility with v1.x parsers
|
||||
export NFTSET_CIDR_CFG="$NFTSET_CIDR_STRING_MAIN"
|
||||
export NFTSET_IP_CFG="$NFTSET_IP_STRING_MAIN"
|
||||
|
||||
######################### External functions ###########################
|
||||
|
||||
@@ -447,11 +444,8 @@ FlushInstancesNftSets() {
|
||||
_name=".${_name}"
|
||||
fi
|
||||
case "$_arg" in
|
||||
fqdn)
|
||||
FlushNftSets "${NFTSET_DNSMASQ}${_name}" "${NFTSET_ONION}${_name}"
|
||||
;;
|
||||
bllist)
|
||||
FlushNftSets "${NFTSET_CIDR}${_name}" "${NFTSET_IP}${_name}" "${NFTSET_DNSMASQ}${_name}"
|
||||
FlushNftSets "${NFTSET_CIDR}${_name}" "${NFTSET_IP}${_name}" "${NFTSET_DNSMASQ}${_name}" "${NFTSET_ONION}${_name}"
|
||||
;;
|
||||
*)
|
||||
FlushNftSets "${NFTSET_FPROXY}${_name}" "${NFTSET_BLLIST_PROXY}${_name}" "${NFTSET_CIDR}${_name}" "${NFTSET_IP}${_name}" "${NFTSET_DNSMASQ}${_name}" "${NFTSET_ONION}${_name}"
|
||||
@@ -532,7 +526,6 @@ UpdateBllistProxySet() {
|
||||
else
|
||||
_name=".${_name}"
|
||||
fi
|
||||
FlushNftSets "${NFTSET_BLLIST_PROXY}${_name}"
|
||||
for _host in $(echo "$_urls" | $AWK_CMD '
|
||||
BEGIN {
|
||||
RS = " ";
|
||||
@@ -746,12 +739,12 @@ AddBypassEntries() {
|
||||
FlushNftSets "$NFTSET_BYPASS_IP" "$NFTSET_BYPASS_FQDN"
|
||||
if [ "$BYPASS_MODE" = "1" ]; then
|
||||
if [ -f "$BYPASS_ENTRIES_FILE" ]; then
|
||||
$AWK_CMD 'BEGIN {
|
||||
ip_array[0];
|
||||
fqdn_array[0];
|
||||
$AWK_CMD '
|
||||
BEGIN {
|
||||
delete ip_array;
|
||||
delete fqdn_array;
|
||||
}
|
||||
function writeIpList(array, _str) {
|
||||
_str = "";
|
||||
for(i in array) {
|
||||
_str = _str i ",";
|
||||
};
|
||||
@@ -767,9 +760,8 @@ AddBypassEntries() {
|
||||
printf "nftset=/%s/%s#%s\n", val, ENVIRON["NFT_TABLE_DNSMASQ"], ENVIRON["NFTSET_BYPASS_FQDN"] >> ENVIRON["DNSMASQ_DATA_FILE_BYPASS"];
|
||||
};
|
||||
function writeFqdnEntries() {
|
||||
delete fqdn_array[0];
|
||||
for(i in fqdn_array) {
|
||||
split(fqdn_array[i], a, " ");
|
||||
split(i, a, " ");
|
||||
writeDNSData(a[1], a[2]);
|
||||
};
|
||||
};
|
||||
@@ -779,12 +771,11 @@ AddBypassEntries() {
|
||||
ip_array[$0];
|
||||
}
|
||||
else if($0 ~ /^([a-z0-9._-]+[.])*([a-z]{2,}|xn--[a-z0-9]+)([ ][0-9]{1,3}([.][0-9]{1,3}){3}([#][0-9]{2,5})?)?$/) {
|
||||
fqdn_array[length(fqdn_array)] = $1 " " $2;
|
||||
fqdn_array[$0];
|
||||
};
|
||||
}
|
||||
END {
|
||||
printf "table %s {\n%s", ENVIRON["NFT_TABLE"], ENVIRON["NFTSET_BYPASS_IP_STRING"] >> ENVIRON["IP_DATA_FILE_BYPASS"];
|
||||
delete ip_array[0];
|
||||
if(length(ip_array) > 0) {
|
||||
printf "elements={%s};", writeIpList(ip_array) >> ENVIRON["IP_DATA_FILE_BYPASS"];
|
||||
};
|
||||
@@ -795,77 +786,6 @@ AddBypassEntries() {
|
||||
fi
|
||||
}
|
||||
|
||||
ParseUserEntries() {
|
||||
$AWK_CMD -v NFTSET_IP_STRING="$1" -v NFTSET_CIDR_STRING="$2" -v NFTSET_DNSMASQ="$3" \
|
||||
-v IP_DATA_FILE="$4" -v DNSMASQ_DATA_FILE="$5" -v USER_ENTRIES_STATUS_FILE="$6" \
|
||||
-v ID="$7" -v USER_ENTRIES_DNS="$8" '
|
||||
BEGIN {
|
||||
ip_array[0];
|
||||
cidr_array[0];
|
||||
fqdn_array[0];
|
||||
}
|
||||
function writeIpList(array, _str) {
|
||||
_str = "";
|
||||
for(i in array) {
|
||||
_str = _str i ",";
|
||||
};
|
||||
return _str;
|
||||
};
|
||||
function writeDNSData(val, dns) {
|
||||
if(length(dns) == 0 && length(USER_ENTRIES_DNS) > 0) {
|
||||
dns = USER_ENTRIES_DNS;
|
||||
};
|
||||
if(length(dns) > 0) {
|
||||
printf "server=/%s/%s\n", val, dns >> DNSMASQ_DATA_FILE;
|
||||
};
|
||||
printf "nftset=/%s/%s#%s\n", val, ENVIRON["NFT_TABLE_DNSMASQ"], NFTSET_DNSMASQ >> DNSMASQ_DATA_FILE;
|
||||
};
|
||||
function writeFqdnEntries() {
|
||||
delete fqdn_array[0];
|
||||
for(i in fqdn_array) {
|
||||
split(fqdn_array[i], a, " ");
|
||||
writeDNSData(a[1], a[2]);
|
||||
};
|
||||
};
|
||||
($0 !~ /^([\040\011]*$|#)/) {
|
||||
sub("\015", "", $0);
|
||||
if($0 ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}$/) {
|
||||
ip_array[$0];
|
||||
}
|
||||
else if($0 ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}[\057][0-9]{1,2}$/) {
|
||||
cidr_array[$0];
|
||||
}
|
||||
else if($0 ~ /^([a-z0-9._-]+[.])*([a-z]{2,}|xn--[a-z0-9]+)([ ][0-9]{1,3}([.][0-9]{1,3}){3}([#][0-9]{2,5})?)?$/) {
|
||||
fqdn_array[length(fqdn_array)] = $1 " " $2;
|
||||
};
|
||||
}
|
||||
END {
|
||||
ret_code = 0;
|
||||
if($0 ~ /[0-9]+/) {
|
||||
ret_code = $0;
|
||||
};
|
||||
delete cidr_array[0];
|
||||
delete ip_array[0];
|
||||
if(ret_code == 0 && (length(cidr_array) > 0 || length(ip_array) > 0)) {
|
||||
printf "table %s {\n%s", ENVIRON["NFT_TABLE"], NFTSET_CIDR_STRING >> IP_DATA_FILE;
|
||||
if(length(cidr_array) > 0) {
|
||||
printf "elements={%s};", writeIpList(cidr_array) >> IP_DATA_FILE;
|
||||
};
|
||||
printf "}\n%s", NFTSET_IP_STRING >> IP_DATA_FILE;
|
||||
|
||||
if(length(ip_array) > 0) {
|
||||
printf "elements={%s};", writeIpList(ip_array) >> IP_DATA_FILE;
|
||||
};
|
||||
printf "}\n}\n" >> IP_DATA_FILE;
|
||||
};
|
||||
writeFqdnEntries();
|
||||
if(ret_code == 0) {
|
||||
printf "%s %s %s %s\n", length(cidr_array), length(ip_array), length(fqdn_array), ID >> USER_ENTRIES_STATUS_FILE;
|
||||
};
|
||||
exit ret_code;
|
||||
}' -
|
||||
}
|
||||
|
||||
AddUserEntries() {
|
||||
local _inst _url _return_code=0 _instance_return_code=0 _attempt=1 _instance_entries_file _ip_data_file_user_instances _dnsmasq_data_file_user_instances _user_entries_status_file _str _update_string
|
||||
|
||||
@@ -901,42 +821,44 @@ AddUserEntries() {
|
||||
### Запись для .onion
|
||||
printf "server=/onion/%s\nnftset=/onion/%s#%s\n" "$U_ONION_DNS_ADDR" "$NFT_TABLE_DNSMASQ" "${NFTSET_ONION}.${U_NAME}" >> "$_dnsmasq_data_file_user_instances"
|
||||
fi
|
||||
if [ -f "$_instance_entries_file" ]; then
|
||||
{ cat "$_instance_entries_file"; printf "\n0\n"; } | ParseUserEntries "$(printf "$NFTSET_IP_PATTERN" "${NFTSET_IP}.${U_NAME}")" "$(printf "$NFTSET_CIDR_PATTERN" "${NFTSET_CIDR}.${U_NAME}")" "${NFTSET_DNSMASQ}.${U_NAME}" "$_ip_data_file_user_instances" "$_dnsmasq_data_file_user_instances" "$_user_entries_status_file" "${U_NAME}:local" "$U_ENTRIES_DNS"
|
||||
fi
|
||||
if [ -n "$U_ENTRIES_REMOTE" ]; then
|
||||
|
||||
if [ "$U_ENABLE_ENTRIES_REMOTE_PROXY" = "1" ]; then
|
||||
for _url in $U_ENTRIES_REMOTE
|
||||
do
|
||||
_instance_return_code=0
|
||||
_attempt=1
|
||||
while :
|
||||
do
|
||||
if [ "$U_ENABLE_ENTRIES_REMOTE_PROXY" = "1" ]; then
|
||||
UpdateBllistProxySet "$U_NAME" "$_url"
|
||||
fi
|
||||
{ Download - "$_url"; printf "\n$?\n"; } | ParseUserEntries "$(printf "$NFTSET_IP_PATTERN" "${NFTSET_IP}.${U_NAME}")" "$(printf "$NFTSET_CIDR_PATTERN" "${NFTSET_CIDR}.${U_NAME}")" "${NFTSET_DNSMASQ}.${U_NAME}" "$_ip_data_file_user_instances" "$_dnsmasq_data_file_user_instances" "$_user_entries_status_file" "${U_NAME}:${_url}" "$U_ENTRIES_DNS"
|
||||
if [ $? -eq 0 ]; then
|
||||
_instance_return_code=0
|
||||
break
|
||||
else
|
||||
_instance_return_code=1
|
||||
### STDOUT
|
||||
echo " User entries download attempt ${_attempt}: failed [${U_NAME}:${_url}]" >&2
|
||||
MakeLogRecord "err" "User entries download attempt ${_attempt}: failed [${U_NAME}:${_url}]"
|
||||
_attempt=$(($_attempt + 1))
|
||||
[ $_attempt -gt $USER_ENTRIES_REMOTE_DOWNLOAD_ATTEMPTS ] && break
|
||||
sleep $USER_ENTRIES_REMOTE_DOWNLOAD_TIMEOUT
|
||||
fi
|
||||
done
|
||||
if [ $_instance_return_code -ne 0 ]; then
|
||||
_return_code=$_instance_return_code
|
||||
if [ "$ENABLE_TMP_DOWNLOADS" = "1" ]; then
|
||||
break 2
|
||||
fi
|
||||
fi
|
||||
UpdateBllistProxySet "$U_NAME" "$_url"
|
||||
done
|
||||
if [ "$U_ENABLE_ENTRIES_REMOTE_PROXY" = "1" ]; then
|
||||
FlushNftSets "${NFTSET_BLLIST_PROXY}.${U_NAME}"
|
||||
fi
|
||||
|
||||
export U_NAME
|
||||
export U_ENTRIES_REMOTE
|
||||
export U_ENTRIES_DNS
|
||||
export I_NFTSET_CIDR_STRING="$(printf "$NFTSET_CIDR_PATTERN" "${NFTSET_CIDR}.${U_NAME}")"
|
||||
export I_NFTSET_IP_STRING="$(printf "$NFTSET_IP_PATTERN" "${NFTSET_IP}.${U_NAME}")"
|
||||
export I_NFTSET_DNSMASQ="${NFTSET_DNSMASQ}.${U_NAME}"
|
||||
export I_IP_DATA_FILE="$_ip_data_file_user_instances"
|
||||
export I_DNSMASQ_DATA_FILE="$_dnsmasq_data_file_user_instances"
|
||||
export I_USER_ENTRIES_STATUS_FILE="$_user_entries_status_file"
|
||||
export I_INSTANCE_ENTRIES_FILE="$_instance_entries_file"
|
||||
|
||||
$USER_ENTRIES_PARSER
|
||||
_instance_return_code=$?
|
||||
|
||||
unset I_NFTSET_CIDR_STRING
|
||||
unset I_NFTSET_IP_STRING
|
||||
unset I_NFTSET_DNSMASQ
|
||||
unset I_IP_DATA_FILE
|
||||
unset I_DNSMASQ_DATA_FILE
|
||||
unset I_USER_ENTRIES_STATUS_FILE
|
||||
unset I_INSTANCE_ENTRIES_FILE
|
||||
|
||||
if [ "$U_ENABLE_ENTRIES_REMOTE_PROXY" = "1" ]; then
|
||||
FlushNftSets "${NFTSET_BLLIST_PROXY}.${U_NAME}"
|
||||
fi
|
||||
|
||||
if [ $_instance_return_code -ne 0 ]; then
|
||||
_return_code=$_instance_return_code
|
||||
if [ "$ENABLE_TMP_DOWNLOADS" = "1" ]; then
|
||||
break
|
||||
fi
|
||||
fi
|
||||
ClearUserInstanceVars
|
||||
@@ -1139,7 +1061,7 @@ Update() {
|
||||
FlushInstancesNftSets bllist
|
||||
fi
|
||||
GetBlacklistFiles
|
||||
FlushInstancesNftSets fqdn
|
||||
FlushInstancesNftSets bllist
|
||||
UpdateBllistSets
|
||||
_return_code=$?
|
||||
RestartDnsmasq
|
||||
|
||||
@@ -0,0 +1,209 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo | $AWK_CMD -v WGET_CMD="$WGET_CMD" -v WGET_PARAMS="$WGET_PARAMS" \
|
||||
-v LOGGER_CMD="$LOGGER_CMD" -v LOGGER_PARAMS="$LOGGER_PARAMS" '
|
||||
BEGIN {
|
||||
stderr = "/dev/stderr";
|
||||
ENABLE_LOGGING = ENVIRON["ENABLE_LOGGING"];
|
||||
ENABLE_TMP_DOWNLOADS = ENVIRON["ENABLE_TMP_DOWNLOADS"];
|
||||
sleep = "sleep " ENVIRON["USER_ENTRIES_REMOTE_DOWNLOAD_TIMEOUT"];
|
||||
DOWNLOAD_ATTEMPTS = ENVIRON["USER_ENTRIES_REMOTE_DOWNLOAD_ATTEMPTS"];
|
||||
attempt_err_pattern = "User entries download attempt %s: failed [%s:%s]";
|
||||
U_NAME = ENVIRON["U_NAME"];
|
||||
U_ENTRIES_REMOTE = ENVIRON["U_ENTRIES_REMOTE"];
|
||||
U_USER_ENTRIES_DNS = ENVIRON["U_ENTRIES_DNS"];
|
||||
NFT_TABLE = ENVIRON["NFT_TABLE"];
|
||||
NFTSET_CIDR_STRING = ENVIRON["I_NFTSET_CIDR_STRING"];
|
||||
NFTSET_IP_STRING = ENVIRON["I_NFTSET_IP_STRING"];
|
||||
NFTSET_DNSMASQ = ENVIRON["I_NFTSET_DNSMASQ"];
|
||||
NFT_TABLE_DNSMASQ = ENVIRON["NFT_TABLE_DNSMASQ"];
|
||||
IP_DATA_FILE = ENVIRON["I_IP_DATA_FILE"];
|
||||
DNSMASQ_DATA_FILE = ENVIRON["I_DNSMASQ_DATA_FILE"];
|
||||
USER_ENTRIES_STATUS_FILE = ENVIRON["I_USER_ENTRIES_STATUS_FILE"];
|
||||
INSTANCE_ENTRIES_FILE = ENVIRON["I_INSTANCE_ENTRIES_FILE"];
|
||||
exit_code = 0;
|
||||
|
||||
gsub("\042", "%22", U_ENTRIES_REMOTE);
|
||||
gsub("\047", "%27", U_ENTRIES_REMOTE);
|
||||
split(U_ENTRIES_REMOTE, urls, /[\040\011\012]+/);
|
||||
|
||||
delete ip_array;
|
||||
delete cidr_array;
|
||||
delete fqdn_array;
|
||||
delete download_results;
|
||||
}
|
||||
function makeLogRecord(level, msg) {
|
||||
if(ENABLE_LOGGING == 1) {
|
||||
system(sprintf("%s %s -p \"user.%s\" \"%s\"", LOGGER_CMD, LOGGER_PARAMS, level, msg));
|
||||
};
|
||||
};
|
||||
function writeIpList(array, _str) {
|
||||
for(i in array) {
|
||||
_str = _str i ",";
|
||||
};
|
||||
return _str;
|
||||
};
|
||||
function writeDNSData(val, dns) {
|
||||
if(length(dns) == 0 && length(U_USER_ENTRIES_DNS) > 0) {
|
||||
dns = U_USER_ENTRIES_DNS;
|
||||
};
|
||||
if(length(dns) > 0) {
|
||||
printf "server=/%s/%s\n", val, dns >> DNSMASQ_DATA_FILE;
|
||||
};
|
||||
printf "nftset=/%s/%s#%s\n", val, NFT_TABLE_DNSMASQ, NFTSET_DNSMASQ >> DNSMASQ_DATA_FILE;
|
||||
};
|
||||
function writeFqdnEntries() {
|
||||
for(i in fqdn_array) {
|
||||
split(i, a, " ");
|
||||
writeDNSData(a[1], a[2]);
|
||||
};
|
||||
};
|
||||
function trimEntry(str) {
|
||||
sub("\015", "", str);
|
||||
return str;
|
||||
};
|
||||
function checkEntry(str) {
|
||||
if (str ~ /^([\040\011]*$|#)/) {
|
||||
return 0;
|
||||
}
|
||||
else if(str ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}$/) {
|
||||
return 2;
|
||||
}
|
||||
else if(str ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}[\057][0-9]{1,2}$/) {
|
||||
return 1;
|
||||
}
|
||||
else if(str ~ /^([a-z0-9._-]+[.])*([a-z]{2,}|xn--[a-z0-9]+)([ ][0-9]{1,3}([.][0-9]{1,3}){3}([#][0-9]{2,5})?)?$/) {
|
||||
return 3;
|
||||
};
|
||||
};
|
||||
function readFile(fpath, fname, _line, _cidr_num, _ip_num, _fqdn_num, _ret) {
|
||||
_cidr_num = 0; _ip_num = 0; _fqdn_num = 0;
|
||||
while((getline _line <fpath) > 0) {
|
||||
_line = trimEntry(_line);
|
||||
_ret = checkEntry(_line);
|
||||
if(_ret == 1) {
|
||||
if(!(_line in cidr_array)) {
|
||||
cidr_array[_line];
|
||||
_cidr_num++;
|
||||
};
|
||||
}
|
||||
else if(_ret == 2) {
|
||||
if(!(_line in ip_array)) {
|
||||
ip_array[_line];
|
||||
_ip_num++;
|
||||
};
|
||||
}
|
||||
else if(_ret == 3) {
|
||||
if(!(_line in fqdn_array)) {
|
||||
fqdn_array[_line];
|
||||
_fqdn_num++;
|
||||
};
|
||||
};
|
||||
};
|
||||
close(fpath);
|
||||
download_results[length(download_results)] = sprintf("%s %s %s %s:%s",
|
||||
_cidr_num, _ip_num, _fqdn_num, U_NAME, fname);
|
||||
};
|
||||
function downloadFile(url, _ret_code, _wget_call, _cidr_array, _ip_array, _fqdn_array, _val, _ret) {
|
||||
if(length(url) == 0) {
|
||||
return 1;
|
||||
};
|
||||
|
||||
_ret_code = 1;
|
||||
_wget_call = sprintf("%s %s - \"%s\"; printf \"\n$?\n\"", WGET_CMD, WGET_PARAMS, url);
|
||||
|
||||
delete _cidr_array;
|
||||
delete _ip_array;
|
||||
delete _fqdn_array;
|
||||
|
||||
for(i = 1; i <= DOWNLOAD_ATTEMPTS; i++) {
|
||||
delete _cidr_array;
|
||||
delete _ip_array;
|
||||
delete _fqdn_array;
|
||||
|
||||
while((_wget_call | getline _val) > 0) {
|
||||
if(_val ~ /^[0-9]{1,3}$/) {
|
||||
continue;
|
||||
};
|
||||
_val = trimEntry(_val);
|
||||
_ret = checkEntry(_val);
|
||||
if(_ret == 1) {
|
||||
_cidr_array[_val];
|
||||
}
|
||||
else if(_ret == 2) {
|
||||
_ip_array[_val];
|
||||
}
|
||||
else if(_ret == 3) {
|
||||
_fqdn_array[_val];
|
||||
};
|
||||
};
|
||||
close(_wget_call);
|
||||
|
||||
if(_val ~ /^[0-9]{1,3}$/) {
|
||||
_ret_code = _val;
|
||||
};
|
||||
if(_ret_code == 0) {
|
||||
break;
|
||||
};
|
||||
|
||||
makeLogRecord("err", sprintf(attempt_err_pattern, i, U_NAME, url));
|
||||
printf(" " attempt_err_pattern "\n", i, U_NAME, url) > stderr;
|
||||
|
||||
if(i >= DOWNLOAD_ATTEMPTS) {
|
||||
break;
|
||||
};
|
||||
sleep | getline _;
|
||||
close(sleep);
|
||||
};
|
||||
|
||||
if(_ret_code == 0 && (length(_cidr_array) > 0 || length(_ip_array) > 0 || length(_fqdn_array) > 0)) {
|
||||
for(i in _cidr_array) {
|
||||
cidr_array[i];
|
||||
};
|
||||
for(i in _ip_array) {
|
||||
ip_array[i];
|
||||
};
|
||||
for(i in _fqdn_array) {
|
||||
fqdn_array[i];
|
||||
};
|
||||
};
|
||||
|
||||
download_results[length(download_results)] = sprintf("%s %s %s %s:%s",
|
||||
length(_cidr_array), length(_ip_array), length(_fqdn_array), U_NAME, url);
|
||||
|
||||
return _ret_code;
|
||||
};
|
||||
END {
|
||||
readFile(INSTANCE_ENTRIES_FILE, "local");
|
||||
dl_ret_code = 1;
|
||||
for(i in urls) {
|
||||
url = urls[i];
|
||||
dl_ret_code = downloadFile(url);
|
||||
if(dl_ret_code != 0) {
|
||||
exit_code = dl_ret_code;
|
||||
if(ENABLE_TMP_DOWNLOADS == 1) {
|
||||
break;
|
||||
};
|
||||
};
|
||||
};
|
||||
if(ENABLE_TMP_DOWNLOADS != 1 || (ENABLE_TMP_DOWNLOADS == 1 && exit_code == 0)) {
|
||||
if(length(cidr_array) > 0 || length(ip_array) > 0) {
|
||||
printf "table %s {\n%s", NFT_TABLE, NFTSET_CIDR_STRING >> IP_DATA_FILE;
|
||||
if(length(cidr_array) > 0) {
|
||||
printf "elements={%s};", writeIpList(cidr_array) >> IP_DATA_FILE;
|
||||
};
|
||||
printf "}\n%s", NFTSET_IP_STRING >> IP_DATA_FILE;
|
||||
if(length(ip_array) > 0) {
|
||||
printf "elements={%s};", writeIpList(ip_array) >> IP_DATA_FILE;
|
||||
};
|
||||
printf "}\n}\n" >> IP_DATA_FILE;
|
||||
};
|
||||
writeFqdnEntries();
|
||||
for(i in download_results) {
|
||||
print download_results[i] >> USER_ENTRIES_STATUS_FILE;
|
||||
};
|
||||
};
|
||||
exit exit_code;
|
||||
}'
|
||||
|
||||
exit $?
|
||||
Reference in New Issue
Block a user