#!/bin/sh

GREP=/bin/grep
ECHO="/bin/echo"
NECHO="/bin/echo -n"
CP="/bin/cp -p"
MV="/bin/mv"
RM=/bin/rm
AWK=/usr/bin/awk
gettext=/usr/bin/gettext
CUT=/usr/bin/cut
DATE=/bin/date
DOMAINNAME=/bin/domainname
SORT=/bin/sort
MKDIR="/bin/mkdir -p"
LOGDIR=/var/log
RPM=/bin/rpm
TAR=/bin/tar

PATCH_ID=120956-02
BKFILESUFFIX=-pre-$PATCH_ID
OPEN='('
CLOSE=')'
BACKUP_FILENAME="am70-backup$BKFILESUFFIX.gzip"
PRODUCT_DIR=identity
CONFIG_DIR=/etc/opt/sun/identity/config
AMCONFIG=$CONFIG_DIR/AMConfig.properties
LOGSUFFIX=`$DATE '+%m%d%H%M'`
LOG=$LOGDIR/Sun_Java_System_Access_Manager_upgrade_log.$LOGSUFFIX


############################################################
# check os . if not linux then exit script
############################################################
check_os() {
  OS=`uname`
  if [ "$OS" != "Linux" ]; then
    eval $ECHO "`$gettext 'This patch can be applied to Linux system only.'`"
    exit 1
  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
}

############################################################
# get basedir
############################################################
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
}

############################################################
# get backup directory
############################################################
get_backup_dir() {
  eval $NECHO "`$gettext 'Enter directory to store back up files ${OPEN} $BACKUP_DIR ${CLOSE}: ${OMIT}'`"
  read BACKUP_DIR
  if [ "$BACKUP_DIR" = "" ]; then
    BACKUP_DIR="$BASEDIR"
    eval $ECHO "`$gettext 'Backup files will be stored in ${BASEDIR}'`"
  fi

  if [ ! -d $BACKUP_DIR ]; then
    $MKDIR $BACKUP_DIR
  elif [ $BACKUP_DIR != $BASEDIR ]; then
    eval $ECHO "`$gettext '${BACKUP_DIR} exists, content will be overwritten'`" 
  fi

  $ECHO BACKUP_DIR=$BACKUP_DIR >> $LOG
}

##############################################################
# copies the named file to a backup copy
##############################################################
backupFile() {
  file=$1

  if [ ! -f $file ]; then
    $ECHO "Can not backup $file as it does not exist!"
    return
  fi

  base=`basename $file`
  if [ ! -f $BACKUP_DIR/$base$BKFILESUFFIX ]; then
    $ECHO "Backing up $file"
    $CP $file $BACKUP_DIR/$base$BKFILESUFFIX
  fi
}

##############################################################
# backup all files that were modified by the patch
##############################################################
backup_files() {
  backupFile $AMCONFIG
  backupFile $CONFIG_DIR/serverconfig.xml
  backupFile $INSTALL_DIR/bin/amwl81config 
  backupFile $INSTALL_DIR/bin/amwas51config 
  backupFile $INSTALL_DIR/bin/amutils 
  backupFile $INSTALL_DIR/bin/amsvcconfig 
  backupFile $INSTALL_DIR/bin/amsdkconfig 
  backupFile $INSTALL_DIR/bin/amas81config 
  backupFile $CONFIG_DIR/xml/idRepoService.xml 
  backupFile $INSTALL_DIR/bin/amsfoconfig 
  backupFile $CONFIG_DIR/serverconfig.xml.template 
  backupFile $INSTALL_DIR/locale/amIdRepoService.properties 
  backupFile $INSTALL_DIR/locale/amConsole.properties 
  backupFile $INSTALL_DIR/lib/am_services.jar 
  backupFile $INSTALL_DIR/lib/am_sdk.jar 
  backupFile $INSTALL_DIR/dtd/remote-auth.dtd 
  backupFile $INSTALL_DIR/docs/am_public_javadocs.jar 
  backupFile $INSTALL_DIR/amauthdistui.war 
  backupFile /usr/share/lib/identity/console-war/WEB-INF/lib/am_console.jar 
  backupFile $INSTALL_DIR/console.war 
  backupFile $INSTALL_DIR/lib/amclientsdk.jar 
  backupFile $INSTALL_DIR/amclient.war 
}

##############################################################
## main
##############################################################
check_os
check_root_user
get_base_dir
get_backup_dir
backup_files

## backup files under BASE_DIR
if [ -d $INSTALL_DIR ]; then
  $ECHO "Backing up whole $INSTALL_DIR directory ..."
  $TAR cfzP $BACKUP_DIR/${BACKUP_FILENAME} $INSTALL_DIR
fi
