This file is indexed.

/usr/bin/fiu-run is in fiu-utils 0.95-3.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#!/usr/bin/env bash

# This script aims to make the use of the fiu_run_preload library a little
# easier by providing a more friendly user interface, and abstracting the
# environment variables used to communicate with it.

# default remote control over named pipes prefix
FIFO_PREFIX="${TMPDIR:-/tmp}/fiu-ctrl"

# default library path to look for preloader libraries
PLIBPATH="/usr/lib/fiu"

# the enable string to pass to the preload library (via the FIU_ENABLE
# environment variable)
ENABLE=""

# additional preloader libraries to use
PRELOAD_LIBS=""

# use the POSIX preload library?
USE_POSIX_PRELOAD=0

# don't run, but show the command line instead
DRY_RUN=0

HELP_MSG="
Usage: fiu-run [options] program [arguments]

The following options are supported:

  -x		Use POSIX libfiu preload library, allows simulate failures in
		the POSIX and C standard library functions.
  -c command	Run the given libfiu remote control command before executing
		the program (see below for reference).
  -f ctrlpath	Enable remote control over named pipes with the given path as
		base name, the process id will be appended (defaults to
		\"$FIFO_PREFIX\", set to \"\" to disable).
  -l path	Path where to find the libfiu preload libraries, defaults to
		$PLIBPATH (which is usually correct).

Remote control commands are of the form 'command param1=value1,param2=value2'.
Valid commands are:

 - 'enable name=NAME'
     Enables the NAME failure point unconditionally.
 - 'enable_random name=NAME,probability=P'
     Enables the NAME failure point with a probability of P.

All of them can also optionally take 'failnum' and 'failinfo' parameters,
analogous to the ones taken by the C functions.

The following options existed in the past but are deprecated and WILL BE
REMOVED in future releases: -e, -p, -u and -i.


Example:

  fiu-run -x -c 'enable_random name=posix/io/*,probability=0.25' \\
             -c 'enable_random name=libc/mm/*,probability=0.05' ls -l

Run \"ls -l\" enabling all failure points that begin with 'posix/io/' with a
25% of probability to fail, and the failure point libc/mm/malloc with a 5% of
probability to fail.
"


#
# Parse the options
#

if [ $# -lt 1 ]; then
	echo "$HELP_MSG"
	exit 1
fi

function opts_reset() {
	# variables to store what we know so far; after a new name is found
	# the old one is added to $ENABLE
	DEP_NAME=""
	DEP_PROB=-1
	DEP_FAILNUM=1
	DEP_FAILINFO=0
}

function add_deprecated_enable() {
	if [ "$NAME" == "" ]; then
		return
	fi;

	PARAMS="name=$DEP_NAME,failnum=$DEP_FAILNUM,failinfo=$DEP_FAILINFO"
	if [ $PROB -ge 0 ]; then
		C="enable_random $PARAMS,probability=$PROB"
	else
		C="enable $PARAMS"
	fi

	ENABLE="$ENABLE
		$C"
}

opts_reset;
while getopts "+c:f:l:xne:p:u:i:h" opt; do
	case $opt in
	c)
		# Note we use the newline as a command separator.
		ENABLE="$ENABLE
			$OPTARG"
		;;
	f)
		FIFO_PREFIX="$OPTARG"
		;;
	l)
		PLIBPATH="$OPTARG"
		;;
	x)
		USE_POSIX_PRELOAD=1
		;;
	n)
		DRY_RUN=1
		;;

	# Deprecated options
	e)
		add_deprecated_enable
		opts_reset
		DEP_NAME="$OPTARG"
		;;
	p)
		DEP_PROB="$OPTARG"
		;;
	u)
		DEP_FAILNUM="$OPTARG"
		;;
	i)
		DEP_FAILINFO="$OPTARG"
		;;

	h|*)
		echo "$HELP_MSG"
		exit 1
		;;
	esac;
done

# add leftovers
add_deprecated_enable
opts_reset;

# eat the parameters we already processed
shift $(( $OPTIND - 1 ))

# Allow user to give -l and -x in any order.
if [ $USE_POSIX_PRELOAD -eq 1 ] ; then
	PRELOAD_LIBS="$PRELOAD_LIBS $PLIBPATH/fiu_posix_preload.so"
fi

#
# Run the application
#

export FIU_ENABLE="$ENABLE"
export FIU_CTRL_FIFO="$FIFO_PREFIX"
export LD_PRELOAD="$PLIBPATH/fiu_run_preload.so $PRELOAD_LIBS"

if [ $DRY_RUN -eq 1 ] ; then
	echo "FIU_ENABLE=\"$ENABLE\"" \\
	echo "FIU_CTRL_FIFO=\"$FIFO_PREFIX\"" \\
	echo "LD_PRELOAD=\"$PLIBPATH/fiu_run_preload.so $PRELOAD_LIBS\"" \\
	echo "$@"
else
	exec "$@"
fi