From 7491dec60671e4a49da42b326e4c90ec70aacf3a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 28 Aug 2026 01:19:01 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20Sync=202026-08-28=2001:19:01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dae/Makefile | 8 +- dae/files/dae.init | 2 +- daed/Makefile | 6 +- luci-app-daede/Makefile | 2 +- .../luci-static/resources/view/daede/log.js | 62 ++++++++--- .../etc/uci-defaults/90-luci-app-daede-init | 1 + luci-app-passwall/Makefile | 2 +- .../luasrc/controller/passwall.lua | 2 + .../model/cbi/passwall/client/acl_config.lua | 1 + .../model/cbi/passwall/client/global.lua | 4 +- .../luasrc/passwall/util_sing-box.lua | 7 -- .../luasrc/passwall/util_xray.lua | 8 ++ .../root/usr/share/passwall/iptables.sh | 12 +- .../root/usr/share/passwall/nftables.sh | 19 ++-- .../root/usr/share/passwall/rule_update.lua | 24 +++- luci-app-passwall2/Makefile | 2 +- .../model/cbi/passwall2/client/acl_config.lua | 2 +- .../model/cbi/passwall2/client/global.lua | 2 +- luci-app-passwall2/luasrc/passwall2/api.lua | 26 ++++- .../luasrc/passwall2/util_xray.lua | 8 +- .../root/usr/share/passwall2/app.sh | 104 ++++++++++-------- .../root/usr/share/passwall2/app_acl.lua | 7 +- .../usr/share/passwall2/helper_dnsmasq.lua | 2 +- .../root/usr/share/passwall2/iptables.sh | 2 +- .../root/usr/share/passwall2/nftables.sh | 2 +- .../root/usr/share/passwall2/utils.sh | 22 ---- upx/Makefile | 4 +- 27 files changed, 202 insertions(+), 141 deletions(-) diff --git a/dae/Makefile b/dae/Makefile index d5513791..97fc6717 100644 --- a/dae/Makefile +++ b/dae/Makefile @@ -5,10 +5,10 @@ include $(TOPDIR)/rules.mk PKG_NAME:=dae -PKG_VERSION:=2026.08.21 -PKG_RELEASE:=37 +PKG_VERSION:=2026.08.26 +PKG_RELEASE:=38 -PKG_SOURCE:=dae-src-2026.08.21-8138f66f2c6d.tar.gz +PKG_SOURCE:=dae-src-2026.08.26-936105a87a65.tar.gz PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/dae-src PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_HASH:=skip @@ -39,7 +39,7 @@ GO_PKG_LDFLAGS:= \ GO_PKG_LDFLAGS_X:= \ $(GO_PKG)/cmd.Version=$(PKG_VERSION) \ $(GO_PKG)/common/consts.MaxMatchSetLen_=1024 -GO_PKG_TAGS:=trace +GO_PKG_TAGS:=trace,timetzdata include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/bpf.mk diff --git a/dae/files/dae.init b/dae/files/dae.init index 7650ff13..41fc7d49 100644 --- a/dae/files/dae.init +++ b/dae/files/dae.init @@ -27,7 +27,7 @@ start_service() { config_get log_maxsize "config" "log_maxsize" "1" procd_open_instance "$CONF" - procd_set_param env DAE_LOCATION_ASSET="/usr/share/v2ray" + procd_set_param env DAE_LOCATION_ASSET="/usr/share/v2ray" TZ="$(uci -q get system.@system[0].zonename)" procd_set_param command "$PROG" run procd_append_param command --config "$config_file" procd_append_param command --disable-timestamp diff --git a/daed/Makefile b/daed/Makefile index 2d4757c9..6301726a 100644 --- a/daed/Makefile +++ b/daed/Makefile @@ -5,10 +5,10 @@ include $(TOPDIR)/rules.mk PKG_NAME:=daed -PKG_VERSION:=2026.08.21 -PKG_RELEASE:=48 +PKG_VERSION:=2026.08.26 +PKG_RELEASE:=49 -PKG_SOURCE:=daed-src-2026.08.21-aeef51da973f.tar.gz +PKG_SOURCE:=daed-src-2026.08.26-003da3d0a669.tar.gz PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/daed-src PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_HASH:=skip diff --git a/luci-app-daede/Makefile b/luci-app-daede/Makefile index 395393e0..63991690 100644 --- a/luci-app-daede/Makefile +++ b/luci-app-daede/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-daede PKG_VERSION:=1.14.7 -PKG_RELEASE:=40 +PKG_RELEASE:=41 PKG_MAINTAINER:=kenzok8 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/luci-app-daede/htdocs/luci-static/resources/view/daede/log.js b/luci-app-daede/htdocs/luci-static/resources/view/daede/log.js index 41dc0167..36fdc305 100644 --- a/luci-app-daede/htdocs/luci-static/resources/view/daede/log.js +++ b/luci-app-daede/htdocs/luci-static/resources/view/daede/log.js @@ -39,7 +39,7 @@ const CSS = [ '.dd-log-pane .dd-line.dd-hidden{display:none}', '.dd-log-pane .dd-empty{opacity:.5;font-style:italic}', /* 简化后的字段视觉 */ - '.dd-log-pane .dd-ts{color:#6b7480;margin-right:8px}', + '.dd-log-pane .dd-ts{color:#6b7480;margin-right:8px;white-space:nowrap}', '.dd-log-pane .dd-lvl{display:inline-block;min-width:38px;padding:0 5px;margin-right:8px;border-radius:3px;font-size:10px;font-weight:700;letter-spacing:.4px;text-align:center;vertical-align:1px}', '.dd-log-pane .dd-lvl-info{color:#7fc7a8;background:rgba(127,199,168,.08)}', '.dd-log-pane .dd-lvl-warn{color:#e8b95a;background:rgba(232,185,90,.10)}', @@ -53,6 +53,7 @@ const CSS = [ /* 拆字段:time="May 25 07:04:59" level=info msg="..." key=val key="val with space" ... */ const RE_LINE = /^time="([^"]*)"\s+level=(\w+)\s+msg=(?:"((?:[^"\\]|\\.)*)"|(\S+))\s*(.*)$/; +const RE_PREFIXED_LINE = /^\[([^\]]+)\]\s+(DEBUG|INFO|WARN(?:ING)?|ERROR|FATAL|PANIC)\s*(.*)$/i; function detectLevel(line) { // daed/dae logs use lvl=info / [INFO] / level=warning style @@ -65,22 +66,29 @@ function detectLevel(line) { return 'dd-error'; } -/* 简化时间戳并按北京时间显示: +/* 格式化时间戳并按北京时间显示: * - daed 默认输出 UTC ISO 8601 (e.g. "2026-05-28T19:07:54Z"),转成北京时间 - * - 旧 logrus 短格式 (e.g. "May 25 07:04:59") 无时区信息,原样提取 + * - 新格式和旧 logrus 短格式无时区信息,保留原始完整日期时间 */ -function shortTs(raw) { +function formatTs(raw) { if (!raw) return raw; if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})$/.test(raw)) { const d = new Date(raw); if (!isNaN(d.getTime())) { const beijing = new Date(d.getTime() + 8 * 60 * 60 * 1000); const pad = n => String(n).padStart(2, '0'); - return pad(beijing.getUTCHours()) + ':' + pad(beijing.getUTCMinutes()) + ':' + pad(beijing.getUTCSeconds()); + return [ + beijing.getUTCFullYear(), + pad(beijing.getUTCMonth() + 1), + pad(beijing.getUTCDate()) + ].join('-') + ' ' + [ + pad(beijing.getUTCHours()), + pad(beijing.getUTCMinutes()), + pad(beijing.getUTCSeconds()) + ].join(':'); } } - const m = raw.match(/(\d{2}:\d{2}:\d{2})/); - return m ? m[1] : raw; + return raw; } function lvlShort(level) { @@ -97,22 +105,42 @@ function lvlClass(level) { return 'dd-lvl-error'; } +function parseLine(line) { + let m = line.match(RE_LINE); + if (m) { + return { + ts: formatTs(m[1]), + lvl: m[2], + msg: m[3] !== undefined ? m[3] : (m[4] || ''), + kv: (m[5] || '').trim() + }; + } + + m = line.match(RE_PREFIXED_LINE); + if (!m) return null; + + const body = m[3] || ''; + const kvStart = body.search(/(?:^|\s)(?=[A-Za-z_][\w.-]*=)/); + return { + ts: formatTs(m[1]), + lvl: m[2], + msg: kvStart === -1 ? body : body.slice(0, kvStart).trimEnd(), + kv: kvStart === -1 ? '' : body.slice(kvStart).trim() + }; +} + function buildLine(ln) { const cls = detectLevel(ln); - const m = ln.match(RE_LINE); - if (!m) { + const parsed = parseLine(ln); + if (!parsed) { return E('div', { 'class': 'dd-line ' + cls }, ln); } - const ts = shortTs(m[1]); - const lvl = m[2]; - const msg = m[3] !== undefined ? m[3] : (m[4] || ''); - const kv = (m[5] || '').trim(); const parts = [ - E('span', { 'class': 'dd-ts' }, ts), - E('span', { 'class': 'dd-lvl ' + lvlClass(lvl) }, lvlShort(lvl)), - E('span', { 'class': 'dd-msg' }, msg) + E('span', { 'class': 'dd-ts' }, parsed.ts), + E('span', { 'class': 'dd-lvl ' + lvlClass(parsed.lvl) }, lvlShort(parsed.lvl)), + E('span', { 'class': 'dd-msg' }, parsed.msg) ]; - if (kv) parts.push(E('span', { 'class': 'dd-kv' }, kv)); + if (parsed.kv) parts.push(E('span', { 'class': 'dd-kv' }, parsed.kv)); return E('div', { 'class': 'dd-line ' + cls }, parts); } diff --git a/luci-app-daede/root/etc/uci-defaults/90-luci-app-daede-init b/luci-app-daede/root/etc/uci-defaults/90-luci-app-daede-init index 11fb90fa..0b61fe2b 100644 --- a/luci-app-daede/root/etc/uci-defaults/90-luci-app-daede-init +++ b/luci-app-daede/root/etc/uci-defaults/90-luci-app-daede-init @@ -53,6 +53,7 @@ DAE_INIT="/etc/init.d/dae" if [ -f "$DAE_INIT" ]; then sed -i 's/--disable-timestamp//' "$DAE_INIT" sed -i '/procd_append_param command *$/d' "$DAE_INIT" + sed -i 's|procd_set_param env DAE_LOCATION_ASSET="/usr/share/v2ray".*|procd_set_param env DAE_LOCATION_ASSET="/usr/share/v2ray" TZ="$(uci -q get system.@system[0].zonename)"|' "$DAE_INIT" fi # dae expects geoip.dat / geosite.dat under /usr/share/dae/; diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index d57887cf..8e91a1fa 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall PKG_VERSION:=26.8.26 -PKG_RELEASE:=247 +PKG_RELEASE:=248 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/luasrc/controller/passwall.lua b/luci-app-passwall/luasrc/controller/passwall.lua index 6d436eed..f5ced71a 100644 --- a/luci-app-passwall/luasrc/controller/passwall.lua +++ b/luci-app-passwall/luasrc/controller/passwall.lua @@ -829,6 +829,8 @@ function rollback_rules() if geo2rule == "1" and rules ~= "" then luci.sys.call("lua /usr/share/passwall/rule_update.lua log '" .. rules .. "' rollback > /dev/null") end + uci_set("@global[0]", "flush_set", "1") + uci_save(true) http_write_json_ok() end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua index dbacc653..ade58c03 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua @@ -402,6 +402,7 @@ end ---- DNS Forward o = s:option(Value, "remote_dns", translate("Remote DNS")) +o.datatype = "or(ipaddr,ipaddrport(1))" o.default = "1.1.1.1" o:value("1.1.1.1", "1.1.1.1 (CloudFlare)") o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)") diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua index 5df9a7c5..8973a7dc 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua @@ -213,7 +213,7 @@ o:depends({dns_shunt = "dnsmasq"}) o:depends({dns_shunt = "chinadns-ng"}) o = s:taboption("DNS", Value, "direct_dns", translate("Direct DNS")) -o.datatype = "or(ipaddr,ipaddrport)" +o.datatype = "or(ipaddr,ipaddrport(1))" o.default = "223.5.5.5" o:value("223.5.5.5") o:value("223.6.6.6") @@ -389,7 +389,7 @@ o:depends({dns_mode = "dns2socks"}) ---- DNS Forward o = s:taboption("DNS", Value, "remote_dns", translate("Remote DNS")) -o.datatype = "or(ipaddr,ipaddrport)" +o.datatype = "or(ipaddr,ipaddrport(1))" o.default = "1.1.1.1" o:value("1.1.1.1", "1.1.1.1 (CloudFlare)") o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)") diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua index e3ab33d5..c8780b26 100644 --- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua +++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua @@ -69,13 +69,6 @@ local function convert_geofile() end local function convert(file_path, prefix, tags) if next(tags) and fs.access(file_path) then - local md5_file = GEO_VAR.TO_SRS_PATH .. prefix .. ".dat.md5" - local new_md5 = sys.exec("md5sum " .. file_path .. " 2>/dev/null | awk '{print $1}'"):gsub("\n", "") - local old_md5 = sys.exec("[ -f " .. md5_file .. " ] && head -n 1 " .. md5_file .. " | tr -d ' \t\n' || echo ''") - if new_md5 ~= "" and new_md5 ~= old_md5 then - sys.call("printf '%s' " .. new_md5 .. " > " .. md5_file) - sys.call("rm -rf " .. GEO_VAR.TO_SRS_PATH .. prefix .. "-*.srs" ) - end for k in pairs(tags) do geo_convert_srs({["geo_path"] = file_path, ["prefix"] = prefix, ["rule_name"] = k}) end diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua index 5b988ab3..6a0c4bbb 100644 --- a/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -1664,8 +1664,12 @@ function gen_config(var) _direct_dns.port = port _direct_dns.address = direct_dns_udp_server elseif direct_dns_tcp_server then + if api.is_ipv6(direct_dns_tcp_server) then + direct_dns_tcp_server = api.get_ipv6_full(direct_dns_tcp_server) + end local port = tonumber(direct_dns_port) or 53 _direct_dns.address = "tcp://" .. direct_dns_tcp_server .. ":" .. port + _direct_dns.port = port end if COMMON.default_outbound_tag == "direct" then @@ -1697,7 +1701,11 @@ function gen_config(var) _remote_dns.port = tonumber(remote_dns_udp_port) or 53 elseif remote_dns_tcp_server then + if api.is_ipv6(remote_dns_tcp_server) then + remote_dns_tcp_server = api.get_ipv6_full(remote_dns_tcp_server) + end _remote_dns.address = "tcp://" .. remote_dns_tcp_server .. ":" .. tonumber(remote_dns_tcp_port) or 53 + _remote_dns.port = tonumber(remote_dns_tcp_port) or 53 elseif remote_dns_doh then local _a = api.parseDoH(remote_dns_doh) diff --git a/luci-app-passwall/root/usr/share/passwall/iptables.sh b/luci-app-passwall/root/usr/share/passwall/iptables.sh index 07f25c5d..89703e07 100755 --- a/luci-app-passwall/root/usr/share/passwall/iptables.sh +++ b/luci-app-passwall/root/usr/share/passwall/iptables.sh @@ -44,6 +44,7 @@ FAKE_IP="198.18.0.0/15" FAKE_IP_6="fc00::/18" USE_GEOVIEW=0 +EXCLUDE_VPSIP="^(0\.0\.0\.0|127\.0\.0\.1|1\.1\.1\.1|1\.1\.1\.2|8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9)$" factor() { if [ -z "$1" ] || [ -z "$2" ]; then @@ -746,15 +747,14 @@ load_acl() { } filter_haproxy() { - for item in ${haproxy_items}; do - local ip=$(get_host_ip ipv4 $(echo $item | awk -F ":" '{print $1}') 1) - ipset -q add $IPSET_VPS $ip + for item in $(uci show $CONFIG | grep ".lbss=" | cut -d "'" -f 2); do + local ip=$(get_host_ip "ipv4" "$(echo $item | awk -F ":" '{print $1}')" 1) + [ -n "$ip" ] && ! echo "$ip" | grep -Eq "$EXCLUDE_VPSIP" && ipset -q add $IPSET_VPS $ip done echolog " - [$?]加入负载均衡的节点到ipset[$IPSET_VPS]直连完成" } filter_vpsip() { - local EXCLUDE_VPSIP="^(0\.0\.0\.0|127\.0\.0\.1|1\.1\.1\.1|1\.1\.1\.2|8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9)$" uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -Ev "$EXCLUDE_VPSIP" | sed "s/^/add $IPSET_VPS /" | awk '1; END{print "COMMIT"}' | ipset -! -R echolog " - [$?]加入所有IPv4节点到ipset[$IPSET_VPS]直连完成" uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "\[?[A-Fa-f0-9:]*:[A-Fa-f0-9:]+\]?" | sed "s/^/add $IPSET_VPS6 /" | awk '1; END{print "COMMIT"}' | ipset -! -R @@ -802,7 +802,9 @@ filter_node() { local port=$(config_n_get "$node" port) local hop=$(config_n_get "$node" hysteria2_hop) [ -n "$hop" ] && port="${port:+$port,}$hop" - [ -z "$address" ] || [ -z "$port" ] && return 1 + [ -z "$address" ] && return 1 + echo "$address" | grep -Eq "$EXCLUDE_VPSIP" && return 1 + [ -z "$port" ] && return 1 filter_server_port "$address" "$port" "$stream" } diff --git a/luci-app-passwall/root/usr/share/passwall/nftables.sh b/luci-app-passwall/root/usr/share/passwall/nftables.sh index a23f296c..ee4576eb 100755 --- a/luci-app-passwall/root/usr/share/passwall/nftables.sh +++ b/luci-app-passwall/root/usr/share/passwall/nftables.sh @@ -50,6 +50,7 @@ FAKE_IP="198.18.0.0/15" FAKE_IP_6="fc00::/18" USE_GEOVIEW=0 +EXCLUDE_VPSIP="^(0\.0\.0\.0|127\.0\.0\.1|1\.1\.1\.1|1\.1\.1\.2|8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9)$" factor() { local ports="$1" @@ -809,24 +810,23 @@ load_acl() { } filter_haproxy() { - for item in ${haproxy_items}; do - get_host_ip ipv4 $(echo $item | awk -F ":" '{print $1}') 1 - done | insert_nftset $NFTSET_VPS + for item in $(uci show $CONFIG | grep ".lbss=" | cut -d "'" -f 2); do + get_host_ip "ipv4" "$(echo $item | awk -F ":" '{print $1}')" 1 + done | grep -Ev "$EXCLUDE_VPSIP" | insert_nftset $NFTSET_VPS echolog " - [$?]加入负载均衡的节点到nftset[$NFTSET_VPS]直连完成" } filter_vps_addr() { for server_host in "$@"; do - get_host_ip "ipv4" ${server_host} - done | insert_nftset $NFTSET_VPS + get_host_ip "ipv4" "${server_host}" + done | grep -Ev "$EXCLUDE_VPSIP" | insert_nftset $NFTSET_VPS for server_host in "$@"; do - get_host_ip "ipv6" ${server_host} + get_host_ip "ipv6" "${server_host}" done | insert_nftset $NFTSET_VPS6 } filter_vpsip() { - local EXCLUDE_VPSIP="^(0\.0\.0\.0|127\.0\.0\.1|1\.1\.1\.1|1\.1\.1\.2|8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9)$" uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -Ev "$EXCLUDE_VPSIP" | insert_nftset $NFTSET_VPS echolog " - [$?]加入所有IPv4节点到nftset[$NFTSET_VPS]直连完成" uci show $CONFIG | grep -E "(\.address=|\.download_address=|\.domain_resolver_dns=|\.domain_resolver_dns_https=)" | cut -d "'" -f 2 | grep -Eo "\[?[A-Fa-f0-9:]*:[A-Fa-f0-9:]+\]?" | insert_nftset $NFTSET_VPS6 @@ -864,7 +864,9 @@ filter_node() { local port=$(config_n_get "$node" port) local hop=$(config_n_get "$node" hysteria2_hop) [ -n "$hop" ] && port="${port:+$port,}$hop" - [ -z "$address" ] || [ -z "$port" ] && return 1 + [ -z "$address" ] && return 1 + echo "$address" | grep -Eq "$EXCLUDE_VPSIP" && return 1 + [ -z "$port" ] && return 1 filter_server_port "$address" "$port" "$stream" } @@ -877,7 +879,6 @@ filter_direct_node_list() { done } - del_script_mwan3() { [ -s "/etc/init.d/mwan3" ] && sed -i "/${CONFIG}/d" /etc/init.d/mwan3 >/dev/null 2>&1 } diff --git a/luci-app-passwall/root/usr/share/passwall/rule_update.lua b/luci-app-passwall/root/usr/share/passwall/rule_update.lua index b7aea51f..6277db7c 100755 --- a/luci-app-passwall/root/usr/share/passwall/rule_update.lua +++ b/luci-app-passwall/root/usr/share/passwall/rule_update.lua @@ -726,13 +726,21 @@ if geo2rule == "1" then end -- 如果是手动更新(arg2存在)始终生成规则 - if arg2 then geoip_update_ok, geosite_update_ok = true, true end - chnroute_update, chnroute6_update, gfwlist_update, chnlist_update = "1", "1", "1", "1" + if arg2 then + geoip_update_ok, geosite_update_ok = true, true + end + if not rollback then + chnroute_update, chnroute6_update, gfwlist_update, chnlist_update = "1", "1", "1", "1" + end if geoip_update_ok then if fs.access(asset_location .. "geoip.dat") then - safe_call(fetch_chnroute, "生成chnroute发生错误...") - safe_call(fetch_chnroute6, "生成chnroute6发生错误...") + if chnroute_update == "1" then + safe_call(fetch_chnroute, "生成chnroute发生错误...") + end + if chnroute6_update == "1" then + safe_call(fetch_chnroute6, "生成chnroute6发生错误...") + end else log("geoip.dat 文件不存在,跳过规则生成。") end @@ -740,8 +748,12 @@ if geo2rule == "1" then if geosite_update_ok then if fs.access(asset_location .. "geosite.dat") then - safe_call(fetch_gfwlist, "生成gfwlist发生错误...") - safe_call(fetch_chnlist, "生成chnlist发生错误...") + if gfwlist_update == "1" then + safe_call(fetch_gfwlist, "生成gfwlist发生错误...") + end + if chnlist_update == "1" then + safe_call(fetch_chnlist, "生成chnlist发生错误...") + end else log("geosite.dat 文件不存在,跳过规则生成。") end diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile index f2b54e56..ee1925e7 100644 --- a/luci-app-passwall2/Makefile +++ b/luci-app-passwall2/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall2 PKG_VERSION:=26.8.27 -PKG_RELEASE:=102 +PKG_RELEASE:=103 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua index 3c9cc084..a0f69da5 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/acl_config.lua @@ -271,7 +271,7 @@ o:depends("_show_dns_option", "1") ---- DNS over TCP or UDP or TLS (DoT) or QUIC (DoQ) o = s:option(Value, "remote_dns", translate("Remote DNS")) -o.datatype = "or(ipaddr,ipaddrport)" +o.datatype = "or(ipaddr,ipaddrport(1))" o.default = "1.1.1.1" o:value("1.1.1.1", "1.1.1.1 (CloudFlare)") o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)") diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua index e1f28d19..626df1ed 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/global.lua @@ -182,7 +182,7 @@ end ---- DNS over TCP or UDP or TLS (DoT) or QUIC (DoQ) o = s:taboption("DNS", Value, "remote_dns", translate("Remote DNS")) -o.datatype = "or(ipaddr,ipaddrport)" +o.datatype = "or(ipaddr,ipaddrport(1))" o.default = "1.1.1.1" o:value("1.1.1.1", "1.1.1.1 (CloudFlare)") o:value("1.1.1.2", "1.1.1.2 (CloudFlare-Security)") diff --git a/luci-app-passwall2/luasrc/passwall2/api.lua b/luci-app-passwall2/luasrc/passwall2/api.lua index 8e742b5f..029df932 100644 --- a/luci-app-passwall2/luasrc/passwall2/api.lua +++ b/luci-app-passwall2/luasrc/passwall2/api.lua @@ -2048,4 +2048,28 @@ function gen_wireguard_key() public_key = public_key } end -end \ No newline at end of file +end + +function parseDNS(dns) + if not dns then return nil end + if true then + -- IPv6 + -- [::1]:5053 + local address, port = dns:match("%[(.-)%]:([0-9]+)$") + if address and datatypes.ip6addr(address) and datatypes.port(port) then + return address, port + end + -- [::1] + if is_ipv6(dns) then + return get_ipv6_only(dns), 53 + end + end + if true then + -- 1.1.1.1:5053 + local h, p = dns:match("^([^:]+):([^:]+)$") + if (h and p and datatypes.ip4addr(h) and datatypes.port(p)) then + return h, p + end + end + return dns, 53 +end diff --git a/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/luci-app-passwall2/luasrc/passwall2/util_xray.lua index e6fddd62..d9ac06a7 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_xray.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_xray.lua @@ -1623,8 +1623,6 @@ function gen_config(var) end end) end - - local _remote_dns_ip = nil local _remote_dns = { tag = remote_dns_tag, @@ -1635,14 +1633,15 @@ function gen_config(var) _remote_dns.address = remote_dns_udp_server _remote_dns.port = tonumber(remote_dns_udp_port) or 53 _remote_dns_proto = "udp" - _remote_dns_ip = remote_dns_udp_server end if remote_dns_tcp_server then + if api.is_ipv6(remote_dns_tcp_server) then + remote_dns_tcp_server = api.get_ipv6_full(remote_dns_tcp_server) + end _remote_dns.address = "tcp://" .. remote_dns_tcp_server .. ":" .. tonumber(remote_dns_tcp_port) or 53 _remote_dns.port = tonumber(remote_dns_tcp_port) or 53 _remote_dns_proto = "tcp" - _remote_dns_ip = remote_dns_tcp_server end if remote_dns_doh_url and remote_dns_doh_host then @@ -1651,7 +1650,6 @@ function gen_config(var) end _remote_dns.address = remote_dns_doh_url _remote_dns.port = tonumber(remote_dns_doh_port) or 443 - _remote_dns_ip = remote_dns_doh_ip end if _remote_dns.address then diff --git a/luci-app-passwall2/root/usr/share/passwall2/app.sh b/luci-app-passwall2/root/usr/share/passwall2/app.sh index e2148526..f309a83d 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/app.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/app.sh @@ -69,7 +69,7 @@ check_run_environment() { run_xray() { local flag node redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password - local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache + local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_udp_port remote_dns_tcp_server remote_dns_tcp_port remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy dns_cache local loglevel log_file config_file eval_set_val $@ node_protocol=$(config_n_get $node protocol) @@ -100,6 +100,7 @@ run_xray() { } } [ -n "$dns_listen_port" ] && { + local dns_msg="DNS[${dns_listen_port}]:($(i18n "Direct DNS: %s" "${AUTO_DNS}")" json_add_string "dns_listen_port" "${dns_listen_port}" [ -n "$dns_cache" ] && json_add_string "dns_cache" "${dns_cache}" [ "${node_protocol}" = "_shunt" ] && local write_ipset_direct=$(config_n_get $node write_ipset_direct 0) @@ -129,24 +130,16 @@ run_xray() { set_cache_var "node_${node}_direct_nftset6" "${direct_nftset6}" } } - [ "$remote_fakedns" = "1" ] && { - json_add_string "remote_dns_fake" "1" - json_add_string "remote_dns_fake_strategy" "${remote_dns_query_strategy}" - } case "$remote_dns_protocol" in udp) - local _dns=$(get_first_dns remote_dns_udp_server 53 | sed 's/#/:/g') - local _dns_address=$(echo ${_dns} | awk -F ':' '{print $1}') - local _dns_port=$(echo ${_dns} | awk -F ':' '{print $2}') - json_add_string "remote_dns_udp_port" "${_dns_port}" - json_add_string "remote_dns_udp_server" "${_dns_address}" + json_add_string "remote_dns_udp_server" "${remote_dns_udp_server}" + json_add_string "remote_dns_udp_port" "${remote_dns_udp_port}" + dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "udp://${remote_dns_udp_server}:${remote_dns_udp_port}")" ;; tcp) - local _dns=$(get_first_dns remote_dns_tcp_server 53 | sed 's/#/:/g') - local _dns_address=$(echo ${_dns} | awk -F ':' '{print $1}') - local _dns_port=$(echo ${_dns} | awk -F ':' '{print $2}') - json_add_string "remote_dns_tcp_port" "${_dns_port}" - json_add_string "remote_dns_tcp_server" "${_dns_address}" + json_add_string "remote_dns_tcp_server" "${remote_dns_tcp_server}" + json_add_string "remote_dns_tcp_port" "${remote_dns_tcp_port}" + dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "tcp://${remote_dns_tcp_server}:${remote_dns_tcp_port}")" ;; doh) local _doh_url=$(echo $remote_dns_doh | awk -F ',' '{print $1}') @@ -162,11 +155,18 @@ run_xray() { json_add_string "remote_dns_doh_url" "${_doh_url}" json_add_string "remote_dns_doh_host" "${_doh_host}" [ -n "$_doh_bootstrap" ] && json_add_string "remote_dns_doh_ip" "${_doh_bootstrap}" + dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "${_doh_url}")" ;; esac + [ "$remote_fakedns" = "1" ] && { + json_add_string "remote_dns_fake" "1" + json_add_string "remote_dns_fake_strategy" "${remote_dns_query_strategy}" + dns_msg="${dns_msg} + FakeDNS " + } [ -n "$remote_dns_detour" ] && json_add_string "remote_dns_detour" "${remote_dns_detour}" [ -n "$remote_dns_query_strategy" ] && json_add_string "remote_dns_query_strategy" "${remote_dns_query_strategy}" [ -n "$remote_dns_client_ip" ] && json_add_string "remote_dns_client_ip" "${remote_dns_client_ip}" + log_out="${dns_msg})" } json_add_string "direct_dns_udp_port" "${DIRECT_DNS_UDP_PORT}" json_add_string "direct_dns_udp_server" "${DIRECT_DNS_UDP_SERVER}" @@ -176,6 +176,7 @@ run_xray() { json_add_string "redir_port" "${redir_port}" set_cache_var "node_${node}_redir_port" "${redir_port}" json_add_string "tcp_proxy_way" "${TCP_PROXY_WAY}" + [ -n "${log_out}" ] && log_out="Xray[${redir_port}] ${log_out}" } json_add_string "node" "${node}" @@ -189,6 +190,8 @@ run_xray() { $XRAY_BIN run -test -c "$config_file" > $test_log_file; local status=$? if [ "${status}" == 0 ]; then ln_run ${QUEUE_RUN} "$XRAY_BIN" xray $log_file run -c "$config_file" + [ -n "${log_out}" ] && log 2 ${log_out} + unset log_out else _error_log_file=$test_log_file return ${status} @@ -197,7 +200,7 @@ run_xray() { run_singbox() { local flag node redir_port socks_address socks_port socks_username socks_password http_address http_port http_username http_password - local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_tcp_server remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy remote_rewrite_ttl dns_cache + local dns_listen_port direct_dns_query_strategy remote_dns_protocol remote_dns_udp_server remote_dns_udp_port remote_dns_tcp_server remote_dns_tcp_port remote_dns_doh remote_dns_client_ip remote_dns_detour remote_fakedns remote_dns_query_strategy remote_rewrite_ttl dns_cache local loglevel log_file config_file eval_set_val $@ local type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z') @@ -239,6 +242,9 @@ run_singbox() { } } [ -n "$dns_listen_port" ] && { + local dns_msg="DNS[${dns_listen_port}]:($(i18n "Direct DNS: %s" "${AUTO_DNS}")" + json_add_string "dns_listen_port" "${dns_listen_port}" + [ -n "$dns_cache" ] && json_add_string "dns_cache" "${dns_cache}" [ "${node_protocol}" = "_shunt" ] && local write_ipset_direct=$(config_n_get $node write_ipset_direct 0) [ "${write_ipset_direct}" = "1" ] && { direct_dnsmasq_listen_port=$(get_new_port auto) @@ -270,21 +276,17 @@ run_singbox() { case "$remote_dns_protocol" in udp|\ quic) - local _dns=$(get_first_dns remote_dns_udp_server 53 | sed 's/#/:/g') - local _dns_address=$(echo ${_dns} | awk -F ':' '{print $1}') - local _dns_port=$(echo ${_dns} | awk -F ':' '{print $2}') - json_add_string "remote_dns_udp_port" "${_dns_port}" - json_add_string "remote_dns_udp_server" "${_dns_address}" + json_add_string "remote_dns_udp_server" "${remote_dns_udp_server}" + json_add_string "remote_dns_udp_port" "${remote_dns_udp_port}" [ "$remote_dns_protocol" == "quic" ] && json_add_string "remote_dns_quic" "1" + dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "${remote_dns_protocol}://${remote_dns_udp_server}:${remote_dns_udp_port}")" ;; tcp|\ tls) - local _dns=$(get_first_dns remote_dns_tcp_server 53 | sed 's/#/:/g') - local _dns_address=$(echo ${_dns} | awk -F ':' '{print $1}') - local _dns_port=$(echo ${_dns} | awk -F ':' '{print $2}') - json_add_string "remote_dns_tcp_port" "${_dns_port}" - json_add_string "remote_dns_tcp_server" "${_dns_address}" + json_add_string "remote_dns_tcp_server" "${remote_dns_tcp_server}" + json_add_string "remote_dns_tcp_port" "${remote_dns_tcp_port}" [ "$remote_dns_protocol" == "tls" ] && json_add_string "remote_dns_tls" "1" + dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "${remote_dns_protocol}://${remote_dns_tcp_server}:${remote_dns_tcp_port}")" ;; doh|\ http3) @@ -302,17 +304,19 @@ run_singbox() { json_add_string "remote_dns_doh_url" "${_doh_url}" json_add_string "remote_dns_doh_host" "${_doh_host}" [ "$remote_dns_protocol" == "http3" ] && json_add_string "remote_dns_http3" "1" + dns_msg="${dns_msg} $(i18n "Remote DNS: %s" "${_doh_url}")" ;; esac + [ "$remote_fakedns" = "1" ] && { + json_add_string "remote_dns_fake" "1" + dns_msg="${dns_msg} + FakeDNS " + } [ -n "$remote_dns_detour" ] && json_add_string "remote_dns_detour" "${remote_dns_detour}" [ -n "$remote_dns_query_strategy" ] && json_add_string "remote_dns_query_strategy" "${remote_dns_query_strategy}" [ -n "$remote_dns_client_ip" ] && json_add_string "remote_dns_client_ip" "${remote_dns_client_ip}" - - [ -n "$dns_listen_port" ] && json_add_string "dns_listen_port" "${dns_listen_port}" - [ -n "$dns_cache" ] && json_add_string "dns_cache" "${dns_cache}" - [ "$remote_fakedns" = "1" ] && json_add_string "remote_dns_fake" "1" [ -n "$remote_rewrite_ttl" ] && json_add_string "remote_rewrite_ttl" "${remote_rewrite_ttl}" + log_out="${dns_msg})" } json_add_string "direct_dns_udp_port" "${DIRECT_DNS_UDP_PORT}" json_add_string "direct_dns_udp_server" "${DIRECT_DNS_UDP_SERVER}" @@ -322,6 +326,7 @@ run_singbox() { json_add_string "redir_port" "${redir_port}" set_cache_var "node_${node}_redir_port" "${redir_port}" json_add_string "tcp_proxy_way" "${TCP_PROXY_WAY}" + [ -n "${log_out}" ] && log_out="Sing-Box[${redir_port}] ${log_out}" } json_add_string "node" "${node}" @@ -335,6 +340,8 @@ run_singbox() { $SINGBOX_BIN check -c "$config_file" > $test_log_file 2>&1; local status=$? if [ "${status}" == 0 ]; then ln_run ${QUEUE_RUN} "$SINGBOX_BIN" "sing-box" "${log_file}" run -c "$config_file" + [ -n "${log_out}" ] && log 2 ${log_out} + unset log_out else _error_log_file=$test_log_file return ${status} @@ -803,13 +810,28 @@ run_ipset_dnsmasq() { } acl_node() { + [ ! -f ${TMP_ACL_PATH}/acl_node_default ] && ENABLED_DEFAULT_ACL=0 + local acl_node_num=$(jsonfilter -s "${acl_json}" -e '$.node_order[*]' | wc -l) + [ "${acl_node_num}" == 0 ] && { + ENABLED_DEFAULT_ACL=0 + ENABLED_ACLS=0 + return + } + [ "$(uci -q get dhcp.@dnsmasq[0].dns_redirect)" == "1" ] && { + uci -q set ${CONFIG}.@global[0].dnsmasq_dns_redirect='1' + uci -q commit ${CONFIG} + uci -q set dhcp.@dnsmasq[0].dns_redirect='0' + uci -q commit dhcp + + json_init + json_add_string "LOG" "0" + lua $APP_PATH/helper_dnsmasq.lua restart "$(json_dump)" + } local run_func [ -n "${XRAY_BIN}" ] && run_func="run_xray" [ -n "${SINGBOX_BIN}" ] && run_func="run_singbox" - local acl_node_num=0 for nid in $(jsonfilter -s "${acl_json}" -e '$.node_order[*]'); do [ ! -f ${TMP_ACL_PATH}/acl_node_${nid} ] && continue - acl_node_num=$(expr $acl_node_num + 1) local _var=$(cat ${TMP_ACL_PATH}/acl_node_${nid} 2>/dev/null) eval local ${_var} local type=$(echo $(config_n_get $node type) | tr 'A-Z' 'a-z') @@ -851,26 +873,24 @@ acl_node() { uci -q add_list dhcp.@dnsmasq[0].addnmount=${GLOBAL_DNSMASQ_CONF_PATH} uci -q commit dhcp - json_init - json_add_string "LOG" "1" - lua $APP_PATH/helper_dnsmasq.lua logic_restart "$(json_dump)" + lua $APP_PATH/helper_dnsmasq.lua logic_restart else #Run a copy dnsmasq instance, DNS hijack for that need proxy devices. dnsmasq_port=$(get_new_port auto) run_copy_dnsmasq flag="default" listen_port=${dnsmasq_port} local_dns="${DNSMASQ_LOCAL_DNS}" tun_dns="${DNSMASQ_TUN_DNS}" default_dns="${DNSMASQ_DEFAULT_DNS}" #dhcp.leases to hosts $APP_PATH/lease2hosts.sh > /dev/null 2>&1 & + log 2 "Dnsmasq[${dnsmasq_port}]:(127.0.0.1:${dns_listen_port})" fi else dnsmasq_port=$(get_new_port auto) run_copy_dnsmasq flag="${flag}" listen_port=${dnsmasq_port} local_dns="${LOCAL_DNS:-${AUTO_DNS}}" tun_dns="127.0.0.1#${dns_listen_port}" default_dns="${AUTO_DNS}" #dhcp.leases to hostsMore actions $APP_PATH/lease2hosts.sh > /dev/null 2>&1 & + log 2 "Dnsmasq[${dnsmasq_port}]:(127.0.0.1:${dns_listen_port})" fi rm -f ${TMP_ACL_PATH}/acl_node_${nid} done - [ ! -f ${TMP_ACL_PATH}/acl_node_default ] && ENABLED_DEFAULT_ACL=0 - [ "${acl_node_num}" == 0 ] && ENABLED_ACLS=0 && ENABLED_DEFAULT_ACL=0 } start() { @@ -892,16 +912,6 @@ start() { nftflag=0 USE_TABLES="" check_run_environment - [ "$(uci -q get dhcp.@dnsmasq[0].dns_redirect)" == "1" ] && { - uci -q set ${CONFIG}.@global[0].dnsmasq_dns_redirect='1' - uci -q commit ${CONFIG} - uci -q set dhcp.@dnsmasq[0].dns_redirect='0' - uci -q commit dhcp - - json_init - json_add_string "LOG" "0" - lua $APP_PATH/helper_dnsmasq.lua restart "$(json_dump)" - } [ -n "$USE_TABLES" ] && source $APP_PATH/${USE_TABLES}.sh start set_cache_var "USE_TABLES" "$USE_TABLES" if [ "$ENABLED_DEFAULT_ACL" == 1 ] || [ "$ENABLED_ACLS" == 1 ]; then diff --git a/luci-app-passwall2/root/usr/share/passwall2/app_acl.lua b/luci-app-passwall2/root/usr/share/passwall2/app_acl.lua index 8ea9b985..a4acbe96 100644 --- a/luci-app-passwall2/root/usr/share/passwall2/app_acl.lua +++ b/luci-app-passwall2/root/usr/share/passwall2/app_acl.lua @@ -191,6 +191,7 @@ function acl_app(l) local config_path = api.TMP_ACL_PATH .. "/" .. flag local config_file = config_path .. ".json" local log_file = v.log == "0" and "/dev/null" or config_path .. ".log" + local dns_server, dns_port = api.parseDNS(v.remote_dns) add_args(run_args, "flag", flag) add_args(run_args, "node", node[".name"]) add_args(run_args, "redir_port", v.redir_port) @@ -199,8 +200,10 @@ function acl_app(l) add_args(run_args, "dns_listen_port", v.dns_port) add_args(run_args, "direct_dns_query_strategy", v.direct_dns_query_strategy) add_args(run_args, "remote_dns_protocol", v.remote_dns_protocol) - add_args(run_args, "remote_dns_tcp_server", v.remote_dns) - add_args(run_args, "remote_dns_udp_server", v.remote_dns) + add_args(run_args, "remote_dns_tcp_server", dns_server) + add_args(run_args, "remote_dns_tcp_port", dns_port) + add_args(run_args, "remote_dns_udp_server", dns_server) + add_args(run_args, "remote_dns_udp_port", dns_port) add_args(run_args, "remote_dns_doh", v.remote_dns_doh) add_args(run_args, "remote_dns_client_ip", v.remote_dns_client_ip) add_args(run_args, "remote_dns_detour", v.remote_dns_detour) diff --git a/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.lua b/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.lua index 911f009b..f3ce59d7 100644 --- a/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.lua +++ b/luci-app-passwall2/root/usr/share/passwall2/helper_dnsmasq.lua @@ -366,6 +366,6 @@ if arg[1] then if arg[2] then var = jsonc.parse(arg[2]) end - func(var) + func(var or {}) end end diff --git a/luci-app-passwall2/root/usr/share/passwall2/iptables.sh b/luci-app-passwall2/root/usr/share/passwall2/iptables.sh index 28ee8ea9..35cbd793 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/iptables.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/iptables.sh @@ -256,9 +256,9 @@ add_shunt_t_rule() { } load_acl() { + log_i18n 1 "Access Control:" acl_json=$(lua $APP_PATH/app_acl.lua) acl_node - log_i18n 1 "Access Control:" for sid in $(jsonfilter -s "${acl_json}" -e '$.acl[*].flag'); do eval local $(cat "${TMP_ACL_PATH}/${sid}/var") diff --git a/luci-app-passwall2/root/usr/share/passwall2/nftables.sh b/luci-app-passwall2/root/usr/share/passwall2/nftables.sh index 01e796a8..7fd65246 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/nftables.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/nftables.sh @@ -294,9 +294,9 @@ add_shunt_t_rule() { } load_acl() { + log_i18n 1 "Access Control:" acl_json=$(lua $APP_PATH/app_acl.lua) acl_node - log_i18n 1 "Access Control:" for sid in $(jsonfilter -s "${acl_json}" -e '$.acl[*].flag'); do eval $(cat "${TMP_ACL_PATH}/${sid}/var") diff --git a/luci-app-passwall2/root/usr/share/passwall2/utils.sh b/luci-app-passwall2/root/usr/share/passwall2/utils.sh index 84cb7da4..68db5cd6 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/utils.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/utils.sh @@ -253,28 +253,6 @@ hosts_foreach() { done } -get_first_dns() { - local __hosts_val=${1}; shift 1 - __first() { - [ -z "${2}" ] && return 0 - echo "${2}#${3}" - return 1 - } - eval "hosts_foreach \"${__hosts_val}\" __first \"$@\"" -} - -get_last_dns() { - local __hosts_val=${1}; shift 1 - local __first __last - __every() { - [ -z "${2}" ] && return 0 - __last="${2}#${3}" - __first=${__first:-${__last}} - } - eval "hosts_foreach \"${__hosts_val}\" __every \"$@\"" - [ "${__first}" == "${__last}" ] || echo "${__last}" -} - check_port_exists() { local port=$1 local protocol=$2 diff --git a/upx/Makefile b/upx/Makefile index d00948ff..4d5a63f2 100644 --- a/upx/Makefile +++ b/upx/Makefile @@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=upx -PKG_VERSION:=5.2.0 -PKG_RELEASE:=2 +PKG_VERSION:=5.2.1 +PKG_RELEASE:=3 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-src.tar.xz PKG_SOURCE_URL:=https://github.com/upx/upx/releases/download/v$(PKG_VERSION)