#!/bin/bash
###############################################################################
# Product:  Data Protector
# Version:  A.09.00
# Package:  TS-CORE
# Function: Postinstall
###############################################################################


OS=`uname -s`

# Exit code
# #########
if [ "${OS}" = "HP-UX" ]; then
   # Failed:1 Partialy Failed:2
   SUCCESS=0
   EXIT_FAILED=1
   EXIT_WARNING=2
else
   # Fatal:1 Warning:2 Halt:3
   SUCCESS=0
   EXIT_FAILED=3
   EXIT_WARNING=2
fi

DEVNULL=/dev/null

SUBPRODUCT=""

# OmniBack II files & directories
# ###############################
OMNIHOME=/opt/omni/
OMNIDBSERVER=`hostname`
OMNIDBINSTALLLOG=/tmp/DPDBInstall.log
OMNIDBUNINSTALLLOG=/tmp/DPDBUnInstall.log
OMNIDBUSERSHELL=`echo $SHELL`
OMNICONFIGBASE=/etc${OMNIHOME}
OMNICONFIG=${OMNICONFIGBASE}server/
OMNICONFIGCLIENT=${OMNICONFIGBASE}client/
OMNICONFIGIS=${OMNICONFIGBASE}IS/
OMNIVAR=/var${OMNIHOME}server/
OMNIVARCLIENT=/var${OMNIHOME}
OMNILOG=${OMNIVAR}/log
OMNILOGCLIENT=${OMNIVARCLIENT}/log
OMNITMP=${OMNIVARCLIENT}/tmp
OMNIENHINCRDB=${OMNIVARCLIENT}/enhincrdb
NEWCONFIG=${OMNIHOME}/newconfig/
OMNIIDBCOMPOSITE=${NEWCONFIG}${OMNICONFIG}idb/
OMNIBIN=${OMNIHOME}bin
OMNILBIN=${OMNIHOME}lbin
OMNILIB=${OMNIHOME}/lib
OMNIINET=${OMNILBIN}/inet
OMNIINFO=client/omni_info
OMNIINFO_IS=IS/omni_info
OMNIFORMAT=client/omni_format
OMNI_IS=${OMNICONFIG}cell/installation_servers
CELLINFO=${OMNICONFIG}/cell/cell_info
CELLSERVER=${OMNICONFIGCLIENT}/cell_server
USERCONF=${OMNICONFIG}/users
DATABASES=${OMNIHOME}databases/vendor/
OMNISITEPERL=${OMNIHOME}/lib/perl
COMPONENTS=/etc/opt/omni/client/components/

OLD_OMNIHOME=/usr/omni/
OLD_OMNICONFIG=${OLD_OMNIHOME}config/
TMP_OMNIHOME=/var/tmp/omni/
TMP_OMNICONFIG=${TMP_OMNIHOME}config/

UPGRADE_SCRIPT=${OMNIHOME}sbin/IDBsetup.sh

# Temporary OmniBack II directory
# ###############################
TOMNI=/tmp/omni_tmp
OMNIDBPARAMFILE=${TOMNI}/omnidbparam
SOCKET_DAT=${TOMNI}/socket.dat
DPDAT=${TOMNI}/dpdat
MGMT_SV=${TOMNI}/mgmt_sv.dat

# The service file, inet config directory
# #######################################
SERVICES=/etc/services
INETDCONF=/etc/inetd.conf
INETDSEC=/var/adm/inetd.sec

SERVICE=omni

TMP=/tmp/inst.tmp


# #############################################################################
# Checks for a MC/SG environment
# #############################################################################

OMNICC_ARG=""
UPGCFG_ARG=""
CHECK_MCSG_ENV=""

check_mcsg()
{
    if [ ! -z "$CHECK_MCSG_ENV" ]; then return; fi
    CHECK_MCSG_ENV=0
    if [ "${OS}" != "HP-UX" ]; then return; fi
    if [ ! -x /usr/sbin/cmviewcl ]; then return; fi
    if [ ! -f $OMNICONFIG/sg/sg.conf -o \
         ! -f $OMNICONFIG/cell/cell_info ]; then return; fi
    if [ \( -h /etc/$OMNIHOME/server -a -h /var/$OMNIHOME/server \) -o \
         \( -h /etc/opt/omni -a -h /var/opt/omni \) ]
    then
        CSHOST=`cat $OMNICONFIGCLIENT/cell_server 2>/dev/null`
        if [ -z "$CSHOST" ]; then return; fi
        grep "[-]host [ \"]*$CSHOST\"* .*-virtual" $OMNICONFIG/cell/cell_info >/dev/null 2>/dev/null
        if [ $? != 0 ]; then return; fi
        grep "^[^#]*CS_SERVICE_HOSTNAME=\"*$CSHOST\"*" $OMNICONFIG/sg/sg.conf >/dev/null 2>/dev/null
        if [ $? != 0 ]; then return; fi
        SHARED_DISK_ROOT=`grep "^[^#]*SHARED_DISK_ROOT=" $OMNICONFIG/sg/sg.conf 2>/dev/null | cut -d= -f2 | tr -d "\"'"`
        if [ -z "$SHARED_DISK_ROOT" ]; then return; fi
        if [ ! -d "$SHARED_DISK_ROOT" ]; then return; fi
        OMNICC_ARG="-server "`hostname | tr "[A-Z]" "[a-z]"`
        UPGCFG_ARG="$OMNICC_ARG"
        CHECK_MCSG_ENV=1
    fi
}

call_omnicc()
{
    check_mcsg
    ${OMNIHOME}/bin/omnicc $OMNICC_ARG "$@"
}

remove_duplicated_push_packets()
{
    # remove old push packets
    DIR_LST=`find ${DATABASES}/ -name '*.*.*' 2>$DEVNULL`
    if [ "${DIR_LST}" ]; then
     for DIR in ${DIR_LST}; do
       if [ `basename "${DIR}"` != "A.09.00" -a -d `dirname "${DIR}"`/A.09.00 ]; then
         rm -rf ${DIR}
       fi
     done
    fi
}




# #############################################################################
# Perl configuration
# #############################################################################
configer_perl()
{
    if [ -d ${OMNISITEPERL} ]; then
        MY_C_PATH=`pwd`
        cd ${OMNISITEPERL}
        if [ -f ./site_perl.tar ]; then
            tar -xvf ./site_perl.tar 1>/dev/null 2>/dev/null
        fi
        cd ${MY_C_PATH}
    fi
}



# #############################################################################
# Updates the information about the installed OmniBack II agents
# in the omni_info file
# #############################################################################
update_omni_info()
{
  PAC=$1
  VERS=$2
  if [ "$3" ]
  then
    OMNIINFO=$3
    
    # Remove duplicated push packets 
    remove_duplicated_push_packets
  fi
  
  if [ ! -f "${OMNICONFIGBASE}/${OMNIFORMAT}" ]; then
    echo "ERROR:   Cannot find ${OMNICONFIGBASE}/${OMNIFORMAT}" >&2
    exit ${EXIT_FAILED}
  else
    OUTPUT=`call_omnicc -put_component_str $PAC $OMNIFORMAT $OMNIINFO $VERS 2>&1`
    if [ $? -ne 0 ]
    then
        echo "WARNING: $OUTPUT"
        echo "WARNING: Update of the omni_info file failed for $PAC!"
    fi
  fi
}



# #############################################################################
# Checks version file and updates omni_info file
# #############################################################################
check_and_update_omni_info()
{
  VERFILE=$1
  PAC=$2
  
  if [ -f ${NEWCONFIG}/${OMNICONFIGCLIENT}/customize/${VERFILE} ]; then
    VERS=`awk '{print $1}' ${NEWCONFIG}/${OMNICONFIGCLIENT}/customize/${VERFILE}`
    V64BIT=`awk '{print $2}' ${NEWCONFIG}/${OMNICONFIGCLIENT}/customize/${VERFILE}`
    if [ ${VERS} ]; then
      update_omni_info ${PAC} ${VERS}
    fi
    if [ ${V64BIT} ]; then
      update_omni_info "64BIT" ""
    fi
  fi
}



# ############################################################################
# Updates the cell_info file
# ############################################################################
update_cell_info ()
{
  HOSTNAME=`hostname | tr "[A-Z]" "[a-z]"`

  if [ -f ${DPDAT} ]; then
    NOENCRYPTION=`cat ${DPDAT} |grep NOENCRYPTION | awk -F"=" '{ print $2 }'`
  fi

  if [ "${NOENCRYPTION}" = "1" ]; then
    call_omnicc -update_host ${HOSTNAME} -encr_disable 1>$DEVNULL 2>$DEVNULL
  else
    call_omnicc -update_host ${HOSTNAME} 1>$DEVNULL 2>$DEVNULL
  fi
}



# ############################################################################
# Copies the newconfig direcory
# ############################################################################
copy_newconfig()
{
  if [ -d "${NEWCONFIG}/" ]; then

    cd ${NEWCONFIG}/
    for dir in `find . -type d`; do
        cd /
        if [ ! -d $dir ]; then
            mkdir -p $dir
            chown root:sys $dir
            # if directory is log or tmp change permission to 777
            if [ "`basename $dir`" = "log" -o "`basename $dir`" = "tmp" ]; then
                chmod 777 $dir
            elif [ "`basename $dir`" = "enhincrdb" ]; then
                chmod 777 $dir
            else
                chmod 755 $dir
            fi
        fi
    done

    cd ${NEWCONFIG}/
    for file in `find . -type f`; do
      cd /
      if [ ! -r $file ]; then
        cp -p ${NEWCONFIG}/$file $file
        # if file has log extension change premission to 666
        if [ "`echo $file | grep '\.log$'`" != "" ]; then
          chmod 666 $file
        fi
      else
        FN=`basename $file`
        case $FN in
          omni_format )
            cp -p ${NEWCONFIG}/$file $file ;;
          writerstab_format | writerstab_info )
            cp ${NEWCONFIG}/$file $file ;;
          providerstab_format )
            cp ${NEWCONFIG}/$file $file ;;
          vdsproviderstab_info | vssproviderstab_info )
            cp ${NEWCONFIG}/$file $file ;;
          vdsproviderstab_format | vssproviderstab_format )
            cp ${NEWCONFIG}/$file $file
            chown root $file
            chmod 644 $file ;;
        esac
      fi
    done
  else
    echo "ERROR:   Directoy ${NEWCONFIG} does not exist" >&2
    exit ${EXIT_FAILED}
  fi

  if [ -d "${NEWCONFIG}/${COMPONENTS}/" ]; then

    cd ${NEWCONFIG}/${COMPONENTS}/
    for file in `ls *.xml *.properties 2>$DEVNULL |grep -v webservice |grep -v Logger`; do
        cd /
        cp -p ${NEWCONFIG}/${COMPONENTS}/$file ${COMPONENTS}/$file
    done
  fi

  if [ -d "${NEWCONFIG}/${COMPONENTS}/registry/" ]; then

    cd ${NEWCONFIG}/${COMPONENTS}/registry/
    for file in `ls` ; do
        cd /
        cp -p ${NEWCONFIG}/${COMPONENTS}/registry/$file ${COMPONENTS}/registry/$file
    done
  fi
}


# ###########
# Script body
# ###########

configer_perl

# Postinstal Part
# ###############

# Configuration Part
# ##################
check_and_update_omni_info .VersionTS_CORE ts_core

update_cell_info

copy_newconfig

exit 0