package com.idega.util; import com.idega.util.text.TextSoap; import java.io.*; import java.lang.Process; /** * Title: idega default Description: Copyright: Copyright (c) 2001 Company: * idega * *@author <a href="tryggvi@idega.is">Tryggvi Larusson</a> *@created 12. mars 2002 *@version 1.0 */ public class Executer { /** * Constructor for the Executer object */ public Executer() { } /** * The main program for the Executer class * *@param args The command line arguments */ public static void main(String[] args) { try { if (args != null) { for (int i = 0; i < args.length; i++) { System.out.println("com.idega.util.Executer args["+i+"] = "+args[i]); if( canExecute(args[i]) ){ Process p = Runtime.getRuntime().exec(args[i]); StringBuffer sbOut = new StringBuffer(1000); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); while (true) { String s = br.readLine(); if (s == null) { break; } System.out.println(s); } br.close(); //p.waitFor(); System.out.println(sbOut.toString()); System.out.println("Exit status: " + p.exitValue()); p.destroy(); } else{ System.out.println("WARNING SOMEONE IS TRYING TO USE EXECUTE_AFTER_RESTART TO CORRUPT OR DELETE FILES!"); } } } } catch (Exception ex) { ex.printStackTrace(System.err); System.out.println(ex.getMessage()); } } private static boolean canExecute(String exec){ exec = exec.toLowerCase(); if(exec.indexOf("rm -r")!=-1) { return false; } else if(exec.indexOf("rm -f")!=-1) { return false; } else if(exec.indexOf("rm /")!=-1) { return false; } else if(exec.indexOf("rmdir")!=-1) { return false; } else if(exec.startsWith("del ")) { return false; } else { return true; } } /** * Description of the Method * only works in tomcat at the moment *@param args Description of the Parameter */ public static void executeInAnotherVM(String[] args) { try { String javaHome; //jre path if(System.getProperty("os.name").toLowerCase().indexOf("win")!=-1){ javaHome = System.getProperty("sun.boot.library.path"); } else{//unix javaHome = System.getProperty("java.home")+FileUtil.getFileSeparator()+"bin"; } //@todo update this to reflect other versions of application servers classpath String classPath = null; classPath = System.getProperty("tc_path_add");//tomcat 3.3 if(classPath==null) { classPath = System.getProperty("java.class.path"); } if(classPath!=null ) { classPath = TextSoap.findAndCut(classPath," ");//take away all spaces } //put together the string StringBuffer exec = new StringBuffer(); exec.append(javaHome); exec.append(FileUtil.getFileSeparator()); exec.append("java "); if(classPath!=null) { exec.append(" -cp "); exec.append(classPath); exec.append(" "); } exec.append(Executer.class.getName()); exec.append(" "); if (args != null) { for (int i = 0; i < args.length; i++) { exec.append(args[i]); exec.append(" "); } System.out.println("EXECUTING : " + exec); Runtime runner = Runtime.getRuntime(); Process p = runner.exec(exec.toString()); StringBuffer sbOut = new StringBuffer(1000); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); while (true) { String s = br.readLine(); if (s == null) { break; } System.out.println(s); } br.close(); p.waitFor(); System.out.println(sbOut.toString()); System.out.println("Exit status: " + p.exitValue()); } } catch (IOException ex) { System.err.println("Executer: IOException"); ex.printStackTrace(System.out); } catch (InterruptedException ex) { System.err.println("Executer: InterruptedException"); ex.printStackTrace(System.out); } } }