#!/bin/sh


OS=`uname`
if [ $OS = "Linux" ]; then
    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
    PRODUCT_DIR=identity
    CONFIG_DIR=/etc/opt/sun/identity/config
    TAR=/bin/tar
else
    GREP=/usr/bin/grep
    ECHO=/usr/bin/echo
    NECHO=/usr/bin/echo
    CP="/usr/bin/cp -p"
    RM=/usr/bin/rm
    AWK=/usr/bin/awk
    gettext=/usr/bin/gettext
    CUT=/usr/bin/cut
    DATE=/usr/bin/date
    DOMAINNAME=/usr/bin/domainname
    SORT=/usr/bin/sort
    MKDIR="/usr/bin/mkdir -p"
    LOGDIR=/var/sadm/install/logs
    PKGINFO=/usr/bin/pkginfo
    PRODUCT_DIR=SUNWam
    CONFIG_DIR=/etc/opt/SUNWam/config
    OMIT='\c'
fi
AMCONFIG=$CONFIG_DIR/AMConfig.properties
OPEN='('
CLOSE=')'
BACKUP_FILENAME="am62_backup.gzip"
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() {
    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 hostname info
#

get_host_info() {
    HOSTNAME_FULL="`/bin/uname -n`"
    HOSTNAME=`$ECHO "$HOSTNAME_FULL" | $CUT -d. -f1`
    fulldomain=`$DOMAINNAME`

    HOSTNAME_FULL="$HOSTNAME.$fulldomain"
}

###############################################
#
# get basedir
#

get_base_dir() {
    BASEDIR=`grep com.iplanet.am.installdir= $AMCONFIG \
	| sed -e 's/\/identity//g' | sed -e 's/com.iplanet.am.installdir=//g'`
}

##############################################################
#
#
#
get_backup_dir() {
    BACKUP_DIR="$BASEDIR"
    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"
    fi
    if [ ! -d $BACKUP_DIR ]
    then
        $MKDIR $BACKUP_DIR
    fi

    $ECHO BACKUP_DIR=$BACKUP_DIR >> $LOG
}
############################################################
## Create silent install file from existing configuration ##
############################################################
create_silent_file() {

AMXML=$CONFIG_DIR/xml/amAuth.xml
AMSAML=$CONFIG_DIR/xml/amSAML.xml
AMPLATFORM=$CONFIG_DIR/xml/amPlatform.xml

$ECHO "BASEDIR=$BASEDIR" > /tmp/.amsilent
AM2BAK=$BASEDIR/identity/bin/am2bak
SERVER_HOST=`grep com.iplanet.am.server.host= $AMCONFIG \
  | sed -e "s#com.iplanet.am.server.host=#SERVER_HOST=#"`
$ECHO $SERVER_HOST >> /tmp/.amsilent
SERVER_PORT=`grep com.iplanet.am.server.port= $AMCONFIG \
  | sed -e "s#com.iplanet.am.server.port=#SERVER_PORT=#"`
$ECHO $SERVER_PORT >> /tmp/.amsilent
SERVER_PROTOCOL=`grep com.iplanet.am.server.protocol= $AMCONFIG \
  | sed -e "s#com.iplanet.am.server.protocol=#SERVER_PROTOCOL=#"`
$ECHO $SERVER_PROTOCOL >> /tmp/.amsilent

$ECHO "CONSOLE_HOST=\$SERVER_HOST" >> /tmp/.amsilent
$ECHO "CONSOLE_PORT=\$SERVER_PORT" >> /tmp/.amsilent
$ECHO "CONSOLE_PROTOCOL=\$SERVER_PROTOCOL" >> /tmp/.amsilent

CONSOLE_REMOTE=`grep com.iplanet.am.console.remote= $AMCONFIG \
  | sed -e "s#com.iplanet.am.console.remote=#CONSOLE_REMOTE=#g"`
$ECHO $CONSOLE_REMOTE >> /tmp/.amsilent
DS_HOST=`grep com.iplanet.am.directory.host= $AMCONFIG \
  | sed -e "s#com.iplanet.am.directory.host=#DS_HOST=#g"`
$ECHO $DS_HOST >> /tmp/.amsilent
DS_PORT=`grep com.iplanet.am.directory.port= $AMCONFIG \
  | sed -e "s#com.iplanet.am.directory.port=#DS_PORT=#g"`
$ECHO $DS_PORT >> /tmp/.amsilent

ROOT_SUFFIX=`grep com.iplanet.am.defaultOrg= $AMCONFIG \
  | sed -e "s#com.iplanet.am.defaultOrg=#ROOT_SUFFIX=#"`
$ECHO $ROOT_SUFFIX >> /tmp/.amsilent

CONSOLE_DEPLOY_URI=`grep com.iplanet.am.console.deploymentDescriptor= $AMCONFIG\
  | sed -e "s#com.iplanet.am.console.deploymentDescriptor=#CONSOLE_DEPLOY_URI=#"`
$ECHO $CONSOLE_DEPLOY_URI >> /tmp/.amsilent
SERVER_DEPLOY_URI=`grep com.iplanet.am.services.deploymentDescriptor= $AMCONFIG\
  | sed -e "s#com.iplanet.am.services.deploymentDescriptor=#SERVER_DEPLOY_URI=#"`
$ECHO $SERVER_DEPLOY_URI >> /tmp/.amsilent
PASSWORD_DEPLOY_URI=`grep com.sun.identity.password.deploymentDescriptor= \
  $AMCONFIG | sed -e "s#com.sun.identity.password.deploymentDescriptor=#PASSWORD_DEPLOY_URI=#"`echo $PASSWORD_DEPLOY_URI >> /tmp/.amsilent

###COMMON_DEPLOY_URI=/amcommon
if [ -f AMPLATFORM ] ; then
    COOKIE_DOMAIN=`sed -n -e "/iplanet-am-platform-cookie-domains/,/AttributeSchema/p" $AMPLATFORM | grep "<Value>" | sed -e "s/<Value>//" | sed -e "s#</Value>##" | sed -e "s# ##g"`
    $ECHO "COOKIE_DOMAIN=$COOKIE_DOMAIN" >> /tmp/.amsilent
fi
JAVA_HOME=`grep com.iplanet.am.jdk.path= $AMCONFIG \
  | sed -e "s#com.iplanet.am.jdk.path=#JAVA_HOME=#"`
$ECHO $JAVA_HOME >> /tmp/.amsilent

PLATFORM_LOCALE=`grep com.iplanet.am.locale= $AMCONFIG \
  | sed -e "s#com.iplanet.am.locale=#PLATFORM_LOCALE=#"`
$ECHO $PLATFORM_LOCALE >> /tmp/.amsilent
if [ -f $AMXML ]; then
    XML_ENCODING=`grep encoding $AMXML | awk -F= '{print $NF}'|awk -F\" '{print $2}'`
    $ECHO "XML_ENCODING=$XML_ENCODING" >> /tmp/.amsilent
fi

### NEW_INSTANCE=false
NEW_OWNER=`ls -l $AMCONFIG | awk 'BEGIN { FS=" " } { print $3 }'`
$ECHO "NEW_OWNER=$NEW_OWNER" >> /tmp/.amsilent
NEW_GROUP=`ls -l $AMCONFIG | awk 'BEGIN { FS=" " } { print $4 }'`
$ECHO "NEW_GROUP=$NEW_GROUP" >> /tmp/.amsilent

CONTAINER_CERTDB_DIR=`grep ^com.iplanet.am.admin.cli.certdb.dir $AMCONFIG \
  | sed -e "s#com.iplanet.am.admin.cli.certdb.dir=##"`
$ECHO "CONTAINER_CERTDB_DIR=$CONTAINER_CERTDB_DIR" >> /tmp/.amsilent
CONTAINER_CERTDB_PREFIX=`grep ^com.iplanet.am.admin.cli.certdb.prefix $AMCONFIG \
  | sed -e "s#com.iplanet.am.admin.cli.certdb.prefix=##"`
$ECHO "CONTAINER_CERTDB_PREFIX=$CONTAINER_CERTDB_PREFIX" >> /tmp/.amsilent
COOKIE_ENCODE=`grep com.iplanet.am.cookie.encode $AMCONFIG \
  |  sed -e "s#com.iplanet.am.cookie.encode=##"`
$ECHO "COOKIE_ENCODE=$COOKIE_ENCODE" >> /tmp/.amsilent
USER_NAMING_ATTR=`grep com.sun.identity.authentication.super.user $AMCONFIG \
  | awk 'BEGIN { FS="=" } { print $2 }'`
$ECHO "USER_NAMING_ATTR=$USER_NAMING_ATTR" >> /tmp/.amsilent
WEBAPPSDIR=`grep com.iplanet.am.install.basedir $AMCONFIG \
  | sed -e "s#com.iplanet.am.install.basedir=##" | sed -e "s#/WEB-INF##"`
$ECHO "WEBAPPSDIR=$WEBAPPSDIR" >> /tmp/.amsilent
ENCLDAPUSERPASSWD=`grep com.iplanet.am.service.secret $AMCONFIG \
  | sed -e "s#com.iplanet.am.service.secret=##"`
$ECHO "ENCLDAPUSERPASSWD=$ENCLDAPUSERPASSWD" >> /tmp/.amsilent
AM_ENC_PWD=`grep am.encryption.pwd $AMCONFIG \
  | sed -e "s#am.encryption.pwd=##"`
$ECHO "AM_ENC_PWD=$AM_ENC_PWD" >> /tmp/.amsilent
if [ -f $AMSAML ]; then
    SAML_SITEID=`grep siteid= $AMSAML | awk 'BEGIN { FS="|" } { print $2 }' \
         | sed -e "s#siteid=##"`
    $ECHO "SAMLSITEID=$SAML_SITEID" >> /tmp/.amsilent
fi
WEB_CONTAINER=`grep com.sun.identity.webcontainer= $AMCONFIG \
  | sed -e "s#com.sun.identity.webcontainer=##"`
$ECHO "WEB_CONTAINER=$WEB_CONTAINER" >> /tmp/.amsilent
if [ -f $AM2BAK ]; then
    WS61_HOME=`grep WS_LOCATION= $AM2BAK | sed -e "s#WS_LOCATION=##" \
  	| sed -e "s# ##g"`
    $ECHO "WS61_HOME=$WS61_HOME" >> /tmp/.amsilent
fi

#################
## The values are fixed in the script
$ECHO "DIT_COMPLIANCE=false" >> /tmp/.amsilent
$ECHO "DCTREE_SUFFIX=false" >> /tmp/.amsilent
$ECHO "UM_ENABLED=true" >> /tmp/.amsilent
#################

$ECHO "ORG_NAMING_ATTR=o" >> /tmp/.amsilent
$ECHO "ORG_OBJECT_CLASS=sunmanagedorganization" >> /tmp/.amsilent
$ECHO "USER_OBJECT_CLASS=inetorgperson" >> /tmp/.amsilent
$ECHO "DEFAULT_ORGANIZATION=" >> /tmp/.amsilent
}

############
## main
###########

check_os

check_root_user

get_host_info

get_base_dir
export BASEDIR

get_backup_dir

create_silent_file

. /tmp/.amsilent
## backup existing AMConfig.properties
if [ -f $CONFIG_DIR/AMConfig.properties ]; then
    $CP $CONFIG_DIR/AMConfig.properties $BACKUP_DIR/AMConfig.properties.6.2-RTM
fi


## backup serverconfig.xml
if [ -f $CONFIG_DIR/serverconfig.xml ]; then
    $CP $CONFIG_DIR/serverconfig.xml $BACKUP_DIR/serverconfig.xml.6.2
fi

## backup files under BASE_DIR
if [ -d $BASEDIR/identity ]; then
    $TAR cfzP $BACKUP_DIR/${BACKUP_FILENAME} $BASEDIR/identity
fi
