#!/bin/sh
###############################################################################
# Install utility for IBM i
#
# Copyright IBM Corp. 2012
# The source code for this program is not published or other-
# wise divested of its trade secrets, irrespective of what has
# been deposited with the U.S. Copyright Office.
# 
# ----------------------------------------------------------------------------
#
# You can optionally run the _iPostInstallUtility script after unzipping the
# product archive file on IBM i. However, this step is only for administrative 
# installations. Do not use this command for private user installations.
# The administrator must have *ALLOBJ and *SECADM special authority to run this 
# script.
#
#

usage() {
  echo ""
  echo "Usage: _iPostInstallUtility [options]"
  echo ""
  echo "Options:"
  echo "  --action [SETUPNATIVE | POSTINSTALLEXIT | POSTFPEXIT ]"
  echo "  --installroot install_root"
  echo "  --userroot user_root"
  echo ""
  echo "The --installroot option is required by the"
  echo "POSTINSTALLEXIT and POSTFPEXIT actions for" 
  echo "InstallationManager type installs and is otherwise"   
  echo "ignored."
  echo "The --userroot option is required by the"
  echo "POSTINSTALLEXIT action for InstallationManager type"
  echo "installs and is otherwise ignored."
  exit 1
}

set_wlp_install_dir() {
        CUR_DIR=`pwd`
        WLP_DIR=`dirname ${0}`/../../../../
        cd "${WLP_DIR}"
        WLP_INSTALL_DIR=`pwd`
        cd "${CUR_DIR}"
}

setInDefaultEnv() {
  echo "Setting $1=$2 in ${WLP_INSTALL_DIR}/etc/default.env."
  echo "# _iPostInstallUtility:" >> ${WLP_INSTALL_DIR}/etc/default.env
  echo "$1=$2" >> ${WLP_INSTALL_DIR}/etc/default.env
}

##
## evalJavaPropsFile: Reads Java properties from file specified in $1,
## and for every property it replaces all "." with "_" in the property name, 
## sets the resulting named script variable to the property value and exports 
## the variable.
evalJavaPropsFile()
{
  if [ -f "$1" ]; then
    while read -r line; do
      case $line in
      \#*);;
      *=*)
        # Only accept alphanumeric variable names to avoid eval complexities.
        if var=`echo "$line" | sed -e 's/^\([a-zA-Z0-9_\.][a-zA-Z0-9_\.]*\)=.*/\1/'`; then
          var=`echo $var | sed -e 's/\./_/g'`
          value=\'`echo "$line" | sed -e 's/[^=]*=//' -e s/\'/\'\"\'\"\'/g`\'
          eval "$var=$value; export $var"
        fi
      esac
    done < "$1"
  fi
}

######################################################################
# post_fp_exit: Restore native objects after applying fixpacks
######################################################################
post_fp_exit() {

echo "Executing post_fp_exit"

#Load the location of the WAS_PRODUCT_LIB, as setup_native determines it dynamically
. ${WLP_INSTALL_DIR}/etc/default.env
PROD_LIB=$WAS_PRODUCT_LIB
echo "WLP install directory is ${WLP_INSTALL_DIR}"
echo "Product library is ${PROD_LIB}"

# Determine objects to restore
PROD_PGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/pgms)
PROD_SRVPGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms)
ALL_PROD_PRODUCT_PGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/product/pgms)
PROD_PRODUCT_PGMS=""

for PGM1 in $ALL_PROD_PRODUCT_PGMS
  do
    case "${PGM1}" in
    'qwas01mx') if [ ${PRODUCT_EDITION} = "EXPRESS" ] && [ ${IS_IM_INSTALL} ]; then
        PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
      fi
    ;;
    'qwas02mx') if [ ${PRODUCT_EDITION} = "BASE" ] && [ ${IS_IM_INSTALL} ]; then
        PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
      fi
    ;;
    'qwas03mx') if [ ${PRODUCT_EDITION} = "ND" ] && [ ${IS_IM_INSTALL} ]; then
        PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
      fi
    ;;
    'qwas05mx') if [ ${PRODUCT_EDITION} = "LIBERTY_CORE" ] && [ ${IS_IM_INSTALL} ]; then
        if [ -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWAS05M.PRDLOD ]; then
           PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
        fi
      fi
    ;;
    *) PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
    ;;
    esac
  done

# Create temporary save file
system "QSYS/CRTSAVF FILE(QGPL/${TMP_SF})"

# Restore program objects - these go to the product library for the install
for PGM in ${PROD_PGMS} ; do
  echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/pgms/$PGM ...
  system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/pgms/${PGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${PROD_LIB}) ${V6R1FRC}"
done

# Restore shared product program objects - these go to the shared product library for the install
for PRDPGM in ${PROD_PRODUCT_PGMS} ; do
  echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/product/pgms/$PRDPGM ...
  system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/product/pgms/${PRDPGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${SHR_PROD_LIB}) ${V6R1FRC}"
done

# Restore service program objects - these go to the product library for the install
for SRVPGM in ${PROD_SRVPGMS} ; do
  echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/$SRVPGM ...
    system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/${SRVPGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
    system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${PROD_LIB}) ${V6R1FRC}"
done

# Delete temporary save file
system "QSYS/DLTF FILE(QGPL/${TMP_SF})"

# Update the *PGM and *SRVPGM to be bound to product library for this install
# This must be done after all *PGMs and *SRVPGMs restored to avoid dependency problems
for SRVPGM in ${PROD_SRVPGMS} ; do
  echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/$SRVPGM ...
    system "QSYS/UPDSRVPGM SRVPGM(${PROD_LIB}/${SRVPGM}) MODULE(*NONE) SRVPGMLIB(${PROD_LIB})"
done

for PGM in ${PROD_PGMS} ; do
  echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/pgms/$PGM ...
    system "QSYS/UPDPGM PGM(${PROD_LIB}/${PGM}) MODULE(*NONE) SRVPGMLIB(${PROD_LIB})"
done

# Verify existence of objects restored
for PGM in ${PROD_PGMS} ; do
    if [ ! -e /QSYS.LIB/${PROD_LIB}.LIB/${PGM}.PGM ]; then
      echo "Error: ${PROD_LIB}/${PGM} does not exist."
      ERR_CHK=1
    fi
done
for SRVPGM in ${PROD_SRVPGMS} ; do
    if [ ! -e /QSYS.LIB/${PROD_LIB}.LIB/${SRVPGM}.SRVPGM ]; then
      echo "Error: ${PROD_LIB}/${SRVPGM} does not exist."
      ERR_CHK=1
    fi
done

# Set ownership and authorities on install dir
if [ ${IS_IM_INSTALL} ]; then
  chown -R QSYS ${INSTALL_ROOT}
else
  chown -R QSYS ${WLP_INSTALL_DIR}
  chmod -R o=rx ${WLP_INSTALL_DIR}
fi

}


######################################################################
# setup_native: Restore native objects after installing
######################################################################
setup_native() {

echo "Executing setup_native"

SHR_PROD_LIB=QWAS9
CREATED_SHR_PROD_LIB=0
TMP_SF=QTMPWASSF
SAV_LIB=QWAS9

V6R1FRC="FRCOBJCVN(*YES *ALL)"

WAS_PRODUCT_LIB=

  # Create underlying product library for stuff common to all installs
  if [ -e /QSYS.LIB/${SHR_PROD_LIB}.LIB ]; then
    CREATED_SHR_PROD_LIB=1
    echo "Shared Product library, ${SHR_PROD_LIB}, already exists"
  else
    system "QSYS/CRTLIB LIB(${SHR_PROD_LIB}) AUT(*USE)"
    ERR_CHK=$?
    if [ ${ERR_CHK} -ne 0 ]; then
      echo "Error: Failed to create library ${SHR_PROD_LIB}"
      exit 1
    fi
    system "CHGOBJOWN OBJ(${SHR_PROD_LIB}) OBJTYPE(*LIB) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
  fi
  # Determine the name of the PROD_LIB to use for this install
  
  ALPHABET="A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
  PROD_LIB=${SHR_PROD_LIB}A
  for letter in $ALPHABET
  do
	if [ -e /QSYS.LIB/${PROD_LIB}.LIB ]; then
	PROD_LIB=${SHR_PROD_LIB}${letter}
	fi	
  done
  # Create product library for this install
  if [ -e /QSYS.LIB/${PROD_LIB}.LIB ]; then
    echo "Product library, ${PROD_LIB}, already exists"
  else
    system "QSYS/CRTLIB LIB(${PROD_LIB}) AUT(*USE)"
    ERR_CHK=$?
    if [ ${ERR_CHK} -ne 0 ]; then
      echo "Error: Failed to create library ${PROD_LIB}"
      exit 1
    fi
    system "CHGOBJOWN OBJ(${PROD_LIB}) OBJTYPE(*LIB) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
  fi

# Write the library info to the properties file
if [ -e ${WLP_INSTALL_DIR}/etc/default.env ]; then
  rm -rf ${WLP_INSTALL_DIR}/etc/default.env
else
  if [ ! -e ${WLP_INSTALL_DIR}/etc ]; then
    mkdir -p ${WLP_INSTALL_DIR}/etc
  fi
fi
touch -C 819 ${WLP_INSTALL_DIR}/etc/default.env
chown QSYS ${WLP_INSTALL_DIR}/etc/default.env
echo "############# Do not alter or edit this file! #############" >> ${WLP_INSTALL_DIR}/etc/default.env
setInDefaultEnv WAS_SHARED_LIB "${SHR_PROD_LIB}" 
setInDefaultEnv WAS_PRODUCT_LIB "${PROD_LIB}"
setInDefaultEnv WAS_PRODUCT_LIB_PATH "/QSYS.LIB/${PROD_LIB}.LIB" 

# Determine objects to restore
PROD_PGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/pgms)
PROD_SRVPGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms)
ALL_PROD_PRODUCT=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/product)
ALL_PROD_PRODUCT_PGMS=$(ls ${WLP_INSTALL_DIR}/lib/native/os400/product/pgms)
PROD_PRODUCT_PGMS=""
PROD_PRODUCT=""

for PGM1 in $ALL_PROD_PRODUCT_PGMS
  do
    case "${PGM1}" in
    'qwas01mx') if [ ${PRODUCT_EDITION} = "EXPRESS" ] && [ ${IS_IM_INSTALL} ]; then
        PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
      fi
    ;;
    'qwas02mx') if [ ${PRODUCT_EDITION} = "BASE" ] && [ ${IS_IM_INSTALL} ]; then
        PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
      fi
    ;;
    'qwas03mx') if [ ${PRODUCT_EDITION} = "ND" ] && [ ${IS_IM_INSTALL} ]; then
        PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
      fi
    ;;
    'qwas05mx') if [ ${PRODUCT_EDITION} = "LIBERTY_CORE" ] && [ ${IS_IM_INSTALL} ]; then
        if [ ${CREATED_SHR_PROD_LIB} -eq 0 ]; then
           PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
	fi
      fi
    ;;
    *) PROD_PRODUCT_PGMS="${PROD_PRODUCT_PGMS} ${PGM1}"
    ;;
    esac
  done
for PGM2 in $ALL_PROD_PRODUCT
  do
    case "${PGM2}" in
    'qwas01') if [ ${PRODUCT_EDITION} = "EXPRESS" ] && [ ${IS_IM_INSTALL} ]; then
        PROD_PRODUCT="${PROD_PRODUCT} ${PGM2}"
      fi
    ;;
    'qwas02') if [ ${PRODUCT_EDITION} = "BASE" ] && [ ${IS_IM_INSTALL} ]; then
        PROD_PRODUCT="${PROD_PRODUCT} ${PGM2}"
      fi
    ;;
    'qwas03') if [ ${PRODUCT_EDITION} = "ND" ] && [ ${IS_IM_INSTALL} ]; then
        PROD_PRODUCT="${PROD_PRODUCT} ${PGM2}"
      fi
    ;;
    'qwas05') if [ ${PRODUCT_EDITION} = "LIBERTY_CORE" ] && [ ${IS_IM_INSTALL} ]; then
        if [ ${CREATED_SHR_PROD_LIB} -eq 0 ]; then
           PROD_PRODUCT="${PROD_PRODUCT} ${PGM2}"
	fi
      fi
    ;;
    'pgms')
    ;;
    *) PROD_PRODUCT="${PROD_PRODUCT} ${PGM2}"
    ;;
    esac
  done

# Create temporary save file
system "QSYS/CRTSAVF FILE(QGPL/${TMP_SF})"

# Restore program objects - these go to the product library for the install
for PGM in ${PROD_PGMS} ; do
  echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/pgms/$PGM ...
  system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/pgms/${PGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${PROD_LIB}) ${V6R1FRC}"
done

# Restore shared product program objects - these go to the shared product library for the install
for PRDPGM in ${PROD_PRODUCT_PGMS} ; do
  echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/product/pgms/$PRDPGM ...
  system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/product/pgms/${PRDPGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${SHR_PROD_LIB}) ${V6R1FRC}"
done

# Restore service program objects - these go to the product library for the install
for SRVPGM in ${PROD_SRVPGMS} ; do
  echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/$SRVPGM ...
    system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/${SRVPGM}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
    system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${PROD_LIB}) ${V6R1FRC}"
done

# Restore product def/loads and message file objects - these go to the WAS shared common product library
for PRODPART in ${PROD_PRODUCT} ; do
  # Do not restore Product Loads if they already exist (from another install).  This will remove any PTFs applied for the product/option.
  if [ -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/${PRODPART}M.PRDLOD ]; then
	echo "Skipping ${WLP_INSTALL_DIR}/lib/native/os400/product/${PRODPART}"
  else
  	echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/product/$PRODPART ...
  	system "QSYS/CPYFRMSTMF FROMSTMF('${WLP_INSTALL_DIR}/lib/native/os400/product/${PRODPART}') TOMBR('/QSYS.LIB/QGPL.LIB/${TMP_SF}.FILE') MBROPT(*REPLACE)"
  	system "QSYS/RSTOBJ OBJ(*ALL) SAVLIB(${SAV_LIB}) DEV(*SAVF) OBJTYPE(*ALL) SAVF(QGPL/${TMP_SF}) RSTLIB(${SHR_PROD_LIB}) ${V6R1FRC}"
  fi
done

# Delete temporary save file
system "QSYS/DLTF FILE(QGPL/${TMP_SF})"

# Update the *PGM and *SRVPGM to be bound to product library for this install
# This must be done after all *PGMs and *SRVPGMs restored to avoid dependency problems
for SRVPGM in ${PROD_SRVPGMS} ; do
  echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/srvpgms/$SRVPGM ...
    system "QSYS/UPDSRVPGM SRVPGM(${PROD_LIB}/${SRVPGM}) MODULE(*NONE) SRVPGMLIB(${PROD_LIB})"
done

for PGM in ${PROD_PGMS} ; do
  echo Processing ${WLP_INSTALL_DIR}/lib/native/os400/pgms/$PGM ...
  system "QSYS/UPDPGM PGM(${PROD_LIB}/${PGM}) MODULE(*NONE) SRVPGMLIB(${PROD_LIB})"
done

# Verify existence of objects restored
for PGM in ${PROD_PGMS} ; do
  if [ ! -e /QSYS.LIB/${PROD_LIB}.LIB/${PGM}.PGM ]; then
    echo "Error: ${PROD_LIB}/${PGM} does not exist."
    ERR_CHK=1
  fi
done
for SRVPGM in ${PROD_SRVPGMS} ; do
    if [ ! -e /QSYS.LIB/${PROD_LIB}.LIB/${SRVPGM}.SRVPGM ]; then
      echo "Error: ${PROD_LIB}/${SRVPGM} does not exist."
      ERR_CHK=1
    fi
done

if [ ${ERR_CHK} -eq 1 ]; then
  if [ ${ACTION} = "SETUPNATIVE" ]; then
    exit 1
  fi
fi

}

######################################################################
#post_install_exit: Create native objects and set authorities
######################################################################
post_install_exit() {

echo "Executing post_install_exit"

# Create the user directory
if [ ${IS_IM_INSTALL} ]; then
    if [ ! -e ${USER_ROOT} ]; then
      mkdir -p ${USER_ROOT}
      chown QSYS ${USER_ROOT}
      chmod o=rx ${USER_ROOT}
    fi
    WLPUSRDIR=${USER_ROOT}/wlp/usr
    WLPOUTPUTDIR=${USER_ROOT}/wlp/output/servers
    if [ ! -e ${USER_ROOT}/wlp ]; then
      mkdir ${USER_ROOT}/wlp
    fi
    if [ ! -e ${WLPUSRDIR} ]; then
      if [ -e ${WLP_INSTALL_DIR}/usr ]; then
	   cp -R ${WLP_INSTALL_DIR}/usr ${USER_ROOT}/wlp
      else mkdir ${WLPUSRDIR}
      fi
    fi
    if [ ! -e ${WLPOUTPUTDIR} ]; then
      mkdir -p ${WLPOUTPUTDIR}
    fi
    chown -R QSYS ${USER_ROOT}/wlp
    chmod -R 755 ${USER_ROOT}/wlp
fi

#Load the location of the WAS_PRODUCT_LIB, as setup_native determines it dynamically
. ${WLP_INSTALL_DIR}/etc/default.env
PROD_LIB=$WAS_PRODUCT_LIB
echo "WLP install directory is ${WLP_INSTALL_DIR}"
echo "Product library is ${PROD_LIB}"

# Register QEJBSVR with security function
# Allows server to run as QEJBSVR
system "QSYS/CALL PGM(${PROD_LIB}/QWAS00)"

# Add private authorities for product library parts
system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/QWLPSEC) OBJTYPE(*SRVPGM) USER(QEJBSVR) AUT(*USE)"
system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/QWLPCMN) OBJTYPE(*PGM) USER(QEJBSVR) AUT(*USE)"
system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/QWLPSTRSVR) OBJTYPE(*PGM) USER(QEJBSVR) AUT(*USE)"
system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/QWLPSTRSVR) OBJTYPE(*PGM) USER(*PUBLIC) AUT(*EXCLUDE)"

# Create jobd, jobq, sbsd, etc.
if [ ! -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWAS9.CLS ]; then
  system "QSYS/CRTCLS CLS(${SHR_PROD_LIB}/QWAS9) RUNPTY(20) TIMESLICE(2000) TEXT('WebSphere Application Server class')"
fi
system "QSYS/CHGOBJOWN  OBJ(${SHR_PROD_LIB}/QWAS9) OBJTYPE(*CLS) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
if [ ! -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWASJOBQ.JOBQ ]; then
  system "QSYS/CRTJOBQ JOBQ(${SHR_PROD_LIB}/QWASJOBQ) TEXT('WebSphere Application Server job queue') OPRCTL(*YES)"
fi
system "QSYS/CHGOBJOWN  OBJ(${SHR_PROD_LIB}/QWASJOBQ) OBJTYPE(*JOBQ) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
if [ ! -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWASOUTQ.OUTQ ]; then
  system "QSYS/CRTOUTQ OUTQ(${SHR_PROD_LIB}/QWASOUTQ) TEXT('WebSphere Application Server output queue')"
fi
system "QSYS/CHGOBJOWN  OBJ(${SHR_PROD_LIB}/QWASOUTQ) OBJTYPE(*OUTQ) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
if [ ! -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWASJOBD.JOBD ]; then
  system "QSYS/CRTJOBD JOBD(${SHR_PROD_LIB}/QWASJOBD) JOBQ(${SHR_PROD_LIB}/QWASJOBQ) OUTQ(${SHR_PROD_LIB}/QWASOUTQ) TEXT('WebSphere Application Server job description') INLLIBL(*SYSVAL) LOG(4 0 *SECLVL) JOBMSGQFL(*WRAP) ALWMLTTHD(*YES)"
fi
system "QSYS/CHGOBJOWN  OBJ(${SHR_PROD_LIB}/QWASJOBD) OBJTYPE(*JOBD) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"
if [ ! -e /QSYS.LIB/${SHR_PROD_LIB}.LIB/QWAS9.SBSD ]; then
  system "QSYS/CRTSBSD SBSD(${SHR_PROD_LIB}/QWAS9) POOLS((1 *BASE)) MAXJOBS(*NOMAX) TEXT('WebSphere Application Server subsystem description')"
  system "QSYS/ADDRTGE SBSD(${SHR_PROD_LIB}/QWAS9) SEQNBR(9999) CMPVAL(*ANY) PGM(QSYS/QCMD)"
  system "QSYS/ADDJOBQE SBSD(${SHR_PROD_LIB}/QWAS9) JOBQ(${SHR_PROD_LIB}/QWASJOBQ) MAXACT(*NOMAX) SEQNBR(9999)"
fi
system "QSYS/CHGOBJOWN  OBJ(${SHR_PROD_LIB}/QWAS9) OBJTYPE(*SBSD) NEWOWN(QSYS) CUROWNAUT(*REVOKE)"

# Add private auths for QEJBSVR
system "QSYS/GRTOBJAUT OBJ(${SHR_PROD_LIB}/QWAS9) OBJTYPE(*SBSD) USER(QEJBSVR) AUT(*OBJMGT *OBJOPR *READ *EXECUTE)"
system "QSYS/GRTOBJAUT OBJ(${SHR_PROD_LIB}/QWASJOBD) OBJTYPE(*JOBD) USER(QEJBSVR) AUT(*OBJMGT *OBJOPR *READ *EXECUTE)"
system "QSYS/GRTOBJAUT OBJ(${SHR_PROD_LIB}/QWASJOBQ) OBJTYPE(*JOBQ) USER(QEJBSVR) AUT(*USE)"
system "QSYS/GRTOBJAUT OBJ(${SHR_PROD_LIB}/QWAS9) OBJTYPE(*CLS) USER(QEJBSVR) AUT(*USE)"

# Add service table entries
system "QSYS/ADDSRVTBLE SERVICE('was9-admin-ssl') PORT(9043) PROTOCOL('tcp') TEXT('Administrative console SSL port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-inthttp') PORT(9080) PROTOCOL('tcp') TEXT('Internal HTTP port')"

# Set ownership and authorities on install dir
if [ ${IS_IM_INSTALL} ]; then
  chown -R QSYS ${INSTALL_ROOT}
else
  chown -R QSYS ${WLP_INSTALL_DIR}
  chmod -R o=rx ${WLP_INSTALL_DIR}
fi

#Set WLP_DEFAULT_JAVA_HOME, WLP_DEFAULT_USER_DIR and WLP_DEFAULT_OUTPUT_DIR in default.env
#and set permissions for QEJBSVR
WLP_DEFAULT_JAVA_HOME=
WLP_DEFAULT_USER_DIR=
WLP_DEFAULT_OUTPUT_DIR=
#Source default.env if it exists, otherwise create it
if [ ! -e ${WLP_INSTALL_DIR}/etc/default.env ]; then
  if [ ! -e ${WLP_INSTALL_DIR}/etc ]; then
    mkdir -p ${WLP_INSTALL_DIR}/etc
  fi
  touch -C 819 ${WLP_INSTALL_DIR}/etc/default.env
  chown QSYS ${WLP_INSTALL_DIR}/etc/default.env
else
  . ${WLP_INSTALL_DIR}/etc/default.env
fi

if [ ${WLP_DEFAULT_JAVA_HOME} ]; then
  if [ -e ${WLP_DEFAULT_JAVA_HOME} ]; then
    SET_VAR_IN_SERVER_ENV=
  fi
else
  setInDefaultEnv WLP_DEFAULT_JAVA_HOME $JAVA_LOCATION
fi

if [ ${WLPUSRDIR} ]; then
  if [ ${WLP_DEFAULT_USER_DIR} ]; then
      if [ -e ${WLPUSRDIR} ]; then
       if [ ! ${#WLPUSRDIR} = ${#WLP_DEFAULT_USER_DIR} ] || [ ! `echo ${WLP_DEFAULT_USER_DIR} | grep -i "${WLPUSRDIR}"` ]; then
          setInDefaultEnv WLP_DEFAULT_USER_DIR ${WLPUSRDIR}
        fi
      else
        echo "Error: Directory ${WLPUSRDIR} does not exist."
        ERR_CHK=1
      fi
  else
      if [ -e ${WLPUSRDIR} ]; then
        setInDefaultEnv WLP_DEFAULT_USER_DIR ${WLPUSRDIR}
      else
        echo "Error: Directory ${WLPUSRDIR} does not exist."
        ERR_CHK=1
      fi
  fi
fi

if [ ${WLPOUTPUTDIR} ]; then
  if [ ${WLP_DEFAULT_OUTPUT_DIR} ]; then
      if [ -e ${WLPOUTPUTDIR} ]; then
         if [ ! ${#WLP_DEFAULT_OUTPUT_DIR} = ${#WLPOUTPUTDIR} ] || [ ! `echo ${WLP_DEFAULT_OUTPUT_DIR} | grep -i "${WLPOUTPUTDIR}"` ]; then
          setInDefaultEnv WLP_DEFAULT_OUTPUT_DIR ${WLPOUTPUTDIR}
        fi
      else
        echo "Error: Directory ${WLPOUTPUTDIR} does not exist."
        ERR_CHK=1
      fi
  else
      if [ -e ${WLPOUTPUTDIR} ]; then
        setInDefaultEnv WLP_DEFAULT_OUTPUT_DIR ${WLPOUTPUTDIR}
      else
        echo "Error: Directory ${WLPOUTPUTDIR} does not exist."
        ERR_CHK=1
      fi
  fi
fi

${WLP_INSTALL_DIR}/lib/native/os400/bin/_iAuthUtility --rolename server --userprofilename QEJBSVR

if [ ${ERR_CHK} -eq 1 ]; then
  if [ ${ACTION} = "POSTINSTALLEXIT" ]; then
    exit 1
  fi
fi

}

######################################################################
#do_all_install: Execute all install actions
######################################################################
do_all_install() {
echo "Executing $ACTION"
  setup_native
  post_install_exit
}

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

if [ "`uname`" != "OS400" ]; then
exit 1
fi

ACTION=DOALL
INSTALL_ROOT=
USER_ROOT=
ERR_CHK=0

while [ $# -gt 0 ]; do
  case $1 in
    '--action') if [ $# -gt 1 ]; then
	  ACTION=$2;shift
	fi
    ;;
    '--installroot') if [ $# -gt 1 ]; then
	  INSTALL_ROOT=$2;shift
	fi
    ;;
    '--userroot') if [ $# -gt 1 ]; then
	  USER_ROOT=$2;shift
	fi
    ;;
    *) usage
    ;;
  esac
  shift
done

set_wlp_install_dir
echo "WebSphere liberty profile install root is ${WLP_INSTALL_DIR}"
SHR_PROD_LIB=QWAS9
TMP_SF=QTMPWASSF
SAV_LIB=QWAS9
V6R1FRC="FRCOBJCVN(*YES *ALL)"

JAVA_LOCATION=/QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit

evalJavaPropsFile ${WLP_INSTALL_DIR}/lib/versions/WebSphereApplicationServer.properties
echo "Product edition is "${com_ibm_websphere_productEdition}
echo "Installation type is "${com_ibm_websphere_productInstallType}

IS_IM_INSTALL=
if [ ${com_ibm_websphere_productInstallType} = "InstallationManager" ]; then
  IS_IM_INSTALL=true
fi

PRODUCT_EDITION=${com_ibm_websphere_productEdition}

umask 022

case "$ACTION" in
  'DOALL') do_all_install
  ;;
  'SETUPNATIVE') setup_native
  ;;
  'POSTINSTALLEXIT') 
  if [ ${IS_IM_INSTALL} ]; then
    if [ ! ${INSTALL_ROOT} ]; then
      usage
    fi
    if [ ! ${USER_ROOT} ]; then
      usage
    fi
  fi
  post_install_exit
  ;;
  'POSTFPEXIT') 
  if [ ${IS_IM_INSTALL} ]; then
    if [ ! ${INSTALL_ROOT} ]; then
      usage
    fi
  fi
  post_fp_exit
  ;;
  *)
  usage
  ;;
esac

exit ${ERR_CHK}