| #!/bin/bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| set -u -o pipefail |
| |
| trap "" SIGHUP SIGINT |
| |
| |
| |
| |
| echo "Dummy text" 1>&2 |
| |
| wrapper_uid=$1 |
| shift |
| wrapper_gid=$1 |
| shift |
| |
| real_uid=`id -u` |
| real_gid=`id -g` |
| |
| TEMP_DIR=`mktemp -d` |
| |
| args=("$@") |
| |
| |
| |
| |
| for i in $(seq 0 `expr $# - 1`); do |
| let j=i+1 |
| |
| case "${args[i]}" in |
| ("--results") |
| TARGET_RESULTS_XCCDF="${args[j]}" |
| args[j]="$TEMP_DIR/results-xccdf.xml" |
| ;; |
| ("--results-arf") |
| TARGET_RESULTS_ARF="${args[j]}" |
| args[j]="$TEMP_DIR/results-arf.xml" |
| ;; |
| ("--report") |
| TARGET_REPORT="${args[j]}" |
| args[j]="$TEMP_DIR/report.html" |
| ;; |
| *) |
| ;; |
| esac |
| done |
| |
| LOCAL_OSCAP="oscap" |
| |
| pushd "$TEMP_DIR" > /dev/null |
| $LOCAL_OSCAP "${args[@]}" & |
| PID=$! |
| RET=1 |
| |
| while kill -0 $PID 2> /dev/null; do |
| |
| read -t 1 dummy |
| ret=$? |
| if [ 0 -lt $ret -a $ret -lt 128 ]; then |
| |
| kill -s SIGTERM $PID 2> /dev/null |
| break |
| fi |
| done |
| |
| wait $PID |
| RET=$? |
| |
| popd > /dev/null |
| |
| function chown_copy |
| { |
| local what="$1" |
| local where="$2" |
| |
| [ ! -f "$what" ] || cp "$what" "$where" |
| |
| |
| if [ $wrapper_uid -ne $real_uid ] || [ $wrapper_gid -ne $real_gid ]; then |
| chown $wrapper_uid:$wrapper_gid "$where" |
| fi |
| } |
| |
| chown_copy "$TEMP_DIR/results-xccdf.xml" "$TARGET_RESULTS_XCCDF" |
| chown_copy "$TEMP_DIR/results-arf.xml" "$TARGET_RESULTS_ARF" |
| chown_copy "$TEMP_DIR/report.html" "$TARGET_REPORT" |
| |
| rm -r "$TEMP_DIR" |
| |
| exit $RET |