#**********************************************************************#
#*                                                                    *#
#* Copyright (c) 2001 by Sun Microsystems, Inc.                       *#
#* All rights reserved.                                               *#
#*                                                                    *#
#**********************************************************************#

getJDBC_URL()
{
echo $N "JDBC connection URL host name/IP: $C"
read host_name
echo $N "JDBC connection URL port number: $C"
read port
echo $N "JDBC connection URL database identifier (SID, name, etc.): $C"
read db_name
}

ORACLE_env_chek()
{
 if [ "$rdbms_oracle" = "$SELECTED" ]
 then
   if [ -z "$ORACLE_HOME" ]
   then
#     echo "ERROR. No ORACLE_HOME variable set." >> $LOGFILE
     echo "#"
     echo "# ERROR: ORACLE_HOME variable is not set to Oracle installation directory"
     echo "#"
     exit 1
   else
     if  test ! -d $ORACLE_HOME
     then
#       echo "ERROR. ORACLE_HOME $ORACLE_HOME directory not found." >> $LOGFILE
       echo "#"
       echo "# ERROR: ORACLE_HOME $ORACLE_HOME directory not found"
       echo "#"
       exit 1
     else
       if  test ! -f $ORACLE_HOME/jdbc/lib/classes12.zip
       then
#         echo "ERROR. JDBC drivers not found under $ORACLE_HOME directory." >> $LOGFILE
         echo "#"
         echo "# ERROR: JDBC drivers under not found $ORACLE_HOME directory"
         echo "#"
         exit 1
       else
         if  test ! -d $ORACLE_HOME/lib
         then
#           echo "ERROR. $ORACLE_HOME/lib directory not found." >> $LOGFILE
           echo "#"
           echo "# ERROR: $ORACLE_HOME/lib directory not found"
           echo "#"
         else
           driver_path="$ORACLE_HOME/jdbc/lib/classes12.zip"
           jdbc_policy='grant codebase "file:'$driver_path'" { 
                          permission java.security.AllPermission;
                          };'
           driver_library="$ORACLE_HOME/lib"
#           driver_class="oracle.jdbc.driver.OracleDriver"
           driver_class="oracle.jdbc.OracleDriver"
           driver_type="JDBC"
           echo ""
           echo "JDBC drivers file = " $driver_path
           echo "JDBC shared objects load library = " $driver_library
           echo "JDBC driver class = " $driver_class
           echo ""
           getJDBC_URL
           driver_URL="jdbc:oracle:thin:@"$host_name":"$port":"$db_name
           echo ""
           echo "JDBC URL = " $driver_URL
           echo ""
         fi
       fi
     fi
   fi
 fi
}

DB2_env_chek()
{
 if [ "$rdbms_db2" = "$SELECTED" ]
 then
   if [ -z "$INSTHOME" ]
   then
#     echo "ERROR. No INSTHOME variable set. Set INSTHOME variable to  DB2/60000 directory" >> $LOGFILE
     echo "#"
     echo "# ERROR: INSTHOME variable is not set to DB2 UDB installation directory"
     echo "#"
     exit 1
   else
     if [ ! -d $INSTHOME ];
     then
#       echo "ERROR. INSTHOME $INSTHOME directory not found" >> $LOGFILE
       echo "#"
       echo "# ERROR: INSTHOME $INSTHOME directory not found"
       echo "#"
       exit 1
     else
       if  test ! -f $INSTHOME/java/db2jcc.jar
       then
#         echo "ERROR. JDBC drivers not found under $INSTHOME directory." >> $LOGFILE
         echo "#"
         echo "# ERROR: JDBC drivers not found under $INSTHOME directory"
         echo "#"
         exit 1
       else
         if  test ! -d $INSTHOME/lib
         then
#           echo "ERROR. $INSTHOME/lib directory not found." >> $LOGFILE
           echo "#"
           echo "# ERROR: $INSTHOME/lib directory not found"
           echo "#"
         else
#           driver_path="$INSTHOME/java/db2jcc.jar"
           driver_path="$INSTHOME/java/db2java.zip"
           jdbc_policy='grant codebase "file:'$driver_path'" {
                          permission java.security.AllPermission;
                          };'
           driver_library="$INSTHOME/lib"
#           driver_class="com.ibm.db2.jcc.DB2Driver"
           driver_class="COM.ibm.db2.jdbc.app.DB2Driver"
           driver_type="JDBC"
           echo ""
           echo "JDBC drivers file = " $driver_path
           echo "JDBC shared objects load library = " $driver_library
           echo "JDBC driver class = " $driver_class
           echo ""
           getJDBC_URL
           driver_URL="jdbc:db2://"$host_name":"$port"/"$db_name
           echo ""
           echo "JDBC URL = " $driver_URL
           echo ""
         fi
       fi
     fi
   fi
 fi
}

SYBASE_env_chek()
{
 if [ "$rdbms_sybase" = "$SELECTED" ]
 then
   if [ -z "$SYBASE" ]
   then
#     echo "ERROR. No SYBASE variable set. Set SYBASE variable to Sybase directory" >> $LOGFILE
     echo "#"
     echo "# ERROR: SYBASE variable is not set to Sybase installation directory"
     echo "#"
     exit 1
   else
     if [ ! -d $SYBASE ];
     then
#       echo "ERROR. SYBASE $SYBASE directory not found" >> $LOGFILE
       echo "#"
       echo "# ERROR: SYBASE $SYBASE directory not found"
       echo "#"
       exit 1
     else
       if  test ! -f $SYBASE/jConnect-5_5/classes/jconn2.jar
       then
#         echo "ERROR. JDBC drivers not found under $SYBASE directory." >> $LOGFILE
         echo "#"
         echo "# ERROR: JDBC drivers not found under $SYBASE directory"
         echo "#"
         exit 1
       else
         if  test ! -d $SYBASE/OCS-12_5/lib
         then
#           echo "ERROR. $SYBASE/OCS-12_5/lib directory not found." >> $LOGFILE
           echo "#"
           echo "# ERROR: $SYBASE/OCS-12_5/lib directory not found"
           echo "#"
         else
           driver_path="$SYBASE/jConnect-5_5/classes/jconn2.jar"
           jdbc_policy='grant codebase "file:'$driver_path'" {
                          permission java.security.AllPermission;
                          };'
           driver_library="$SYBASE/OCS-12_5/lib"
           driver_class="com.sybase.jdbc2.jdbc.SybDriver"
           driver_type="JDBC"
           echo ""
           echo "JDBC drivers file = " $driver_path
           echo "JDBC shared objects load library = " $driver_library
           echo "JDBC driver class = " $driver_class
           echo ""
           getJDBC_URL
           driver_URL="jdbc:sybase:"$db_name":"$host_name":"$port
           echo ""
           echo "JDBC URL = " $driver_URL
           echo ""
         fi
       fi
     fi
   fi
 fi
}

MYSQL_env_chek()
{
 if [ "$rdbms_mysql" = "$SELECTED" ]
 then
   if [ -z "$MYSQL_JDBC" ]
   then
#     echo "ERROR. No MYSQL_JDBC variable set." >> $LOGFILE
     echo "#"
     echo "# ERROR: MYSQL_JDBC variable is not set to MySQL's Java Connector directory"
     echo "#"
     exit 1
   else
     if  test ! -d $MYSQL_JDBC
     then
#       echo "ERROR. MYSQL_JDBC $MYSQL_JDBC directory not found." >> $LOGFILE
       echo "#"
       echo "# ERROR: MYSQL_JDBC $MYSQL_JDBC directory not found"
       echo "#"
       exit 1
     else
       if  test ! -f $MYSQL_JDBC/mysql-connector-java-3.0.8-stable-bin.jar
       then
      #   echo "ERROR. JDBC drivers not found under $MYSQL_JDBC directory." >> $LOGFILE
         echo "#"
         echo "# ERROR: JDBC drivers not found under $MYSQL_JDBC directory"
         echo "#"
         exit 1
       else
         driver_path="$MYSQL_JDBC/mysql-connector-java-3.0.8-stable-bin.jar"
           jdbc_policy='grant codebase "file:'$driver_path'" {
                          permission java.security.AllPermission;
                          };'
         driver_class="com.mysql.jdbc.Driver"
         driver_type="JDBC"
         echo ""
         echo "JDBC drivers file = " $driver_path
         echo "JDBC driver class = " $driver_class
         echo ""
         getJDBC_URL
         driver_URL="jdbc:mysql:"$host_name":"$db_name"?relaxAutoCommit=true"
         echo ""
         echo "JDBC URL = " $driver_URL
         echo ""
       fi
     fi
   fi
 fi
}

getLDAP_URL()
{
 echo $N "LDAP connection URL host name/IP: $C"
 read host_name
 echo $N "LDAP connection URL port number [389]: $C"
 read port
 if [ $port"A" = "A" ]
 then
    port=389
 fi
}

IPLANET_env_chek()
{
 if [ "$ldap_iplanet" = "$SELECTED" ]
 then
    echo "Building Sun Java System Directory Server configuration"
    echo ""
    getLDAP_URL
    driver_URL="ldap://"$host_name":"$port
    driver_type="JNDI"
    echo ""
    echo "LDAP URL = " $driver_URL
    echo ""
    echo $N "LDAP root DN (eg. dc=yourcorp): $C"
    read driver_root
    echo ""
    echo "LDAP root DN = " $driver_root
    echo ""
 fi
}

build_java_security()
{
echo "Building $MSF_HOME/config/java.security file "
if [ "$JAVA_HOME"A = "A" ]; then
    java_cmd=`which java`
    D=`dirname $java_cmd`
    B=`basename $java_cmd`
    abspath="`cd \"$D\" 2>/dev/null && pwd || echo \"$D\"`/$B"
    tmp1=`dirname $abspath`
    JAVA_HOME=`dirname $tmp1`
fi
if [ -d "${JAVA_HOME}/jre" ]; then
    jre=$JAVA_HOME/jre
else
    jre=$JAVA_HOME
fi
cat $jre/lib/security/java.security \
    $MSF_HOME/etc/java.security > $MSF_HOME/config/java.security
}

build_java_policy()
{
echo "Building $MSF_HOME/config/java.policy file"
if [ "$JAVA_HOME"A = "A" ]; then
    java_cmd=`which java`
    D=`dirname $java_cmd`
    B=`basename $java_cmd`
    abspath="`cd \"$D\" 2>/dev/null && pwd || echo \"$D\"`/$B"
    tmp1=`dirname $abspath`
    JAVA_HOME=`dirname $tmp1`
fi
if [ -d "${JAVA_HOME}/jre" ]; then
    jre=$JAVA_HOME/jre
else
    jre=$JAVA_HOME
fi
cat $jre/lib/security/java.policy \
    $MSF_HOME/etc/java.policy > $MSF_HOME/config/java.policy
}

build_jaas_config()
{
echo "Building $MSF_HOME/config/jaas.config file"
cp $MSF_HOME/etc/jaas.config $MSF_HOME/config/jaas.config
}

build_configuration()
{
if  test -f $MSF_HOME/config/$MSF_INSTANCE/$config_file
then
    echo "Making backup file: ${MSF_HOME}/config/$MSF_INSTANCE/$config_file.bkup"
    cp $MSF_HOME/config/$MSF_INSTANCE/$config_file \
       $MSF_HOME/config/$MSF_INSTANCE/$config_file.bkup
fi
echo "Working base file: " $work_dir/$config_file
echo "Building $MSF_HOME/config/$MSF_INSTANCE/$config_file file "
sed "s%adapterType=.*%adapterType=$driver_type%" $work_dir/$config_file \
    |sed "s%adapterPath=.*%adapterPath=${driver_path}%" \
    |sed "s%adapterLibrary=.*%adapterLibrary=${driver_library}%" \
    |sed "s%adapterDriver=.*%adapterDriver=${driver_class}%" \
    |sed "s%adapterURL=.*%adapterURL=${driver_URL}%" \
    |sed "s%adapterRoot=.*%adapterRoot=${driver_root}%" \
    > /tmp/config_file.$$
mv /tmp/config_file.$$ $MSF_HOME/config/$MSF_INSTANCE/$config_file
if [ -n jdbc_policy ]; then
#    sed '\%"$driver_path"%=' $MSF_HOME/config/java.policy > /tmp/java_policy.$$
#    mv /tmp/java_policy.$$ $MSF_HOME/config/java.policy
    echo $jdbc_policy >> $MSF_HOME/config/java.policy
fi
}

USAGE="usage: msfconfig"

help() {
echo "MSF configuration tool"
echo $USAGE
echo "    This tool prompts for configuration settings to be used with Sun MSF"
}

set -- `getopt h $*`

if test  "$1" != "--"
then
    case $1 in
    -h)
        help
        exit 0
        ;;
    *)
# illegal option encountered
        echo $USAGE
        exit 1
    esac
fi

DATEVAR=`date '+%m/%d/%Y   %H:%M:%S'`
echo "--------------------------------------------------------------------------------"
echo "                   Sun MSF Configuration Utility           $DATEVAR"
echo ""

# ----------------------------------------------------------------------------
#
# Determine where the installation of MSF is.
#
# ----------------------------------------------------------------------------
if [ "$MSF_HOME"A = "A" ] ; then
    D=`dirname \`which $0\``
    B=`basename \`which $0\``
    abspath="`cd \"$D\" 2>/dev/null && pwd || echo \"$D\"`/$B"
    tmp1=`dirname $abspath`
    MSF_HOME=`dirname $tmp1`
fi

config_file="MSFconfig.properties"
if [ ! -f "${MSF_HOME}/etc/${config_file}" ] ; then
    echo "#"
    echo "# ERROR: Could not find installation under '"${MSF_HOME}"'"
    echo "#"
    exit 1
fi
# ----------------------------------------------------------------------------
#
# Ensure using a compatible Java version (1.4 or later)
#
# ----------------------------------------------------------------------------
java_version=`java -version 2>&1 \
	|sed 's/.*n "//' \
	|sed 's/1\.4.*/1\.4/' \
	|sed 's/1\.5.*/1\.5/' \
	|sed 's/[CJ].*//'`

if [ "$java_version"A != "1.4A" -a "$java_version"A != "1.5A" ] ; then
    echo "#"
    echo "# ERROR: Missing / Invalid Java version in \$PATH environment"
    echo "#"
    java -version
    exit 1
fi
# ----------------------------------------------------------------------------
#
# Ensure MSF_INSTANCE variable is set up
#
# ----------------------------------------------------------------------------
if [ "$MSF_INSTANCE"A = "A" ]; then
    echo "#"
    echo "# ERROR: Must specify value for environment variable MSF_INSTANCE"
    echo "#"
    exit 1
fi
# ----------------------------------------------------------------------------
#
# Ensure MSF_INSTANCE exists as a writable directory under $MSF_HOME/config
#
# ----------------------------------------------------------------------------
#if [ ! -e "${MSF_HOME}/config/${MSF_INSTANCE}" ]; then
#    echo "#"
#    echo "# ERROR: ${MSF_HOME}/config/$MSF_INSTANCE directory doesn't exist"
#    echo "#"
#    exit 1
#fi
if [ ! -d "${MSF_HOME}/config/${MSF_INSTANCE}" ]; then
    echo "#"
    echo "# ERROR: ${MSF_HOME}/config/$MSF_INSTANCE is not a directory"
    echo "#"
    exit 1
fi
if [ ! -w "${MSF_HOME}/config/${MSF_INSTANCE}" ]; then
    echo "#"
    echo "# ERROR: ${MSF_HOME}/config/$MSF_INSTANCE directory is not writable"
    echo "#"
    exit 1
fi

if  [ ! -f $MSF_HOME/config/java.security ]
then
    echo "Creating file: ${MSF_HOME}/config/java.security"
    do_java_security="true"
fi
if  [ ! -f $MSF_HOME/config/java.policy ]
then
    echo "Creating file: ${MSF_HOME}/config/java.policy"
    do_java_policy="true"
fi
if  [ ! -f $MSF_HOME/config/jaas.config ]
then
    echo "Creating file: ${MSF_HOME}/config/jaas.config"
    do_jaas_config="true"
fi
if  [ ! -f $MSF_HOME/config/$MSF_INSTANCE/$config_file ]
then
    echo "Creating file: ${MSF_HOME}/config/${MSF_INSTANCE}/${config_file}"
    work_dir="${MSF_HOME}/etc"
else
    echo "Updating file: ${MSF_HOME}/config/${MSF_INSTANCE}/${config_file}"
    work_dir="${MSF_HOME}/config/${MSF_INSTANCE}"
fi

#-----------------------------------------------------------------------#
#  The following code is required for systems where echo always adds a  #
#  new line.  The code checks for new line suppressing and makes it as  #
#  variable to be used                                                  #
#-----------------------------------------------------------------------#
if  echo "\c" | grep c >/dev/null 2>&1; then
    N='-n'
else
    C='\c'
fi

echo ""
echo "         1   Define Oracle JDBC driver properties"
echo "         2   Define DB2 UDB JDBC driver properties"
echo "         3   Define Sybase JDBC driver properties"
echo "         4   Define Sun Java System Directory Server (LDAP) driver properties"
echo ""
echo "         Q   Quit; exit without saving any changes"
echo ""
echo "--------------------------------------------------------------------------------"
echo $N "Enter the option number corresponding to the selection you want: $C"
read opt

# export config_file work_dir

# Begin Case {
case $opt in
     1)
        rdbms_oracle="$SELECTED"
        ORACLE_env_chek
     ;;
     2)
        rdbms_db2="$SELECTED"
        DB2_env_chek
     ;;
     3)
        rdbms_sybase="$SELECTED"
        SYBASE_env_chek
     ;;
     4)
	if  test -f ${MSF_HOME}/config/$MSF_INSTANCE/jndi.properties
	then
          echo "Making backup file: ${MSF_HOME}/config/$MSF_INSTANCE/jndi.properties.bkup"
	  mv ${MSF_HOME}/config/$MSF_INSTANCE/jndi.properties \
	     ${MSF_HOME}/config/$MSF_INSTANCE/jndi.properties.bkup
	fi
	echo "java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory" > \
	     ${MSF_HOME}/config/$MSF_INSTANCE/jndi.properties
        echo "Creating file: ${MSF_HOME}/config/$MSF_INSTANCE/jndi.properties"
        ldap_iplanet="$SELECTED"
        IPLANET_env_chek
     ;;
     9)
        if [ ! -z "$MYSQL_JDBC" ]
        then
          rdbms_mysql="$SELECTED"
          MYSQL_env_chek
        fi
     ;;
     Q|q)
        echo "#"
        echo "# Terminating; no changes made"
        echo "#"
        exit 0
     ;;
     *)
        echo "#"
        echo "# ERROR. Invalid Option; terminating"
        echo "#"
        exit 1
     ;;
esac
# End Case }
save_umask=`umask`
umask 022
if [ "$do_java_security" = "true" ]
then
    build_java_security
fi
if [ "$do_java_policy" = "true" ]
then
    build_java_policy
fi

if [ "$do_jaas_config" = "true" ]
then
    build_jaas_config
fi

build_configuration

umask $save_umask
echo "Sun MSF Configuration completed successfully!"
exit 0
