#!/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

IS_INSTALL_ETCDIR=/etc/opt/sun
PRODUCT_DIR=identity
CONFIG_DIR=${IS_INSTALL_ETCDIR}/${PRODUCT_DIR}/config
AMCONFIG=$CONFIG_DIR/AMConfig.properties

############################################################
# get base dir
############################################################
get_base_dir() {
  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
}

##############################################################
# replaces a line in the specified file.
##############################################################
replace_line() {
  file=$1
  match=$2
  new=$3

  $CP $file $file-orig-$$
  $SED -e "
/$match/ {
c\\
$new
}" $file > $file-tmp
  $MV $file-tmp $file
  $RM $file-orig-$$
}

##############################################################
# generate silent file for amconfig
##############################################################
generate_silent_file() {
  SILENTFILE=/tmp/amsilent
  $CP $INSTALL_DIR/bin/amsamplesilent $SILENTFILE
  replace_line $SILENTFILE "^DEPLOY_LEVEL=" "DEPLOY_LEVEL=21"
  replace_line $SILENTFILE "^DIRECTORY_MODE=" "DIRECTORY_MODE=5"
  replace_line $SILENTFILE "^BASEDIR=" "BASEDIR=$BASEDIR"

  SERVER_PROTOCOL=`$GREP "^com.iplanet.am.server.protocol" $AMCONFIG | \
      $CUT -d= -f2`
  replace_line $SILENTFILE "^SERVER_PROTOCOL=" \
      "SERVER_PROTOCOL=$SERVER_PROTOCOL"

  SERVER_HOST=`$GREP "^com.iplanet.am.server.host=" $AMCONFIG | \
      $CUT -d= -f2`
  replace_line $SILENTFILE "^#SERVER_HOST=" "SERVER_HOST=$SERVER_HOST"

  SERVER_NAME=`$ECHO $SERVER_HOST | $CUT -d. -f1`
  replace_line $SILENTFILE "^#SERVER_NAME=" "SERVER_NAME=$SERVER_NAME"

  SERVER_PORT=`$GREP "^com.iplanet.am.server.port=" $AMCONFIG | \
      $CUT -d= -f2`
  replace_line $SILENTFILE "^#SERVER_PORT=" "SERVER_PORT=$SERVER_PORT"

  DS_HOST=`$GREP "^com.iplanet.am.directory.host=" $AMCONFIG | \
      $CUT -d= -f2`
  replace_line $SILENTFILE "^#DS_HOST=" "DS_HOST=$DS_HOST"

  ROOT_SUFFIX=`$GREP "^com.iplanet.am.rootsuffix=" $AMCONFIG | \
      $CUT -d= -f2-`
  replace_line $SILENTFILE "^#ROOT_SUFFIX=" "ROOT_SUFFIX=\"$ROOT_SUFFIX\""

  AM_ENC_PWD=`$GREP "^am.encryption.pwd=" $AMCONFIG | \
      $CUT -d= -f2`
  replace_line $SILENTFILE "^#AM_ENC_PWD=" "AM_ENC_PWD=$AM_ENC_PWD"

  OS=`uname`
  if [ $OS = "SunOS" ]; then
    replace_line $SILENTFILE "^#PAM_SERVICE_NAME=" "PAM_SERVICE_NAME=other"
  fi

  WEB_CONTAINER=`$GREP "^com.sun.identity.webcontainer=" $AMCONFIG | \
      $CUT -d= -f2`
  if [ $WEB_CONTAINER = "WEB_CONTAINER" ]; then
    WEB_CONTAINER=WS6
    AM2BAK=$INSTALL_DIR/bin/am2bak

    if [ -f $AM2BAK ]; then
      WS61_HOME=`$GREP WS_LOCATION= $AM2BAK | $CUT -d= -f2`
      replace_line $SILENTFILE "^WS61_HOME=" "WS61_HOME=$WS61_HOME"
    fi
  elif [ $WEB_CONTAINER = "IAS8.1" ]; then
    WEB_CONTAINER=AS8
  elif [ $WEB_CONTAINER = "BEA8.1" ]; then
    WEB_CONTAINER=WL8
  elif [ $WEB_CONTAINER = "IBM5.1" ]; then
    WEB_CONTAINER=WAS5
  fi
  replace_line $SILENTFILE "^#WEB_CONTAINER=" "WEB_CONTAINER=$WEB_CONTAINER"

  CONSOLE_REMOTE=`$GREP "^com.iplanet.am.console.remote=" $AMCONFIG | \
      $CUT -d= -f2`
  replace_line $SILENTFILE "^CONSOLE_REMOTE=" "CONSOLE_REMOTE=$CONSOLE_REMOTE"

  SERVER_DEPLOY_URI=`$GREP "^com.iplanet.am.services.deploymentDescriptor=" \
      $AMCONFIG | $CUT -d= -f2`
  replace_line $SILENTFILE "^SERVER_DEPLOY_URI=" \
      "SERVER_DEPLOY_URI=$SERVER_DEPLOY_URI"

  CONSOLE_DEPLOY_URI=`$GREP "^com.iplanet.am.console.deploymentDescriptor=" \
      $AMCONFIG | $CUT -d= -f2`
  replace_line $SILENTFILE "^CONSOLE_DEPLOY_URI=" \
      "CONSOLE_DEPLOY_URI=$CONSOLE_DEPLOY_URI"

  PASSWORD_DEPLOY_URI=`$GREP "^com.sun.identity.password.deploymentDescriptor="\
      $AMCONFIG | $CUT -d= -f2`
  replace_line $SILENTFILE "^PASSWORD_DEPLOY_URI=" \
      "PASSWORD_DEPLOY_URI=$PASSWORD_DEPLOY_URI"

  USER_NAMING_ATTR=`$GREP "^com.sun.identity.authentication.super.user=" \
      $AMCONFIG | $CUT -d= -f2`
  replace_line $SILENTFILE "^USER_NAMING_ATTR=" \
      "USER_NAMING_ATTR=$USER_NAMING_ATTR"

  LOCALE=`$GREP "^com.iplanet.am.locale=" $AMCONFIG | $CUT -d= -f2`
  replace_line $SILENTFILE "^PLATFORM_LOCALE=" "PLATFORM_LOCALE=$LOCALE"

  XMLFILE=$CONFIG_DIR/xml/amPlatform.xml
  if [ -f $XMLFILE ] ; then
    COOKIE_DOMAIN=`$SED -n -e \
        "/iplanet-am-platform-cookie-domains/,/AttributeSchema/p" $XMLFILE \
        | $GREP "<Value>" \
        | $SED -e "s/<Value>//" \
        | $SED -e "s#</Value>##" \
        | $SED -e "s#<DefaultValues>##" \
        | $SED -e "s#</DefaultValues>##" \
        | $AWK 'BEGIN { FS=" " } { print $1 }'`
    replace_line $SILENTFILE "^#COOKIE_DOMAIN=" "COOKIE_DOMAIN=$COOKIE_DOMAIN"

    XML_ENCODING=`$GREP encoding= $XMLFILE | $CUT -d\" -f4`
    replace_line $SILENTFILE "^XML_ENCODING=" "XML_ENCODING=$XML_ENCODING"
  fi

  XMLFILE=$CONFIG_DIR/xml/idRepoService.xml
  if [ -f $XMLFILE ] ; then
    AM_REALM=`$SED -n -e "/realmMode/,/AttributeSchema/p" $XMLFILE \
        | $GREP "<Value>" \
        | $SED -e "s#<Value>##" \
        | $SED -e "s#</Value>##" \
        | $SED -e "s#<DefaultValues>##" \
        | $SED -e "s#</DefaultValues>##" \
        | $AWK 'BEGIN { FS=" " } { print $1 }'`
    if [ $AM_REALM = "true" ]; then
      AM_REALM=enabled
    else
      AM_REALM=disabled
    fi
    replace_line $SILENTFILE "^AM_REALM=" "AM_REALM=$AM_REALM"
  fi

  NEW_OWNER=`$LS -l $AMCONFIG | $AWK 'BEGIN { FS=" " } { print $3 }'`
  replace_line $SILENTFILE "^#NEW_OWNER=" "NEW_OWNER=$NEW_OWNER"
  NEW_GROUP=`$LS -l $AMCONFIG | $AWK 'BEGIN { FS=" " } { print $4 }'`
  replace_line $SILENTFILE "^#NEW_GROUP=" "NEW_GROUP=$NEW_GROUP"
}

##############################################################
# messages about redeploy
##############################################################
redeploy_message() {
  con=`$RPM -qa | $GREP sun-identity-console-7.0 | $CUT -d- -f1-4`
  svc=`$RPM -qa | $GREP sun-identity-services-7.0 | $CUT -d- -f1-4`
  if [ x$con = "x" ] && [ x$svc = "x" ]; then
    return
  fi

  CALLER=`basename $1`
  if [ $CALLER = "postpatch" ]; then
    $ECHO "
    After patch installation, please redeploy AM applications by following"
  else
    $ECHO "
    After patch is removed, please redeploy AM applications by following"
  fi

  $ECHO "    the release notes (120956-02/rel_notes.html#3). A draft amsilent file
    is created in /tmp directory.

    This amsilent is based on $INSTALL_DIR/bin/amsamplesilent, but with
    some required parameters set according to the AM config files on this
    system.

    The password parameter values in $SILENTFILE contain default values.
    Please uncomment and modify the value of each password parameter,
    and carefully check and make sure the accuracy of other parameters in
    this file. Then run command

    # cd $INSTALL_DIR/bin
    # ./amconfig -s $SILENTFILE
  "
}

##############################################################
# main processing
##############################################################
get_base_dir
generate_silent_file
redeploy_message $0
