diff --git a/tools/ps_analyze.sh b/tools/ps_analyze.sh index cef7c3fc4ee695ad9df77ef0260c264e85f527b8..247423df0208db6d022f48c924d0646352bd3a79 100755 --- a/tools/ps_analyze.sh +++ b/tools/ps_analyze.sh @@ -560,30 +560,11 @@ perform_step() if [ "$step" = "$stop_before_step" ]; then echo "ps_analyze has been asked to stop before step $step." - echo "command is: $command" - - printf "COMMIT_ALL" > $input_pipe - read -r commit_res < $output_pipe - if [ "$commit_res" != "COMMIT_ALL_OK" ]; then - echo A critical step was necessary, but failed. - echo To know exactly which step failed, source set the DEBUG_STEPS env var. - exit -1; - fi - printf "TERMINATE" > $input_pipe - + echo "command is: $command" exit 1 fi if [ "$step" = "$dump_before_step" ]; then - echo " ---- ps_analyze has been asked to dump before step $step." - - printf "COMMIT_ALL" > $input_pipe - read -r commit_res < $output_pipe - if [ "$commit_res" != "COMMIT_ALL_OK" ]; then - echo A critical step was necessary, but failed. Exiting ps_analyze early. - echo To know exactly which step failed, source set the DEBUG_STEPS env var. - exit -1; - fi - + echo " ---- ps_analyze has been asked to dump before step $step." $SECURITY_TRANSFORMS_HOME/plugins_install/dump_map.exe $cloneid > logs/dump_before.log fi @@ -615,55 +596,18 @@ perform_step() echo -n Performing step "$step" [dependencies=$mandatory] ... starttime=`$PS_DATE` - # First, check if using Transform_Step plugin architecture - echo "$command"|grep "lib$step\.so " > /dev/null - grep_res=$? - if [ $grep_res -eq 0 ] ; then - if [[ "$(stop_if_error $step)" != "0" ]]; then - printf "SET_LOGFILE %s" $(pwd)/$logfile > $input_pipe - read -r log_set_res < $output_pipe - echo "EXECUTE_STEP CRITICAL $command" > $input_pipe - else - printf "SET_LOGFILE %s" $(pwd)/$logfile > $input_pipe - read -r log_set_res < $output_pipe - echo "EXECUTE_STEP OPTIONAL $command" > $input_pipe - fi - - read -r thanos_res < $output_pipe - - if [ "$thanos_res" = "ERR_INVALID_CMD" ]; then - echo Internal Transform_Step plugin architecture error. - echo Unrecognized EXECUTE_STEP command. Exiting ps_analyze early. - exit -1 - elif [ "$thanos_res" = "STEP_UNSUPPORTED" ]; then - command_exit=127 # command not found - else - command_exit=$thanos_res - if [ ! -z "$VERBOSE" ]; then - cat $logfile - fi - fi - else - # Otherwise, do things the old way (step is its own process) - printf "COMMIT_ALL" > $input_pipe - read -r commit_res < $output_pipe - if [ "$commit_res" != "COMMIT_ALL_OK" ]; then - command_exit=$commit_res - else - # If verbose is on, tee to a file - if [ ! -z "$DEBUG_STEPS" ]; then - $command - command_exit=$? - elif [ ! -z "$VERBOSE" ]; then - $command 2>&1 | tee $logfile - command_exit=${PIPESTATUS[0]} # this funkiness gets the exit code of $command, not tee - else - $command > $logfile 2>&1 - command_exit=$? - fi - fi + # If verbose is on, tee to a file + if [ ! -z "$DEBUG_STEPS" ]; then + eval $command + command_exit=$? + elif [ ! -z "$VERBOSE" ]; then + eval $command 2>&1 | tee $logfile + command_exit=${PIPESTATUS[0]} # this funkiness gets the exit code of $command, not tee + else + eval $command > $logfile 2>&1 + command_exit=$? fi - + endtime=`$PS_DATE` echo "#ATTRIBUTE start_time=$starttime" >> $logfile @@ -692,8 +636,6 @@ perform_step() stop_if_error $step if [ $? -gt $error_threshold ]; then echo The $step step is necessary, but failed. Exiting ps_analyze early. - echo If DEBUG_STEPS is NOT on, this failure may be from a previously - echo executed critical step. exit -1; fi errors=1 @@ -721,29 +663,10 @@ perform_step() if [ "$step" = "$stop_after_step" ]; then echo "ps_analyze has been asked to stop after step $step." echo "command is: $command" - - printf "COMMIT_ALL" > $input_pipe - read -r commit_res < $output_pipe - if [ "$commit_res" != "COMMIT_ALL_OK" ]; then - echo A critical step was necessary, but failed. - echo To know exactly which step failed, source set the DEBUG_STEPS env var. - exit -1; - fi - printf "TERMINATE" > $input_pipe - exit 1 fi if [ "$step" = "$dump_after_step" ]; then echo " ---- ps_analyze has been asked to dump after step $step." - - printf "COMMIT_ALL" > $input_pipe - read -r commit_res < $output_pipe - if [ "$commit_res" != "COMMIT_ALL_OK" ]; then - echo A critical step was necessary, but failed. Exiting ps_analyze early. - echo To know exactly which step failed, source set the DEBUG_STEPS env var. - exit -1; - fi - $SECURITY_TRANSFORMS_HOME/plugins_install/dump_map.exe $cloneid > logs/dump_after.log fi return $command_exit @@ -790,11 +713,27 @@ do_plugins() value="${!this_step_options_name}" plugin_path=$SECURITY_TRANSFORMS_HOME/plugins_install/ + + # first check if step can be invoked as a thanos plugin + if [ -x $plugin_path/lib$stepname.so ]; then + + # add step to the block of contiguous thanos plugins + stop_if_error $stepname + if [[ $? -gt $error_threshold ]]; then + thanos_plugins="$thanos_plugins \"$stepname --step-args $cloneid $value\"" + else + thanos_plugins="$thanos_plugins \"$stepname -optional --step-args $cloneid $value\"" + fi + + continue + elif [[ $thanos_plugins ]]; then + # execute preceding block of thanos plugin steps now + perform_step fill_in_cfg none "$plugin_path/thanos.exe "$thanos_plugins"" + thanos_plugins="" + fi - # invoke .so, .exe, or .sh as a plugin step. - if [ -x $plugin_path/lib$stepname.so ]; then - perform_step $stepname none lib$stepname.so $cloneid $value - elif [ -x $plugin_path/$stepname.exe ]; then + # invoke .exe, or .sh as a plugin step + if [ -x $plugin_path/$stepname.exe ]; then perform_step $stepname none $plugin_path/$stepname.exe $cloneid $value elif [ -x $plugin_path/$stepname.sh ]; then perform_step $stepname none $plugin_path/$stepname.sh $cloneid $value @@ -808,6 +747,12 @@ do_plugins() fi done + # execute last block of thanos plugins if there are any left + if [[ $thanos_plugins ]]; then + perform_step thanos none "$plugin_path/thanos.exe "$thanos_plugins"" + thanos_plugins="" + fi + } @@ -935,16 +880,6 @@ compatcheck() } -# Make sure thanos is always exited -exit_thanos() -{ - # will do the job for emergency exits - kill $thanos_pid &> /dev/null - wait $thanos_pid &> /dev/null - rm -f $input_pipe - rm -f $output_pipe -} - do_prefix_steps() { # @@ -1092,37 +1027,6 @@ main() mkdir logs - - - # start thanos - input_pipe="thanos_input" - [ -p $input_pipe ] || mkfifo $input_pipe - output_pipe="thanos_output" - [ -p $output_pipe ] || mkfifo $output_pipe - - $SECURITY_TRANSFORMS_HOME/plugins_install/thanos.exe $input_pipe $output_pipe & - thanos_pid=$! - - # set thanos execution mode - if [ ! -z "$DEBUG_STEPS" ]; then - printf "SET_MODE DEBUG" > $input_pipe - elif [ ! -z "$VERBOSE" ]; then - printf "SET_MODE VERBOSE" > $input_pipe - else - printf "SET_MODE DEFAULT" > $input_pipe - fi - - read -r mode_set_res < $output_pipe - - if [ "$mode_set_res" != "MODE_SET_OK" ]; then - echo Internal Transform_Step plugin architecture error. - echo Mode set failed. Exiting ps_analyze early. - exit -1 - fi - - trap exit_thanos EXIT - - do_prefix_steps cloneid=$varid @@ -1159,16 +1063,7 @@ main() # make sure we only do this once there are no more updates to the peasoup_dir perform_step installer none $PEASOUP_HOME/tools/do_installer.sh $PWD $protected_exe - # exit thanos cleanly - printf "COMMIT_ALL" > $input_pipe - read -r commit_res < $output_pipe - if [ "$commit_res" != "COMMIT_ALL_OK" ]; then - echo A critical step was necessary, but failed. - echo To know exactly which step failed, source set the DEBUG_STEPS env var. - errors=1; - fi - printf "TERMINATE" > $input_pipe - + cd - > /dev/null 2>&1