diff --git a/CHANGES b/CHANGES index d3b8a64..2dfc706 100644 --- a/CHANGES +++ b/CHANGES @@ -1,7 +1,7 @@ Security: readline.sh has new option -lf <logfile> for stderr. If this option is - not given it logs to a file in . (cwd) only when it is not writable by + not given it logs to a file in . (cwd) only when . is not writable by other users. Corrections: @@ -172,6 +172,8 @@ Testing: UDPLITE4STREAM was trice, changed one of them to UDPLITE6STREAM. + Catch problems caused by ISPs that filter *.dest-unreach.net records. + Documentation: Removed obsolete CHANGES.ISO-8859-1 file. diff --git a/test.sh b/test.sh index 448f18e..62df2e8 100755 --- a/test.sh +++ b/test.sh @@ -93,6 +93,9 @@ while [ "$1" ]; do done debug=$DEBUG +# Applying patch 1.8.0.3 to 1.8.0.2 generates this non executably +[ -f ./socks5server-echo.sh ] && chmod a+x ./socks5server-echo.sh + [ "$DEFS" ] && echo "BASH_VERSION=\"$BASH_VERSION\"" >&2 [ "$DEFS" ] && echo "ECHO=\"$ECHO\"" >&2 @@ -259,12 +262,12 @@ fi # for some tests we need a network interface if type ip >/dev/null 2>&1; then - INTERFACE=$(ip r get 8.8.8.8 |grep ' dev ' |head -n 1 |sed "s/.*dev[[:space:]][[:space:]]*\([^[:space:]][^[:space:]]*\).*/\1/") + INTERFACE=$(ip r get 9.9.9.9 |grep ' dev ' |head -n 1 |sed "s/.*dev[[:space:]][[:space:]]*\([^[:space:]][^[:space:]]*\).*/\1/") else case "$UNAME" in Linux) if [ "$IP" ]; then - INTERFACE="$($IP route get 8.8.8.8 |grep ' dev ' |sed -e 's/.* dev //' -e 's/ .*//')" + INTERFACE="$($IP route get 9.9.9.9 |grep ' dev ' |sed -e 's/.* dev //' -e 's/ .*//')" else INTERFACE="$(netstat -rn |grep -e "^default" -e "^0\.0\.0\.0" |awk '{print($8);}')" fi ;; @@ -489,7 +492,7 @@ if2bc4() { case "$UNAME" in Linux) if [ "$IP" ]; then - BROADCASTIF=$($IP r get 8.8.8.8 |grep ' dev ' |sed 's/.*\<dev[[:space:]][[:space:]]*\([a-z0-9][a-z0-9]*\).*/\1/') + BROADCASTIF=$($IP r get 9.9.9.9 |grep ' dev ' |sed 's/.*\<dev[[:space:]][[:space:]]*\([a-z0-9][a-z0-9]*\).*/\1/') else BROADCASTIF=$(route -n |grep '^0.0.0.0 ' |awk '{print($8);}') fi @@ -2077,11 +2080,22 @@ case "$UNAME" in esac +HAVEDNS=1 if [ "$INTERNET" ]; then # No "-s 24" on Solaris - if ! ping -c 1 "server-4.dest-unreach.net" >/dev/null 2>&1; then - echo "$0: Option --internet but no connectivity or DNS" >&2 - #exit 1 + if ! ping -c 1 "9.9.9.9" >/dev/null 2>&1; then + echo "$0: Option --internet but no connectivity" >&2 + HAVEDNS= + elif type nslookup >/dev/null 2>&1; then + if ! nslookup server-4.dest-unreach.net. |grep '^Name:' >/dev/null 2>&1; then + echo "$0: Option --internet but broken DNS (cannot resolve server-4.dest-unreach.net)" >&2 + HAVEDNS= + fi + elif type host >/dev/null 2>&1; then + if ! host server-4.dest-unreach.net. |grep "has address" >/dev/null 2>&1; then + echo "$0: Option --internet but broken DNS (cannot resolve server-4.dest-unreach.net)" >&2 + HAVEDNS= + fi fi fi @@ -16227,12 +16241,6 @@ TEST="$NAME: try all available TCP4 addresses" # that is closed on both addresses. # The test succeeded when the log shows that Socat tried to connect two times. if ! eval $NUMCOND; then :; -elif ! $(type nslookup >/dev/null 2>&1); then - $PRINTF "test $F_n $TEST... ${YELLOW}nslookup not available${NORMAL}\n" $N - cant -#elif ! $(type nslookup >/dev/null 2>&1) && ! $(type host >/dev/null 2>&1); then -# $PRINTF "test $F_n $TEST... ${YELLOW}nslookup and host not available${NORMAL}\n" $N -# cant elif ! F=$(testfeats IP4 TCP GOPEN); then $PRINTF "test $F_n $TEST... ${YELLOW}Feature $F not available${NORMAL}\n" $N cant @@ -16245,16 +16253,14 @@ elif ! runsip4 >/dev/null; then elif [ -z "$INTERNET" ]; then $PRINTF "test $F_n $TEST... ${YELLOW}use test.sh option --internet${NORMAL}\n" $N cant +elif [ -z "$HAVEDNS" ]; then + $PRINTF "test $F_n $TEST... ${YELLOW}Broken DNS${NORMAL}\n" $N + cant else tf="$td/test$N.stdout" te="$td/test$N.stderr" tdiff="$td/test$N.diff" da="test$N $(date) $RANDOM" -if type nslookup >/dev/null 2>&1; then - ADDRS=$(nslookup server-4.dest-unreach.net. |sed -n '/^$/,$ p' |grep ^Address |awk '{print($2);}') -elif type host >/dev/null 2>&1; then - ADDRS=$(host server-4.dest-unreach.net. |sed 's/.*address //') -fi while true; do newport tcp4 OPEN= @@ -16302,9 +16308,6 @@ TEST="$NAME: for TCP try all available IPv4 and IPv6 addresses" # neither IPv4 nor IPv6 # Check the log if Socat tried both addresses if ! eval $NUMCOND; then :; -#elif ! $(type nslookup >/dev/null 2>&1) && ! $(type host >/dev/null 2>&1); then -# $PRINTF "test $F_n $TEST... ${YELLOW}nslookup and host not available${NORMAL}\n" $N -# cant elif ! F=$(testfeats IP4 IP6 TCP); then $PRINTF "test $F_n $TEST... ${YELLOW}Feature $F not available${NORMAL}\n" $N cant @@ -16320,9 +16323,12 @@ elif ! runsip4 >/dev/null; then elif ! runsip6 >/dev/null; then $PRINTF "test $F_n $TEST... ${YELLOW}IPv6 not available or not routable${NORMAL}\n" $N cant -elif [ -z "$INTERNET" ]; then # only needs Internet DNS +elif [ -z "$INTERNET" -a "$RES" != 'DEVTESTS' ]; then $PRINTF "test $F_n $TEST... ${YELLOW}use test.sh option --internet${NORMAL}\n" $N cant +elif [ -z "$HAVEDNS" ] && ! testfeats DEVTESTS >/dev/null; then + $PRINTF "test $F_n $TEST... ${YELLOW}Broken DNS${NORMAL}\n" $N + cant else tf="$td/test$N.stdout" te="$td/test$N.stderr" @@ -19565,6 +19571,7 @@ fi CNAME=$(echo $CADDR |tr - _) PROTO=$(toupper $proto) FEAT=$ADDR +addr=$(tolower $ADDR) runs=$proto case "$CPARMS" in PORT) newport $proto; CPARMS=$PORT ;; @@ -19582,7 +19589,7 @@ esac # Test if bind on *-CONNECT selects the matching IP version NAME=${CNAME}_BIND_6_4 case "$TESTS" in -*%$N%*|*%functions%*|*%$proto%*|*%${proto}4%*|*%${proto}6%*|*%ip4%*|*%ip6%*|*%listen%*|*%bind%*|*%socket%*|*%$NAME%*) +*%$N%*|*%functions%*|*%$addr%*|*%$proto%*|*%${proto}4%*|*%${proto}6%*|*%ip4%*|*%ip6%*|*%listen%*|*%bind%*|*%socket%*|*%$NAME%*) TEST="$NAME: $ADDR bind chooses matching IPv" # Have an IPv4 listener # Host name localhost-4-6.dest-unreach.net resolves to both 127.0.0.1 and [::1], @@ -19609,6 +19616,12 @@ elif ! cond=$(checkconds \ elif ! SOCAT_MAIN_WAIT= $SOCAT -h |grep -e '[[:space:]]-6[[:space:]]' >/dev/null; then $PRINTF "test $F_n $TEST... ${YELLOW}no option -0${NORMAL}\n" $N cant +elif [ -z "$INTERNET" -a "$RES" != 'DEVTESTS' ]; then + $PRINTF "test $F_n $TEST... ${YELLOW}use test.sh option --internet${NORMAL}\n" $N + cant +elif [ -z "$HAVEDNS" ] && ! testfeats DEVTESTS >/dev/null; then + $PRINTF "test $F_n $TEST... ${YELLOW}Broken DNS${NORMAL}\n" $N + cant else tf="$td/test$N.stdout" te="$td/test$N.stderr" @@ -19702,6 +19715,12 @@ elif ! cond=$(checkconds \ elif ! SOCAT_MAIN_WAIT= $SOCAT -h |grep -e '[[:space:]]-6[[:space:]]' >/dev/null; then $PRINTF "test $F_n $TEST... ${YELLOW}no option -0${NORMAL}\n" $N cant +elif [ -z "$INTERNET" -a "$RES" != 'DEVTESTS' ]; then + $PRINTF "test $F_n $TEST... ${YELLOW}use test.sh option --internet${NORMAL}\n" $N + cant +elif [ -z "$HAVEDNS" ] && ! testfeats DEVTESTS >/dev/null; then + $PRINTF "test $F_n $TEST... ${YELLOW}Broken DNS${NORMAL}\n" $N + cant else tf="$td/test$N.stdout" te="$td/test$N.stderr" @@ -19785,6 +19804,12 @@ elif ! cond=$(checkconds \ elif ! SOCAT_MAIN_WAIT= $SOCAT -h |grep -e '[[:space:]]-4[[:space:]]' >/dev/null; then $PRINTF "test $F_n $TEST... ${YELLOW}no option -0${NORMAL}\n" $N cant +elif [ -z "$INTERNET" -a "$RES" != 'DEVTESTS' ]; then + $PRINTF "test $F_n $TEST... ${YELLOW}use test.sh option --internet${NORMAL}\n" $N + cant +elif [ -z "$HAVEDNS" ] && ! testfeats DEVTESTS >/dev/null; then + $PRINTF "test $F_n $TEST... ${YELLOW}Broken DNS${NORMAL}\n" $N + cant else tf="$td/test$N.stdout" te="$td/test$N.stderr" @@ -19855,6 +19880,7 @@ fi CNAME=$(echo $CADDR |tr - _) PROTO=$(toupper $proto) FEAT=$ADDR +addr=$(tolower $ADDR) runs=$proto case "$CPARMS" in PORT) newport $proto; CPARMS=$PORT ;; @@ -19872,7 +19898,7 @@ esac # Test the retry option with *-CONNECT addresses NAME=${CNAME}_RETRY case "$TESTS" in -*%$N%*|*%functions%*|*%$proto%*|*%${proto}4%*|*%ip4%*|*%listen%*|*%socket%*|*%retry%*|*%$NAME%*) +*%$N%*|*%functions%*|*%$addr%*|*%$proto%*|*%${proto}4%*|*%ip4%*|*%listen%*|*%socket%*|*%retry%*|*%$NAME%*) TEST="$NAME: $ADDR can retry" # Have an IPv4 listener with delay # Start a connector whose first attempt must fail; check if the second attempt @@ -19973,6 +19999,7 @@ fi CNAME=$(echo $CADDR |tr - _) PROTO=$(toupper $proto) FEAT=$ADDR +addr=$(tolower $ADDR) runs=$proto case "$CPARMS" in PORT) newport $proto; CPARMS=$PORT ;; @@ -19990,7 +20017,7 @@ esac # Test the fork and max-children options with CONNECT addresses NAME=${CNAME}_MAXCHILDREN case "$TESTS" in -*%$N%*|*%functions%*|*%$proto%*|*%${proto}4%*|*%ip4%*|*%listen%*|*%socket%*|*%fork%*|*%maxchildren%*|*%$NAME%*) +*%$N%*|*%functions%*|*%$addr%*|*%$proto%*|*%${proto}4%*|*%ip4%*|*%listen%*|*%socket%*|*%fork%*|*%maxchildren%*|*%$NAME%*) TEST="$NAME: $ADDR with fork,max-children" # Start a reader process that transfers received data to an output file; # run a sending client that forks at most 2 parallel child processes that