#!/sbin/sh
# @(#) configure.sd - B.08.40
# SD configuration script
# (C) Copyright Marxmeier Software AG, 2002-2024. All rights reserved.
#
# Configure scripts are executed during the configuration phase
# of a swinstall session. They can also be executed by the swconfig
# command.
#
# To work around a bug in the unpatched swagentd for HP-UX 11.0 
# IPD_addfile on links has been disabled.
#
# 08.11.2022 - webdlg2
# 09.11.2023 - openssl v1.1
# 10.11.2023 - libfwutil.sl symlink
# 28.11.2023 - openssl v3.0
# 04.03.2024 - eloqld
# 04.03.2024 - dont install license template
# 20.05.2024 - use openssl switchversion

#################################################
#             Startup                           #
#################################################

if [[ ${SW_ROOT_DIRECTORY} != "/" ]]
then
   exit 0
fi

# source standard SD control script utilities

UTILS="/usr/lbin/sw/control_utils"
if [[ ! -f $UTILS ]]
then
   echo "ERROR: Cannot find $UTILS"
   exit 1
fi
. $UTILS

# set retval and exitval

set_status()
{
   retval=${1:-$?}
   [[ $retval -eq  $FAILURE ]] && exitval=$retval
}


#################################################
#             utility functions                 #
#################################################

kill_proc_by_path ()
{
   typeset -i  cmd_result=0
   typeset     pid
   typeset     file
   typeset     signal

   case $# in
   0)  echo "ERROR:   Usage: kill_proc_by_path path [signal]"
       return 1
       ;;
   1)  signal=SIGTERM
       break
       ;;
   2)  signal=${2:-SIGTERM}
       break
       ;;
   *)  echo "ERROR:   Usage: kill_proc_by_path path [signal]"
       return 1
       ;;
   esac

   if [[ -z $1 ]]; then
      echo "ERROR:   Usage: kill_proc_by_path path [signal]"
      return 1
   fi

   file=$1
   pid=$(/usr/sbin/fuser $file 2>/dev/null)

   if [[ -n $pid ]]; then
      kill -s $signal $pid
      cmd_result=$?
   fi
   return ${cmd_result:-0}
}


#################################################
#             configure product                 #
#################################################

# Since the Eloquence daemons change their command line
# we need to make sure the UNIX95 environment variable
# is not set. kill_named_process uses ps -e which
# returns the modified command line if UNIX95 is set.
unset UNIX95

EQ_base=/opt/eloquence
EQ=$EQ_base/8.4

# Kill eloquence procs, if necessary

if [[ ${SW_ROOT_DIRECTORY} = "/" ]]
then
   kill_proc_by_path ${EQ}/bin/eloqsd
   retval=$?
   if [[ $retval -ne $SUCCESS ]]
   then
      echo "WARNING: could not kill the \"eloqsd\" process"
      exitval=$WARNING
   fi

   kill_proc_by_path ${EQ}/bin/eloqdb32
   retval=$?
   if [[ $retval -ne $SUCCESS ]]
   then
      echo "WARNING: could not kill all \"eloqdb32\" processes"
      exitval=$WARNING
   fi

   kill_proc_by_path ${EQ}/bin/eloqdb64
   retval=$?
   if [[ $retval -ne $SUCCESS ]]
   then
      echo "WARNING: could not kill all \"eloqdb64\" processes"
      exitval=$WARNING
   fi

   kill_proc_by_path ${EQ}/bin/eloqdb
   retval=$?
   if [[ $retval -ne $SUCCESS ]]
   then
      echo "WARNING: could not kill all \"eloqdb\" processes"
      exitval=$WARNING
   fi

   kill_proc_by_path ${EQ}/bin/dbrepl
   retval=$?
   if [[ $retval -ne $SUCCESS ]]
   then
      echo "WARNING: could not kill all \"dbrepl\" processes"
      exitval=$WARNING
   fi

   kill_proc_by_path ${EQ}/bin/eloqwebd2
   retval=$?
   if [[ $retval -ne $SUCCESS ]]
   then
      echo "WARNING: could not kill all \"eloqwebd2\" processes"
      exitval=$WARNING
   fi

   kill_proc_by_path ${EQ}/bin/eloqld
   retval=$?
   if [[ $retval -ne $SUCCESS ]]
   then
      echo "WARNING: could not kill all \"eloqld\" processes"
      exitval=$WARNING
   fi
fi

# fix directory permissions and owners

find ${EQ} -type d|xargs chown bin:bin
find ${EQ} -type d|xargs chmod 555


# add symlink ${EQ}/bin/eloqdb -> eloqdb32

if [ ! -e ${EQ}/bin/eloqdb -a -e ${EQ}/bin/eloqdb32 ]; then
   ln -s -f eloqdb32 ${EQ}/bin/eloqdb
fi
if [ ! -e ${EQ}/bin/eloqdb -a -e ${EQ}/bin/eloqdb64 ]; then
   ln -s -f eloqdb64 ${EQ}/bin/eloqdb
fi


# add symlink ${EQ}/lib/hpux../lib...sl
# Speedware among others relies on lib names

if [ -f ${EQ}/lib/hpux32/libimage3k.so ]; then
   ln -s -f libimage3k.so ${EQ}/lib/hpux32/libimage3k.sl
fi

if [ -f ${EQ}/lib/hpux64/libimage3k.so ]; then
   ln -s -f libimage3k.so ${EQ}/lib/hpux64/libimage3k.sl
fi

if [ -f ${EQ}/lib/hpux32/libeqdb.so ]; then
   ln -s -f libeqdb.so ${EQ}/lib/hpux32/libeqdb.sl
fi

if [ -f ${EQ}/lib/hpux64/libeqdb.so ]; then
   ln -s -f libeqdb.so ${EQ}/lib/hpux64/libeqdb.sl
fi

#if [ -f ${EQ}/lib/hpux32/libfwutil.so ]; then
#   ln -s -f libfwutil.so ${EQ}/lib/hpux32/libfwutil.sl
#fi

#if [ -f ${EQ}/lib/hpux64/libfwutil.so ]; then
#   ln -s -f libfwutil.so ${EQ}/lib/hpux64/libfwutil.sl
#fi

if [ -f ${EQ}/lib/hpux32/libftc.so ]; then
   ln -s -f libftc.so ${EQ}/lib/hpux32/libftc.sl
fi

if [ -f ${EQ}/lib/hpux64/libftc.so ]; then
   ln -s -f libftc.so ${EQ}/lib/hpux64/libftc.sl
fi


# add symlink ${EQ}/share/example/eloqcgi/htdocs/eloq.cgi

#ln -s -f ${EQ}/lbin/eloq.cgi ${EQ}/share/example/eloqcgi/htdocs/eloq.cgi


# openssl symlinks, use switchversion

openssl=/opt/openssl
if [ ! -e ${openssl} ]; then
echo "WARNING: No supported OpenSSL installation found."
echo "         OpenSSL version 0.9.8 or newer is required."

else
   #echo "NOTE:    OpenSSL $v installation found."

   if [ -f ${openssl}/lib/hpux32/libcrypto.so \
        -a ! -e ${EQ}/lib/hpux32/libcrypto.so ]; then
      ln -sf ${openssl}/lib/hpux32/libcrypto.so ${EQ}/lib/hpux32/libcrypto.so
   fi

   if [ -f ${openssl}/lib/hpux32/libssl.so \
        -a ! -e ${EQ}/lib/hpux32/libssl.so ]; then
      ln -sf  ${openssl}/lib/hpux32/libssl.so ${EQ}/lib/hpux32/libssl.so
   fi

   if [ -f  ${openssl}/lib/hpux64/libcrypto.so \
        -a ! -e ${EQ}/lib/hpux64/libcrypto.so ]; then
      ln -sf ${openssl}/lib/hpux64/libcrypto.so ${EQ}/lib/hpux64/libcrypto.so
   fi

   if [ -f ${openssl}/lib/hpux64/libssl.so \
        -a ! -e ${EQ}/lib/hpux64/libssl.so ]; then
      ln -sf ${openssl}/lib/hpux64/libssl.so ${EQ}/lib/hpux64/libssl.so
   fi

#   if [ -f ${openssl}/lib/libcrypto.sl \
#        -a ! -e ${EQ}/lib/pa20_32/libcrypto.sl ]; then
#      ln -sf ${openssl}/lib/libcrypto.sl ${EQ}/lib/pa20_32/libcrypto.sl
#   fi

#   if [ -f ${openssl}/lib/libssl.sl \
#        -a ! -e ${EQ}/lib/pa20_32/libssl.sl ]; then
#      ln -sf ${openssl}/lib/libssl.sl ${EQ}/lib/pa20_32/libssl.sl
#   fi

#   if [ -f ${openssl}/lib/pa20_64/libcrypto.sl \
#	-a ! -e ${EQ}/lib/pa20_64/libcrypto.sl ]; then
#      ln -sf ${openssl}/lib/pa20_64/libcrypto.sl ${EQ}/lib/pa20_64/libcrypto.sl
#   fi

#   if [ -f ${openssl}/lib/pa20_64/libssl.sl \
#	-a ! -e ${EQ}/lib/pa20_64/libssl.sl ]; then
#      ln -sf ${openssl}/lib/pa20_64/libssl.sl ${EQ}/lib/pa20_64/libssl.sl
#   fi
fi


# Copy files from ${EQ}/newconfig/startup to /etc and /sbin

cond_cpset 555 bin bin ${EQ}/newconfig/startup/eloquence.rc /etc/rc.config.d/eloquence84
set_status
#IPD_addfile -N /etc/rc.config.d/eloquence84
#set_status

cp_set 555 bin bin ${EQ}/newconfig/startup/eloquence.init /sbin/init.d/eloq84
set_status
#IPD_addfile -N /sbin/init.d/eloq84
#set_status


# Set-up start-up/shutdown scripts and links

ln -s -f /sbin/init.d/eloq84 /sbin/rc2.d/S900eloq84
set_status
#IPD_addfile /sbin/rc2.d/S900eloq84
#set_status

ln -s -f /sbin/init.d/eloq84 /sbin/rc1.d/K100eloq84
set_status
#IPD_addfile /sbin/rc1.d/K100eloq84
#set_status


# Create dirs: /var/opt/eloquence/8.4, /etc/opt/eloquence/8.4
# or fix access rights if already existent

cond_mkdir 555 bin bin /var${EQ} ; set_status
cond_mkdir 555 bin bin /etc${EQ} ; set_status

chown bin:bin /etc${EQ} /var${EQ}
chmod 555 /etc${EQ} /var${EQ}

cond_mkdir 1777 bin bin /var${EQ}/run ; set_status
cond_mkdir 1777 bin bin /var${EQ_base}/socket ; set_status


# add EQ services to /etc/services

fgrep -q eloqdb /etc/services
if [ $? != 0 ]; then
cat >>/etc/services <<+EOF
#
# Eloquence related services
#
sqlrodbc        8003/tcp    # SQL/R ODBC
runsrv          8010/tcp    # Eloquence RUNSRV (Windows integration)
eloqdlg         8011/tcp    # Eloquence dialog
eloqsd          8100/tcp    # Eloquence eloqsd server
eloqdb          8102/tcp    # Eloquence data base server
eloqld          8104/tcp    # Eloquence license server
+EOF
   echo "NOTE:    Eloquence services have been added to the /etc/services"
   echo "         configuration file using default port numbers."
fi

fgrep -q eloqld /etc/services
if [ $? != 0 ]; then
   cat >>/etc/services <<+EOF
#
# Eloquence related services
#
eloqld          8104/tcp    # Eloquence license server
+EOF
      echo "NOTE: The Eloquence eloqld service was added to the /etc/services"
      echo "      configuration file using default port number."
fi


# add /opt/eloquence/8.4 to /etc/PATH

mod_pathfile -a P ${EQ}/bin; set_status
/usr/bin/grep -c "/opt/eloquence/8.4/bin" /etc/PATH >/dev/null
if [ $? -ne 0 ]
then
   /usr/bin/grep -c "/opt/eloquence/8.3/bin" /etc/PATH >/dev/null
   if [ $? -eq 0 ]
   then
echo "NOTE:    The global PATH (defined in /etc/PATH) contains a reference"
echo "         to a previous Eloquence version. Eloquence B.08.40 will not"
echo "         be executed by default unless the reference to"
echo "         /opt/eloquence/8.3/bin is removed from /etc/PATH."
   fi

   /usr/bin/grep -c "/opt/eloquence/8.2/bin" /etc/PATH >/dev/null
   if [ $? -eq 0 ]
   then
echo "NOTE:    The global PATH (defined in /etc/PATH) contains a reference"
echo "         to a previous Eloquence version. Eloquence B.08.40 will not"
echo "         be executed by default unless the reference to"
echo "         /opt/eloquence/8.2/bin is removed from /etc/PATH."
   fi
fi


# Default config files
# Copy files from ${EQ}/newconfig to /etc${EQ}/...

cond_cpset 644 root bin ${EQ}/newconfig/config/eloq.config /etc${EQ}/eloq.config
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloq.ini /etc${EQ}/eloq.ini
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloqsd.cfg /etc${EQ}/eloqsd.cfg
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloqsd.share /etc${EQ}/eloqsd.share
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloqsd.user /etc${EQ}/eloqsd.user
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloqsd.pswd /etc${EQ}/eloqsd.pswd
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloqsd.app /etc${EQ}/eloqsd.app
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloqdb.cfg /etc${EQ}/eloqdb.cfg
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eqpcl.cfg /etc${EQ}/eqpcl.cfg
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/repl.cfg /etc${EQ}/repl.cfg
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloqwebd2.app /etc${EQ}/eloqwebd2.app
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloqwebd2.cfg /etc${EQ}/eloqwebd2.cfg
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloqwebd2.mime /etc${EQ}/eloqwebd2.mime
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloqwebd2.uri /etc${EQ}/eloqwebd2.uri
set_status
cond_cpset 644 root bin ${EQ}/newconfig/config/eloqld.cfg /etc${EQ}/eloqld.cfg
set_status


# note about missing license file

licfile=/etc${EQ}/license

if [ ! -f $licfile ]
then

echo "NOTE:    No license file present. Please use the eqlictool utility"
echo "         to install a license key or refer to the Eloquence web"
echo "         site for more options."
echo "         https://eloquence.marxmeier.com/support/B0840/license/"

fi

exit $exitval
