luci: compatible ujail

This commit is contained in:
xiaorouji 2022-04-14 15:41:14 +08:00 committed by sbwml
parent 7206c464c0
commit addbeb0f8e
4 changed files with 50 additions and 30 deletions

View File

@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall PKG_NAME:=luci-app-passwall
PKG_VERSION:=4.53 PKG_VERSION:=4.53
PKG_RELEASE:=1 PKG_RELEASE:=2
PKG_CONFIG_DEPENDS:= \ PKG_CONFIG_DEPENDS:= \
CONFIG_PACKAGE_$(PKG_NAME)_Transparent_Proxy \ CONFIG_PACKAGE_$(PKG_NAME)_Transparent_Proxy \

View File

@ -14,6 +14,9 @@ command_timeout = 300
LEDE_BOARD = nil LEDE_BOARD = nil
DISTRIB_TARGET = nil DISTRIB_TARGET = nil
LOG_FILE = "/tmp/log/" .. appname .. ".log"
CACHE_PATH = "/tmp/etc/" .. appname .. "_tmp"
function base64Decode(text) function base64Decode(text)
local raw = text local raw = text
if not text then return '' end if not text then return '' end
@ -68,6 +71,21 @@ function repeat_exist(table, value)
return false return false
end 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) function get_args(arg)
local var = {} local var = {}
for i, arg_k in pairs(arg) do 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 return luci.sys.exec('type -t -p "/bin/%s" -p "%s" "%s"' % {e, get_customed_path(e), e}) ~= "" and true or false
end end
function clone(org) function clone(org)
local function copy(org, res) local function copy(org, res)
for k,v in pairs(org) do for k,v in pairs(org) do

View File

@ -13,11 +13,11 @@ local TCP_NODE = var["-TCP_NODE"]
local PROXY_MODE = var["-PROXY_MODE"] local PROXY_MODE = var["-PROXY_MODE"]
local NO_PROXY_IPV6 = var["-NO_PROXY_IPV6"] local NO_PROXY_IPV6 = var["-NO_PROXY_IPV6"]
local NO_LOGIC_LOG = var["-NO_LOGIC_LOG"] local NO_LOGIC_LOG = var["-NO_LOGIC_LOG"]
local LOG_FILE = "/tmp/log/passwall.log" local LOG_FILE = api.LOG_FILE
local CACHE_PATH = "/tmp/etc/passwall_tmp" local CACHE_PATH = api.CACHE_PATH
local CACHE_FLAG = "dns_" .. FLAG local CACHE_FLAG = "dns_" .. FLAG
local CACHE_DNS_PATH = CACHE_PATH .. "/" .. CACHE_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 uci = api.uci
local sys = api.sys local sys = api.sys
@ -163,17 +163,16 @@ end
local dnsmasq_default_dns local dnsmasq_default_dns
local cache_md5 = "" local cache_text = ""
local str = TMP_DNSMASQ_PATH .. DNSMASQ_CONF_FILE .. DEFAULT_DNS .. LOCAL_DNS .. TUN_DNS .. REMOTE_FAKEDNS .. CHINADNS_DNS .. PROXY_MODE .. NO_PROXY_IPV6 local new_text = 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_TEXT_FILE) then
if fs.access(CACHE_MD5_FILE) then for line in io.lines(CACHE_TEXT_FILE) do
for line in io.lines(CACHE_MD5_FILE) do cache_text = line
cache_md5 = line
end end
end end
if cache_md5 ~= md5 then if cache_text ~= new_text then
sys.call("rm -rf " .. CACHE_PATH .. "/" .. CACHE_FLAG .. "*") api.remove(CACHE_DNS_PATH .. "*")
end end
local global = PROXY_MODE:find("global") local global = PROXY_MODE:find("global")
@ -409,11 +408,15 @@ if not fs.access(CACHE_DNS_PATH) then
server_out:close() server_out:close()
ipset_out:close() ipset_out:close()
local f_out = io.open(CACHE_MD5_FILE, "a") local f_out = io.open(CACHE_TEXT_FILE, "a")
f_out:write(md5) f_out:write(new_text)
f_out:close() f_out:close()
end 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") local conf_out = io.open(DNSMASQ_CONF_FILE, "a")
conf_out:write(string.format("conf-dir=%s\n", TMP_DNSMASQ_PATH)) conf_out:write(string.format("conf-dir=%s\n", TMP_DNSMASQ_PATH))
if dnsmasq_default_dns then if dnsmasq_default_dns then

View File

@ -11,11 +11,12 @@ local TCP_NODE = var["-TCP_NODE"]
local PROXY_MODE = var["-PROXY_MODE"] local PROXY_MODE = var["-PROXY_MODE"]
local NO_PROXY_IPV6 = var["-NO_PROXY_IPV6"] local NO_PROXY_IPV6 = var["-NO_PROXY_IPV6"]
local NO_LOGIC_LOG = var["-NO_LOGIC_LOG"] local NO_LOGIC_LOG = var["-NO_LOGIC_LOG"]
local LOG_FILE = "/tmp/log/passwall.log" local LOG_FILE = api.LOG_FILE
local CACHE_PATH = "/tmp/etc/passwall_tmp" local CACHE_PATH = api.CACHE_PATH
local CACHE_FLAG = "dns_" .. FLAG local CACHE_FLAG = "dns_" .. FLAG
local CACHE_DNS_FILE = CACHE_PATH .. "/" .. CACHE_FLAG .. ".conf" local CACHE_DNS_PATH = CACHE_PATH .. "/" .. CACHE_FLAG
local CACHE_MD5_FILE = CACHE_PATH .. "/" .. CACHE_FLAG .. ".md5" local CACHE_DNS_FILE = CACHE_DNS_PATH .. ".conf"
local CACHE_TEXT_FILE = CACHE_DNS_PATH .. ".txt"
local SMARTDNS_PATH = "/tmp/etc/smartdns" local SMARTDNS_PATH = "/tmp/etc/smartdns"
local uci = api.uci local uci = api.uci
@ -143,17 +144,16 @@ local function check_excluded_domain(domain)
return false return false
end end
local cache_md5 = "" local cache_text = ""
local str = SMARTDNS_CONF .. LOCAL_GROUP .. REMOTE_GROUP .. REMOTE_FAKEDNS .. TUN_DNS .. PROXY_MODE .. NO_PROXY_IPV6 local new_text = 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_TEXT_FILE) then
if fs.access(CACHE_MD5_FILE) then for line in io.lines(CACHE_TEXT_FILE) do
for line in io.lines(CACHE_MD5_FILE) do cache_text = line
cache_md5 = line
end end
end end
if cache_md5 ~= md5 then if cache_text ~= new_text then
sys.call("rm -rf " .. CACHE_PATH .. "/" .. CACHE_FLAG .. "*") api.remove(CACHE_DNS_PATH .. "*")
end end
local global = PROXY_MODE:find("global") local global = PROXY_MODE:find("global")
@ -385,8 +385,8 @@ if not fs.access(CACHE_DNS_FILE) then
end end
f_out:close() f_out:close()
f_out = io.open(CACHE_MD5_FILE, "a") f_out = io.open(CACHE_TEXT_FILE, "a")
f_out:write(md5) f_out:write(new_text)
f_out:close() f_out:close()
end end
fs.symlink(CACHE_DNS_FILE, SMARTDNS_CONF) fs.symlink(CACHE_DNS_FILE, SMARTDNS_CONF)