#!/usr/bin/perl
# --- BEGIN COPYRIGHT BLOCK ---
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA  02110-1301  USA
#
# Copyright (C) 2007 Red Hat, Inc.
# All rights reserved.
# --- END COPYRIGHT BLOCK ---

###############################################################################
##  (1) Specify variables used by this script.                               ##
###############################################################################

my $PRODUCT="pki";
my $libpath="";
my $java_cmd="java";


###############################################################################
##  (2) Define helper functions.                                             ##
###############################################################################

sub invalid_operating_system()
{
   	print "\n";
   	print "ERROR:  pkisilent does not execute on this operating system!\n";
   	print "ERROR:  check to make sure pki-native-tools package is installed!\n";
   	print "\n";
}

sub invalid_architecture()
{
   	print "\n";
   	print "ERROR:  pkisilent does not execute on this architecture\n";
   	print "ERROR:  check to make sure pki-native-tools package is installed!\n";
   	print "\n";
}


###############################################################################
##  (3) Set the LD_LIBRARY_PATH environment variable                         ##
##      (as well as the ${libpath} java property) to determine the           ##
##      search order this command uses to find shared libraries.             ##
###############################################################################

my $OS=`uname -s`;
my $ARCHITECTURE="";
chop($OS);


if($OS eq "Linux")
{
	$ARCHITECTURE=`uname -i`;
	chop($ARCHITECTURE);
	if($ARCHITECTURE eq "i386")
	{
		$libpath="/usr/lib";

		$ENV{LD_LIBRARY_PATH} = "/usr/lib/osutil:"
					. "/usr/lib/jss:"
					. "/usr/lib/:/lib/:" ;
		$java_cmd = '/usr/lib/jvm/jre-1.7.0-openjdk/bin/java';
	}

	elsif($ARCHITECTURE eq "x86_64") 
	{
		$libpath="/usr/lib64";

		$ENV{LD_LIBRARY_PATH} = "/usr/lib64/osutil:"
					. "/usr/lib64/jss:"
					. "/usr/lib64/:/lib64/:"
					. "/usr/lib/osutil:"
					. "/usr/lib/jss:"
					. "/usr/lib/:/lib/:" ;
		$java_cmd = '/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java';
	}
	else
	{
		invalid_architecture();
		exit(255);
	}
}
elsif (${OS} eq "SunOS")
{ 
	$ARCHITECTURE=`uname -p`;
	chop($ARCHITECTURE);

    if( ( ${ARCHITECTURE} eq "sparc" ) &&
        ( -d "/usr/lib/sparcv9/" ) ) {
        $ARCHITECTURE="sparcv9";
    }

	if (${ARCHITECTURE} eq "sparc") 
	{
		$libpath="/usr/lib";
		$ENV{LD_LIBRARY_PATH} = "/usr/lib/java:/usr/lib:/lib"
					. "/usr/lib/${PRODUCT}:"
					. "/usr/lib/dirsec:"
					. "/usr/lib/java/dirsec:";
	}

	elsif (${ARCHITECTURE} eq "sparcv9")
	{
		$libpath="/usr/lib/sparcv9";

		$ENV{LD_LIBRARY_PATH} = "/usr/lib/java:/usr/lib:/lib"
					. "/usr/lib/${PRODUCT}:"
					. "/usr/lib/dirsec:"
					. "/usr/lib/sparcv9:/lib/sparcv9:"
					. "/usr/lib/sparcv9/java:"
					. "/usr/lib/sparcv9/${PRODUCT}:"
					. "/usr/lib/sparcv9/dirsec:"
					. "/usr/lib/sparcv9/java/dirsec:";
	}
	else
	{
		invalid_architecture();
		exit(255);
	}
}
else
{
	invalid_operating_system();
	exit(255);
}


###############################################################################
##  (4) Set the CP environment variable to determine the search              ##
##      order this command wrapper uses to find jar files.                   ##
###############################################################################

print "libpath=$libpath\n";

$ENV{CLASSPATH} = "/usr/share/java/${PRODUCT}/pki-silent.jar:"
	. "/usr/share/java/${PRODUCT}/pki-certsrv.jar:"
	. "/usr/share/java/${PRODUCT}/pki-cmscore.jar:"
	. "/usr/share/java/${PRODUCT}/pki-nsutil.jar:"
	. "/usr/share/java/${PRODUCT}/pki-cmsutil.jar:"
	. "/usr/share/java/${PRODUCT}/pki-tools.jar:"
	. "/usr/share/java/jakarta-commons-io.jar:"
	. "/usr/share/java/ldapjdk.jar:"
	. "/usr/share/java/xerces-j2.jar:"
	. "/usr/share/java/xml-commons-apis.jar:"
	. "/usr/share/java/xml-commons-resolver.jar:"
	. "/usr/lib/java/dirsec/jss4.jar:"
	. "/usr/lib/java/jss4.jar:"
	. "/usr/lib/java/dirsec/osutil.jar:"
	. "/usr/lib/java/osutil.jar:";


###############################################################################
##  (5) Execute the java command specified by this java command wrapper      ##
##      based upon the preset LD_LIBRARY_PATH and CP environment variables.  ##
###############################################################################

my @args = ();
foreach (@ARGV) {
    push(@args, quotemeta($_));
}
my $output = `$java_cmd -cp $ENV{CLASSPATH} @args`;
my $status = $?;

print "#######################################################################\n";
print "$output\n";
print "#######################################################################\n";

if ($status != 0) {
  exit(255);
} else {
  exit(0);
}
