mirror of
https://github.com/juewuy/ShellCrash.git
synced 2024-11-16 11:42:18 +08:00
Merge branch 'master' into dev
# Conflicts: # bin/version
This commit is contained in:
commit
c742a58677
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -4,5 +4,4 @@ clash_v=v1.7.1
|
|||
meta_v=v1.18.0
|
||||
singboxp_v=1.8.5-73d97226
|
||||
singbox_v=1.8.5
|
||||
versionsh=1.9.0pre11
|
||||
GeoIP_v=20240224
|
||||
versionsh=1.9.0pre12
|
|
@ -4,7 +4,7 @@
|
|||
102#$CRASHDIR/start.sh stop#停止clash服务
|
||||
103#$CRASHDIR/start.sh restart#重启clash服务
|
||||
104#$CRASHDIR/start.sh update_config#更新订阅并重启服务
|
||||
105#$CRASHDIR/start.sh hotupdate#热更新订阅
|
||||
105#$CRASHDIR/start.sh hotupdate#热更新订阅(不推荐)
|
||||
106#$CRASHDIR/start.sh web_save#自动保存面板配置
|
||||
107#$CRASHDIR/task/task.sh ntp#自动同步ntp时间
|
||||
|
||||
|
|
|
@ -9,11 +9,12 @@ ruleset=国内直连流量,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/mas
|
|||
ruleset=国内直连流量,[]GEOIP,CN
|
||||
ruleset=普通外网流量,[]FINAL
|
||||
|
||||
custom_proxy_group=922南北美`select`[]🇺🇲 美国自动`[]🇺🇲 美国手动`[]🇸🇬 新加坡自动`[]🇸🇬 新加坡手动`[]🇭🇰 香港自动`[]🇭🇰 香港手动`[]所有节点手选
|
||||
custom_proxy_group=922东南亚`select`[]🇸🇬 新加坡自动`[]🇸🇬 新加坡手动`[]🇨🇳 台湾自动`[]🇨🇳 台湾手动`[]🇭🇰 香港自动`[]🇭🇰 香港手动`[]所有节点手选
|
||||
custom_proxy_group=922南北美`select`[]🇺🇲 美国自动`[]🇺🇲 美国均衡`[]🇺🇲 美国手动`[]🇸🇬 新加坡自动`[]🇸🇬 新加坡均衡`[]🇸🇬 新加坡手动`[]🇭🇰 香港自动`[]🇭🇰 香港均衡`[]🇭🇰 香港手动`[]所有节点手选
|
||||
custom_proxy_group=922东南亚`select`[]🇸🇬 新加坡自动`[]🇸🇬 新加坡均衡`[]🇸🇬 新加坡手动`[]🇨🇳 台湾自动`[]🇨🇳 台湾均衡`[]🇨🇳 台湾手动`[]🇭🇰 香港自动`[]🇭🇰 香港均衡`[]🇭🇰 香港手动`[]所有节点手选
|
||||
custom_proxy_group=IP验证专用`select`.*
|
||||
custom_proxy_group=922未知地址`select`[]🇨🇳 台湾自动`[]🇨🇳 台湾手动`[]🇭🇰 香港自动`[]🇭🇰 香港手动`[]🇸🇬 新加坡自动`[]🇸🇬 新加坡手动`[]🇺🇲 美国自动`[]🇺🇲 美国手动`[]所有节点手选
|
||||
custom_proxy_group=abc全球节点`select`[]🇨🇳 台湾自动`[]🇨🇳 台湾手动`[]🇭🇰 香港自动`[]🇭🇰 香港手动`[]🇸🇬 新加坡自动`[]🇸🇬 新加坡手动`[]🇺🇲 美国自动`[]🇺🇲 美国手动`[]所有节点手选
|
||||
custom_proxy_group=922未知地址`select`[]🇨🇳 台湾自动`[]🇨🇳 台湾均衡`[]🇨🇳 台湾手动`[]🇭🇰 香港自动`[]🇭🇰 香港均衡`[]🇭🇰 香港手动`[]🇸🇬 新加坡自动`[]🇸🇬 新加坡均衡`[]🇸🇬 新加坡手动`[]🇺🇲 美国自动`[]🇺🇲 美国均衡`[]🇺🇲 美国手动`[]所有节点手选
|
||||
custom_proxy_group=abc全球节点`select`[]🇨🇳 台湾自动`[]🇨🇳 台湾均衡`[]🇨🇳 台湾手动`[]🇭🇰 香港自动`[]🇭🇰 香港均衡`[]🇭🇰 香港手动`[]🇸🇬 新加坡自动`[]🇸🇬 新加坡均衡`[]🇸🇬 新加坡手动`[]🇺🇲 美国自动`[]🇺🇲 美国均衡`[]🇺🇲 美国手动`[]所有节点手选
|
||||
custom_proxy_group=PIA全球节点`select`[]🇨🇳 台湾自动`[]🇨🇳 台湾均衡`[]🇨🇳 台湾手动`[]🇭🇰 香港自动`[]🇭🇰 香港均衡`[]🇭🇰 香港手动`[]🇸🇬 新加坡自动`[]🇸🇬 新加坡均衡`[]🇸🇬 新加坡手动`[]🇺🇲 美国自动`[]🇺🇲 美国均衡`[]🇺🇲 美国手动`[]所有节点手选
|
||||
|
||||
custom_proxy_group=🇭🇰 香港手动`select`(港|HK|🇭🇰|Hong Kong)
|
||||
custom_proxy_group=🇺🇲 美国手动`select`(美|波特兰|达拉斯|俄勒冈|凤凰城|费利蒙|硅谷|拉斯维加斯|洛杉矶|圣何塞|圣克拉拉|西雅图|芝加哥|US|United States|🇺🇲)
|
||||
|
@ -21,15 +22,21 @@ custom_proxy_group=🇨🇳 台湾手动`select`(台|新北|彰化|TW|Taiwan)
|
|||
custom_proxy_group=🇸🇬 新加坡手动`select`(新加坡|坡|狮城|广新|SG|Singapore|🇸🇬)
|
||||
custom_proxy_group=所有节点手选`select`.*
|
||||
|
||||
custom_proxy_group=普通外网流量`select`[]🇭🇰 香港自动`[]🇨🇳 台湾自动`[]🇸🇬 新加坡自动`[]🇺🇲 美国自动`[]所有节点自动`[]所有节点手选`[]DIRECT
|
||||
custom_proxy_group=普通外网流量`select`[]🇭🇰 香港自动`[]🇨🇳 台湾自动`[]🇸🇬 新加坡自动`[]🇺🇲 美国自动`[]dler-AC`[]所有节点自动`[]所有节点手选`[]DIRECT
|
||||
custom_proxy_group=国内直连流量`select`[]DIRECT`[]所有节点自动`[]所有节点手选
|
||||
|
||||
custom_proxy_group=🇭🇰 香港自动`url-test`(港|HK|Hong Kong)`https://www.gstatic.com/generate_204`300,,50
|
||||
custom_proxy_group=🇺🇲 美国自动`url-test`(美|波特兰|达拉斯|俄勒冈|凤凰城|费利蒙|硅谷|拉斯维加斯|洛杉矶|圣何塞|圣克拉拉|西雅图|芝加哥|US|United States)`http://www.gstatic.com/generate_204`300,,150
|
||||
custom_proxy_group=🇨🇳 台湾自动`url-test`(台|新北|彰化|TW|Taiwan)`https://www.gstatic.com/generate_204`300,,50
|
||||
custom_proxy_group=🇸🇬 新加坡自动`url-test`(新加坡|坡|狮城|SG|Singapore)`https://www.gstatic.com/generate_204`300,,50
|
||||
custom_proxy_group=dler-AC`url-test`(AC)`https://www.gstatic.com/generate_204`300,,50
|
||||
custom_proxy_group=所有节点自动`url-test`.*`https://www.gstatic.com/generate_204`300,,50
|
||||
|
||||
custom_proxy_group=🇭🇰 香港均衡`load-balance`(香港 0)`https://www.gstatic.com/generate_204`300,,50
|
||||
custom_proxy_group=🇺🇲 美国均衡`load-balance`(美国 0)`http://www.gstatic.com/generate_204`300,,150
|
||||
custom_proxy_group=🇨🇳 台湾均衡`load-balance`(台湾 0)`https://www.gstatic.com/generate_204`300,,50
|
||||
custom_proxy_group=🇸🇬 新加坡均衡`load-balance`(新加坡 0)`https://www.gstatic.com/generate_204`300,,50
|
||||
|
||||
enable_rule_generator=true
|
||||
overwrite_original_rules=true
|
||||
|
||||
|
|
|
@ -1406,7 +1406,7 @@ setcore(){ #内核选择菜单
|
|||
echo -e "2 \033[43;30m SingBox \033[0m: \033[32m支持全面占用低\033[0m"
|
||||
echo -e " >>\033[32m$singbox_v \033[33m不支持providers\033[0m"
|
||||
echo -e " 说明文档: \033[36;4mhttps://sing-box.sagernet.org\033[0m"
|
||||
echo -e "3 \033[43;30m Mihomo \033[0m: \033[32m多功能,支持全面\033[0m"
|
||||
echo -e "3 \033[43;30m Meta \033[0m: \033[32m多功能,支持全面\033[0m"
|
||||
echo -e " >>\033[32m$meta_v \033[33m内存占用较高\033[0m"
|
||||
echo -e " 说明文档: \033[36;4mhttps://wiki.metacubex.one\033[0m"
|
||||
echo -e "4 \033[43;30m SingBoxP \033[0m: \033[32m支持ssr、providers、dns并发……\033[0m"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/sh
|
||||
# Copyright (C) Juewuy
|
||||
|
||||
version=1.9.0pre11
|
||||
version=1.9.0pre12
|
||||
|
||||
setdir(){
|
||||
dir_avail(){
|
||||
|
@ -279,6 +279,8 @@ done
|
|||
#配置文件改名
|
||||
mv -f ${CRASHDIR}/mark ${CRASHDIR}/configs/ShellCrash.cfg 2>/dev/null
|
||||
mv -f ${CRASHDIR}/configs/ShellClash.cfg ${CRASHDIR}/configs/ShellCrash.cfg 2>/dev/null
|
||||
#数据库改名
|
||||
mv -f ${CRASHDIR}/geosite.dat ${CRASHDIR}/GeoSite.dat 2>/dev/null
|
||||
#内核改名
|
||||
mv -f ${CRASHDIR}/clash ${CRASHDIR}/CrashCore 2>/dev/null
|
||||
#内核压缩
|
||||
|
|
|
@ -1133,7 +1133,7 @@ normal_set(){ #基础设置
|
|||
echo -e "\033[36m已设为 $redir_mod !!\033[0m"
|
||||
}
|
||||
[ -n "$(iptables -j TPROXY 2>&1 | grep 'on-port')" ] && sup_tp=1
|
||||
[ -n "$(ls /dev/net/tun)" ] || ip tuntap >/dev/null 2>&1 && sup_tun=1
|
||||
[ -n "$(ls /dev/net/tun 2>/dev/null)" ] || ip tuntap >/dev/null 2>&1 && sup_tun=1
|
||||
nft add table inet shellcrash 2>/dev/null && sup_nft=1 && modprobe nft_tproxy >/dev/null 2>&1 && sup_nft=2
|
||||
echo -----------------------------------------------
|
||||
echo -e "当前代理模式为:\033[47;30m $redir_mod \033[0m;ShellCrash核心为:\033[47;30m $crashcore \033[0m"
|
||||
|
@ -1227,10 +1227,13 @@ normal_set(){ #基础设置
|
|||
echo -----------------------------------------------
|
||||
echo -e " 1 fake-ip模式: \033[32m响应速度更快\033[0m"
|
||||
echo -e " 不支持绕过CN-IP功能"
|
||||
echo -e " 2 redir_host模式:\033[32m兼容性更好\033[0m"
|
||||
echo -e " 需搭配加密DNS使用"
|
||||
echo -e " 3 mix混合模式: \033[32m内部realip外部fakeip\033[0m"
|
||||
echo -e " 依赖geosite-cn.(db/srs)数据库"
|
||||
if [ "$crashcore" = singbox -o "$crashcore" = singboxp ];then
|
||||
echo -e " 3 mix混合模式: \033[32m内部realip外部fakeip\033[0m"
|
||||
echo -e " 依赖geosite-cn.(db/srs)数据库"
|
||||
else
|
||||
echo -e " 2 redir_host模式:\033[32m兼容性更好\033[0m"
|
||||
echo -e " 需搭配加密DNS使用"
|
||||
fi
|
||||
echo " 0 返回上级菜单"
|
||||
read -p "请输入对应数字 > " num
|
||||
if [ -z "$num" ]; then
|
||||
|
@ -1474,11 +1477,7 @@ advanced_set(){ #进阶设置
|
|||
1)
|
||||
setipv6
|
||||
advanced_set
|
||||
;;
|
||||
2)
|
||||
setmeta
|
||||
advanced_set
|
||||
;;
|
||||
;;
|
||||
3)
|
||||
setfirewall
|
||||
advanced_set
|
||||
|
|
|
@ -181,7 +181,7 @@ mark_time(){ #时间戳
|
|||
getlanip(){ #获取局域网host地址
|
||||
i=1
|
||||
while [ "$i" -le "20" ];do
|
||||
host_ipv4=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'br' | grep -Ev 'iot|peer' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/br.*$//g' | sed 's/metric.*$//g' ) #ipv4局域网网段
|
||||
host_ipv4=$(ip a 2>&1 | grep -w 'inet' | grep 'global' | grep 'brd' | grep -Ev 'iot|peer' | grep -E ' 1(92|0|72)\.' | sed 's/.*inet.//g' | sed 's/br.*$//g' | sed 's/metric.*$//g' ) #ipv4局域网网段
|
||||
[ "$ipv6_redir" = "已开启" ] && host_ipv6=$(ip a 2>&1 | grep -w 'inet6' | grep -E 'global' | sed 's/.*inet6.//g' | sed 's/scope.*$//g' ) #ipv6公网地址段
|
||||
[ -f ${TMPDIR}/ShellCrash.log ] && break
|
||||
[ -n "$host_ipv4" -a "$ipv6_redir" != "已开启" ] && break
|
||||
|
@ -355,7 +355,7 @@ modify_yaml(){ #修饰clash配置文件
|
|||
cat > ${TMPDIR}/dns.yaml <<EOF
|
||||
dns:
|
||||
enable: true
|
||||
listen: 0.0.0.0:$dns_port
|
||||
listen: :$dns_port
|
||||
use-hosts: true
|
||||
ipv6: $dns_v6
|
||||
default-nameserver:
|
||||
|
@ -579,18 +579,21 @@ EOF
|
|||
[ -z "$dns_direct" ] && dns_direct='223.5.5.5'
|
||||
[ -z "$dns_proxy" ] && dns_proxy='1.0.0.1'
|
||||
[ "$ipv6_dns" = "已开启" ] && strategy='prefer_ipv4' || strategy='ipv4_only'
|
||||
[ "$dns_mod" = "redir_host" ] && final_dns=dns_direct && global_dns=dns_proxy
|
||||
[ "$dns_mod" = "redir_host" ] && {
|
||||
global_dns=dns_proxy
|
||||
direct_dns="{ \"query_type\": [ \"A\", \"AAAA\" ], \"server\": \"dns_direct\" },"
|
||||
}
|
||||
[ "$dns_mod" = "fake-ip" ] && {
|
||||
final_dns=dns_fakeip && global_dns=dns_fakeip
|
||||
global_dns=dns_fakeip
|
||||
fake_ip_filter=$(cat ${CRASHDIR}/configs/fake_ip_filter ${CRASHDIR}/configs/fake_ip_filter.list 2>/dev/null | grep '\.' | awk '{printf "\"%s\", ",$1}' | sed "s/, $//" | sed 's/+/.+/g' | sed 's/*/.*/g')
|
||||
[ -n "$fake_ip_filter" ] && fake_ip_filter="{ \"domain_regex\": [$fake_ip_filter], \"server\": \"local\" },"
|
||||
[ -n "$fake_ip_filter" ] && fake_ip_filter="{ \"domain_regex\": [$fake_ip_filter], \"server\": \"dns_direct\" },"
|
||||
}
|
||||
[ "$dns_mod" = "mix" ] && {
|
||||
final_dns=dns_direct && global_dns=dns_fakeip
|
||||
global_dns=dns_fakeip
|
||||
fake_ip_filter=$(cat ${CRASHDIR}/configs/fake_ip_filter 2>/dev/null | grep '\.' | awk '{printf "\"%s\", ",$1}' | sed "s/, $//" | sed 's/+/.+/g' | sed 's/*/.*/g')
|
||||
[ -n "$fake_ip_filter" ] && fake_ip_filter="{ \"domain_regex\": [$fake_ip_filter], \"server\": \"local\" },"
|
||||
[ -n "$fake_ip_filter" ] && fake_ip_filter="{ \"domain_regex\": [$fake_ip_filter], \"server\": \"dns_direct\" },"
|
||||
if [ -z "$(echo "$core_v" | grep -E '^1\.7.*')" ];then
|
||||
mix_dns="{ \"rule_set\": [\"geosite-cn\"], \"invert\": true, \"server\": \"dns_fakeip\", \"rewrite_ttl\": 1 },"
|
||||
direct_dns="{ \"rule_set\": [\"geosite-cn\"], \"server\": \"dns_direct\" },"
|
||||
#生成add_rule_set.json
|
||||
[ -z "$(cat ${CRASHDIR}/jsons/*.json | grep -Ei '\"tag\" *: *\"geosite-cn\"')" ] && cat > ${TMPDIR}/jsons/add_rule_set.json <<EOF
|
||||
{
|
||||
|
@ -607,7 +610,7 @@ EOF
|
|||
}
|
||||
EOF
|
||||
else
|
||||
mix_dns="{ \"geosite\": [\"geolocation-cn\"], \"invert\": true, \"server\": \"dns_fakeip\", \"rewrite_ttl\": 1 },"
|
||||
direct_dns="{ \"geosite\": \"geolocation-cn\", \"server\": \"dns_direct\" },"
|
||||
fi
|
||||
}
|
||||
cat > ${TMPDIR}/jsons/dns.json <<EOF
|
||||
|
@ -618,26 +621,25 @@ EOF
|
|||
"tag": "dns_proxy",
|
||||
"address": "$dns_proxy",
|
||||
"strategy": "$strategy",
|
||||
"address_resolver": "dns_resolver"
|
||||
"address_resolver": "local"
|
||||
}, {
|
||||
"tag": "dns_direct",
|
||||
"address": "$dns_direct",
|
||||
"strategy": "$strategy",
|
||||
"address_resolver": "dns_resolver",
|
||||
"address_resolver": "local",
|
||||
"detour": "DIRECT"
|
||||
},
|
||||
{ "tag": "dns_fakeip", "address": "fakeip" },
|
||||
{ "tag": "dns_resolver", "address": "223.5.5.5", "detour": "DIRECT" },
|
||||
{ "tag": "block", "address": "rcode://success" },
|
||||
{ "tag": "local", "address": "local", "detour": "DIRECT" }
|
||||
{ "tag": "local", "address": "local" },
|
||||
{ "tag": "block", "address": "rcode://success" }
|
||||
],
|
||||
"rules": [
|
||||
{ "outbound": ["any"], "server": "dns_resolver" },
|
||||
{ "outbound": ["any"], "server": "dns_direct" },
|
||||
{ "clash_mode": "Global", "server": "$global_dns", "rewrite_ttl": 1 },
|
||||
{ "clash_mode": "Direct", "server": "dns_direct" },
|
||||
$fake_ip_filter
|
||||
$mix_dns
|
||||
{ "query_type": [ "A", "AAAA" ], "server": "$final_dns" }
|
||||
$direct_dns
|
||||
{ "query_type": [ "A", "AAAA" ], "server": "dns_fakeip", "rewrite_ttl": 1 }
|
||||
],
|
||||
"final": "dns_direct",
|
||||
"independent_cache": true,
|
||||
|
@ -682,7 +684,7 @@ EOF
|
|||
{
|
||||
"type": "mixed",
|
||||
"tag": "mixed-in",
|
||||
"listen": "0.0.0.0",
|
||||
"listen": "::",
|
||||
"listen_port": $mix_port,
|
||||
$userpass
|
||||
"sniff": false
|
||||
|
@ -755,7 +757,7 @@ EOF
|
|||
}
|
||||
EOF
|
||||
#生成自定义规则文件
|
||||
[ -s ${CRASHDIR}/yamls/rules.yaml ] && {
|
||||
[ -n "$(grep -Ev ^# ${CRASHDIR}/yamls/rules.yaml 2>/dev/null)" ] && {
|
||||
cat ${CRASHDIR}/yamls/rules.yaml \
|
||||
| sed '/#.*/d' \
|
||||
| grep -oE '\-.*,.*,.*' \
|
||||
|
@ -773,6 +775,7 @@ EOF
|
|||
| sed 's/$/" },/g' \
|
||||
| sed '1i\{ "route": { "rules": [ ' \
|
||||
| sed '$s/,$/ ] } }/' > ${TMPDIR}/jsons/cust_add_rules.json
|
||||
[ ! -s ${TMPDIR}/jsons/cust_add_rules.json ] && rm -rf ${TMPDIR}/jsons/cust_add_rules.json
|
||||
}
|
||||
#提取配置文件以获得outbounds.json,outbound_providers.json及route.json
|
||||
${TMPDIR}/CrashCore format -c $core_config > ${TMPDIR}/format.json
|
||||
|
@ -1415,7 +1418,7 @@ web_save(){ #最小化保存面板节点选择
|
|||
done < ${TMPDIR}/web_proxies
|
||||
rm -rf ${TMPDIR}/web_proxies
|
||||
#获取面板设置
|
||||
[ "$crashcore" != singbox ] && get_save http://127.0.0.1:${db_port}/configs > ${TMPDIR}/web_configs
|
||||
#[ "$crashcore" != singbox ] && get_save http://127.0.0.1:${db_port}/configs > ${TMPDIR}/web_configs
|
||||
#对比文件,如果有变动且不为空则写入磁盘,否则清除缓存
|
||||
for file in web_save web_configs ;do
|
||||
if [ -s ${TMPDIR}/${file} ];then
|
||||
|
@ -1448,10 +1451,10 @@ web_restore(){ #还原面板选择
|
|||
done
|
||||
}
|
||||
#还原面板设置
|
||||
[ "$crashcore" != singbox ] && [ -s ${CRASHDIR}/configs/web_configs ] && {
|
||||
sleep 5
|
||||
put_save http://127.0.0.1:${db_port}/configs "$(cat ${CRASHDIR}/configs/web_configs)" PATCH
|
||||
}
|
||||
#[ "$crashcore" != singbox ] && [ -s ${CRASHDIR}/configs/web_configs ] && {
|
||||
#sleep 5
|
||||
#put_save http://127.0.0.1:${db_port}/configs "$(cat ${CRASHDIR}/configs/web_configs)" PATCH
|
||||
#}
|
||||
}
|
||||
}
|
||||
makehtml(){ #生成面板跳转文件
|
||||
|
@ -1577,7 +1580,7 @@ clash_check(){ #clash启动前检查
|
|||
#预下载GeoIP数据库
|
||||
[ -n "$(cat ${CRASHDIR}/yamls/*.yaml | grep -oEi 'geoip')" ] && ckgeo Country.mmdb cn_mini.mmdb
|
||||
#预下载GeoSite数据库
|
||||
[ -n "$(cat ${CRASHDIR}/yamls/*.yaml | grep -oEi 'geosite')" ] && ckgeo GeoSite.dat GeoSite.dat
|
||||
[ -n "$(cat ${CRASHDIR}/yamls/*.yaml | grep -oEi 'geosite')" ] && ckgeo GeoSite.dat geosite.dat
|
||||
return 0
|
||||
}
|
||||
singbox_check(){ #singbox启动前检查
|
||||
|
@ -1747,7 +1750,7 @@ start_error(){ #启动报错
|
|||
${COMMAND} >${TMPDIR}/core_test.log 2>&1 &
|
||||
sleep 2 ; kill $! >/dev/null 2>&1
|
||||
fi
|
||||
error=$(cat $TMPDIR/core_test.log | grep -Eo 'error.*=.*|.*ERROR.*|.*FATAL.*')
|
||||
error=$(cat $TMPDIR/core_test.log | grep -iEo 'error.*=.*|.*ERROR.*|.*FATAL.*')
|
||||
logger "服务启动失败!请查看报错信息!详细信息请查看$TMPDIR/core_test.log" 33
|
||||
logger "$error" 31
|
||||
exit 1
|
||||
|
|
Loading…
Reference in New Issue
Block a user