1 # 2 # CDDL HEADER START 3 # 4 # The contents of this file are subject to the terms of the 5 # Common Development and Distribution License (the "License"). 6 # You may not use this file except in compliance with the License. 7 # 8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 # or http://www.opensolaris.org/os/licensing. 10 # See the License for the specific language governing permissions 11 # and limitations under the License. 12 # 13 # When distributing Covered Code, include this CDDL HEADER in each 14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 # If applicable, add the following below this CDDL HEADER, with the 16 # fields enclosed by brackets "[]" replaced with your own identifying 17 # information: Portions Copyright [yyyy] [name of copyright owner] 18 # 19 # CDDL HEADER END 20 # 21 22 # 23 # Copyright 2006 Sun Microsystems, Inc. All rights reserved. 24 # Use is subject to license terms. 25 # 26 27 script() 28 { 29 $dtrace -wq -o $tmpfile -s /dev/stdin 2> $errfile <<EOF 30 BEGIN 31 { 32 /* 33 * All of these should fail... 34 */ 35 freopen(".."); 36 freopen("%s", "."); 37 freopen("%c%c", '.', '.'); 38 freopen("%c", '.'); 39 40 /* 41 * ...so stdout should still be open here. 42 */ 43 printf("%d", ++i); 44 45 freopen("%s%s", ".", "."); 46 freopen("%s%s", ".", "."); 47 48 printf("%d", ++i); 49 } 50 51 BEGIN 52 /i == 2/ 53 { 54 /* 55 * ...and here. 56 */ 57 printf("%d\n", ++i); 58 exit(0); 59 } 60 61 BEGIN 62 { 63 exit(1); 64 } 65 EOF 66 } 67 68 if [ $# != 1 ]; then 69 echo expected one argument: '<'dtrace-path'>' 70 exit 2 71 fi 72 73 dtrace=$1 74 tmpfile=/tmp/tst.badfreopen.$$ 75 errfile=/tmp/tst.badfreopen.$$.stderr 76 77 script 78 status=$? 79 80 if [ "$status" -eq 0 ]; then 81 i=`cat $tmpfile` 82 83 if [[ $i != "123" ]]; then 84 echo "$0: unexpected contents in $tmpfile: " \ 85 "expected 123, found $i" 86 status=100 87 fi 88 89 i=`wc -l $errfile | /usr/xpg4/bin/awk '{ print $1 }'` 90 91 if [ "$i" -lt 6 ]; then 92 echo "$0: expected at least 6 lines of stderr, found $i lines" 93 status=101 94 fi 95 else 96 cat $errfile > /dev/fd/2 97 fi 98 99 rm $tmpfile $errfile 100 101 exit $status