#!/bin/sh

#
# Confidential property of Sybase, Inc.
# Copyright 1987, 2003
# Sybase, Inc.  All rights reserved.
# Unpublished rights reserved under U.S. copyright laws.
#
# This software contains confidential and trade secret information of Sybase,
# Inc.   Use,  duplication or disclosure of the software and documentation by
# the  U.S.  Government  is  subject  to  restrictions set forth in a license
# agreement  between  the  Government  and  Sybase,  Inc.  or  other  written
# agreement  specifying  the  Government's rights to use the software and any
# applicable FAR provisions, for example, FAR 52.227-19.
# Sybase, Inc. One Sybase Drive, Dublin, CA 94568, USA
#

usage()
{       
	echo "Usage: "
    echo "    ${PROGNAME} -d domain hostName -k keystore -h httpsPort -f propertyFile -c Certificate password -s Store password -u"
	echo ""
	echo "    domain hostName: The host name of the URL to connect to using SSL. "
	echo "               For example, if the URL to your webservices is: "
	echo "               http://nnebbish:8181/services/ase, then the domain "
    echo "               Hostname would be: nnebbish "
	echo "               THERE IS NO DEFAULT FOR THIS!!! \n"

	echo "    keystore:  File to store the certificates in.  "
	echo "               Default is \$SYBASE/WS-15_0/keystore. \n"
	echo "    httpsPort: Port to listen for an SSL connection on. Default is 8187. \n"
	echo "    propertyFile: Property file to update. Default is $SYBASE/props/ws.properties. \n"
    echo "    Certificate password: Password for the private key for the generated \n"
    echo "                          certificate. \n"
    echo "    Store password:  Password for the keystore. \n"
	echo ""
	echo "${PROGNAME} execution complete at `date`"
	echo ""

	exit 1
}


PROGNAME=`basename $0`

echo ""
echo "${PROGNAME} initiating execution at `date`."
echo ""

if [ "`echo -n`" = "-n" ]; then
	ECHOOPT=""
        ECHOSUFF="\c"
else
	ECHOOPT="-n"
        ECHOSUFF=""
fi

if [ "$SYBASE" = "" ]
then
    echo "The environment variable SYBASE must be set."
    usage 
fi

if [ "$SYBASE_WS" = "" ]
then
    echo "The environment variable SYBASE_WS is not set."
    SYBASE_WS=WS-15_0
    echo "Setting SYBASE_WS to $SYBASE_WS" 
fi

#
#  Find out where Java is. Our order of searching is:
#
#  1. The environment variable SYBASE_JRE6. By default, InstallShield 
#     will populate this environment variable correctly.
#
#  2. The Java installation specified by JAVA_HOME.
#
#
#  If we cannot locate a java executeable, we exit with an error to the
#  end user.
#


if [ "$SYBASE_JRE6" = "" ]
then
    echo "The environment variable SYBASE_JRE6 is not set."
    if [ "$JAVA_HOME" = "" ]
    then
        echo "The environment variable JAVA_HOME is also not set."
        echo "ERROR: Could not find a valid Java installation."
        echo "Please verify ASE installation or use the environment variable \$SYBASE_JRE6  "
        echo "or \$JAVA_HOME to specify a JRE location. "

        exit 1
    else
        echo "Using \$JAVA_HOME to locate Java."
        SYBASE_JRE6=$JAVA_HOME
    fi
fi

echo "Using SYBASE as $SYBASE" 
echo "Using SYBASE_WS as $SYBASE_WS" 
echo "Using SYBASE_JRE6 as $SYBASE_JRE6"

JRE=$SYBASE_JRE6
JAVA=${JRE}/bin/java
KEYTOOL=${JRE}/bin/keytool

#
#  We ensure that the $JAVA exists and is executable.
#

if [ ! -x "$JAVA" ]
then
    echo "ERROR: Could not find java executable at $JAVA. "
    echo "Please verify that a valid JRE installation exists. "
    echo ""
    exit 1
fi

#
# We need to set LIBPATH before accessing JRE
# on AIX
#
if [ "`uname -s`" = "AIX" ]
then
    export LIBPATH=$JRE/bin/classic:$JRE/bin
fi

DOMAINNAME=
ALIAS=ws
KEYPASSWORD=
STOREPASSWORD=
KEYSTORE=$SYBASE/$SYBASE_WS/producer/keystore
HTTPSPORT=8182
UPDATEWS=
ORIG_WSPROPS=${SYBASE}/${SYBASE_WS}/props/ws.properties

while getopts s:c:f:d:k:h:u opt
do
    case $opt in
	d) DOMAINNAME="$OPTARG" ;;
	k) KEYSTORE="$OPTARG" ;;
	h) HTTPSPORT="$OPTARG" ;;
	f) ORIG_WSPROPS="$OPTARG" ;;
    c) KEYPASSWORD="$OPTARG" ;;
    s) STOREPASSWORD="$OPTARG" ;;
	*)  usage ;;
    esac
done

CERTFILE=`dirname ${KEYSTORE}`/wscertificate.cer

if [ "${DOMAINNAME}" = "" ]
then
    echo "No domain Hostname specified. Please use -d to specify. \n"
    usage 
else
    DNAME="CN=${DOMAINNAME}, OU=ASEWS, O=Sybase, L=Boulder, ST=CO, C=US"
fi

if [ "${KEYPASSWORD}" = "" ]
then
    echo "Please enter Certificate Password :\c "
    stty -echo
    read KEYPASSWORD
    stty echo
fi

echo ""

if [ "${STOREPASSWORD}" = "" ]
then
    echo "Please enter Keystore Password :\c "
    stty -echo
    read STOREPASSWORD
    stty echo
fi

echo ""


SYBASE_WS_LIB=${SYBASE}/${SYBASE_WS}/lib

PRCLASSPATH=${SYBASE_WS_LIB}/axis.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/jaxrpc.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/saaj.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/commons-logging.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/commons-discovery.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/log4j-1.2.4.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/wsdl4j.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE}/jConnect-6_0/classes/jconn3.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE}/jConnect-6_0/classes/jTDS3.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/xercesImpl.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/xmlParserAPIs.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/javax.servlet.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/server.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/sqlx.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/flexlm.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/org.mortbay.jetty-jdk1.2.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/tools.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/jcert.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/jnet.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/jsse.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/jce1_2_2.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/sunjce_provider.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE_WS_LIB}/ws.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE}/shared/lib/dsparser.jar
PRCLASSPATH=${PRCLASSPATH}:${SYBASE}/${SYBASE_WS}/props

EKEYPASSWORD=`$JAVA -classpath ${PRCLASSPATH} com.sybase.ase.ws.security.Encrypt ${KEYPASSWORD}`
ESTOREPASSWORD=`$JAVA -classpath ${PRCLASSPATH} com.sybase.ase.ws.security.Encrypt ${STOREPASSWORD}`

\rm -f ${KEYSTORE}

${KEYTOOL} -genkey -v -alias ${ALIAS} -validity 360 -dname "${DNAME}" -keyalg RSA -keypass ${KEYPASSWORD} -storepass ${STOREPASSWORD} -keystore ${KEYSTORE}

${KEYTOOL} -export -alias ${ALIAS} -dname "${DNAME}" -keypass ${KEYPASSWORD} -storepass ${STOREPASSWORD} -keystore ${KEYSTORE} -file ${CERTFILE}

NEW_WSPROPS=${ORIG_WSPROPS}.new
SAVED_WSPROPS=${ORIG_WSPROPS}.sav

echo "\nUpdating ${ORIG_WSPROPS} file to reflect new SSL settings."

sed '/com.sybase.ase.ws.producer.ssl/d' ${ORIG_WSPROPS} > ${NEW_WSPROPS}

echo "" >> ${NEW_WSPROPS}
echo "com.sybase.ase.ws.producer.ssl.keypassword = ${EKEYPASSWORD}" >> ${NEW_WSPROPS}
echo "com.sybase.ase.ws.producer.ssl.keystore = ${KEYSTORE}" >> ${NEW_WSPROPS}
echo "com.sybase.ase.ws.producer.ssl.httpsport = ${HTTPSPORT}" >> ${NEW_WSPROPS}
echo "com.sybase.ase.ws.producer.ssl.password = ${ESTOREPASSWORD}" >> ${NEW_WSPROPS}

mv ${ORIG_WSPROPS} ${SAVED_WSPROPS}
mv ${NEW_WSPROPS} ${ORIG_WSPROPS}

echo "Update of ${ORIG_WSPROPS} complete."


echo ""
echo "${PROGNAME} execution complete at `date`"
echo ""
