/*********************************************************************** * * Copyright (C) 2006 Novell, Inc. All Rights Reserved. * * 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; version 2.1 * of the License. * * 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 * Library 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, Novell, Inc. * * To contact Novell about this file by physical or electronic mail, * you may find current contact information at www.novell.com. * * Authors: Juan Carlos Luciani * Greg Richardson * ***********************************************************************/ import java.io.*; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import java.util.zip.ZipFile; /** * Configure Class. *

* This class readies the Authentication Token Service after it has been * installed. */ public class Configure { // Other constants final static String SERVER_KEY_STORE_RELATIVE_PATH = "\\etc\\keys\\server\\jks-store"; final static String CLIENT_KEY_STORE_RELATIVE_PATH = "\\etc\\keys\\client\\jks-store"; final static String SIGNING_CERT_RELATIVE_PATH = "\\etc\\keys\\casaatsdSigningCert"; // Configured properties Properties m_properties; // Completion code int m_rc; // Template replace strings String[] m_rgsSearchFor; String[] m_rgsReplaceWith; /** * Constructor. * * @param properties Configuration properties. */ Configure(Properties properties) { m_rc = AtsConfigurator.ERROR_NO_ERROR; AtsConfigurator.log("Configure()- Start"); try { // Save the properties m_properties = properties; // Process the properties if (AtsConfigurator.ERROR_NO_ERROR == (m_rc = processProperties())) { // Create the server keystore if (AtsConfigurator.ERROR_NO_ERROR == (m_rc = createServerKeystore())) { // Create the client keystore if (AtsConfigurator.ERROR_NO_ERROR == (m_rc = createClientKeystore())) { // Setup the relocatable files if (AtsConfigurator.ERROR_NO_ERROR == (m_rc = setupRelocatableFiles())) { // Setup the War file if (AtsConfigurator.ERROR_NO_ERROR == (m_rc = createWarFileFromTemplate())) { // Create the ATS Service m_rc = createATSService(); } } } } } } catch (Exception e) { m_rc = AtsConfigurator.ERROR_EXCEPTION; AtsConfigurator.log("Exception" + e.getMessage()); } AtsConfigurator.log("Configure()- End, rc= ", m_rc); } /** * Process properties. * * @return Return code. */ int processProperties() { int rc = AtsConfigurator.ERROR_NO_ERROR; AtsConfigurator.log("Configure.processProperties()- Start"); // Setup replace template key/values arrays int i = 0; Enumeration e = m_properties.propertyNames(); m_rgsSearchFor = new String[m_properties.size()]; m_rgsReplaceWith = new String[m_properties.size()]; while (e.hasMoreElements()) { String key = (String) e.nextElement(); String value = (String) m_properties.get(key); m_rgsSearchFor[i] = key; m_rgsReplaceWith[i] = value; i++; } AtsConfigurator.log("Configure.processProperties()- End, rc= ", rc); return rc; } /** * Check if the keystore already exists * * @param keyStoreRelPath Relative path to the keystore * @return true if the keystore exists otherwise false. */ boolean keyStoreAlreadyExists(String keyStoreRelPath) { boolean retValue = false; AtsConfigurator.log("Configure.keyStoreAlreadyExists()- Start, relPath = " + keyStoreRelPath); File fileKeystore = new File(((String) m_properties.get(AtsConfigurator.INSTALL_DIR_PROPERTY)) + keyStoreRelPath); File fileParent = fileKeystore.getParentFile(); String[] rgChildren = fileParent.list(); if (null != rgChildren) { for (int i = 0; i < rgChildren.length; i++) { AtsConfigurator.log("child " + i + " = " + rgChildren[i]); if ("jks-store".equals(rgChildren[i])) { retValue = true; } } } AtsConfigurator.log("Configure.keyStoreAlreadyExists()- End, retValue = " + retValue ); return retValue; } /** * Create the server keystore. * * @return Return code. */ int createServerKeystore() { int rc = AtsConfigurator.ERROR_NO_ERROR; AtsConfigurator.log("Configure.createServerKeystore()- Start"); // Proceed only if the server keystore has not been created if (!keyStoreAlreadyExists(SERVER_KEY_STORE_RELATIVE_PATH)) { String keytoolPath = m_properties.get(AtsConfigurator.JAVA_HOME_PROPERTY) + "\\bin\\keytool"; String installDir = (String) m_properties.get(AtsConfigurator.INSTALL_DIR_PROPERTY); // Allocate and setup commandArray to create signing key String[] commandArray = new String[14]; commandArray[0] = keytoolPath; commandArray[1] = "-genkey"; commandArray[2] = "-alias"; commandArray[3] = "signingKey"; commandArray[4] = "-keypass"; commandArray[5] = "secret"; commandArray[6] = "-keystore"; commandArray[7] = installDir + SERVER_KEY_STORE_RELATIVE_PATH; commandArray[8] = "-storepass"; commandArray[9] = "secret"; commandArray[10] = "-dname"; commandArray[11] = "cn=casaatsd@" + (String) m_properties.get("COMPUTERNAME"); commandArray[12] = "-validity"; commandArray[13] = "3600"; // Create the signing key if (AtsConfigurator.ERROR_NO_ERROR == (rc =AtsConfigurator.invokeExternalCommand(commandArray))) { // Allocate and setup commandArray to export the signing certificate commandArray = new String[12]; commandArray[0] = keytoolPath; commandArray[1] = "-export"; commandArray[2] = "-alias"; commandArray[3] = "signingKey"; commandArray[4] = "-keypass"; commandArray[5] = "secret"; commandArray[6] = "-keystore"; commandArray[7] = installDir + SERVER_KEY_STORE_RELATIVE_PATH; commandArray[8] = "-storepass"; commandArray[9] = "secret"; commandArray[10] = "-file"; commandArray[11] = installDir + SIGNING_CERT_RELATIVE_PATH; // Export self-signed certificate for the signing key if (AtsConfigurator.ERROR_NO_ERROR == (rc = AtsConfigurator.invokeExternalCommand(commandArray))) { // Allocate and setup commandArray to create key for Tomcat to do SSL communications commandArray = new String[14]; commandArray[0] = keytoolPath; commandArray[1] = "-genkey"; commandArray[2] = "-alias"; commandArray[3] = "tomcat"; commandArray[4] = "-keypass"; commandArray[5] = "secret"; commandArray[6] = "-keystore"; commandArray[7] = installDir + SERVER_KEY_STORE_RELATIVE_PATH; commandArray[8] = "-storepass"; commandArray[9] = "secret"; commandArray[10] = "-dname"; commandArray[11] = "cn=" + (String) m_properties.get("COMPUTERNAME"); commandArray[12] = "-keyalg"; commandArray[13] = "RSA"; // Create a key for Tomcat to do SSL communications rc = AtsConfigurator.invokeExternalCommand(commandArray); } } } AtsConfigurator.log("Configure.createServerKeystore()- End, rc= ", rc); return rc; } /** * Create the client keystore. * * @return Return code. */ int createClientKeystore() { int rc = AtsConfigurator.ERROR_NO_ERROR; AtsConfigurator.log("Configure.createClientKeystore()- Start"); // Proceed only if the client keystore has not been created if (!keyStoreAlreadyExists(CLIENT_KEY_STORE_RELATIVE_PATH)) { String keytoolPath = m_properties.get(AtsConfigurator.JAVA_HOME_PROPERTY) + "\\bin\\keytool"; String installDir = (String) m_properties.get(AtsConfigurator.INSTALL_DIR_PROPERTY); // Allocate and setup commandArray to export the signing certificate String[] commandArray = new String[13]; commandArray[0] = keytoolPath; commandArray[1] = "-import"; commandArray[2] = "-noprompt"; commandArray[3] = "-alias"; commandArray[4] = "signingCert"; commandArray[5] = "-keypass"; commandArray[6] = "secret"; commandArray[7] = "-keystore"; commandArray[8] = installDir + CLIENT_KEY_STORE_RELATIVE_PATH; commandArray[9] = "-storepass"; commandArray[10] = "secret"; commandArray[11] = "-file"; commandArray[12] = installDir + SIGNING_CERT_RELATIVE_PATH; // Import the servers certificate in the client keystore rc = AtsConfigurator.invokeExternalCommand(commandArray); } AtsConfigurator.log("Configure.createClientKeystore()- End, rc= ", rc); return rc; } /** * Create file from template. * * @param fileTemplate Template file. * @param fileOutput Output file path. * @param escapePathCharsInReplaceString Escape Windows Path Chars in Replace String before using. * @param useUnixPathCharsInReplaceString Replace Windows Path Chars with "//" in Replace String before using. * @return Return code. */ int createFileFromTemplate(File fileTemplate, File fileOutput, boolean escapePathCharsInReplaceString, boolean useUnixPathCharsInReplaceString) { int rc = AtsConfigurator.ERROR_NO_ERROR; LineNumberReader lnr = null; FileWriter fwOutput = null; AtsConfigurator.log("Configure.createFileFromTemplate()- Start, template = " + fileTemplate); try { // Open the files lnr = new LineNumberReader(new FileReader(fileTemplate)); try { fwOutput = new FileWriter(fileOutput); try { // For each line of text in the template file... String sLineTemplate; while (null != (sLineTemplate = lnr.readLine())) { String sLineOutput = sLineTemplate; // For each term to be replaced... for (int i = 0; i < m_rgsSearchFor.length; i++) { // Replace all instances of the term on the line int iSearchFor; while (-1 != (iSearchFor = sLineOutput.indexOf(m_rgsSearchFor[i]))) { // Check if we must escape path characters in replace string String replaceString; if (useUnixPathCharsInReplaceString) { replaceString = m_rgsReplaceWith[i].replace("\\", "//"); } else { if (escapePathCharsInReplaceString) replaceString = m_rgsReplaceWith[i].replace("\\", "\\\\"); else replaceString = m_rgsReplaceWith[i]; } AtsConfigurator.log("replacing " + m_rgsSearchFor[i] + " at position " + iSearchFor + " with " + replaceString); sLineOutput = sLineOutput.substring(0, iSearchFor) + replaceString + sLineOutput.substring(iSearchFor + m_rgsSearchFor[i].length()); } } try { fwOutput.write(sLineOutput + "\r\n"); } catch (Exception e) { rc = AtsConfigurator.ERROR_EXCEPTION; } } // Clean up fwOutput.flush(); } catch (Exception e) { rc = AtsConfigurator.ERROR_OUTPUT_COPY_FAILED; } } catch (Exception e) { rc = AtsConfigurator.ERROR_FILEWRITER_CREATE_FAILED; } } catch (Exception e) { rc = AtsConfigurator.ERROR_UNABLE_TO_OPEN_TEMPLATE; } finally { try { if (lnr != null) lnr.close(); if (fwOutput != null) fwOutput.close(); } catch (Exception e) { // Do nothing } } AtsConfigurator.log("Configure.createFileFromTemplate()- End, rc= ", rc); return rc; } /** * Setup all of the needed relocatable files. * * @return Return code. */ int setupRelocatableFiles() { int rc; AtsConfigurator.log("Configure.setupRelocatableFiles()- Start"); String installDir = (String) m_properties.get(AtsConfigurator.INSTALL_DIR_PROPERTY); if (AtsConfigurator.ERROR_NO_ERROR == (rc = createFileFromTemplate(new File(installDir + "\\etc\\svc\\templates\\server-sun.xml"), new File(installDir + "\\catalinabase\\conf\\server.xml"), false, false))) if (AtsConfigurator.ERROR_NO_ERROR == (rc = createFileFromTemplate(new File(installDir + "\\etc\\svc\\templates\\startup.bat"), new File(installDir + "\\bin\\startup.bat"), false, false))) if (AtsConfigurator.ERROR_NO_ERROR == (rc = createFileFromTemplate(new File(installDir + "\\etc\\svc\\templates\\shutdown.bat"), new File(installDir + "\\bin\\shutdown.bat"), false, false))) if (AtsConfigurator.ERROR_NO_ERROR == (rc = createFileFromTemplate(new File(installDir + "\\etc\\svc\\templates\\CasaAuthPolicyEditor.bat"), new File(installDir + "\\bin\\CasaAuthPolicyEditor.bat"), false, false))) if (AtsConfigurator.ERROR_NO_ERROR == (rc = createFileFromTemplate(new File(installDir + "\\etc\\svc\\templates\\CasaAuthTokenSettingsEditor.bat"), new File(installDir + "\\bin\\CasaAuthTokenSettingsEditor.bat"), false, false))) if (AtsConfigurator.ERROR_NO_ERROR == (rc = createFileFromTemplate(new File(installDir + "\\etc\\svc\\templates\\CasaIdenTokenSettingsEditor.bat"), new File(installDir + "\\bin\\CasaIdenTokenSettingsEditor.bat"), false, false))) if (AtsConfigurator.ERROR_NO_ERROR == (rc = createFileFromTemplate(new File(installDir + "\\etc\\svc\\templates\\CasaSvcSettingsEditor.bat"), new File(installDir + "\\bin\\CasaSvcSettingsEditor.bat"), false, false))) if (AtsConfigurator.ERROR_NO_ERROR == (rc = createFileFromTemplate(new File(installDir + "\\etc\\svc\\templates\\svc.settings"), new File(installDir + "\\etc\\svc\\svc.settings"), false, false))) if (AtsConfigurator.ERROR_NO_ERROR == (rc = createFileFromTemplate(new File(installDir + "\\etc\\svc\\templates\\jaas.conf"), new File(installDir + "\\etc\\svc\\jaas.conf"), false, false))) if (AtsConfigurator.ERROR_NO_ERROR == (rc = createFileFromTemplate(new File(installDir + "\\etc\\svc\\templates\\casa_crypto.properties"), new File(installDir + "\\etc\\svc\\casa_crypto.properties"), false, true))) rc = createFileFromTemplate(new File(installDir + "\\etc\\svc\\templates\\log4j.properties"), new File(installDir + "\\etc\\svc\\log4j.properties"), true, false); AtsConfigurator.log("Configure.setupRelocatableFiles()- End, rc= ", rc); return rc; } /** * Move files from Jar to Jar. * * @param josDst Destination Jar Output stream. * @param jfSrc Source Jar. * @return Return code. */ int moveFilesFromJarToJar(ZipOutputStream josDst, ZipFile jfSrc) { int rc = AtsConfigurator.ERROR_NO_ERROR; AtsConfigurator.log("Configure.moveFilesFromJarToJar()- Start"); try { Enumeration entries = jfSrc.entries(); while (entries.hasMoreElements()) { ZipEntry jeLoop = (ZipEntry)entries.nextElement(); // Skip WEB-INF/classes/cypto.properties if (jeLoop.getName().equalsIgnoreCase("WEB-INF/classes/casa_crypto.properties")) { AtsConfigurator.log("skipping: " + "WEB-INF/classes/casa_crypto.properties"); continue; } // Move the rest of the files over else { AtsConfigurator.log("Transferring jar file: " + jeLoop.getName()); // Create the input stream InputStream isLoop = jfSrc.getInputStream(jeLoop); // Set up the output stream ZipEntry zeIndex = new ZipEntry(jeLoop.getName()); josDst.putNextEntry( zeIndex); // Transfer the file contents int bRead; byte [] b = new byte[4096]; while (-1 != (bRead = isLoop.read(b))) { josDst.write(b, 0, bRead); } // all done josDst.closeEntry(); isLoop.close(); } } } catch (Exception e) { rc = AtsConfigurator.ERROR_JAR_COPY_FAILED; } AtsConfigurator.log("Configure.moveFilesFromJarToJar()- End, rc= ", rc); return rc; } /** * Add file to Jar. * * @param sFilename Path to file. * @param sName Zip entry name. * @param josJarNew Jar output stream. * @return Return code. */ int addFileToJar(String sFilename, String sName, ZipOutputStream josJarNew) { int rc = AtsConfigurator.ERROR_NO_ERROR; AtsConfigurator.log("Configure.addFileToJar()- Start"); try { // Create the input stream FileInputStream fis = new FileInputStream(sFilename); // Set up the output stream ZipEntry je = new ZipEntry(sName); josJarNew.putNextEntry(je); // Tansfer the contents of the file int bRead; byte [] b = new byte[4096]; while (-1 != (bRead = fis.read(b))) { josJarNew.write(b, 0, bRead); } // All done fis.close(); josJarNew.closeEntry(); } catch (Exception e) { AtsConfigurator.log(e.toString()); rc = AtsConfigurator.ERROR_ADD_FILE_TO_JAR_FAILED; } AtsConfigurator.log("Configure.addFileToJar()- End, rc= ", rc); return rc; } /** * Create War file from template. * * @return Return code. */ int createWarFileFromTemplate() { String sWarTemplate = ((String) m_properties.get(AtsConfigurator.INSTALL_DIR_PROPERTY)) + "\\etc\\svc\\templates\\CasaAuthTokenSvc.war"; String sWarNew = ((String) m_properties.get(AtsConfigurator.INSTALL_DIR_PROPERTY)) + "\\catalinabase\\webapps\\CasaAuthTokenSvc.war"; File fileWarTemplate = new File(sWarTemplate); File fileWarNew = new File(sWarNew); FileOutputStream fosWarNew = null; ZipOutputStream josWarNew = null; ZipFile jfTemplate = null; int rc = AtsConfigurator.ERROR_NO_ERROR; AtsConfigurator.log("Configure.createWarFileFromTemplate()- Start"); // Ensure that the war template exists AtsConfigurator.log("looking for war template: " + sWarTemplate); if (!fileWarTemplate.exists()) { rc = AtsConfigurator.ERROR_WAR_TEMPLATE_FILE_MISSING; } if (rc == AtsConfigurator.ERROR_NO_ERROR) { // Ensure that the new jar name does not exist if (fileWarNew.exists()) { AtsConfigurator.log("war file already exists: " + sWarNew); if (!fileWarNew.delete()) { AtsConfigurator.log("could not delete war file: " + sWarNew); rc = AtsConfigurator.ERROR_NEW_JAR_CANNOT_BE_REPLACED; } } } if (rc == AtsConfigurator.ERROR_NO_ERROR) { // Create/open the new jar try { AtsConfigurator.log("create new war file output stream: " + sWarNew); fosWarNew = new FileOutputStream(fileWarNew); josWarNew = new ZipOutputStream(fosWarNew); } catch (IOException ioe0) { AtsConfigurator.log(ioe0.toString()); rc = AtsConfigurator.ERROR_CREATE_WAR_FOS_FAILED; } } if (rc == AtsConfigurator.ERROR_NO_ERROR) { // Open the old jar try { jfTemplate = new ZipFile(sWarTemplate); } catch (IOException ioe1) { rc = AtsConfigurator.ERROR_OPEN_JAR_TEMPLATE_FAILED; } } if (rc == AtsConfigurator.ERROR_NO_ERROR) { // Transfer the files rc = moveFilesFromJarToJar(josWarNew, jfTemplate); } // Add the files if (rc == AtsConfigurator.ERROR_NO_ERROR) { int i; String [] rgsFilesToAdd = new String[1]; rgsFilesToAdd[0] = ((String) m_properties.get(AtsConfigurator.INSTALL_DIR_PROPERTY)) + "\\etc\\svc\\casa_crypto.properties"; String [] rgsNames = new String[1]; rgsNames[0] = "WEB-INF/classes/casa_crypto.properties"; for (i = 0; i < rgsFilesToAdd.length; i++) { AtsConfigurator.log("Adding file: " + rgsFilesToAdd[i] + " with name " + rgsNames[i]); rc = addFileToJar(rgsFilesToAdd[i], rgsNames[i], josWarNew); } } // Close up if (null != josWarNew) { try { josWarNew.flush(); } catch (IOException ioe2) { rc = AtsConfigurator.ERROR_JOS_FLUSH_FAILED; } try { josWarNew.close(); } catch (IOException ioe3) { rc = AtsConfigurator.ERROR_JOS_CLOSE_FAILED; } try { fosWarNew.close(); } catch (IOException ioe4) { rc = AtsConfigurator.ERROR_FOS_CLOSE_FAILED; } } if (null != jfTemplate) { try { jfTemplate.close(); } catch (IOException ioe5) { rc = AtsConfigurator.ERROR_JFTEMPLATE_CLOSE_FAILED; } } AtsConfigurator.log("Configure.createWarFileFromTemplate()- End, rc= ", rc); return rc; } /** * Create ATS Service. * * @return Return code. */ int createATSService() { int rc = AtsConfigurator.ERROR_NO_ERROR; AtsConfigurator.log("Configure.createATSService()- Start"); String installDir = (String) m_properties.get(AtsConfigurator.INSTALL_DIR_PROPERTY); String sDirCatalinaBase = installDir + "/catalinabase"; String sDirCatalinaHome = (String) m_properties.get(AtsConfigurator.TOMCAT_HOME_PROPERTY); String sFileJaasConf = installDir + "\\etc\\svc\\jaas.conf"; String sDirConfig = installDir + "/etc/svc"; String sDirJavaHome = (String) m_properties.get(AtsConfigurator.JAVA_HOME_PROPERTY); String sLogPrefix = "casa-auth-token-svc"; String sDirLogs = sDirCatalinaBase + "/logs"; // Determine the path to the Tomcat5 executable String sExe = (String) m_properties.get(AtsConfigurator.TOMCAT5_PROPERTY); if (sExe == null) sExe = ((String) m_properties.get(AtsConfigurator.TOMCAT_HOME_PROPERTY)) + "\\bin\\tomcat5.exe"; /* * Note that in the following code we do not bother to check the return of the invokeExternalCommand * call. This is because I have found that some versions of tomcat5.exe do not always return success * even though they should. */ String[] commandArray = { sExe, "//IS//CasaAuthTokenService", "--StartClass", "org.apache.catalina.startup.Bootstrap", "--StopClass", "org.apache.catalina.startup.Bootstrap", "--StartParams", "start", "--StopParams", "stop", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray); String[] commandArray1 = { sExe, "//US//CasaAuthTokenService", "--Startup", "auto", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray1); String[] commandArray2 = { sExe, "//US//CasaAuthTokenService", "--JvmOptions", "\"-Dcatalina.base=" + sDirCatalinaBase + "\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray2); String[] commandArray3 = { sExe, "//US//CasaAuthTokenService", "++JvmOptions", "\"-Dcatalina.home=" + sDirCatalinaHome + "\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray3); String[] commandArray4 = { sExe, "//US//CasaAuthTokenService", "++JvmOptions", "\"-Djava.endorsed.dirs=" + sDirCatalinaHome + "/common/endorsed\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray4); String[] commandArray5 = { sExe, "//US//CasaAuthTokenService", "++JvmOptions", "\"-Djava.security.auth.login.config=" + sFileJaasConf + "\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray5); String[] commandArray6 = { sExe, "//US//CasaAuthTokenService", "++JvmOptions", "\"-Dcom.novell.casa.authtoksvc.config=" + sDirConfig + "\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray6); String[] commandArray7 = { sExe, "//US//CasaAuthTokenService", "++JvmOptions", "\"-Dlog4j.configuration=file:" + installDir + "/etc/log4j.properties" + "\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray7); String[] commandArray8 = { sExe, "//US//CasaAuthTokenService", "++JvmOptions", "\"-Djava.io.tmpdir=" + sDirCatalinaBase+ "/temp\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray8); String[] commandArray9 = { sExe, "//US//CasaAuthTokenService", "--StartMode", "jvm", "--StopMode", "jvm", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray9); String[] commandArray10 = { sExe, "//US//CasaAuthTokenService", "--JvmMs", "128", "--JvmMx", "512", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray10); String[] commandArray11 = { sExe, "//US//CasaAuthTokenService", "--Classpath", "\"" + sDirCatalinaHome + "/bin/bootstrap.jar\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray11); String[] commandArray12 = { sExe, "//US//CasaAuthTokenService", "--Jvm", "\"" + sDirJavaHome + "/jre/bin/server/jvm.dll\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray12); String[] commandArray13 = { sExe, "//US//CasaAuthTokenService", "--LogPath", "\"" + sDirLogs + "\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray13); String[] commandArray14 = { sExe, "//US//CasaAuthTokenService", "--LogPrefix", "\"" + sLogPrefix + "_service.log\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray14); String[] commandArray15 = { sExe, "//US//CasaAuthTokenService", "--StdOutput", "\"" + sDirLogs + File.separator + sLogPrefix + "_stdout.log\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray15); String[] commandArray16 = { sExe, "//US//CasaAuthTokenService", "--StdError", "\"" + sDirLogs + File.separator + sLogPrefix + "_stderr.log\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray16); String[] commandArray17 = { sExe, "//US//CasaAuthTokenService", "--DisplayName", "CasaAuthTokenSvc", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray17); String[] commandArray18 = { sExe, "//US//CasaAuthTokenService", "--Description", "\"Casa Authentication Token Service\"", "--LogPath", AtsConfigurator.m_logFolderPath, "--LogPrefix", "AtsSvcInstall.log" }; AtsConfigurator.invokeExternalCommand(commandArray18); AtsConfigurator.log("Configure.createATSService()- End, rc= ", rc); return rc; } }