#!/sbin/sh
# OPC_WHAT_STRING="@(#)HP Operations Manager 09.00.160 (03/06/09)"
################################################################################
#
# File:         opcuxndchk
# Description:  Generic unix family NODE_CHECK script
# Language:     Bourne Shell
# Package:      HP OpenView OperationsCenter
#
# (c) Copyright 1993 - 2009 Hewlett-Packard Development Company, L.P. 
#
################################################################################

#
#  DESCRIPTION
#    Generic unix family NODE_CHECK script: server part.
#    This script remotely executes platform specific rndchk script
#    for the specified Managed Node's platform. Remote script rndchk is
#    transferred to Managed Node and executed there.
#
#    This script checks $NODE system, if it is cluster client or not.
#    If Managed Node is cluster client system, then
#    cluster server hostname will be placed in result_file.
#    If Managed Node is cluster server system or stand-alone system, then 
#    result_file will be empty.
#    Installation environment variables are set according to oi_environ(5).
#
#  PARAMETERS
#    result_file .. File where result will be placed.
#                   Caller is responsible to remove the file when
#                   not needed anymore.
#
#  EXIT_CODE
#    0 .. ok,
#    1 .. execution error or node check fail.
#

BIN_DIR=/usr/bin
OS_DIR=/usr
OPT_DIR=/opt
VAR_DIR=/var/opt
ETC_DIR=/etc/opt

# localization
LANG_C=C
LANG_SJIS=ja_JP.SJIS
LANG_EUC=ja_JP.eucJP

#
# nslookup function - nslookup does not use LDAP
#
nslookup()
{
  _name=$1
  _result=""
  if [ -x ${OPCSVR_BIN_DIR}/utils/opcsvnsl ]
  then
    _result=`${OPCSVR_BIN_DIR}/utils/opcsvnsl ${_name} 2>&1`
  else
    if [ -x ${OPCAGT_INST_DIR}/opcnsl ]
    then
      _result=`${OPCAGT_INST_DIR}/opcnsl ${_name} 2>&1`
    else
      if [ -x /tmp/opcsvnsl ]
      then
         _result=`/tmp/opcsvnsl ${_name} 2>&1`
      else
        /usr/bin/nslookup ${_name}
      fi
    fi
  fi
  if [ ! -z "${_result}" ]
  then
    echo ${_result} | grep 'Not found' 1>/dev/null 2>&1
    if [ $? -eq 0 ]
    then
      echo
      echo "*** No address (A) records available for ${_name}"
    else
      _rname=`echo ${_result} | cut -f1 -d:`
      _raddr=`echo ${_result} | cut -f2 -d:`
      echo
      echo "Name:    ${_rname}"
      echo "Address:  ${_raddr}"
      unset _rname
      unset _raddr
    fi
  fi
  unset _name
  unset _result
  return 0
} # END nslookup()
GREP=/usr/bin/grep
TR=/usr/bin/tr

# for agents we may need a different root directory e.g. in a cluster
# environment else it is the root directory
#
ROOT_DIR=${ROOT_DIR:-""}

# defined in every script - the version of this script
INST_OPCVERS=09.00.160

# prerequisites:
#---------------
#
# the paths
#
#   OPT_DIR	e.g. /opt
#   VAR_DIR	e.g. /var/opt
#   ETC_DIR	e.g. /etc/opt
#
# must be defined before using this module
#
# Naming Scheme
# <prog>_<name>_DIR	1 directory e.g. OV_<name>_DIR, OPC_<name>_DIR
# <name>_PATH		several directories delimited by ":"
#
TMP_DIR=${ROOT_DIR}/tmp/opc_tmp

#-------------------------------------
# generic paths
#-------------------------------------
# /opt/OV
OV_OPT_DIR=${OV_OPT_DIR:-${ROOT_DIR}${OPT_DIR}/OV}
OPC_OPT_DIR=${OPC_OPT_DIR:-${OV_OPT_DIR}}
# /var/opt/OV
OV_VAR_DIR=${OV_VAR_DIR:-${ROOT_DIR}${VAR_DIR}/OV}
OV_VAR_SH_DIR=${OV_VAR_SH_DIR:-${OV_VAR_DIR}/share}
OPC_VAR_DIR=${OPC_VAR_DIR:-${OV_VAR_DIR}}
# /etc/opt/OV
OV_ETC_DIR=${OV_ETC_DIR:-${ROOT_DIR}${ETC_DIR}/OV}
OV_ETC_SH_DIR=${OV_ETC_SH_DIR:-${OV_ETC_DIR}/share}
OPC_ETC_DIR=${OPC_ETC_DIR:-${OV_ETC_DIR}/share}

OV_NEWCFG_DIR=${OV_NEWCFG_DIR:-${OV_OPT_DIR}/newconfig}
OV_OLDCFG_DIR=${OV_OLDCFG_DIR:-${OV_OPT_DIR}/old}

# WWW
OV_WWW_DIR=$OV_OPT_DIR/www

# /opt/OV
OV_OPT10_DIR=${OV_OPT10_DIR:-${ROOT_DIR}${OPT10_DIR}/OV}
# /var/opt/OV
OV_VAR10_DIR=${OV_VAR10_DIR:-${ROOT_DIR}${VAR10_DIR}/OV}
OV_VAR10_SH_DIR=${OV_VAR10_SH_DIR:-${OV_VAR10_DIR}/share}
# /etc/opt/OV
OV_ETC10_DIR=${OV_ETC10_DIR:-${ROOT_DIR}${ETC10_DIR}/OV}
OV_ETC10_SH_DIR=${OV_ETC10_SH_DIR:-${OV_ETC10_DIR}/share}

#-------------------------------------
# OpenView paths
#-------------------------------------
OV_BIN_DIR=${OV_BIN_DIR:-${OV_OPT_DIR}/bin}
OV_TMP_DIR=${OV_TMP_DIR:-${OV_VAR_DIR}/tmp}
OV_LOG_DIR=${OV_LOG_DIR:-${OV_VAR_DIR}/log}
OV_CFG_DIR=${OV_CFG_DIR:-${OV_ETC_DIR}/share/conf}
OV_ALT_CFG_DIR=${OV_ALT_CFG_DIR:-${OV_ETC_DIR}/share/\#conf}

#-------------------------------------
# ITO Server Paths
#-------------------------------------
# /usr/OV/bin/OpC
OPCSVR_BIN_DIR=${OPCSVR_BIN_DIR:-${OPC_OPT_DIR}/bin/OpC}
# /usr/OV/bin/OpC/install
OPCSVR_INST_DIR=${OPCSVR_INST_DIR:-${OPCSVR_BIN_DIR}/install}
# /opt/OV/lib
OPCSVR_LIB_DIR=${OPCSVR_LIB_DIR:-${OPC_OPT_DIR}/lib/hpux32}
# /opt/OV/nls
OPCSVR_NLS_DIR=${OPCSVR_NLS_DIR:-${OPCSVR_LIB_DIR}/nls}
# /opt/OV/include
OPCSVR_INC_DIR=${OPCSVR_INC_DIR:-${OPC_OPT_DIR}/include}
# /usr/OV/bin/OpC/utils
OPCSVR_UTIL_DIR=${OPCSVR_UTIL_DIR:-${OPCSVR_BIN_DIR}/utils}
# /usr/OV/bin/OpC/agtinstall
OPCSVR_AGTINST_DIR=${OPCSVR_AGTINST_DIR:-${OPCSVR_BIN_DIR}/agtinstall}
# /etc/opt/OV/share/lrf
OPCSVR_OPC_DIR=${OPCSVR_OPC_DIR:-${OPC_OPT_DIR}/OpC}
OPCSVR_NEWCFG_DIR=${OPCSVR_NEWCFG_DIR:-${OV_NEWCFG_DIR}/OpC}
OPCSVR_OLDCFG_DIR=${OPCSVR_OLDCFG_DIR:-${OV_OLDCFG_DIR}/OpC}
OPCSVR_HELP_DIR=${OPCSVR_HELP_DIR:-${OV_VAR_DIR}/share/help}

# /etc/opt/OV directories
OPCSVR_LRF_DIR=${OPCSVR_LRF_DIR:-${OPC_ETC_DIR}/lrf}
OPCSVR_REG_DIR=${OPCSVR_REG_DIR:-${OPC_ETC_DIR}/registration}

# /var/opt/OV/share/databases
OPCSVR_DB_DIR=${OPCSVR_DB_DIR:-${OPC_VAR_DIR}/share/databases/OpC}
# /var/opt/OV/share/databases/OpC/mgd_node/vendor
OPCSVR_VEND_DIR=${OPCSVR_DB_DIR}/mgd_node/vendor
# /var/opt/OV/share/databases/OpC/mgd_node/customer
OPCSVR_CUST_DIR=${OPCSVR_DB_DIR}/mgd_node/customer

# dynamic paths
OPCSVR_TMP_DIR=${OPCSVR_TMP_DIR:-${OPC_VAR_DIR}/share/tmp/OpC}
OPCSVR_LOG_DIR=${OPCSVR_LOG_DIR:-${OPC_VAR_DIR}/log/OpC}
OPCSVR_CFG_DIR=${OPCSVR_CFG_DIR:-${OPC_ETC_DIR}/conf/OpC}
OPCSVR_APPL_DIR=${OPCSVR_APPL_DIR:-${OPC_VAR_DIR}/share/tmp/OpC_appl}
OPCSVR_MAN_DIR=${OPCSVR_MAN_DIR:-${OPC_OPT_DIR}/man}

OPCSVR_INFO_F=${OPCSVR_INFO_F:-${OPCSVR_INST_DIR}/opcsvinfo}

# Config file needed by distributed GUI client
OPC_GUICLT_MSV_F=${OPC_GUICLT_MSV_F:-${OV_CFG_DIR}/opc_guiclt_msv}
OPC_GUICLT_TMP_MSV_F=${OPC_GUICLT_TMP_MSV_F:-/tmp/opc_guiclt_msv}

# DB config file
OVDB_CONFIG_FILE=${OVDB_CONFIG_FILE:-${OV_CFG_DIR}/ovdbconf}

#-------------------------------------
# ITO Agent Paths
#-------------------------------------
# /usr/OV/bin/OpC/s700
OPCAGT_BIN_DIR=${OPCAGT_BIN_DIR:-${OPC_OPT_DIR}/bin/OpC}
OPCAGT_LIB_DIR=${OPCAGT_LIB_DIR:-${OPC_OPT_DIR}/lib/hpux32}
OPCAGT_NLS_DIR=${OPCAGT_NLS_DIR:-${OPCAGT_LIB_DIR}/nls}
OPCAGT_INC_DIR=${OPCAGT_INC_DIR:-${OPC_OPT_DIR}/include}
# /usr/OV/bin/OpC/s700/utils
OPCAGT_UTIL_DIR=${OPCAGT_UTIL_DIR:-${OPCAGT_BIN_DIR}/utils}
# /usr/OV/bin/OpC/s700/install
OPCAGT_INST_DIR=${OPCAGT_INST_DIR:-${OPCAGT_BIN_DIR}/install}

# /var/opt/OV/bin/OpC
OPCAGT_ACTMONCMD_DIR=${OPCAGT_ACTMONCMD_DIR:-${OPC_VAR_DIR}/bin/OpC}

# /var/opt/OV/bin/OpC/monitor
OPCAGT_MON_DIR=${OPCAGT_MON_DIR:-${OPC_VAR_DIR}/bin/OpC/monitor}
# /opt/OV/bin/OpC/actions
OPCAGT_ACT_DIR=${OPCAGT_ACT_DIR:-${OPC_VAR_DIR}/bin/OpC/actions}
# /var/opt/OV/bin/OpC/cmds
OPCAGT_CMD_DIR=${OPCAGT_CMD_DIR:-${OPC_VAR_DIR}/bin/OpC/cmds}

# dynamic paths
OPCAGT_LOG_DIR=${OPCAGT_LOG_DIR:-${OPC_VAR_DIR}/log/OpC}
OPCAGT_CFG_DIR=${OPCAGT_CFG_DIR:-${OPC_VAR_DIR}/conf/OpC}
OPCAGT_TMP_DIR=${OPCAGT_TMP_DIR:-${OPC_VAR_DIR}/tmp/OpC}
OPCAGT_VARBIN_DIR=${OPCAGT_TMP_DIR:-${OPC_VAR_DIR}/bin/OpC}
OPCAGT_TMPBIN_DIR=${OPCAGT_TMPBIN_DIR:-${OPCAGT_TMP_DIR}/bin}
OPCAGT_TMPCFG_DIR=${OPCAGT_TMPCFG_DIR:-${OPCAGT_TMP_DIR}/conf}
OPCAGT_NEWCFG_DIR=${OPCAGT_NEWCFG_DIR:-${OV_NEWCFG_DIR}/OpC}
OPCAGT_OLDCFG_DIR=${OPCAGT_OLDCFG_DIR:-${OV_OLDCFG_DIR}/OpC}

# info files
OPCAGT_NDINFO_F=${OPCAGT_NDINFO_F:-${OPCAGT_CFG_DIR}/nodeinfo}
OPCAGT_INFO_F=${OPCAGT_INFO_F:-${OPCAGT_INST_DIR}/opcinfo}
OPCAGT_NETLS_F=${OPCAGT_NETLS_F:-${OPCAGT_CFG_DIR}/opcnetls}
OPCAGT_MGRCONF_F=${OPCAGT_MGRCONF_F:-${OPCAGT_CFG_DIR}/mgrconf}
OPCAGT_UPD_F=${OPCAGT_UPD_F:-${OPCAGT_TMP_DIR}/update}
OPCAGT_CLIENT_F=${OPCAGT_CLIENT_F:-${OPCAGT_INST_DIR}/cfg.clients}
OPCAGT_MGMTSV_F=${OPCAGT_MGMTSV_F:-${TMP_DIR}/mgmt_sv.dat}
#
# commands
#
OPCMON=${OPCAGT_BIN_DIR}/opcmon
OPCMSG=${OPCAGT_BIN_DIR}/opcmsg

VUE_DIR=/etc/vue
VUE_USR_DIR=/usr/vue
VUE_ETC_DIR=/etc/vue
VUE_VAR_DIR=/var/vue
CDE_USR_DIR=/usr/dt
CDE_ETC_DIR=/etc/dt
CDE_VAR_DIR=/var/dt

#-------------------------------------
# paths
#-------------------------------------
SYSTEM_PATH=${SYSTEM_PATH:-"/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/etc:/usr/ucb"}
OV_PATH=${OV_BIN_DIR}
OPCSVR_PATH=${OPCSVR_BIN_DIR}:${OPCSVR_AGTINST_DIR}:${OPCSVR_INST_DIR}
OPCAGT_PATH=${OPCAGT_BIN_DIR}:${OPCAGT_INST_DIR}:${OPCAGT_MON_DIR}:${OPCAGT_ACT_DIR}:${OPCAGT_CMD_DIR}

# program name
APPLNAME=ITO
LONG_APPLNAME="HP OpenView Operations for Unix 09.00.160"

# common umask value
umask 022

# location of the oratab file
ORATAB_LOC=/etc/oratab

# shared library suffix
SHLIBSUFFIX=so

#-------------------------------------
# Module name definition
#-------------------------------------

# define module name
    MODULE_NAME=NODE_CHECK

#VMS Changes Starts
. "$OPC_AGTINST_DIR"/opcvmsproc
. "$OPC_AGTINST_DIR"/opcvmsprocs
#VMS Changes Ends

#===============================================================================
#
#   MAIN script body
#

# display start module
if [ "${OPC_ADEBUG}" = "OPCAYES" ]
then
    set +x
    DEBUG_CNT=`expr $DEBUG_CNT + 1`
fi
if [ "${OPC_TRACE}" = "YES" ]
then
    CALLOUT_NAME=$0
    CALLOUT_PARAMS="$*"
    #oi_trace opc 588 "${MODULE_NAME}" ${CALLOUT_NAME} "\"${CALLOUT_PARAMS}\""
    echo "TRACE:    ${TRACE_HEADER}" | \
    sed -e "s=MODULxxxxxxx=${MODULE_NAME}=" \
        -e "s=SCRIPTxxxxxx=${CALLOUT_NAME}=" \
    >> ${OPC_TRACE_FILE}
fi
if [ "${OPC_DEBUG}" = "YES" ]
then
    # enable tracing in all functions
    eval `typeset -f | awk '/^function/ { printf "typeset -tf %s\n", $2 }'`
fi
if [ "${OPC_ADEBUG}" = "OPCAYES" ]
then
    if [ ${DEBUG_CNT} -gt 0 ]
    then
	DEBUG_CNT=`expr $DEBUG_CNT - 1`
    fi
    if [ ${DEBUG_CNT} -gt 0 ]
    then
	set -x
    fi
fi

#   usage test
#
if [ $# -ne 1 ]
then
    oi_error "opc" 511 "opcuxndchk"
    EXIT 1
fi

OPC_OUTPUT_FILE=$1

if [ -z "${OPC_RCPEXEC_SCRIPT}" ]
then
    #	remote copy and execute callout script is unknown
    #	exit with an error
    #
    oi_error "opc" 522 "RCPEXEC_SCRIPT" "${OPC_PLATFORM}"
    EXIT 1
fi

#VMS Changes Starts
#   remote execute opcrndchk script
#
#$OPC_RCPEXEC_SCRIPT -r ${OPC_OUTPUT_FILE} \
#                -d ${OPC_TMP_DIR} \
#                $OPC_INST_DIR/$OPC_PLATFORM/$OPC_VERSION/$OPC_PACKAGE_TYPE/install/opcrndchk 

#   inform user
#
OPC_RBTTXE=`$OPC_AGTINST_DIR/opccrpt -x qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm -d "$OPC_PASSWD"`
# quote it in a second step because sed needs a newline at the end
OPC_RBTTXE=`echo ${OPC_RBTTXE} | sed 's/ /\\\\ /g' | sed 's/"/\\\\"/g'`

#FTP_CMD1="cd ${OPC_TMP_DIR}"
FTP_CMD2="put $OPC_INST_DIR/$OPC_PLATFORM/$OPC_VERSION/$OPC_PACKAGE_TYPE/install/opcvmsndchk.com opcvmsndchk.com"
FTP_CMD1="ascii"
opcvmsftp "$FTP_CMD1" "$FTP_CMD2"
if [ $? -ne 1 ]
then
   #   file couldn't be transferred to the managed node
   #
   oi_verbose opc 377
   echo
   EXIT 1
fi
$OPC_CMD_DIR/opc_rexec $OPC_NODE $OPC_INST_USER ${OPC_RBTTXE} "@SYS\$LOGIN:opcvmsndchk.com" > ${OPC_OUTPUT_FILE}
cat ${OPC_OUTPUT_FILE}
$OPC_CMD_DIR/opc_rexec $OPC_NODE $OPC_INST_USER ${OPC_RBTTXE} "del SYS\$LOGIN:opcvmsndchk.com;*"
#VMS Changes Ends

case $? in
    0)
    SERVER=`cat ${OPC_OUTPUT_FILE}`
    if [ -n "${SERVER}" ]
    then 
	#   system is cluster client system
	#
        #   determine fully qualified hostname of cluster server, if
	#   cluster client name was fully qualified, too
	#
	if [ "${OPC_NODE}" != `echo ${OPC_NODE} | sed -e 's/\.//g'` -a \
	     "${SERVER}" = `echo ${SERVER} | sed -e 's/\.//g'` ]
	then
	    SERVER=${SERVER}.`echo ${OPC_NODE} | cut -d . -f 2-`
	    #	correct result in output file
	    #
	    echo ${SERVER} > ${OPC_OUTPUT_FILE}
	fi
    fi
    EXIT 0
    ;;
    126)
    if [ ${OPC_METHOD} = "INSTALL" ]
    then
    	EXIT 1
    else
	EXIT 0
    fi
    ;;
    *)
    oi_error "opc" 523 "$OPC_NODE" 
    EXIT 1
    ;;
esac

EXIT 0

################################################################################
# end of opcuxndchk
################################################################################
