#!/usr/bin/qsh
# // 5639-D57, 5630-A36, 5630-A37, 5724-D18 (C) COPYRIGHT International Business Machines Corp. 1997, 2012
# // The source code for this program is not published or otherwise divested
# // of its trade secrets, irrespective of what has been deposited with the
# // U.S. Copyright Office.
#
#############################################################################################
# This script is inovked by the configuration manager during the
# config action phase of the product install.
# The purpose of the script is to set authorities and create native objects 
#
#############################################################################################

if [ $# -ne 2 ]; then
  echo "Error: Missing required parameter"
  echo "Usage: _postinstallexit was_install_root user_data_root"
  exit 1
fi

PROD_ROOT=$1
USER_ROOT=$2
SHR_PROD_LIB=QWAS9
ERR_CHK=0

INSTALLING_TWAS=
if [ -d ${PROD_ROOT}/profileTemplates ]; then
  INSTALLING_TWAS=true
fi

INSTALLING_WLP=
if [ -f ${PROD_ROOT}/wlp/lib/native/os400/bin/_iPostInstallUtility ]; then
  INSTALLING_WLP=true
fi

##################################################
# Create user data directory
##################################################
if [ ! -e ${USER_ROOT} ]; then
  mkdir -p ${USER_ROOT}
  chown QEJBSVR ${USER_ROOT}
  chmod o=rx ${USER_ROOT}
fi

if [ ${INSTALLING_TWAS} ]; then

#Load the location of the PROD_LIB from properties, as _setupNative determines it dynamically
. ${PROD_ROOT}/properties/os400.properties
. ${PROD_ROOT}/properties/productEdition.properties

PROD_LIB=${WAS_PRODUCT_LIB}
PROD_EDITION=${PRODUCT_EDITION}
echo "Product install root is ${PROD_ROOT}"
echo "Product library is ${PROD_LIB}"
echo "User data root is ${USER_ROOT}"
echo "Product edition is ${PROD_EDITION}"

if [ ! -e ${USER_ROOT}/service ]; then
  mkdir ${USER_ROOT}/service
  chown QEJBSVR ${USER_ROOT}/service
  chmod o=rx ${USER_ROOT}/service
fi

##################################################
# Give QEJBSVR *USE authority to QTMHHTTP and 
# QNOTES if they exist
##################################################
if [ -e /QSYS.LIB/QTMHHTTP.USRPRF ]; then
  system "GRTOBJAUT OBJ(QSYS/QTMHHTTP) OBJTYPE(*USRPRF) USER(QEJBSVR) AUT(*USE)"
fi
if [ -e /QSYS.LIB/QNOTES.USRPRF ]; then
  system "GRTOBJAUT OBJ(QSYS/QNOTES) OBJTYPE(*USRPRF) USER(QEJBSVR) AUT(*USE)"
fi

##################################################
# Create history directory
##################################################
#if [ ! -e ${PROD_ROOT}/properties/version/history ]; then
#  mkdir -p ${PROD_ROOT}/properties/version/history
#fi
#chown QSYS ${PROD_ROOT}/properties/version/history
#system "QSYS/CHGAUT OBJ('${PROD_ROOT}/properties/version') USER(QEJBSVR) DTAAUT(*RWX) OBJAUT(*ALL)"
#system "QSYS/CHGAUT OBJ('${PROD_ROOT}/properties/version/history') USER(QEJBSVR) DTAAUT(*RWX) OBJAUT(*ALL)"

##################################################
# Create Java ext symbolic links for J9
##################################################
if [ ! -e ${PROD_ROOT}/java/extj9 ]; then
  mkdir -p ${PROD_ROOT}/java/extj9
fi
chown QSYS ${PROD_ROOT}/java/extj9

if [ -e ${PROD_ROOT}/java/ext/PD.jar ]; then
  system "QSYS/ADDLNK OBJ('${PROD_ROOT}/java/ext/PD.jar') NEWLNK('${PROD_ROOT}/java/extj9/PD.jar') LNKTYPE(*SYMBOLIC)"  
fi
system "QSYS/CHGOWN OBJ('${PROD_ROOT}/java/extj9/PD.jar') NEWOWN(QSYS) SYMLNK(*YES)"

##################################################
# Create lib/ext under product install root
##################################################
if [ ! -e ${PROD_ROOT}/lib/ext ]; then
  mkdir ${PROD_ROOT}/lib/ext
fi
chown QSYS ${PROD_ROOT}/lib/ext

##################################################
# Create userdata directory structure
##################################################
if [ ! -e ${USER_ROOT}/profiles ]; then
  mkdir ${USER_ROOT}/profiles
fi
chown QEJBSVR ${USER_ROOT}/profiles
chmod o=rx ${USER_ROOT}/profiles

if [ ! -e ${USER_ROOT}/profileRegistry/fsdb ]; then
  mkdir -p ${USER_ROOT}/profileRegistry/fsdb
fi
chown -R QEJBSVR ${USER_ROOT}/profileRegistry
chmod -R o=rx ${USER_ROOT}/profileRegistry

##################################################
# Copy WAS registry query tools to /QIBM/WAS
##################################################
if [ -e ${PROD_ROOT}/bin/queryWASinstalls ] && [ -e ${PROD_ROOT}/lib/os400wir.jar ] && [ -e ${PROD_ROOT}/lib/bootstrap400.jar ]; then
  if [ ! -e /QIBM/WAS/bin ]; then
    mkdir -p /QIBM/WAS/bin
  fi
  if [ ! -e /QIBM/WAS/lib ]; then
    mkdir -p /QIBM/WAS/lib
  fi
  cp ${PROD_ROOT}/bin/queryWASinstalls /QIBM/WAS/bin
  cp ${PROD_ROOT}/lib/os400wir.jar /QIBM/WAS/lib
  cp ${PROD_ROOT}/lib/bootstrap400.jar /QIBM/WAS/lib
fi


##################################################
# SERVER SECTION                               ###
# For Express/Base/ND/NDDMZ only               ###
##################################################
if [ "${PROD_EDITION}" = "EXPRESS" ] || [ "${PROD_EDITION}" = "BASE" ] || [ "${PROD_EDITION}" = "ND" ] || [ "${PROD_EDITION}" = "NDDMZ" ]; then


##################################################
# 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}/QWASUREG) OBJTYPE(*SRVPGM) USER(QEJBSVR) AUT(*USE)"
system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/QWASSEC) OBJTYPE(*SRVPGM) USER(QEJBSVR) AUT(*USE)"
system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/QWASSVR) OBJTYPE(*PGM) USER(QEJBSVR) AUT(*USE)"
system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/QWASSTRSVR) OBJTYPE(*PGM) USER(QEJBSVR) AUT(*USE)"
system "QSYS/GRTOBJAUT OBJ(${PROD_LIB}/STRSVRWAIT) OBJTYPE(*PGM) USER(QEJBSVR) AUT(*USE)"

##################################################
# 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) LOGOUTPUT(*JOBEND) 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)"

##################################################
# Create deploytool and derby symlinks
##################################################
if [ -e ${PROD_ROOT}/deploytool ]; then
  if [ ! -e ${PROD_ROOT}/deploytool/itp/ejbdeploy ]; then
    system "QSYS/ADDLNK OBJ('${PROD_ROOT}/bin/ejbdeploy') NEWLNK('${PROD_ROOT}/deploytool/itp/ejbdeploy') LNKTYPE(*SYMBOLIC)"
  fi
  system "QSYS/CHGOWN OBJ('${PROD_ROOT}/deploytool/itp/ejbdeploy') NEWOWN(QSYS) SYMLNK(*YES)"
  if [ ! -e ${PROD_ROOT}/deploytool/itp/setupCmdLine ]; then
    system "QSYS/ADDLNK OBJ('${PROD_ROOT}/bin/setupCmdLine') NEWLNK('${PROD_ROOT}/deploytool/itp/setupCmdLine') LNKTYPE(*SYMBOLIC)"
  fi
  system "QSYS/CHGOWN OBJ('${PROD_ROOT}/deploytool/itp/setupCmdLine') NEWOWN(QSYS) SYMLNK(*YES)"

  if [ ! -e ${PROD_ROOT}/derby/bin/embedded/setupCmdLine ]; then
    system "QSYS/ADDLNK OBJ('${PROD_ROOT}/bin/setupCmdLine') NEWLNK('${PROD_ROOT}/derby/bin/embedded/setupCmdLine') LNKTYPE(*SYMBOLIC)"
  fi
  system "QSYS/CHGOWN OBJ('${PROD_ROOT}/derby/bin/embedded/setupCmdLine') NEWOWN(QSYS) SYMLNK(*YES)"
  if [ ! -e ${PROD_ROOT}/derby/bin/networkServer/setupCmdLine ]; then
    system "QSYS/ADDLNK OBJ('${PROD_ROOT}/bin/setupCmdLine') NEWLNK('${PROD_ROOT}/derby/bin/networkServer/setupCmdLine') LNKTYPE(*SYMBOLIC)"
  fi
  system "QSYS/CHGOWN OBJ('${PROD_ROOT}/derby/bin/networkServer/setupCmdLine') NEWOWN(QSYS) SYMLNK(*YES)"
fi

##################################################
# Add service table entries
##################################################
system "QSYS/ADDSRVTBLE SERVICE('was9-admin') PORT(9060) PROTOCOL('tcp') TEXT('Administrative console port')"
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')"
system "QSYS/ADDSRVTBLE SERVICE('was9-inthttp-ssl') PORT(9443) PROTOCOL('tcp') TEXT('Internal HTTP SSL port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-soap') PORT(8880) PROTOCOL('tcp') TEXT('SOAP port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-rmi') PORT(2809) PROTOCOL('tcp') TEXT('Name service port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-dcs') PORT(9353) PROTOCOL('tcp') TEXT('DCS unicast port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-sib-mq') PORT(5558) PROTOCOL('tcp') TEXT('SIB MQ port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-sib-mq-sec') PORT(5578) PROTOCOL('tcp') TEXT('SIB MQ secure port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-sib-endp') PORT(7276) PROTOCOL('tcp') TEXT('SIB port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-sib-endp-sec') PORT(7286) PROTOCOL('tcp') TEXT('SIB secure port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-sas-ssl') PORT(9501) PROTOCOL('tcp') TEXT('SAS SSL port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-csiv2-svr') PORT(9503) PROTOCOL('tcp') TEXT('CSIV2 SSL Server port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-csiv2-client') PORT(9502) PROTOCOL('tcp') TEXT('CSIV2 SSL Client port')"
system "QSYS/ADDSRVTBLE SERVICE('was9-orb') PORT(9100) PROTOCOL('tcp') TEXT('ORB listener port')"

if [ "${PROD_EDITION}" = "ND" ] || [ "${PROD_EDITION}" = "NDDMZ" ]; then
  system "QSYS/ADDSRVTBLE SERVICE('was9nd-admin') PORT(9060) PROTOCOL('tcp') TEXT('Administrative console port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9nd-admin-ssl') PORT(9043) PROTOCOL('tcp') TEXT('Administrative console SSL port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9nd-soap') PORT(8879) PROTOCOL('tcp') TEXT('SOAP port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9nd-rmi') PORT(9809) PROTOCOL('tcp') TEXT('Name service port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9nd-sas-ssl') PORT(9401) PROTOCOL('tcp') TEXT('SAS SSL port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9nd-csiv2-svr') PORT(9402) PROTOCOL('tcp') TEXT('CSIV2 SSL Server port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9nd-csiv2-client') PORT(9403) PROTOCOL('tcp') TEXT('CSIV2 SSL Client port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9nd-cell-disc') PORT(7277) PROTOCOL('tcp') TEXT('Cell discovery port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9nd-orb') PORT(9100) PROTOCOL('tcp') TEXT('ORB listener port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9-nodeagent-soap') PORT(8878) PROTOCOL('tcp') TEXT('SOAP port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9-nodeagent-sasssl') PORT(9901) PROTOCOL('tcp') TEXT('SAS SSL port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9-nodeagent-csiv2svr') PORT(9201) PROTOCOL('tcp') TEXT('CSIV2 SSL Server port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9-nodeagent-csiv2client') PORT(9201) PROTOCOL('tcp') TEXT('CSIV2 SSL Client port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9-nodeagent-orb') PORT(9900) PROTOCOL('tcp') TEXT('ORB listener port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9-nodeagent-disc') PORT(7272) PROTOCOL('tcp') TEXT('Node discovery port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9-nodeagent-multicast') PORT(5000) PROTOCOL('udp') TEXT('Node multicast discovery port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9-nodeagent-ipV7-multicast') PORT(5001) PROTOCOL('udp') TEXT('Node IPV7 multicast discovery port')"
  system "QSYS/ADDSRVTBLE SERVICE('was9-nodeagent-dcs') PORT(9353) PROTOCOL('tcp') TEXT('Node DCS unicast port')"
fi

##################################################
# Grant private authorities to QEJBSVR
##################################################
if [ -e ${PROD_ROOT}/deploytool ]; then
  chown -R QEJBSVR ${PROD_ROOT}/deploytool
fi
chown -R QEJBSVR ${PROD_ROOT}/configuration
system "QSYS/CHGAUT OBJ('${PROD_ROOT}/derby') USER(QEJBSVR) DTAAUT(*RWX) OBJAUT(*ALL)"

##################################################
# END SERVER ONLY SECTION                      ###
##################################################
fi

# End if INSTALLING_TWAS
fi

if [ ${INSTALLING_WLP} ]; then
  if [ ! -e ${USER_ROOT}/wlp ]; then
    mkdir ${USER_ROOT}/wlp
    cp -R ${PROD_ROOT}/wlp/usr ${USER_ROOT}/wlp
    mkdir -p ${USER_ROOT}/wlp/output/servers
    chown -R QSYS ${USER_ROOT}/wlp
    chmod -R 755 ${USER_ROOT}/wlp
    ${PROD_ROOT}/wlp/lib/native/os400/bin/_iPostInstallUtility --action POSTINSTALLEXIT --userdir ${USER_ROOT}/wlp/usr --outputdir ${USER_ROOT}/wlp/output/servers
    if [ $? -ne 0 ]; then
      ERR_CHK=1
    fi
    if [ ! ${INSTALLING_TWAS} ]; then
      echo "WAS_USERDATA=${USER_ROOT}" >> "${PROD_ROOT}/properties/os400.properties"
    fi
#  else
#    echo "Error: ${USER_ROOT}/wlp already exists"
#    ERR_CHK=1
  fi
fi

exit ${ERR_CHK}

