b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# CDDL HEADER START
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# The contents of this file are subject to the terms of the
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# Common Development and Distribution License (the "License").
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# You may not use this file except in compliance with the License.
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# or http://www.opensolaris.org/os/licensing.
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# See the License for the specific language governing permissions
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# and limitations under the License.
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# When distributing Covered Code, include this CDDL HEADER in each
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# If applicable, add the following below this CDDL HEADER, with the
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# fields enclosed by brackets "[]" replaced with your own identifying
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# information: Portions Copyright [yyyy] [name of copyright owner]
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# CDDL HEADER END
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# Copyright (c) 2012, Joyent, Inc. All rights reserved.
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrilltmpin=/tmp/tst.fds.$$.d
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrilltmpout1=/tmp/tst.fds.$$.out1
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrilltmpout2=/tmp/tst.fds.$$.out2
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillcat > $tmpin <<EOF
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#define DUMPFIELD(fd, fmt, field) \
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill errmsg = "could not dump field"; \
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill printf("%d: field =fmt\n", fd, fds[fd].field);
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill/*
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill * Note that we are explicitly not looking at fi_mount -- it (by design) does
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill * not work if not running with kernel permissions.
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill */
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#define DUMP(fd) \
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill DUMPFIELD(fd, %s, fi_name); \
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill DUMPFIELD(fd, %s, fi_dirname); \
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill DUMPFIELD(fd, %s, fi_pathname); \
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill DUMPFIELD(fd, %d, fi_offset); \
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill DUMPFIELD(fd, %s, fi_fs); \
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill DUMPFIELD(fd, %o, fi_oflags);
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan CantrillBEGIN
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill{
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill DUMP(0);
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill DUMP(1);
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill DUMP(2);
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill DUMP(3);
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill DUMP(4);
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill exit(0);
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill}
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan CantrillERROR
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill{
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill printf("error: %s\n", errmsg);
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill exit(1);
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill}
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan CantrillEOF
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# First, with all privs
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill/usr/sbin/dtrace -q -Cs /dev/stdin < $tmpin > $tmpout2
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillmv $tmpout2 $tmpout1
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# And now with only dtrace_proc and dtrace_user -- the output should be
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill# identical.
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill#
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillppriv -s A=basic,dtrace_proc,dtrace_user $$
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill/usr/sbin/dtrace -q -Cs /dev/stdin < $tmpin > $tmpout2
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillecho ">>> $tmpout1"
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillcat $tmpout1
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillecho ">>> $tmpout2"
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillcat $tmpout2
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillrval=0
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillif ! cmp $tmpout1 $tmpout2 ; then
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill rval=1
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillfi
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrill
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillrm $tmpout1 $tmpout2 $tmpin
b0f673c4626e4cb1db7785287eaeed2731dfefe8Bryan Cantrillexit $rval