#!/usr/xpg4/bin/sh
# OPC_WHAT_STRING="@(#)HP Operations Manager 09.02.030 (09/04/09)"

set +u
################################################################################
#
# File:         opcuxoschk
# Description:  generic unix family OS_CHECK script
# Language:     Bourne Shell
# Package:      HP OpenView OperationsCenter
#
# (c) Copyright 1993 - 2009 Hewlett-Packard Development Company, L.P. 
#
################################################################################

#  DESCRIPTION
#    Generic unix family OS_CHECK script: server part.
#    This script remotely executes platform specific roschk script
#    for the specified Managed Node's platform. Remote script roschk is
#    transferred to Managed Node and executed there.
#    If OS running on Managed Node does not match the expected platform,
#    error message is displayed.
#    Installation environment variables are set according to oi_environ(5).
#
#  PARAMETERS
#    os_rel_file .. File where actual OS release name of managed node will
#                   placed. Caller is responsible to remove the file when
#                   not needed anymore.
#
#  EXIT_CODE
#    0 .. OS found on Managed Node matches the specified platform.
#         os_rel_file includes actual OS release number found on node. 
#
#    1 .. OS on Managed Node does not match platform specified for this node.
#

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

OPC_OPT_DIR=${OPT_DIR}/OV

OPCAGT_NLS_DIR=${OPC_OPT_DIR}/locale
OPCSVR_NLS_DIR=${OPC_OPT_DIR}/locale

# localization
LANG_C=C
LANG_SJIS=ja_JP.PCK
LANG_EUC=japanese

# oratab location
ORATAB_LOC=/var/opt/oracle/oratab

#
# nslookup function - Solaris nslookup does not query NIS maps
#
nslookup()
{
  _name=$1
  _result=""
  if [ -x ${OPCSVR_BIN_DIR}/utils/opcsvnsl ]
  then
    _result=`${OPCSVR_BIN_DIR}/utils/opcsvnsl ${_name} 2>&1`
  else
    if [ -x /tmp/opcsvnsl ]
    then
       _result=`/tmp/opcsvnsl ${_name} 2>&1`
    else
      if [ -x ${OPCAGT_INST_DIR}/opcnsl ]
      then
        _result=`${OPCAGT_INST_DIR}/opcnsl ${_name} 2>&1`
      else
        /usr/sbin/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
}

GREP=/usr/xpg4/bin/grep
TR=/usr/xpg4/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.02.030

# 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}}
OV_DEFAULTS_PATH=${OV_VAR_DIR}/tmp
# /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}

#-------------------------------------
# SD paths  
#-------------------------------------
OPC_SD_DIR=${OPC_SD_DIR:-/usr/sbin}
#-------------------------------------
# Sun Cluster paths
#-------------------------------------
OPC_SC_BIN_DIR=${OPC_SC_BIN_DIR:-/opt/SUNWcluster/bin}
OPC_SC_ETC_DIR=${OPC_SC_ETC_DIR:-/etc/opt/SUNWcluster}
OPC_SC_VAR_DIR=${OPC_SC_VAR_DIR:-/var/opt/SUNWcluster}
#-------------------------------------
# VERITAS Cluster Server paths
#-------------------------------------
OPC_VC_BIN_DIR=${OPC_VC_BIN_DIR:-/opt/VRTSvcs/bin}
OPC_VC_LOG_DIR=${OPC_VC_LOG_DIR:-/var/VRTSvcs/log}
OPC_VC_CFG_DIR=${OPC_VC_CFG_DIR:-/etc/VRTSvcs/conf}
#-------------------------------------
# Sol High Availability SW Solutions
#-------------------------------------
OPC_HA_VC_SW=${OPC_HA_VC_SW:-VeritasClusterServer}
OPC_HA_SC_SW=${OPC_HA_SC_SW:-SunCluster}

#-------------------------------------
# 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}
# /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}
OPCAGT_INFO_F=${OPCAGT_INFO_F:-${OPCSVR_INST_DIR}/opcinfo}

# 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}
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:-"/usr/xpg4/bin:/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 Operations Manager for Sun Solaris 09.02.030"

# common umask value
umask 022

# location of the oratab file

# shared library suffix
SHLIBSUFFIX=so

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

# define module name
    MODULE_NAME=OS_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

#   input parameters
#
if [ $# -ne 1 ]
then
    #	usage error
    #
    oi_error "opc" 511 "opcuxoschk"
    EXIT 1
fi

#   remote execute roschk script
#

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

OPC_OUTPUT_FILE=$1
#VMS Changes Starts
#$OPC_RCPEXEC_SCRIPT -r ${OPC_OUTPUT_FILE} \
#                -d ${OPC_TMP_DIR} \
#                $OPC_INST_DIR/$OPC_PLATFORM/$OPC_VERSION/$OPC_PACKAGE_TYPE/install/opcroschk

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="ascii"
FTP_CMD2="put $OPC_INST_DIR/$OPC_PLATFORM/$OPC_VERSION/$OPC_PACKAGE_TYPE/install/opcvmsoschk.com opcvmsoschk.com"
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:opcvmsoschk.com" > ${OPC_OUTPUT_FILE}
cat ${OPC_OUTPUT_FILE}
$OPC_CMD_DIR/opc_rexec $OPC_NODE $OPC_INST_USER ${OPC_RBTTXE} "del SYS\$LOGIN:opcvmsoschk.com;*"
#VMS Changes Ends
if [ $? != 0 ]
then
    OS_NAME=`$OPC_CMD_DIR/opcagtutil -platform $OPC_PLATFORM \
				     -parameter OS_NAME | \
	     sed -e 's/ /_/g'`
    oi_error "opc" 505 "$OPC_NODE" "$OS_NAME"
    EXIT 1
fi
EXIT 0

################################################################################
# end of opcuxoschk
################################################################################
