#!/bin/ksh
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
# 61haes_r714 src/43haes/usr/sbin/cluster/cspoc/cexec.sh 1.5 
#  
# Licensed Materials - Property of IBM 
#  
# Restricted Materials of IBM 
#  
# COPYRIGHT International Business Machines Corp. 1996,2011 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# @(#)06  1.5  src/43haes/usr/sbin/cluster/cspoc/cexec.sh, hacmp.cspoc, 61haes_r714 11/28/11 14:58:06
################################################################################
#   COMPONENT_NAME: CSPOC
#
# Name:
#       cexec
#
# Description:
#       This routine provides for pre and post processing for commands
#       being remotely executed using cdsh.
#
# Arguments:
#       AIX Command and arguments
#
# Return Values:
#       0       success
#       1       failure
#
################################################################################

[ "$VERBOSE_LOGGING" = "high" ] && set -x
PROGNAME=$(basename ${0})
PATH="$($(dirname ${0})/../utilities/cl_get_path all)"
HA_DIR="$(cl_get_path)"

function cexec
{
  typeset USAGE="USAGE: cexec <command> [args]\n"
  # LOCAL VARIABLES
  typeset RC COMMAND CMD_ARGS

  # CHECK USAGE
  [[ $# -lt 1 ]] && {
    nls_msg -2 3 3 "$USAGE"
    return 2
  }

  ##
  # DO PRE-PROCESSING BEFORE COMMAND IS EXECUTED
  ##

  # GET COMMAND NAME TO BE EXECUTED
  COMMAND=$1 ; shift 1
  COMMAND_ARGS="$@"

  set -- 

  # THE COMMAND LINE ARGUMENTS MUST BE PROCESS TO DECODE ALL NON-FLAG ARGS
  # NON-FLAG ARGS ARE THOSE THAT DO NOT START WITH A DASH.
  # THIS IS NECESSARY TO PRESERVE QUOTING AND EMBEDDED SPACES ACROSS
  # MULTIPLE INVOCATIONS OF THE SHELL. 
  # (e.g. cl_script -> cdsh -> dsh -> rsh -> cexec )
  for ITEM in $COMMAND_ARGS
  do
    case $ITEM in
      -*) # FLAGS ARE NOT ENCODED - SIMPLY ADD THEM TO $CMD_ARGS
##         CMD_ARGS=${CMD_ARGS:+$CMD_ARGS" "}$1
         set -- "$@" $ITEM
         ;;
      *) # ALL FLAG AND NON-FLAG ARGS ARE ENCODOED 
         # ADD THE DECODED ARG TO $CMD_ARGS
###         CMD_ARGS=${CMD_ARGS:+$CMD_ARGS" "}$(print -- "$1" | cldecodearg)

         set -- "$@" $(print -- "$ITEM" | cldecodearg)
         ;;
    esac
  done

#                                                                            710
# Set the CLUSTER_OVERRIDE environment variable to bypass CAAC checking in   710
# the AIX commands with corresponding C-SPOC commands...                     710
#                                                                            710
  export CLUSTER_OVERRIDE="yes"         #                                    710

  # EXECUTE THE COMMAND AND SAVE THE RETURN CODE
  if [[ $COMMAND != 'eval' ]]
  then
    eval $COMMAND "$@"
  else
    eval "$@"
  fi
  RC=$?

  ##
  # DO POST-PROCESSING AFTER COMMAND IS EXECUTED
  ##

  # PRINT RETURN CODE FROM COMMAND TO STDERR
  print "RETURN_CODE=${RC}" >&2

  return ${RC}
}

cexec "$@"

