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