#!/bin/sh
#
# This script installs a patch to HP Systems Insight Manager 4.0 or 4.1 for a login fix.
#

####################################
#
# file and directory localtions
#
####################################
SIM_BIN="/opt/mx/bin"
MXVERSION="${SIM_BIN}/mxversion"
MX_CONFIG_DIR="/etc/opt/mx/config"
MXVERSION_PROPS="${MX_CONFIG_DIR}/MxVersion.props"
SAVED_MXVERSION_PROPS="${MX_CONFIG_DIR}/MxVersion.sav"
PATCH_MARKER_FILE_DEST="${MX_CONFIG_DIR}/UPDATE_1"
PATCH_MARKER_FILE="Sp2619*"
MXTOOL="${SIM_BIN}/mxtool -l f -t BogusToolName"
MXSTOP="${SIM_BIN}/mxstop"
MXSTART="${SIM_BIN}/mxstart"
HPWEBADMIN="/opt/hpwebadmin"
LOGIN_FILE="${HPWEBADMIN}/webapps/ROOT/login.jsp"
SAVED_LOGIN_FILE="${HPWEBADMIN}/webapps/ROOT/login.sav"
NEW_40_LOGIN_FILE="login_40.jsp"
NEW_41_LOGIN_FILE="login_41.jsp"
COMPILED_FILES="${HPWEBADMIN}/work/_/localhost/_/login_jsp.*"

####################################
#
# version strings for matching
#
####################################
VERSION_40_LINUX="C.04.00.01"
VERSION_40_HPUX="C.04.00.00"
VERSION_41="C.04.01.00.00"
PATCHED_VERSION_41="C.04.01.00.01"


#############################################################
#
# Function: GetSIMStatus()
#
# Checks to see if HP SIM is running
#
# Returns 0 if HP SIM is running and 1 if it is not
#
#############################################################

GetSIMStatus()
{
	$MXTOOL > /dev/null 2>&1

	# if return value of 200, we know that HP SIM is not started
	if [ $? = 200 ]
	then
		return 1
	fi

	return 0
}

#############################################################
#
# Function: UpdateSIM41Version()
#
# Checks to see if HP SIM is running
#
# Returns 0 if HP SIM is running and 1 if it is not
#
#############################################################

UpdateSIM41Version()
{
	mv $MXVERSION_PROPS $SAVED_MXVERSION_PROPS
	simExternalName=`grep "SimExternalName" $SAVED_MXVERSION_PROPS`
	newSimExternalName="$(echo $simExternalName | sed 's/\(^.*4.1\)\(.*$\)/\1 Update 1 \2/')"

	simInternalRevision=`grep "SimInternalRevision" $SAVED_MXVERSION_PROPS`
	newSimInternalRevision="$(echo $simInternalRevision | sed "s/\(^.*=\).*$/\1$PATCHED_VERSION_41/")"

	simBuildDate=`grep "SimBuildDate" $SAVED_MXVERSION_PROPS`
	echo $newSimExternalName > $MXVERSION_PROPS
	echo $newSimInternalRevision >> $MXVERSION_PROPS
	echo $simBuildDate >> $MXVERSION_PROPS
}


#############################################################
#
# Main: start of the main script execution
#
#############################################################

# Check to see if the user is the root user
user=`whoami`
if [ "$user" != "root" ] 
then
	echo "This patch must be run by the root user.  No changes being made."
	exit 100
fi

# Check if the "mxversion" utility can be found
if [ ! -e "${MXVERSION}" ]
then
	echo "HP Systems Insight Manager not found.  No changes being made."
	exit 200
fi

# execute "mxversion" and store the result
simVersion=`$MXVERSION`

# if "mxversion" failed to execute properly then exit
if [ $? -ne 0 ]
then
	echo "Failed to execute mxversion.  No changes being made."
	exit 300
fi

# extract the version string from the "mxversion" output
verString="$(echo $simVersion | sed 's/^.*- Linux \([^ ]*\).*$/\1/')"
verString="$(echo $verString | sed 's/^.*- HP-UX \([^ ]*\).*$/\1/')"
verString="$(echo $verString | sed 's/^Systems Insight Manager \([^ ]*\).*$/\1/')"

# if the version string indicates the CMS has all ready been patched
# or a file is found in the case of 4.0 that marks that the patch has
# been installed then exit
if [ -e $PATCH_MARKER_FILE_DEST -o "$verString" = "$PATCHED_VERSION_41" ]
then
	echo "This HP Systems Insight Manager patch is already installed.  No changes being made."
	exit 400
fi

# Check to see if we can recognize the version of SIM
if [ "$verString" != "$VERSION_40_LINUX" -a "$verString" != "$VERSION_40_HPUX" -a "$verString" != "$VERSION_41" ]
then 
	echo "HP Systems Insight Manager 4.0 or 4.1 not found.  No changes being made."
	exit 500
fi

# Check to see if HP SIM was started
wasSIMStarted="FALSE"
GetSIMStatus

# if HP SIM was running then stop it
#if [ $? = 0 ]
#then
	# Stop the HP SIM services
#	$MXSTOP  > /dev/null 2>&1

	# Remember that HP SIM was running so we can restart it at the end
#	wasSIMStarted="TRUE"
#fi

# Remove precompiled JSP Servlet
#rm -f $COMPILED_FILES

# Stop Tomcat
mxserver -x

# Move the existing login page to a saved file
if [ -e $LOGIN_FILE ] 
then
	mv -f $LOGIN_FILE $SAVED_LOGIN_FILE
fi

# Copy the appropriate login page in place of the old one
if [ "$verString" = "$VERSION_40_LINUX" -o "$verString" = "$VERSION_40_HPUX" ]
then
	echo "HP Systems Insight Manager 4.0 found."
	cp -f $PATCH_MARKER_FILE $PATCH_MARKER_FILE_DEST
	cp -f $NEW_40_LOGIN_FILE $LOGIN_FILE
else
	echo "HP Systems Insight Manager 4.1 found."
	cp -f $NEW_41_LOGIN_FILE $LOGIN_FILE
	UpdateSIM41Version
	
fi

# Restart Tomcat
mxserver -s

# Restart HP SIM if needed
#if [ "$wasSIMStarted" = "TRUE" ]
#then
#	$MXSTART > /dev/null 2>&1
#fi

echo "HP Systems Insight Manager successfully replaced."
exit 0

