/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ package org.openoffice.setup.Util; import java.io.File; import java.util.Vector; import org.openoffice.setup.InstallData; import org.openoffice.setup.ResourceManager; import org.openoffice.setup.SetupData.SetupDataProvider; import org.openoffice.setup.Util.LogManager; public class Controller { private Controller() { } static public void checkPackagePathExistence(InstallData installData) { String packagePath = installData.getPackagePath(); if (( packagePath == null ) || ( packagePath.equals(""))) { String message = ResourceManager.getString("String_InstallationOngoing_PackagePath_Not_Found"); String title = ResourceManager.getString("String_Error"); Informer.showErrorMessage(message, title); System.exit(1); } } static public void checkPackageFormat(InstallData installData) { String packageFormat = installData.getPackageFormat(); String os = installData.getOSType(); boolean notSupportedPackageFormat = true; // Show warnings for currently not supported combinations of OS and package format. // This has to be adapted if further OS or package formats are supported. if (( os.equalsIgnoreCase("SunOS") ) && ( packageFormat.equalsIgnoreCase("pkg") )) { notSupportedPackageFormat = false; } if (( os.equalsIgnoreCase("Linux") ) && ( packageFormat.equalsIgnoreCase("rpm") )) { notSupportedPackageFormat = false; } // Inform user about not supported package format and exit program if ( notSupportedPackageFormat ) { System.err.println("Error: Package format not supported by this OS!"); String mainmessage = ResourceManager.getString("String_Packageformat_Not_Supported"); String osstring = ResourceManager.getString("String_Operating_System"); String formatstring = ResourceManager.getString("String_Packageformat"); String message = mainmessage + "\n" + osstring + ": " + os + "\n" + formatstring + ": " + packageFormat; String title = ResourceManager.getString("String_Error"); Informer.showErrorMessage(message, title); System.exit(1); } } static public void collectSystemLanguages(InstallData installData) { String pkgCommand = ""; String[] pkgCommandArray; String adminFileName = ""; String log = ""; Vector returnVector = new Vector(); Vector returnErrorVector = new Vector(); int returnValue; pkgCommand = "locale -a"; pkgCommandArray = new String[2]; pkgCommandArray[0] = "locale"; pkgCommandArray[1] = "-a"; returnValue = ExecuteProcess.executeProcessReturnVector(pkgCommandArray, returnVector, returnErrorVector); if ( returnValue == 0 ) { log = pkgCommand + "
Returns: " + returnValue + " Successful command
"; LogManager.addCommandsLogfileComment(log); // System.err.println("Available languages 1: "); // for (int i = 0; i < returnVector.size(); i++) { // System.err.println(returnVector.get(i)); // } // Collecting "en-US" instead of "en-US.UTF8" Vector realVector = new Vector(); for (int i = 0; i < returnVector.size(); i++) { String oneLang = (String)returnVector.get(i); int position = oneLang.indexOf("."); if ( position > -1 ) { oneLang = oneLang.substring(0, position); } if ( ! realVector.contains(oneLang)) { realVector.add(oneLang); } } // System.err.println("Available languages 2: "); // for (int i = 0; i < realVector.size(); i++) { // System.err.println(realVector.get(i)); // } installData.setSystemLanguages(realVector); } else { // an error occurred log = pkgCommand + "
Returns: " + returnValue + " An error occurred
"; LogManager.addCommandsLogfileComment(log); System.err.println("Error in command: " + pkgCommand); for (int i = 0; i < returnErrorVector.size(); i++) { LogManager.addCommandsLogfileComment((String)returnErrorVector.get(i)); System.err.println(returnErrorVector.get(i)); } } } static public boolean createdSubDirectory(String dir) { boolean createdDirectory = false; boolean errorShown = false; String subDirName = "testdir"; File testDir = new File(dir, subDirName); try { createdDirectory = SystemManager.create_directory(testDir.getPath()); } catch (SecurityException ex) { String message = ResourceManager.getString("String_ChooseDirectory_No_Write_Access") + ": " + dir; String title = ResourceManager.getString("String_Error"); Informer.showErrorMessage(message, title); errorShown = true; } if (( ! createdDirectory ) && ( ! errorShown )) { String message = ResourceManager.getString("String_ChooseDirectory_No_Write_Access") + ": " + dir; String title = ResourceManager.getString("String_Error"); Informer.showErrorMessage(message, title); errorShown = true; } if ( SystemManager.exists_directory(testDir.getPath()) ) { testDir.delete(); } return createdDirectory; } static public boolean createdDirectory(String dir) { boolean createdDirectory = false; try { createdDirectory = SystemManager.create_directory(dir); } catch (SecurityException ex) { // message = ResourceManager.getString("String_ChooseDirectory_Not_Allowed") + ": " + dir; // title = ResourceManager.getString("String_Error"); // Informer.showErrorMessage(message, title); } if ( ! createdDirectory ) { String message = ResourceManager.getString("String_ChooseDirectory_No_Success") + ": " + dir; String title = ResourceManager.getString("String_Error"); Informer.showErrorMessage(message, title); } return createdDirectory; } static public boolean reducedRootWritePrivileges() { Vector vec = new Vector(); File dir = new File("/usr"); vec.add(dir); dir = new File("/etc"); vec.add(dir); boolean restrictedWritePrivilges = false; // Check for zones. If "zonename" is successful and the name is not "global", // this is a "sparse zone". // Alternative: Simply always check, if root has write access in selected directories. for (int i = 0; i < vec.size(); i++) { File directory = (File)vec.get(i); if ( directory.exists() ) { // do we have write privileges inside the directory String tempDirName = "temptestdir"; File tempDir = new File(directory, tempDirName); if ( SystemManager.createDirectory(tempDir) ) { SystemManager.removeDirectory(tempDir); } else { restrictedWritePrivilges = true; System.err.println("Restricted Root privileges. No write access in " + directory.getPath()); break; } } } return restrictedWritePrivilges; } static public void checkForNewerVersion(InstallData installData) { LogManager.setCommandsHeaderLine("Checking change installation"); InstallChangeCtrl.checkInstallChange(installData); if ( installData.newerVersionExists() ) { // Inform user about a newer version installed SetupDataProvider.setNewMacro("DIR", installData.getInstallDefaultDir()); // important for string replacement System.err.println("Error: A newer version is already installed in " + installData.getInstallDefaultDir() + " !"); String message1 = ResourceManager.getString("String_Newer_Version_Installed_Found") + "\n" + installData.getInstallDefaultDir() + "\n"; String message2 = ResourceManager.getString("String_Newer_Version_Installed_Remove"); String message = message1 + "\n" + message2; String title = ResourceManager.getString("String_Error"); Informer.showErrorMessage(message, title); System.exit(1); } } static public void checkForUidFile(InstallData installData) { // check existence of getuid.so File getuidFile = Controller.findUidFile(installData); if (( getuidFile == null ) || (! getuidFile.exists()) ) { // Root privileges required -> abort installation System.err.println("Root privileges required for installation!"); String message = ResourceManager.getString("String_Root_Privileges_Required_1") + "\n" + ResourceManager.getString("String_Root_Privileges_Required_2"); String title = ResourceManager.getString("String_Error"); Informer.showErrorMessage(message, title); System.exit(1); } else { installData.setGetUidPath(getuidFile.getPath()); } } static private File findUidFile(InstallData data) { File getuidFile = null; if ( data.isInstallationMode()) { String getuidpath = System.getProperty("GETUID_PATH"); if ( getuidpath != null ) { getuidFile = new File(getuidpath); if (( getuidFile.isDirectory() ) && ( ! getuidFile.isFile() )) { // Testing, if GETUID_PATH only contains the path, not the filename String defaultfilename = "getuid.so"; getuidFile = new File(getuidpath, defaultfilename); if ( ! getuidFile.exists() ) { getuidFile = null; } } } // File resourceRoot = data.getResourceRoot(); // String getuidString = "getuid.so"; // if ( resourceRoot != null ) { // File getuidDir = new File (data.getInfoRoot(), "getuid"); // getuidFile = new File(getuidDir, getuidString); // } } else { getuidFile = new File(data.getGetUidPath()); } return getuidFile; } }