#!/bin/sh

ECHO=/bin/echo
GREP=/bin/grep
SED=/bin/sed
AWK=/bin/awk
CUT=/bin/cut
LS=/bin/ls
MV=/bin/mv
WC=/usr/bin/wc
CP="/bin/cp -p"
RM="/bin/rm -f"
RPM=/bin/rpm
gettext=/usr/bin/gettext

PRODUCT="sun-saml2"
PRODUCT_DIR="identity"
RTM_VERSION=1.0
RTM_RELEASE=1
SAMLv2RPMSUFFIX=$RTM_VERSION-$RTM_RELEASE.i686.rpm
VERSION_FILE=version
CONFIG_DIR=/etc/opt/sun/identity/config
AMCONFIG=$CONFIG_DIR/AMConfig.properties

##############################################################
# get base dir
##############################################################
get_base_dir() {
  if [ ! -f $AMCONFIG ]; then
    eval $ECHO "`$gettext 'ERROR: ${AMCONFIG} does not exist! can not apply patch'`"
    exit 1
  fi

  $CP $AMCONFIG /tmp/.
  BASEDIR=`$GREP com.iplanet.am.installdir= $AMCONFIG \
    | $SED -e 's/\/identity//g' | $SED -e 's/com.iplanet.am.installdir=//g'`
  INSTALL_DIR=$BASEDIR/$PRODUCT_DIR
}

##############################################################
# check RTM RPM bits directory
##############################################################
check_rpm_dir() {
  RPMDIR=$1
  if [ -d $RPMDIR ]; then
    RPMS=`$LS -l $RPMDIR/RPMS/i686/${PRODUCT}-* | $WC -l | $SED -e 's/ //g'`
    if [ $RPMS -lt 1 ]; then
      $ECHO "`$gettext 'This directory does not contain any SAML v2 Plugin RTMs'`"
      exit
    fi
  else
    $ECHO "`$gettext 'This directory does not exist'`"
    exit
  fi
}

##############################################################
# test for root user
##############################################################
check_root_user() {
  if test `id | $AWK '{print $1}'` != "uid=0(root)"
  then
    eval $ECHO "`$gettext 'You must be root user to run $0.'`"
    exit 1
  fi
}

##############################################################
# check SAML v2 plugin existance
##############################################################
check_samlv2() {
  rpm -q --quiet ${PRODUCT}
  if [ $? -eq 0 ];then
    version=`rpm -q --queryformat "%{VERSION}\n" ${PRODUCT}`
    release=`rpm -q --queryformat "%{RELEASE}\n" ${PRODUCT}`
    if [ "$version" != "$RTM_VERSION" ]; then
      $ECHO "`$gettext 'The current SAML v2 plugin installed is not 1.0.'`"
      exit
    fi
  else
    $ECHO "`$gettext 'No SAML v2 plugin installation found.'`"
    exit
  fi
}

##############################################################
# install RTM RPM's
##############################################################
install_rpm() {
  $ECHO "`$gettext 'Starting re-installing SAML v2 plugin 1.0 RTM Packages'`"
  cd $RPMDIR
  installed="`$RPM -qa | grep ${PRODUCT}`"
  for pkg in $installed
  do
    name=`$ECHO $pkg | sed -e "s/^\(..*\)\-[0-9]..*$/\1/"`
    name=`$ECHO $name | sed -e "s/^\(..*\)\-[0-9]..*$/\1/"`
    pkgname=$name-$SAMLv2RPMSUFFIX

    rpm -Uvh --prefix=${BASEDIR} --nodeps --force $RPMDIR/RPMS/i686/$pkgname 
  done
}

##############################################################
# update the version file
##############################################################
update_version_string() {
  $CP -f $INSTALL_DIR/saml2/lib/$VERSION_FILE $INSTALL_DIR/saml2/lib/$VERSION_FILE.patch
  $ECHO "SAML v2 plugin 1.0 (Mon Jan  9 16:24:38 PST 2006) SunOS" > $INSTALL_DIR/saml2/lib/$VERSION_FILE
}

##############################################################
# main processing
##############################################################
CURRENTDIR=`pwd`
if [ $# -ne 1 ]; then
  $ECHO "`$gettext 'Usage: reinstallRTM <path_to_saml_v2_plugin_1.0_bits>'`"
  exit
fi

check_root_user
check_rpm_dir $1
check_samlv2
get_base_dir
install_rpm
update_version_string
