mirror of
https://repo.or.cz/socat.git
synced 2025-07-27 21:15:37 +00:00
-r, -R now with CLOEXEC, and warn on write problems
This commit is contained in:
parent
eeeebe6cb2
commit
2dadc1010f
3 changed files with 131 additions and 37 deletions
64
test.sh
64
test.sh
|
@ -15963,7 +15963,16 @@ case "$TESTS" in
|
|||
TEST="$NAME: Socat does not leak FDs to EXEC'd program"
|
||||
# Run Socat with EXEC address, execute Filan to display its file descriptors
|
||||
# Test succeeds when only FDs 0, 1, 2 are in use.
|
||||
if ! eval $NUMCOND; then :; else
|
||||
if ! eval $NUMCOND; then :;
|
||||
elif ! a=$(testaddrs STDIO EXEC); then
|
||||
$PRINTF "test $F_n $TEST... ${YELLOW}Address $a not available${NORMAL}\n" $N
|
||||
numCANT=$((numCANT+1))
|
||||
listCANT="$listCANT $N"
|
||||
elif ! o=$(testoptions stderr) >/dev/null; then
|
||||
$PRINTF "test $F_n $TEST... ${YELLOW}Option $o not available${NORMAL}\n" $N
|
||||
numCANT=$((numCANT+1))
|
||||
listCANT="$listCANT $N"
|
||||
else
|
||||
tf="$td/test$N.stdout"
|
||||
te="$td/test$N.stderr"
|
||||
tdiff="$td/test$N.diff"
|
||||
|
@ -15974,15 +15983,60 @@ eval "$CMD" >"${tf}" 2>"${te}"
|
|||
# "door" is a special FD type on Solaris/SunOS
|
||||
if [ "$(cat "${tf}" |grep -v ' door ' |wc -l)" -eq 3 ]; then
|
||||
$PRINTF "$OK\n"
|
||||
if [ "$VERBOSE" ]; then
|
||||
echo "$CMD" >&2
|
||||
fi
|
||||
if [ "$VERBOSE" ]; then echo "$CMD"; fi
|
||||
if [ "$DEBUG" ]; then cat "${te}" >&2; fi
|
||||
numOK=$((numOK+1))
|
||||
else
|
||||
$PRINTF "$FAILED\n"
|
||||
echo "$CMD" >&2
|
||||
cat "${tf}" >&2
|
||||
cat "${te}" >&2
|
||||
cat "${tf}" >&2
|
||||
numFAIL=$((numFAIL+1))
|
||||
listFAIL="$listFAIL $N"
|
||||
fi
|
||||
fi # NUMCOND
|
||||
;;
|
||||
esac
|
||||
PORT=$((PORT+1))
|
||||
N=$((N+1))
|
||||
|
||||
# Test if Socat makes the sniffing file descriptos (-r, -R) CLOEXEC to not leak
|
||||
# them to EXEC'd program
|
||||
NAME=EXEC_SNIFF
|
||||
case "$TESTS" in
|
||||
*%$N%*|*%functions%*|*%bugs%*|*%socket%*|*%filan%*|*%$NAME%*)
|
||||
TEST="$NAME: Socat does not leak sniffing FDs"
|
||||
# Run Socat sniffing both directions, with EXEC address,
|
||||
# execute Filan to display its file descriptors
|
||||
# Test succeeds when only FDs 0, 1, 2 are in use.
|
||||
if ! eval $NUMCOND; then :;
|
||||
elif ! a=$(testaddrs STDIO EXEC); then
|
||||
$PRINTF "test $F_n $TEST... ${YELLOW}Address $a not available${NORMAL}\n" $N
|
||||
numCANT=$((numCANT+1))
|
||||
listCANT="$listCANT $N"
|
||||
elif ! o=$(testoptions stderr) >/dev/null; then
|
||||
$PRINTF "test $F_n $TEST... ${YELLOW}Option $o not available${NORMAL}\n" $N
|
||||
numCANT=$((numCANT+1))
|
||||
listCANT="$listCANT $N"
|
||||
else
|
||||
tf="$td/test$N.stdout"
|
||||
te="$td/test$N.stderr"
|
||||
tdiff="$td/test$N.diff"
|
||||
da="test$N $(date) $RANDOM"
|
||||
CMD="$TRACE $SOCAT $opts -r $td/test$N.-r -R $td/test$N.-R - EXEC:\"$FILAN -s\",stderr"
|
||||
printf "test $F_n $TEST... " $N
|
||||
eval "$CMD" >"${tf}" 2>"${te}"
|
||||
# "door" is a special FD type on Solaris/SunOS
|
||||
if [ "$(cat "${tf}" |grep -v ' door ' |wc -l)" -eq 3 ]; then
|
||||
$PRINTF "$OK\n"
|
||||
if [ "$VERBOSE" ]; then echo "$CMD"; fi
|
||||
if [ "$DEBUG" ]; then cat "${te}" >&2; fi
|
||||
numOK=$((numOK+1))
|
||||
else
|
||||
$PRINTF "$FAILED\n"
|
||||
echo "$CMD" >&2
|
||||
cat "${te}" >&2
|
||||
cat "${tf}" >&2
|
||||
numFAIL=$((numFAIL+1))
|
||||
listFAIL="$listFAIL $N"
|
||||
fi
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue