@@ -117,8 +117,19 @@ get_iface_addr() {
117117
118118resolve_host () {
119119 host=" $1 "
120- dig +short " ${host} " | grep ' ^[.0-9]*$' | sort
121- return $?
120+ # Check if it's already an IP address using ipcalc
121+ if ! ipcalc -n -b " ${host} " 2>&1 | grep -qi " INVALID ADDRESS" ; then
122+ echo " ${host} "
123+ return 0
124+ fi
125+ # Otherwise, resolve via DNS
126+ resolved=$( dig a +short " ${host} " | head -1)
127+ if [ -z " ${resolved} " ]; then
128+ # DNS resolution failed, return empty
129+ return 1
130+ fi
131+ echo " ${resolved} "
132+ return 0
122133}
123134
124135HUB_IP_CHECK_TS=
@@ -229,7 +240,7 @@ get_proxy_address() {
229240 echo " ${proxy} " | sed ' s|^.*@||'
230241}
231242
232- get_proxy_host_from_address () {
243+ extract_host_from_proxy_address () {
233244 local address=" $1 "
234245 # Remove protocol if present
235246 address=$( echo " ${address} " | sed -r ' s|^https?://||' )
@@ -264,6 +275,11 @@ get_proxy_port() {
264275start_udp_over_tcp_tunnel () {
265276 local_udp_port=" $1 "
266277 remote_ip=$( resolve_host " $2 " )
278+ if [ -z " ${remote_ip} " ]; then
279+ echo " Failed to resolve host: $2 " >&2
280+ echo " -1"
281+ return 1
282+ fi
267283 remote_tcp_port=" $3 "
268284 setpriv --reuid=tcptun --regid=tcptun --clear-groups --no-new-privs \
269285 nohup /usr/local/bin/udp2tcp --tcp-forward " ${remote_ip} " :" ${remote_tcp_port} " --udp-listen 127.0.0.1:${local_udp_port} > /dev/null &
@@ -288,8 +304,8 @@ create_moproxy_config() {
288304 user=$( get_proxy_username)
289305 password=$( get_proxy_password)
290306 address=$( get_proxy_address)
291- host=$( get_proxy_host_from_address " ${address} " )
292- ipaddr=$( dig +short " ${host} " || echo " " )
307+ host=$( extract_host_from_proxy_address " ${address} " )
308+ ipaddr=$( resolve_host " ${host} " || echo " " )
293309 ipaddr=$( test ! -z " ${ipaddr} " && echo " ${ipaddr} " || echo " ${host} " )
294310 port=$( get_proxy_port " ${address} " )
295311 auth=$( test ! -z " ${user} " && printf " http username = %s\nhttp password = %s\n" " ${user} " " ${password} " || echo " " )
@@ -316,7 +332,7 @@ set_proxy_redirect_rules() {
316332 done
317333 # Do not redirect traffic to the proxy itself
318334 proxy_addr=$( get_proxy_address)
319- proxy_host=$( get_proxy_host_from_address " ${proxy_addr} " )
335+ proxy_host=$( extract_host_from_proxy_address " ${proxy_addr} " )
320336 ${IPT_CMD} -t nat -A PROXY-REDIRECT -d " ${proxy_host} " -j RETURN
321337
322338 ${IPT_CMD} -t nat -A PROXY-REDIRECT -p tcp -j REDIRECT --to-port " ${proxy_port} "
@@ -409,24 +425,27 @@ start_userspace_agent() {
409425}
410426
411427scrub_secrets () {
412- local text=" ${1} "
413- local temp_file=$( mktemp)
414- echo " ${text} " > " ${temp_file} "
415-
416- for secret in FARCASTER_AGENT_TOKEN HTTP_PROXY HTTPS_PROXY SOCKS5_PROXY; do
417- # Word boundary: (^|[^A-Za-z0-9_])
418- sed -i -E \
419- -e " s/(^|[^A-Za-z0-9_])${secret} [[:space:]]*=[[:space:]]*([^[:space:]\" ']+)/\1${secret} =********/g" \
420- -e " s/(^|[^A-Za-z0-9_])${secret} [[:space:]]*=[[:space:]]*\" ([^\" ]*)\" /\1${secret} =\" ********\" /g" \
421- -e " s/(^|[^A-Za-z0-9_])${secret} [[:space:]]*=[[:space:]]*'([^']*)'/\1${secret} ='********'/g" \
422- " ${temp_file} "
428+ local text=" $1 "
429+ shift # Remove first argument, leaving only secrets
430+
431+ local result=" $text "
432+
433+ # Replace each secret value with asterisks
434+ for secret in " $@ " ; do
435+ # Skip empty values
436+ [ -z " $secret " ] && continue
437+
438+ # Escape special regex characters in the secret
439+ local escaped_secret=$( printf ' %s\n' " $secret " | sed ' s/[[\.*^$()+?{|]/\\&/g' )
440+
441+ # Replace all occurrences of the secret with asterisks
442+ result=$( echo " $result " | sed " s/${escaped_secret} /*******/g" )
423443 done
424444
425- cat " ${temp_file} "
426- rm -f " ${temp_file} "
445+ echo " $result "
427446}
428447
429- function print_log () {
448+ function dump_log () {
430449 set +e
431450 echo
432451 echo
@@ -438,8 +457,14 @@ function print_log() {
438457 local content
439458 local scrubbed
440459 content=$( cat " ${log_file} " 2> /dev/null)
441- scrubbed=$( scrub_secrets " ${content} " 2> /dev/null)
442- echo " ${scrubbed} " > " ${log_file} "
460+ # Ensure the log file is removed.
461+ rm -f " ${log_file} "
462+ scrubbed=$( scrub_secrets " ${content} " \
463+ " ${FARCASTER_AGENT_TOKEN:- } " \
464+ " ${HTTP_PROXY:- } " \
465+ " ${HTTPS_PROXY:- } " \
466+ " ${SOCKS5_PROXY:- } " )
467+ echo " ${scrubbed} "
443468 fi
444469
445470 echo
@@ -452,6 +477,7 @@ function print_log() {
452477 echo
453478 echo " ===================================================================="
454479 echo
480+
455481 sleep 120
456482}
457483
0 commit comments