From addbeb0f8e6741ab9c34e5312b6af4f113150897 Mon Sep 17 00:00:00 2001 From: xiaorouji <60100640+xiaorouji@users.noreply.github.com> Date: Thu, 14 Apr 2022 15:41:14 +0800 Subject: [PATCH] luci: compatible ujail --- luci-app-passwall/Makefile | 2 +- .../luasrc/model/cbi/passwall/api/api.lua | 19 +++++++++++- .../usr/share/passwall/helper_dnsmasq_add.lua | 31 ++++++++++--------- .../share/passwall/helper_smartdns_add.lua | 28 ++++++++--------- 4 files changed, 50 insertions(+), 30 deletions(-) diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 49375acaf..e7a645202 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall PKG_VERSION:=4.53 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_CONFIG_DEPENDS:= \ CONFIG_PACKAGE_$(PKG_NAME)_Transparent_Proxy \ diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/api/api.lua b/luci-app-passwall/luasrc/model/cbi/passwall/api/api.lua index 50d3e989a..52bbb0fdc 100755 --- a/luci-app-passwall/luasrc/model/cbi/passwall/api/api.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/api/api.lua @@ -14,6 +14,9 @@ command_timeout = 300 LEDE_BOARD = nil DISTRIB_TARGET = nil +LOG_FILE = "/tmp/log/" .. appname .. ".log" +CACHE_PATH = "/tmp/etc/" .. appname .. "_tmp" + function base64Decode(text) local raw = text if not text then return '' end @@ -68,6 +71,21 @@ function repeat_exist(table, value) return false end +function remove(...) + for index, value in ipairs({...}) do + if value and #value > 0 and value ~= "/" then + sys.call(string.format("rm -rf %s", value)) + end + end +end + +function is_install(package) + if package and #package > 0 then + return sys.call(string.format('opkg list-installed | grep "%s" > /dev/null 2>&1', package)) == 0 + end + return false +end + function get_args(arg) local var = {} for i, arg_k in pairs(arg) do @@ -292,7 +310,6 @@ function is_finded(e) return luci.sys.exec('type -t -p "/bin/%s" -p "%s" "%s"' % {e, get_customed_path(e), e}) ~= "" and true or false end - function clone(org) local function copy(org, res) for k,v in pairs(org) do diff --git a/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq_add.lua b/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq_add.lua index f37e61cbb..192886d15 100644 --- a/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq_add.lua +++ b/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq_add.lua @@ -13,11 +13,11 @@ local TCP_NODE = var["-TCP_NODE"] local PROXY_MODE = var["-PROXY_MODE"] local NO_PROXY_IPV6 = var["-NO_PROXY_IPV6"] local NO_LOGIC_LOG = var["-NO_LOGIC_LOG"] -local LOG_FILE = "/tmp/log/passwall.log" -local CACHE_PATH = "/tmp/etc/passwall_tmp" +local LOG_FILE = api.LOG_FILE +local CACHE_PATH = api.CACHE_PATH local CACHE_FLAG = "dns_" .. FLAG local CACHE_DNS_PATH = CACHE_PATH .. "/" .. CACHE_FLAG -local CACHE_MD5_FILE = CACHE_DNS_PATH .. ".md5" +local CACHE_TEXT_FILE = CACHE_DNS_PATH .. ".txt" local uci = api.uci local sys = api.sys @@ -163,17 +163,16 @@ end local dnsmasq_default_dns -local cache_md5 = "" -local str = TMP_DNSMASQ_PATH .. DNSMASQ_CONF_FILE .. DEFAULT_DNS .. LOCAL_DNS .. TUN_DNS .. REMOTE_FAKEDNS .. CHINADNS_DNS .. PROXY_MODE .. NO_PROXY_IPV6 -local md5 = luci.sys.exec("echo -n $(echo '" .. str .. "' | md5sum | awk '{print $1}')") -if fs.access(CACHE_MD5_FILE) then - for line in io.lines(CACHE_MD5_FILE) do - cache_md5 = line +local cache_text = "" +local new_text = TMP_DNSMASQ_PATH .. DNSMASQ_CONF_FILE .. DEFAULT_DNS .. LOCAL_DNS .. TUN_DNS .. REMOTE_FAKEDNS .. CHINADNS_DNS .. PROXY_MODE .. NO_PROXY_IPV6 +if fs.access(CACHE_TEXT_FILE) then + for line in io.lines(CACHE_TEXT_FILE) do + cache_text = line end end -if cache_md5 ~= md5 then - sys.call("rm -rf " .. CACHE_PATH .. "/" .. CACHE_FLAG .. "*") +if cache_text ~= new_text then + api.remove(CACHE_DNS_PATH .. "*") end local global = PROXY_MODE:find("global") @@ -409,11 +408,15 @@ if not fs.access(CACHE_DNS_PATH) then server_out:close() ipset_out:close() - local f_out = io.open(CACHE_MD5_FILE, "a") - f_out:write(md5) + local f_out = io.open(CACHE_TEXT_FILE, "a") + f_out:write(new_text) f_out:close() end -fs.symlink(CACHE_DNS_PATH, TMP_DNSMASQ_PATH) +if api.is_install("procd\\-ujail") then + fs.copyr(CACHE_DNS_PATH, TMP_DNSMASQ_PATH) +else + fs.symlink(CACHE_DNS_PATH, TMP_DNSMASQ_PATH) +end local conf_out = io.open(DNSMASQ_CONF_FILE, "a") conf_out:write(string.format("conf-dir=%s\n", TMP_DNSMASQ_PATH)) if dnsmasq_default_dns then diff --git a/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua b/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua index 35d860f40..39e0213e2 100644 --- a/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua +++ b/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua @@ -11,11 +11,12 @@ local TCP_NODE = var["-TCP_NODE"] local PROXY_MODE = var["-PROXY_MODE"] local NO_PROXY_IPV6 = var["-NO_PROXY_IPV6"] local NO_LOGIC_LOG = var["-NO_LOGIC_LOG"] -local LOG_FILE = "/tmp/log/passwall.log" -local CACHE_PATH = "/tmp/etc/passwall_tmp" +local LOG_FILE = api.LOG_FILE +local CACHE_PATH = api.CACHE_PATH local CACHE_FLAG = "dns_" .. FLAG -local CACHE_DNS_FILE = CACHE_PATH .. "/" .. CACHE_FLAG .. ".conf" -local CACHE_MD5_FILE = CACHE_PATH .. "/" .. CACHE_FLAG .. ".md5" +local CACHE_DNS_PATH = CACHE_PATH .. "/" .. CACHE_FLAG +local CACHE_DNS_FILE = CACHE_DNS_PATH .. ".conf" +local CACHE_TEXT_FILE = CACHE_DNS_PATH .. ".txt" local SMARTDNS_PATH = "/tmp/etc/smartdns" local uci = api.uci @@ -143,17 +144,16 @@ local function check_excluded_domain(domain) return false end -local cache_md5 = "" -local str = SMARTDNS_CONF .. LOCAL_GROUP .. REMOTE_GROUP .. REMOTE_FAKEDNS .. TUN_DNS .. PROXY_MODE .. NO_PROXY_IPV6 -local md5 = luci.sys.exec("echo -n $(echo '" .. str .. "' | md5sum | awk '{print $1}')") -if fs.access(CACHE_MD5_FILE) then - for line in io.lines(CACHE_MD5_FILE) do - cache_md5 = line +local cache_text = "" +local new_text = SMARTDNS_CONF .. LOCAL_GROUP .. REMOTE_GROUP .. REMOTE_FAKEDNS .. TUN_DNS .. PROXY_MODE .. NO_PROXY_IPV6 +if fs.access(CACHE_TEXT_FILE) then + for line in io.lines(CACHE_TEXT_FILE) do + cache_text = line end end -if cache_md5 ~= md5 then - sys.call("rm -rf " .. CACHE_PATH .. "/" .. CACHE_FLAG .. "*") +if cache_text ~= new_text then + api.remove(CACHE_DNS_PATH .. "*") end local global = PROXY_MODE:find("global") @@ -385,8 +385,8 @@ if not fs.access(CACHE_DNS_FILE) then end f_out:close() - f_out = io.open(CACHE_MD5_FILE, "a") - f_out:write(md5) + f_out = io.open(CACHE_TEXT_FILE, "a") + f_out:write(new_text) f_out:close() end fs.symlink(CACHE_DNS_FILE, SMARTDNS_CONF)