1 #!/bin/sh 2 # 3 # Ensure that strace does not retain stdin and stdout descriptors. 4 # 5 # Copyright (c) 2016 Dmitry V. Levin <ldv (at] altlinux.org> 6 # Copyright (c) 2016-2017 The strace developers. 7 # All rights reserved. 8 # 9 # Redistribution and use in source and binary forms, with or without 10 # modification, are permitted provided that the following conditions 11 # are met: 12 # 1. Redistributions of source code must retain the above copyright 13 # notice, this list of conditions and the following disclaimer. 14 # 2. Redistributions in binary form must reproduce the above copyright 15 # notice, this list of conditions and the following disclaimer in the 16 # documentation and/or other materials provided with the distribution. 17 # 3. The name of the author may not be used to endorse or promote products 18 # derived from this software without specific prior written permission. 19 # 20 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 24 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 29 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31 . "${srcdir=.}/init.sh" 32 33 run_prog_skip_if_failed \ 34 kill -0 $$ 35 36 check_prog sleep 37 check_prog yes 38 39 > "$OUT" 40 > "$LOG" 41 ( 42 while [ -f "$LOG" ]; do 43 : 44 done 45 $SLEEP_A_BIT & 46 yes 47 if kill -0 $! 2> /dev/null; then 48 wait 49 else 50 echo TIMEOUT >> "$OUT" 51 fi 52 ) | $STRACE -qq -enone -esignal=none \ 53 sh -c "exec <&- >&-; rm -f -- $LOG; $SLEEP_A_BIT; $SLEEP_A_BIT" 54 55 if [ -s "$OUT" ]; then 56 fail_ "$STRACE failed to redirect standard input" 57 fi 58 59 > "$LOG" 60 $STRACE -qq -enone -esignal=none \ 61 sh -c "exec <&- >&-; rm -f -- $LOG; $SLEEP_A_BIT; $SLEEP_A_BIT" | 62 ( 63 while [ -f "$LOG" ]; do 64 : 65 done 66 $SLEEP_A_BIT & 67 cat > /dev/null 68 if kill -0 $! 2> /dev/null; then 69 wait 70 else 71 echo TIMEOUT >> "$OUT" 72 fi 73 ) 74 75 if [ -s "$OUT" ]; then 76 fail_ "$STRACE failed to redirect standard output" 77 fi 78