Skip to content

Commit

Permalink
Merge pull request thuantran#445 from thuantran/dev
Browse files Browse the repository at this point in the history
Dev-v2.5.3
  • Loading branch information
jumpsmm7 authored Dec 30, 2023
2 parents bc4cdfd + ca237ea commit a8a361f
Show file tree
Hide file tree
Showing 4 changed files with 849 additions and 816 deletions.
167 changes: 85 additions & 82 deletions gen/manager
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/sh

[ -f /jffs/dnscrypt/.config ] && . /jffs/dnscrypt/.config
[ -f "/jffs/dnscrypt/.config" ] && . /jffs/dnscrypt/.config

NAME="$(basename "$0")[$$]"

Expand All @@ -9,8 +9,8 @@ append_on_demand() {
TARGET="$1"
shift
for LINE in "$@"; do
if ! grep -qF "$LINE" "$TARGET"; then
printf "%s\n" "$LINE" >>"$TARGET"
if ! grep -qF "${LINE}" "${TARGET}"; then
printf "%s\n" "${LINE}" >>"${TARGET}"
fi
done
}
Expand All @@ -26,15 +26,15 @@ check_dns_environment() {
{ killall -q -9 stubby 2>/dev/null; }
NVCHECK="$((NVCHECK + 1))"
fi
if [ "$(nvram get dhcp_dns1_x)" ] && [ "$NVCHECK" != "0" ]; then
if [ "$(nvram get dhcp_dns1_x)" ] && [ "${NVCHECK}" != "0" ]; then
{ nvram set dhcp_dns1_x=""; }
NVCHECK="$((NVCHECK + 1))"
fi
if [ "$(nvram get dhcp_dns2_x)" ] && [ "$NVCHECK" != "0" ]; then
if [ "$(nvram get dhcp_dns2_x)" ] && [ "${NVCHECK}" != "0" ]; then
{ nvram set dhcp_dns2_x=""; }
NVCHECK="$((NVCHECK + 1))"
fi
if [ "$(nvram get dhcpd_dns_router)" != "1" ] && [ "$NVCHECK" != "0" ]; then
if [ "$(nvram get dhcpd_dns_router)" != "1" ] && [ "${NVCHECK}" != "0" ]; then
{ nvram set dhcpd_dns_router="1"; }
NVCHECK="$((NVCHECK + 1))"
fi
Expand All @@ -51,27 +51,27 @@ dnscrypt_proxy_run() {
pid_file="${lock_dir}/pid"
case "$1" in
"")
if [ -z "$(sed -n '2p' $pid_file)" ]; then return 1; else return 0; fi
if [ -z "$(sed -n '2p' ${pid_file})" ]; then return 1; else return 0; fi
;;
*)
if (mkdir ${lock_dir}) 2>/dev/null || { [ -e "${pid_file}" ] && [ -n "$(sed -n '2p' $pid_file)" ]; } || { [ "$1" = "stop_dnscrypt_proxy" ]; }; then
if (mkdir ${lock_dir}) 2>/dev/null || { [ -e "${pid_file}" ] && [ -n "$(sed -n '2p' ${pid_file})" ]; } || { [ "$1" = "stop_dnscrypt_proxy" ]; }; then
(
trap 'rm -rf "$lock_dir"; exit $?' EXIT
trap 'rm -rf "${lock_dir}"; exit $?' EXIT
{ service_wait dnscrypt_proxy_run; }
rm -rf "$lock_dir"
rm -rf "${lock_dir}"
) &
pid="$!"
{
printf "%s\n" "$pid" >$pid_file
printf "%s\n" "${pid}" >${pid_file}
start="$(date +%s)"
{ service_wait "$1" 30; }
end="$(date +%s)"
runtime="$((end - start))"
printf "%s\n" "$runtime" >>$pid_file
logger -st "$NAME" "$1 took $runtime second(s) to complete."
printf "%s\n" "${runtime}" >>${pid_file}
logger -st "${NAME}" "$1 took ${runtime} second(s) to complete."
}
else
logger -st "$NAME" "Lock owned by $(sed -n '1p' $pid_file) exists; preventing duplicate runs!"
logger -st "${NAME}" "Lock owned by $(sed -n '1p' ${pid_file}) exists; preventing duplicate runs!"
fi
;;
esac
Expand All @@ -85,59 +85,61 @@ dnsmasq_params() {
append_on_demand /etc/dnsmasq.conf "no-resolv"
append_on_demand /jffs/dnscrypt/resolv.dnsmasq "server=127.0.1.1"
for DNS in $(nvram get wan_dns) $(nvram get wan0_dns) $(nvram get wan1_dns) $(nvram get wan_dns1_x) $(nvram get wan_dns2_x) $(nvram get wan0_dns1_x) $(nvram get wan0_dns2_x) $(nvram get wan1_dns1_x) $(nvram get wan1_dns2_x) $(nvram get wan0_xdns) $(nvram get wan1_xdns) $(nvram get ipv6_get_dns); do
sed -i "/^server=$DNS.*$/d" /jffs/dnscrypt/resolv.dnsmasq
sed -i "/^server=${DNS}.*$/d" /jffs/dnscrypt/resolv.dnsmasq
done
for VAR in 1 2 3; do
DNS="$(nvram get "ipv6_dns$VAR")"
[ -n "$DNS" ] && sed -i "/^server=$DNS.*$/d" /jffs/dnscrypt/resolv.dnsmasq
DNS="$(nvram get "ipv6_dns${VAR}")"
[ -n "${DNS}" ] && sed -i "/^server=${DNS}.*$/d" /jffs/dnscrypt/resolv.dnsmasq
done
sed -i "/^servers-file=.*$/d" /etc/dnsmasq.conf
append_on_demand /etc/dnsmasq.conf "servers-file=/jffs/dnscrypt/resolv.dnsmasq"
if { ! readlink -f /etc/resolv.conf | grep -qE ^'/rom/etc/resolv.conf' && [ "$DNSCRYPT_LOCAL" = "YES" ]; }; then { mount -o bind /rom/etc/resolv.conf /tmp/resolv.conf; }; fi
if { ! readlink -f /etc/resolv.conf | grep -qE ^'/rom/etc/resolv.conf' && [ "${DNSCRYPT_LOCAL}" = "YES" ]; }; then { mount -o bind /rom/etc/resolv.conf /tmp/resolv.conf; }; fi
fi
}

init_hwrng() {
local COUNT
COUNT="0"
while [ ! -c "$RNG_DEV" ]; do
if [ "$COUNT" -gt 120 ]; then
logger -st "$NAME" "ERROR: Unable to find HWRNG device. Aborting..."
while [ ! -c "${RNG_DEV}" ]; do
if [ "${COUNT}" -gt 120 ]; then
logger -st "${NAME}" "ERROR: Unable to find HWRNG device. Aborting..."
if [ -f "/jffs/dnscrypt/haveged" ]; then
{ /jffs/dnscrypt/haveged -w 1024 -d 32 -i 32 -v 1; }
logger -st "$NAME" "Haveged: Using available haveged instead..."
logger -st "${NAME}" "Haveged: Using available haveged instead..."
fi
return 1
fi
COUNT="$((COUNT + 1))"
sleep 1
sleep 1s
done
{ /jffs/dnscrypt/stty raw -echo -ixoff -F "$RNG_DEV" speed 115200; }
{ /jffs/dnscrypt/rngd -r "$RNG_DEV"; }
{ /jffs/dnscrypt/stty raw -echo -ixoff -F "${RNG_DEV}" speed 115200; }
{ /jffs/dnscrypt/rngd -r "${RNG_DEV}"; }
if [ "$?" -eq "0" ]; then
logger -st "$NAME" "rngd: Started for $RNG_DEV"
logger -st "${NAME}" "rngd: Started for ${RNG_DEV}"
return 0
fi
}

netcheck() {
local ALIVE
if { [ "$(/bin/date -u +"%Y")" -gt "1970" ] || [ "$(/bin/date -u '+%s')" -ge "$(/bin/date -u -r "$0" '+%s')" ]; }; then ALIVE="0"; else ALIVE="1"; fi
if { [ "$(
ping 1.1.1.1 -c1 -W2 >/dev/null 2>&1
printf "%s" "$?"
)" = "0" ] && [ "$(
nslookup google.com 127.0.0.1 >/dev/null 2>&1
printf "%s" "$?"
)" = "0" ]; }; then ALIVE="0"; else ALIVE="$((ALIVE + 1))"; fi
if { [ "$(
curl -Is http://www.google.com | head -n 1 >/dev/null 2>&1
printf "%s" "$?"
)" = "0" ] || [ "$(
wget -q --spider http://google.com >/dev/null 2>&1
printf "%s" "$?"
)" = "0" ]; }; then ALIVE="0"; else ALIVE="$((ALIVE + 1))"; fi
if [ "$ALIVE" -ne "0" ]; then return 1; else return 0; fi
local livecheck="0" i
until { [ "$(/bin/date -u +"%Y")" -gt "1970" ] || [ "$(/bin/date -u '+%s')" -ge "$(/bin/date -u -r "$0" '+%s')" ]; } && [ "$(nvram get ntp_ready)" -gt 0 ]; do sleep 1s; done
while [ "${livecheck}" != "4" ]; do
for i in google.com github.com snbforums.com; do
if { ! nslookup "${i}" 127.0.0.1 >/dev/null 2>&1; } && { ping -q -w3 -c1 "${i}" >/dev/null 2>&1; }; then
if { ! curl --retry 3 --connect-timeout 3 --retry-delay 1 --max-time $((3 * 5)) --retry-connrefused -Is "http://${i}" | head -n 1 >/dev/null 2>&1; } || { ! wget --no-cache --no-cookies --tries=3 --timeout=3 --waitretry=1 --retry-connrefused -q --spider "http://${i}" >/dev/null 2>&1; }; then
sleep 1s
continue
fi
fi
return 0
done
livecheck="$((livecheck + 1))"
if [ "${livecheck}" != "4" ]; then
sleep 10s
continue
fi
return 1
done
}

proc_optimizations() {
Expand Down Expand Up @@ -179,29 +181,30 @@ service_wait() {
local maxwait i
maxwait="300"
i="0"
while [ "$i" -le "$maxwait" ]; do
while [ "${i}" -le "${maxwait}" ]; do
if [ "$(nvram get success_start_service)" = '1' ] && { "$1"; }; then break; fi
sleep 10
sleep 10s
i="$((i + OPT))"
done
}
{
trap - HUP INT QUIT ABRT TERM TSTP
if [ "$i" -gt "$maxwait" ]; then return 1; else return 0; fi
if [ "${i}" -gt "${maxwait}" ]; then return 1; else return 0; fi
}
) &
local PID="$!"
wait $PID
wait "${PID}"
return "$?"
}

start_dnscrypt_proxy() {
local DNSCRYPT_START
local DNSCRYPT_START LOG_FACILITY
{ cd /jffs/dnscrypt; } || exit
if [ "$(grep -cE '^# use_syslog = true' /jffs/dnscrypt/dnscrypt-proxy.toml)" = "1" ] && [ "$(grep -cE '^# log_file =' /jffs/dnscrypt/dnscrypt-proxy.toml)" = "5" ]; then LOG_FACILITY="-syslog"; fi
{ killall -s 9 "$(pidof dnscrypt-proxy)" 2>/dev/null || killall -q -9 dnscrypt-proxy 2>/dev/null; }
DNSCRYPT_START="/jffs/dnscrypt/dnscrypt-proxy -syslog -config /jffs/dnscrypt/dnscrypt-proxy.toml"
logger -st "$NAME" "Starting dnscrypt-proxy from $NAME."
{ nohup $DNSCRYPT_START >/dev/null 2>&1 </dev/null & }
DNSCRYPT_START="/jffs/dnscrypt/dnscrypt-proxy ${LOG_FACILITY} -config /jffs/dnscrypt/dnscrypt-proxy.toml"
logger -st "${NAME}" "Starting dnscrypt-proxy from ${NAME}."
{ nohup ${DNSCRYPT_START} >/dev/null 2>&1 </dev/null & }
if ! grep -qF "servers-file=/jffs/dnscrypt/resolv.dnsmasq" "/etc/dnsmasq.conf"; then { service restart_dnsmasq >/dev/null 2>&1; }; fi
if [ -n "$(pidof dnscrypt-proxy)" ] && { service_wait netcheck 300; }; then return "0"; else return "1"; fi
}
Expand All @@ -214,25 +217,25 @@ start_monitor() {
local COUNT EXIT RANDOM
EXIT="0"
RANDOM="0"
logger -st "$NAME" "Starting Monitor!"
logger -st "${NAME}" "Starting Monitor!"
while true; do
if [ -f "/jffs/dnscrypt/dnscrypt-proxy" ]; then
case $EXIT in
case "${EXIT}" in
"0")
timezone
case $RANDOM in
case "${RANDOM}" in
"4320")
RANDOM="0"
if [ -n "$COUNT" ]; then
logger -st "$NAME" "Randomization: Health Check; Monitor will randomize it!"
if [ -n "${COUNT}" ]; then
logger -st "${NAME}" "Randomization: Health Check; Monitor will randomize it!"
unset COUNT
fi
;;
*)
if [ -z "$COUNT" ]; then RANDOM="0"; else RANDOM="$((RANDOM + 1))"; fi
if [ -z "${COUNT}" ]; then RANDOM="0"; else RANDOM="$((RANDOM + 1))"; fi
;;
esac
case "$COUNT" in
case "${COUNT}" in
"")
COUNT="0"
"$0" opendns-update
Expand All @@ -241,16 +244,16 @@ start_monitor() {
esac
case "$(pidof dnscrypt-proxy)" in
"")
logger -st "$NAME" "Warning: dnscrypt-proxy is dead; Monitor will start it!"
logger -st "${NAME}" "Warning: dnscrypt-proxy is dead; Monitor will start it!"
unset COUNT
;;
*)
case $COUNT in
case "${COUNT}" in
"30" | "60" | "90")
"$0" opendns-update
if [ "$COUNT" = "90" ]; then COUNT="0"; else COUNT="$((COUNT + 1))"; fi
if [ "${COUNT}" = "90" ]; then COUNT="0"; else COUNT="$((COUNT + 1))"; fi
if { ! service_wait netcheck 150; }; then
logger -st "$NAME" "Warning: dnscrypt-proxy is not responding; Monitor will re-start it!"
logger -st "${NAME}" "Warning: dnscrypt-proxy is not responding; Monitor will re-start it!"
unset COUNT
fi
;;
Expand All @@ -260,16 +263,16 @@ start_monitor() {
esac
;;
esac
if [ -n "$COUNT" ]; then sleep 10; fi
if [ -n "${COUNT}" ]; then sleep 10s; fi
;;
"1")
logger -st "$NAME" "Stopping Monitor!"
logger -st "${NAME}" "Stopping Monitor!"
trap - HUP INT QUIT ABRT USR1 USR2 TERM
{ dnscrypt_proxy_run stop_dnscrypt_proxy; }
break
;;
"2")
logger -st "$NAME" "Monitor is restarting dnscrypt-proxy!"
logger -st "${NAME}" "Monitor is restarting dnscrypt-proxy!"
unset COUNT
EXIT="0"
;;
Expand All @@ -280,7 +283,7 @@ start_monitor() {

stop_dnscrypt_proxy() {
{ cd /jffs/dnscrypt; } || exit
logger -st "$NAME" "Stopping dnscrypt-proxy from $NAME."
logger -st "${NAME}" "Stopping dnscrypt-proxy from ${NAME}."
{ killall -s 9 "$(pidof dnscrypt-proxy)" 2>/dev/null || killall -q -9 dnscrypt-proxy 2>/dev/null; }
if grep -qF "servers-file=/jffs/dnscrypt/resolv.dnsmasq" "/etc/dnsmasq.conf"; then { service restart_dnsmasq >/dev/null 2>&1; }; fi
if [ -z "$(pidof dnscrypt-proxy)" ] && { service_wait netcheck 300; }; then return 0; else return 1; fi
Expand All @@ -289,39 +292,39 @@ stop_dnscrypt_proxy() {
stop_monitor() {
local SIGNAL
case "$1" in
"$MON_PID")
"${MON_PID}")
SIGNAL="12"
;;
"$$")
if [ -n "$MON_PID" ]; then SIGNAL="10"; else { dnscrypt_proxy_run stop_dnscrypt_proxy; }; fi
if [ -n "${MON_PID}" ]; then SIGNAL="10"; else { dnscrypt_proxy_run stop_dnscrypt_proxy; }; fi
;;
esac
[ -n "$SIGNAL" ] && { kill -s "$SIGNAL" "$MON_PID" 2>/dev/null; }
[ -n "${SIGNAL}" ] && { kill -s "${SIGNAL}" "${MON_PID}" 2>/dev/null; }
}

timezone() {
local TIMEZONE TARGET
TIMEZONE="/jffs/dnscrypt/localtime"
TARGET="/etc/localtime"
if { [ ! -f "$TARGET" ] && [ -f "$TIMEZONE" ]; }; then { ln -sf "$TIMEZONE" "$TARGET"; }; fi
if [ -f "$TARGET" ] || [ "$(readlink "$TARGET")" ]; then { if [ "$(/bin/date -u '+%s')" -le "$(/bin/date -u -r "$0" '+%s')" ]; then { /bin/date -u -s "$(/bin/date -u -r "$0" '+%Y-%m-%d %H:%M:%S')"; }; else { touch "$0"; }; fi; }; fi
if { [ ! -f "${TARGET}" ] && [ -f "${TIMEZONE}" ]; }; then { ln -sf "${TIMEZONE}" "${TARGET}"; }; fi
if [ -f "${TARGET}" ] || [ "$(readlink "${TARGET}")" ]; then { if [ "$(/bin/date -u '+%s')" -le "$(/bin/date -u -r "$0" '+%s')" ]; then { /bin/date -u -s "$(/bin/date -u -r "$0" '+%Y-%m-%d %H:%M:%S')"; }; else { touch "$0"; }; fi; }; fi
}

update_opendns() {
if [ -z "$OPENDNS_USER" ] || [ -z "$OPENDNS_PASSWORD" ] || [ "$1" -gt 2 ]; then
if [ -z "${OPENDNS_USER}" ] || [ -z "${OPENDNS_PASSWORD}" ] || [ "$1" -gt 2 ]; then
return
fi
sleep 5
RET="$(curl -k -s -u "$OPENDNS_USER:$OPENDNS_PASSWORD" "https://updates.opendns.com/nic/update?hostname=")"
case "$RET" in
sleep 5s
RET="$(curl -k -s -u "${OPENDNS_USER}:${OPENDNS_PASSWORD}" "https://updates.opendns.com/nic/update?hostname=")"
case "${RET}" in
good*)
logger -st "$NAME" "OpenDNS: Update IP succeeded"
logger -st "${NAME}" "OpenDNS: Update IP succeeded"
;;
badauth*)
logger -st "$NAME" "OpenDNS: Wrong username or password"
logger -st "${NAME}" "OpenDNS: Wrong username or password"
;;
*)
logger -st "$NAME" "OpenDNS: Received error $RET"
logger -st "${NAME}" "OpenDNS: Received error ${RET}"
update_opendns "$(($1 + 1))"
;;
esac
Expand All @@ -331,7 +334,7 @@ if { [ "$2" != "x" ] && printf "%s" "$1" | /bin/grep -qE "^(((dnscrypt-)?(start|
service "$1"_dnscrypt-proxy >/dev/null 2>&1
exit
}; fi
{ for PID in $(pidof "$(basename "$0")"); do if { awk '{ print }' "/proc/${PID}/cmdline" | grep -q monitor-start; } && [ "$PID" != "$$" ]; then { MON_PID="$PID"; }; fi; done; }
{ for PID in $(pidof "$(basename "$0")"); do if { awk '{ print }' "/proc/${PID}/cmdline" | grep -q monitor-start; } && [ "${PID}" != "$$" ]; then { MON_PID="${PID}"; }; fi; done; }

unset TZ
case "$1" in
Expand All @@ -345,18 +348,18 @@ case "$1" in
{ "$0" services-stop >/dev/null 2>&1; }
;;
"monitor-start")
if [ -n "$MON_PID" ]; then { stop_monitor "$MON_PID"; }; else { start_monitor & } fi
if [ -n "${MON_PID}" ]; then { stop_monitor "${MON_PID}"; }; else { start_monitor & } fi
;;
"opendns-update")
{ update_opendns 0 & }
;;
"init-start" | "services-stop")
timezone
if [ -n "$RAN_PRV" ]; then { kill -s 9 "$(pidof haveged jitterentropy-rngd rngd stty)" 2>/dev/null || killall -q -9 haveged jitterentropy-rngd rngd stty 2>/dev/null; }; fi
if [ -n "${RAN_PRV}" ]; then { kill -s 9 "$(pidof haveged jitterentropy-rngd rngd stty)" 2>/dev/null || killall -q -9 haveged jitterentropy-rngd rngd stty 2>/dev/null; }; fi
case "$1" in
"init-start")
proc_optimizations
case "$RAN_PRV" in
case "${RAN_PRV}" in
"haveged")
{ /jffs/dnscrypt/haveged -w 1024 -d 32 -i 32 -v 1; }
;;
Expand Down
2 changes: 1 addition & 1 deletion gen/manager.md5sum
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2b6081bb96d7c6546ba0fec1f1abfc50
51a172498a7eaea3d70726972eab3109
Loading

0 comments on commit a8a361f

Please sign in to comment.