#!/sbin/sh
# @(#) unconfigure.sd - B.08.40
# SD unconfiguration script
# (C) Copyright Marxmeier Software AG, 2002-2024. All rights reserved.
#
# Unconfigure scripts are executed during the un-configuration phase
# of a swremove process. They can also be executed by the swconfig
# command.
#
# 08.11.2022 - webdlg2
# 10.11.2023 - libfwutil.sl symlink
# 04.03.2024 - eloqld
# 04.03.2024 - uninstall warning on customized files

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

# 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

exitval=$SUCCESS
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}
}


#################################################
#             unconfigure 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=/opt/eloquence/8.4

# kill running daemons

kill_proc_by_path /opt/eloquence/8.4/bin/eloqsd
retval=$?
if [[ $retval -ne $SUCCESS ]]
then
   echo "WARNING: could not kill the \"eloqsd\" process"
   exitval=$WARNING
fi

rm -f /var/opt/eloquence/8.4/run/eloqsd.pid

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

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

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

rm -f /var/opt/eloquence/8.4/run/eloqdb_*.pid

kill_proc_by_path /opt/eloquence/8.4/bin/dbrepl
retval=$?
if [[ $retval -ne $SUCCESS ]]
then
   echo "WARNING: could not kill the \"dbrepl\" process"
   exitval=$WARNING
fi

rm -f /var/opt/eloquence/8.4/run/repl_*.pid

kill_proc_by_path /opt/eloquence/8.4/bin/eloqwebd2
retval=$?
if [[ $retval -ne $SUCCESS ]]
then
   echo "WARNING: could not kill the \"eloqwebd2\" process"
   exitval=$WARNING
fi

rm -f /var/opt/eloquence/8.4/run/eloqwebd2.pid

kill_proc_by_path /opt/eloquence/8.4/bin/eloqld
retval=$?
if [[ $retval -ne $SUCCESS ]]
then
   echo "WARNING: could not kill the \"eloqld\" process"
   exitval=$WARNING
fi

rm -f /var/opt/eloquence/8.4/run/eloqld.pid


# remove symlink ${EQ}/bin/eloqdb

if [ -h ${EQ}/bin/eloqdb ]; then
   rm -f ${EQ}/bin/eloqdb
fi


# remove symlink ${EQ}/lib/hpux../lib...sl

rm -f ${EQ}/lib/hpux32/libimage3k.sl
rm -f ${EQ}/lib/hpux64/libimage3k.sl
rm -f ${EQ}/lib/hpux32/libeqdb.sl
rm -f ${EQ}/lib/hpux64/libeqdb.sl
#rm -f ${EQ}/lib/hpux32/libfwutil.sl
#rm -f ${EQ}/lib/hpux64/libfwutil.sl
rm -f ${EQ}/lib/hpux32/libftc.sl
rm -f ${EQ}/lib/hpux64/libftc.sl


# remove eloq.cgi symlink

#rm -f /opt/eloquence/8.4/share/example/eloqcgi/htdocs/eloq.cgi


# remove symlink ${EQ}/lib/*/libcrypto.*

rm -f ${EQ}/lib/hpux32/libcrypto.so
rm -f ${EQ}/lib/hpux32/libssl.so
rm -f ${EQ}/lib/hpux64/libcrypto.so
rm -f ${EQ}/lib/hpux64/libssl.so
#rm -f ${EQ}/lib/pa11_32/libcrypto.sl
#rm -f ${EQ}/lib/pa20_32/libcrypto.sl
#rm -f ${EQ}/lib/pa20_32/libssl.sl
#rm -f ${EQ}/lib/pa20_64/libcrypto.sl
#rm -f ${EQ}/lib/pa20_64/libssl.sl

# remove startup scripts

if [ -f /sbin/rc2.d/S900eloq84 ]
then
   rm /sbin/rc2.d/S900eloq84
   set_status
fi

if [ -f /sbin/rc1.d/K100eloq84 ]
then
   rm /sbin/rc1.d/K100eloq84
   set_status
fi

if [ -f /sbin/init.d/eloq84 ]
then
   rm /sbin/init.d/eloq84
   set_status
fi

# delete /opt/eloquence/8.4 from /etc/PATH

mod_pathfile -d P ${EQ}/bin

# delete unchanged /etc/rc.config.d/eloquence84 config file

if [ -f /etc/rc.config.d/eloquence84 ]; then
   cmp -s ${EQ}/newconfig/startup/eloquence.rc /etc/rc.config.d/eloquence84
   if [ $? -eq 0 ]; then
      rm -f /etc/rc.config.d/eloquence84
   else
echo "NOTE:    File /etc/rc.config.d/eloquence84 has been customized and is not removed."
   fi
fi


# Delete unchanged config files

for f in /opt/eloquence/8.4/newconfig/config/*
do
  cf=`basename $f`
  if [ -f /etc/opt/eloquence/8.4/$cf ]; then
     cmp -s $f /etc/opt/eloquence/8.4/$cf
     if [ $? -eq 0 ]; then
        rm -f /etc/opt/eloquence/8.4/$cf
#     else
#echo "NOTE:    File /etc/opt/eloquence/8.4/$cf has been customized and is not removed."
     fi
  fi
done

for f in /etc/opt/eloquence/8.4/*
do
  if [ -f "$f" ]; then
echo "NOTE:    File $f has been customized and is not removed."
  fi
done


# Delete (empty) dirs: /var/opt/eloquence/8.4, /etc/opt/eloquence/8.4

if [ -d /var/opt/eloquence/8.4 ]; then
   find /var/opt/eloquence/8.4 -type d -depth|xargs rmdir -f 2>/dev/null
fi

if [ -d /etc/opt/eloquence/8.4 ]; then
   find /etc/opt/eloquence/8.4 -type d -depth|xargs rmdir -f 2>/dev/null
fi

exit $exitval
