1*b0f673c4SBryan Cantrill#
2*b0f673c4SBryan Cantrill# CDDL HEADER START
3*b0f673c4SBryan Cantrill#
4*b0f673c4SBryan Cantrill# The contents of this file are subject to the terms of the
5*b0f673c4SBryan Cantrill# Common Development and Distribution License (the "License").
6*b0f673c4SBryan Cantrill# You may not use this file except in compliance with the License.
7*b0f673c4SBryan Cantrill#
8*b0f673c4SBryan Cantrill# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*b0f673c4SBryan Cantrill# or http://www.opensolaris.org/os/licensing.
10*b0f673c4SBryan Cantrill# See the License for the specific language governing permissions
11*b0f673c4SBryan Cantrill# and limitations under the License.
12*b0f673c4SBryan Cantrill#
13*b0f673c4SBryan Cantrill# When distributing Covered Code, include this CDDL HEADER in each
14*b0f673c4SBryan Cantrill# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*b0f673c4SBryan Cantrill# If applicable, add the following below this CDDL HEADER, with the
16*b0f673c4SBryan Cantrill# fields enclosed by brackets "[]" replaced with your own identifying
17*b0f673c4SBryan Cantrill# information: Portions Copyright [yyyy] [name of copyright owner]
18*b0f673c4SBryan Cantrill#
19*b0f673c4SBryan Cantrill# CDDL HEADER END
20*b0f673c4SBryan Cantrill#
21*b0f673c4SBryan Cantrill
22*b0f673c4SBryan Cantrill#
23*b0f673c4SBryan Cantrill# Copyright (c) 2012, Joyent, Inc. All rights reserved.
24*b0f673c4SBryan Cantrill#
25*b0f673c4SBryan Cantrill
26*b0f673c4SBryan Cantrilltmpin=/tmp/tst.fds.$$.d
27*b0f673c4SBryan Cantrilltmpout1=/tmp/tst.fds.$$.out1
28*b0f673c4SBryan Cantrilltmpout2=/tmp/tst.fds.$$.out2
29*b0f673c4SBryan Cantrill
30*b0f673c4SBryan Cantrillcat > $tmpin <<EOF
31*b0f673c4SBryan Cantrill#define DUMPFIELD(fd, fmt, field) \
32*b0f673c4SBryan Cantrill	errmsg = "could not dump field"; \
33*b0f673c4SBryan Cantrill	printf("%d: field =fmt\n", fd, fds[fd].field);
34*b0f673c4SBryan Cantrill
35*b0f673c4SBryan Cantrill/*
36*b0f673c4SBryan Cantrill * Note that we are explicitly not looking at fi_mount -- it (by design) does
37*b0f673c4SBryan Cantrill * not work if not running with kernel permissions.
38*b0f673c4SBryan Cantrill */
39*b0f673c4SBryan Cantrill#define DUMP(fd)	\
40*b0f673c4SBryan Cantrill	DUMPFIELD(fd, %s, fi_name); \
41*b0f673c4SBryan Cantrill	DUMPFIELD(fd, %s, fi_dirname); \
42*b0f673c4SBryan Cantrill	DUMPFIELD(fd, %s, fi_pathname); \
43*b0f673c4SBryan Cantrill	DUMPFIELD(fd, %d, fi_offset); \
44*b0f673c4SBryan Cantrill	DUMPFIELD(fd, %s, fi_fs); \
45*b0f673c4SBryan Cantrill	DUMPFIELD(fd, %o, fi_oflags);
46*b0f673c4SBryan Cantrill
47*b0f673c4SBryan CantrillBEGIN
48*b0f673c4SBryan Cantrill{
49*b0f673c4SBryan Cantrill	DUMP(0);
50*b0f673c4SBryan Cantrill	DUMP(1);
51*b0f673c4SBryan Cantrill	DUMP(2);
52*b0f673c4SBryan Cantrill	DUMP(3);
53*b0f673c4SBryan Cantrill	DUMP(4);
54*b0f673c4SBryan Cantrill	exit(0);
55*b0f673c4SBryan Cantrill}
56*b0f673c4SBryan Cantrill
57*b0f673c4SBryan CantrillERROR
58*b0f673c4SBryan Cantrill{
59*b0f673c4SBryan Cantrill	printf("error: %s\n", errmsg);
60*b0f673c4SBryan Cantrill	exit(1);
61*b0f673c4SBryan Cantrill}
62*b0f673c4SBryan CantrillEOF
63*b0f673c4SBryan Cantrill
64*b0f673c4SBryan Cantrill#
65*b0f673c4SBryan Cantrill# First, with all privs
66*b0f673c4SBryan Cantrill#
67*b0f673c4SBryan Cantrill/usr/sbin/dtrace -q -Cs /dev/stdin < $tmpin > $tmpout2
68*b0f673c4SBryan Cantrillmv $tmpout2 $tmpout1
69*b0f673c4SBryan Cantrill
70*b0f673c4SBryan Cantrill#
71*b0f673c4SBryan Cantrill# And now with only dtrace_proc and dtrace_user -- the output should be
72*b0f673c4SBryan Cantrill# identical.
73*b0f673c4SBryan Cantrill#
74*b0f673c4SBryan Cantrillppriv -s A=basic,dtrace_proc,dtrace_user $$
75*b0f673c4SBryan Cantrill
76*b0f673c4SBryan Cantrill/usr/sbin/dtrace -q -Cs /dev/stdin < $tmpin > $tmpout2
77*b0f673c4SBryan Cantrill
78*b0f673c4SBryan Cantrillecho ">>> $tmpout1"
79*b0f673c4SBryan Cantrillcat $tmpout1
80*b0f673c4SBryan Cantrill
81*b0f673c4SBryan Cantrillecho ">>> $tmpout2"
82*b0f673c4SBryan Cantrillcat $tmpout2
83*b0f673c4SBryan Cantrill
84*b0f673c4SBryan Cantrillrval=0
85*b0f673c4SBryan Cantrill
86*b0f673c4SBryan Cantrillif ! cmp $tmpout1 $tmpout2 ; then
87*b0f673c4SBryan Cantrill	rval=1
88*b0f673c4SBryan Cantrillfi
89*b0f673c4SBryan Cantrill
90*b0f673c4SBryan Cantrillrm $tmpout1 $tmpout2 $tmpin
91*b0f673c4SBryan Cantrillexit $rval
92