Dnsmasq confdir from ubus.

This commit is contained in:
gSpot
2024-11-26 17:27:10 +03:00
parent 82b31872e9
commit dc2ca41afd
14 changed files with 100 additions and 71 deletions
+3 -3
View File
@@ -10,9 +10,9 @@ LUCI_APP=1
HTTPS_DNS_PROXY=1
OWRT_VERSION="current"
RUAB_VERSION="2.1.0-r2"
RUAB_MOD_LUA_VERSION="2.1.0-r2"
RUAB_LUCI_APP_VERSION="2.1.0-2"
RUAB_VERSION="2.1.1-r1"
RUAB_MOD_LUA_VERSION="2.1.1-r1"
RUAB_LUCI_APP_VERSION="2.1.1-1"
BASE_URL="https://raw.githubusercontent.com/gSpotx2f/packages-openwrt/master"
PKG_DIR="/tmp"
+2 -2
View File
@@ -5,8 +5,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-ruantiblock
PKG_VERSION:=2.1.0
PKG_RELEASE:=2
PKG_VERSION:=2.1.1
PKG_RELEASE:=1
LUCI_TITLE:=LuCI support for ruantiblock
LUCI_DEPENDS:=+ruantiblock
LUCI_PKGARCH:=all
@@ -2,6 +2,7 @@
'require baseclass';
'require fs';
'require poll';
'require rpc';
'require uci';
'require ui';
'require view';
@@ -16,6 +17,12 @@ const btn_style_warning = 'btn cbi-button-negative important'
return view.extend({
statusTokenValue: null,
callServicesList: rpc.declare({
object: 'service',
method: 'list',
expect: { '': {} }
}),
dialogDestroy: baseclass.extend({
__init__(context) {
this.context = context;
@@ -25,33 +32,39 @@ return view.extend({
dnsmasqCfgDirsSelect: null,
cancelButton : E('button', {
cancelButton : E('button', {
'id' : 'btn_cancel',
'class': btn_style_neutral,
'click': ui.hideModal,
}, _('Cancel')),
load() {
return L.resolveDefault(fs.list(tools.dnsmasqCfgDirsRoot), null);
return this.context.callServicesList();
},
render(data) {
let section = uci.get(tools.appName, 'config');
this.currentDnsmasqCfgDir = section.dnsmasq_cfg_dir;
this.currentDnsmasqCfgDir = section.dnsmasq_confdir;
let available_cfg_dirs = [];
let dnsmasq_cfg_dirs_arr = data;
if(dnsmasq_cfg_dirs_arr) {
dnsmasq_cfg_dirs_arr.forEach(e => {
let fname = e.name;
if(fname.startsWith('dnsmasq')) {
available_cfg_dirs.push([ fname, tools.dnsmasqCfgDirsRoot + '/' + fname ]);
if(data.dnsmasq && data.dnsmasq.instances) {
let ubus_dirs = new Set();
for(let [k, v] of Object.entries(data.dnsmasq.instances)) {
if(v.mount) {
for(let i of Object.keys(v.mount)) {
if(!ubus_dirs.has(i) && i.startsWith('/tmp/dnsmasq.')) {
if(i == "/tmp/dnsmasq.d") {
k = _("default");
};
available_cfg_dirs.push([ `${i} [ ${k} ]`, i ]);
ubus_dirs.add(i);
};
};
};
});
};
};
this.dnsmasqCfgDirsSelect = E('select', {
'id' : 'dnsmasq_cfg_dirs_list',
'id' : 'dnsmasq_confdirs_list',
'class': "cbi-input-select",
}),
@@ -90,7 +103,7 @@ return view.extend({
this.cancelButton.disabled = true;
return this.context.appAction('destroy').then(() => {
if(this.dnsmasqCfgDirsSelect.value !== this.currentDnsmasqCfgDir) {
uci.set(tools.appName, 'config', 'dnsmasq_cfg_dir',
uci.set(tools.appName, 'config', 'dnsmasq_confdir',
this.dnsmasqCfgDirsSelect.value);
uci.save();
uci.apply();
@@ -171,21 +184,21 @@ return view.extend({
return;
};
let app_status_code = (force_app_code) ? force_app_code : status_array[0].code;
let app_status_code = (force_app_code) ? force_app_code : status_array[0].code;
let vpn_route_status_code = status_array[1].code;
let enabled_flag = status_array[2];
let dnsmasq_cfg_dir = section.dnsmasq_cfg_dir;
let dnsmasq_confdir = section.dnsmasq_confdir;
let bllist_preset = section.bllist_preset;
let bllist_module = section.bllist_module;
let btn_enable = elems[2] || document.getElementById('btn_enable');
if(enabled_flag == true) {
btn_enable.onclick = ui.createHandlerFn(
btn_enable.onclick = ui.createHandlerFn(
this, this.serviceAction, 'disable', 'btn_enable');
btn_enable.textContent = _('Enabled');
btn_enable.className = btn_style_positive;
} else {
btn_enable.onclick = ui.createHandlerFn(
btn_enable.onclick = ui.createHandlerFn(
this, this.serviceAction, 'enable', 'btn_enable');
btn_enable.textContent = _('Disabled');
btn_enable.className = btn_style_negative;
@@ -196,14 +209,14 @@ return view.extend({
let btn_destroy = elems[4] || document.getElementById('btn_destroy');
let btnStartStateOn = () => {
btn_start.onclick = ui.createHandlerFn(
btn_start.onclick = ui.createHandlerFn(
this, this.appAction, 'stop', 'btn_start');
btn_start.textContent = _('Enabled');
btn_start.className = btn_style_positive;
}
let btnStartStateOff = () => {
btn_start.onclick = ui.createHandlerFn(
btn_start.onclick = ui.createHandlerFn(
this, this.appAction,'start', 'btn_start');
btn_start.textContent = _('Disabled');
btn_start.className = btn_style_negative;
@@ -308,8 +321,8 @@ return view.extend({
return;
};
let section = uci.get(tools.appName, 'config');
this.statusTokenValue = (Array.isArray(status_array)) ?
let section = uci.get(tools.appName, 'config');
this.statusTokenValue = (Array.isArray(status_array)) ?
tools.normalizeValue(status_array[4]) : null;
let dialog_destroy = new this.dialogDestroy(this);
@@ -399,7 +412,7 @@ return view.extend({
]);
},
handleSave : null,
handleSave : null,
handleSaveApply: null,
handleReset : null,
handleReset : null,
});
@@ -38,7 +38,6 @@ return baseclass.extend({
execPath : '/usr/bin/ruantiblock',
tokenFile : '/var/run/ruantiblock.token',
parsersDir : '/usr/libexec/ruantiblock',
dnsmasqCfgDirsRoot : '/tmp',
torrcFile : '/etc/tor/torrc',
userEntriesFile : '/etc/ruantiblock/user_entries',
userListsDir : '/etc/ruantiblock/user_lists',
@@ -607,6 +607,9 @@ msgstr "все"
msgid "ascending"
msgstr "по возрастанию"
msgid "default"
msgstr "по умолчанию"
msgid "descending"
msgstr "по убыванию"
@@ -562,6 +562,9 @@ msgstr "все"
msgid "ascending"
msgstr ""
msgid "default"
msgstr ""
msgid "descending"
msgstr ""
@@ -21,7 +21,8 @@
},
"uci": [ "network", "ruantiblock" ],
"ubus": {
"luci": [ "getInitList", "setInitAction" ]
"luci": [ "getInitList", "setInitAction" ],
"service": [ "list" ]
}
},
"write": {
+2 -2
View File
@@ -5,8 +5,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ruantiblock-mod-lua
PKG_VERSION:=2.1.0
PKG_RELEASE:=2
PKG_VERSION:=2.1.1
PKG_RELEASE:=1
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/ruantiblock_openwrt>
include $(INCLUDE_DIR)/package.mk
+2 -2
View File
@@ -5,8 +5,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ruantiblock-mod-py
PKG_VERSION:=2.1.0
PKG_RELEASE:=2
PKG_VERSION:=2.1.1
PKG_RELEASE:=1
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/ruantiblock_openwrt>
include $(INCLUDE_DIR)/package.mk
+2 -2
View File
@@ -5,8 +5,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ruantiblock
PKG_VERSION:=2.1.0
PKG_RELEASE:=2
PKG_VERSION:=2.1.1
PKG_RELEASE:=1
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/ruantiblock_openwrt>
include $(INCLUDE_DIR)/package.mk
+27 -14
View File
@@ -5,17 +5,30 @@ STOP=01
APP_NAME="ruantiblock"
APP_EXEC="/usr/bin/${APP_NAME}"
DNSMASQ_VAR_DIR="/tmp"
VAR_DIR="/tmp"
get_dnsmasq_cfg_dir() {
local _first_instance
if [ -d "${DNSMASQ_VAR_DIR}/dnsmasq.d" ]; then
printf "${DNSMASQ_VAR_DIR}/dnsmasq.d"
get_dnsmasq_confdir() {
local _first_instance_dir
if [ -d "${VAR_DIR}/dnsmasq.d" ]; then
printf "${VAR_DIR}/dnsmasq.d"
return 0
else
_first_instance=`ls -1 "$DNSMASQ_VAR_DIR" | grep -e "^dnsmasq" | head -n 1`
if [ -n "$_first_instance" ]; then
printf "${DNSMASQ_VAR_DIR}/${_first_instance}"
_first_instance_dir=`ubus call service list | jsonfilter -e "VAR=$.dnsmasq.instances.*.mount" | awk '
BEGIN {
RS = " ";
}
{
sub("VAR=", "", $0);
gsub(/[\047,\134,\073]/, "", $0);
if($0 ~ /^\/tmp\/dnsmasq\./ && !($0 in a)) {
a[length(a)] = $0;
};
}
END {
print a[0];
}'`
if [ -n "$_first_instance_dir" ]; then
printf "$_first_instance_dir"
return 0
fi
fi
@@ -23,14 +36,14 @@ get_dnsmasq_cfg_dir() {
}
start() {
local _update_at_startup _dnsmasq_cfg_dir
local _update_at_startup _dnsmasq_confdir
config_load $APP_NAME
config_get _update_at_startup config update_at_startup
config_get _dnsmasq_cfg_dir config dnsmasq_cfg_dir ""
if [ -z "$_dnsmasq_cfg_dir" ]; then
_dnsmasq_cfg_dir=`get_dnsmasq_cfg_dir`
if [ $? -eq 0 -a -n "$_dnsmasq_cfg_dir" ]; then
uci set "${APP_NAME}.config.dnsmasq_cfg_dir"="$_dnsmasq_cfg_dir"
config_get _dnsmasq_confdir config dnsmasq_confdir ""
if [ -z "$_dnsmasq_confdir" ]; then
_dnsmasq_confdir=`get_dnsmasq_confdir`
if [ $? -eq 0 -a -n "$_dnsmasq_confdir" ]; then
uci set "${APP_NAME}.config.dnsmasq_confdir"="$_dnsmasq_confdir"
uci commit ruantiblock
else
exit 1
@@ -8,7 +8,7 @@ MODULES_DIR="/usr/libexec/ruantiblock"
### Директория PID-файлов и файлов статуса
RUN_FILES_DIR="/var/run"
### Директория доп. конфигов dnsmasq
DNSMASQ_CFG_DIR="/var/dnsmasq.d"
DNSMASQ_CONFDIR="/var/dnsmasq.d"
### Команда для перезапуска dnsmasq
DNSMASQ_RESTART_CMD="/etc/init.d/dnsmasq restart"
### Директория для html-страницы статуса (не используется в OpenWrt)
@@ -103,7 +103,7 @@ BLLIST_MODULE=""
BLLIST_PRESET=""
### В случае если из источника получено менее указанного кол-ва записей, то обновления списков не происходит
BLLIST_MIN_ENTRIES=3000
### Лимит ip адресов. При достижении, в конфиг ipset будет добавлена вся подсеть /24 вместо множества ip-адресов пренадлежащих этой сети (0 - выкл)
### Лимит ip адресов. При достижении, в конфиг nftables будет добавлена вся подсеть /24 вместо множества ip-адресов пренадлежащих этой сети (0 - выкл)
BLLIST_IP_LIMIT=0
### Файл с подсетями класса C (/24). IP адреса из этих подсетей не группируются при оптимизации (записи д.б. в виде: 68.183.221. 149.154.162. и пр. Одна запись на строку)
BLLIST_GR_EXCLUDED_NETS_FILE="/etc/ruantiblock/gr_excluded_nets"
@@ -111,7 +111,7 @@ BLLIST_GR_EXCLUDED_NETS_FILE="/etc/ruantiblock/gr_excluded_nets"
BLLIST_SUMMARIZE_IP=0
### Группировать идущие подряд подсети /24 в диапазоны CIDR
BLLIST_SUMMARIZE_CIDR=0
### Фильтрация записей блэклиста по шаблонам из файла BLLIST_IP_FILTER_FILE. Записи (IP, CIDR) попадающие под шаблоны исключаются из кофига ipset (0 - выкл, 1 - вкл)
### Фильтрация записей блэклиста по шаблонам из файла BLLIST_IP_FILTER_FILE. Записи (IP, CIDR) попадающие под шаблоны исключаются из кофига nftables (0 - выкл, 1 - вкл)
BLLIST_IP_FILTER=0
### Тип фильтра IP (0 - все записи, кроме совпадающих с шаблонами; 1 - только записи, совпадающие с шаблонами)
BLLIST_IP_FILTER_TYPE=0
+14 -16
View File
@@ -22,7 +22,7 @@ export DATA_DIR="/var/${NAME}"
export MODULES_DIR="/usr/libexec/${NAME}"
RUN_FILES_DIR="/var/run"
### Директория доп. конфигов dnsmasq
export DNSMASQ_CFG_DIR="/var/dnsmasq.d"
export DNSMASQ_CONFDIR="/var/dnsmasq.d"
### Команда для перезапуска dnsmasq
export DNSMASQ_RESTART_CMD="/etc/init.d/dnsmasq restart"
### Директория для html-страницы статуса (не используется в OpenWrt)
@@ -137,7 +137,7 @@ export BLLIST_MODULE=""
export BLLIST_PRESET=""
### В случае если из источника получено менее указанного кол-ва записей, то обновления списков не происходит
export BLLIST_MIN_ENTRIES=3000
### Лимит IP адресов. При достижении, в конфиг ipset будет добавлена вся подсеть /24 вместо множества IP адресов пренадлежащих этой сети (0 - выкл)
### Лимит IP адресов. При достижении, в конфиг nftables будет добавлена вся подсеть /24 вместо множества IP адресов пренадлежащих этой сети (0 - выкл)
export BLLIST_IP_LIMIT=0
### Файл с подсетями класса C (/24). IP адреса из этих подсетей не группируются при оптимизации (записи д.б. в виде: 68.183.221. 149.154.162. и пр. Одна запись на строку)
export BLLIST_GR_EXCLUDED_NETS_FILE="${CONFIG_DIR}/gr_excluded_nets"
@@ -145,7 +145,7 @@ export BLLIST_GR_EXCLUDED_NETS_FILE="${CONFIG_DIR}/gr_excluded_nets"
export BLLIST_SUMMARIZE_IP=0
### Группировать идущие подряд подсети /24 в диапазоны CIDR
export BLLIST_SUMMARIZE_CIDR=0
### Фильтрация записей блэклиста по шаблонам из файла BLLIST_IP_FILTER_FILE. Записи (IP, CIDR) попадающие под шаблоны исключаются из кофига ipset (0 - выкл, 1 - вкл)
### Фильтрация записей блэклиста по шаблонам из файла BLLIST_IP_FILTER_FILE. Записи (IP, CIDR) попадающие под шаблоны исключаются из кофига nftables (0 - выкл, 1 - вкл)
export BLLIST_IP_FILTER=0
### Тип фильтра IP (0 - все записи, кроме совпадающих с шаблонами; 1 - только записи, совпадающие с шаблонами)
export BLLIST_IP_FILTER_TYPE=0
@@ -195,9 +195,9 @@ BLLIST_SOURCES_SCRIPT="${SCRIPTS_DIR}/blacklist_sources"
### Config script
[ -f "$CONFIG_SCRIPT" ] && . "$CONFIG_SCRIPT"
export DNSMASQ_DATA_FILE_BYPASS="${DNSMASQ_CFG_DIR}/00-${NAME}_bypass.dnsmasq"
export DNSMASQ_DATA_FILE_USER_INSTANCES="${DNSMASQ_CFG_DIR}/01-${NAME}_user_instances.dnsmasq"
export DNSMASQ_DATA_FILE="${DNSMASQ_CFG_DIR}/02-${NAME}.dnsmasq"
export DNSMASQ_DATA_FILE_BYPASS="${DNSMASQ_CONFDIR}/00-${NAME}_bypass.dnsmasq"
export DNSMASQ_DATA_FILE_USER_INSTANCES="${DNSMASQ_CONFDIR}/01-${NAME}_user_instances.dnsmasq"
export DNSMASQ_DATA_FILE="${DNSMASQ_CONFDIR}/02-${NAME}.dnsmasq"
### Utilities
AWK_CMD="awk"
@@ -694,9 +694,8 @@ AddBypassEntries() {
if [ "$BYPASS_MODE" = "1" ]; then
if [ -f "$BYPASS_ENTRIES_FILE" ]; then
$AWK_CMD 'BEGIN {
null = "";
ip_array[0] = null;
fqdn_array[0] = null;
ip_array[0];
fqdn_array[0];
}
function writeIpList(array, _str) {
_str = "";
@@ -724,7 +723,7 @@ AddBypassEntries() {
($0 !~ /^([\040\011]*$|#)/) {
sub("\015", "", $0);
if($0 ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}([\057][0-9]{1,2})?$/) {
ip_array[$0] = null;
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;
@@ -748,10 +747,9 @@ ParseUserEntries() {
-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 {
null = "";
ip_array[0] = null;
cidr_array[0] = null;
fqdn_array[0] = null;
ip_array[0];
cidr_array[0];
fqdn_array[0];
}
function writeIpList(array, _str) {
_str = "";
@@ -779,10 +777,10 @@ ParseUserEntries() {
($0 !~ /^([\040\011]*$|#)/) {
sub("\015", "", $0);
if($0 ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}$/) {
ip_array[$0] = null;
ip_array[$0];
}
else if($0 ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}[\057][0-9]{1,2}$/) {
cidr_array[$0] = null;
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;
@@ -1,6 +1,5 @@
UCI_SECTION="ruantiblock.config"
UCI_VARS="dnsmasq_cfg_dir proxy_mode proxy_local_clients nftset_clear_sets allowed_hosts_mode allowed_hosts_list bypass_mode bypass_entries_dns enable_fproxy fproxy_list enable_bllist_proxy if_vpn vpn_gw_ip vpn_route_check tor_trans_port onion_dns_addr t_proxy_type t_proxy_port_tcp t_proxy_port_udp t_proxy_allow_udp enable_logging bllist_min_entries bllist_module bllist_preset bllist_ip_limit bllist_summarize_ip bllist_summarize_cidr bllist_ip_filter bllist_ip_filter_type bllist_sd_limit bllist_fqdn_filter bllist_fqdn_filter_type bllist_enable_idn bllist_alt_nslookup bllist_alt_dns_addr update_at_startup enable_tmp_downloads"
UCI_VARS="dnsmasq_confdir proxy_mode proxy_local_clients nftset_clear_sets allowed_hosts_mode allowed_hosts_list bypass_mode bypass_entries_dns enable_fproxy fproxy_list enable_bllist_proxy if_vpn vpn_gw_ip vpn_route_check tor_trans_port onion_dns_addr t_proxy_type t_proxy_port_tcp t_proxy_port_udp t_proxy_allow_udp enable_logging bllist_min_entries bllist_module bllist_preset bllist_ip_limit bllist_summarize_ip bllist_summarize_cidr bllist_ip_filter bllist_ip_filter_type bllist_sd_limit bllist_fqdn_filter bllist_fqdn_filter_type bllist_enable_idn bllist_alt_nslookup bllist_alt_dns_addr update_at_startup enable_tmp_downloads"
UCI_CMD=`which uci`
if [ $? -ne 0 ]; then
echo " Error! UCI doesn't exists" >&2