Removed file/folder
git-svn-id: http://webgoat.googlecode.com/svn/trunk@3 4033779f-a91e-0410-96ef-6bf7bf53c507
This commit is contained in:
parent
9a1ba6a425
commit
9bbe01f33b
@ -1,508 +0,0 @@
|
|||||||
package org.owasp.webgoat.util;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.util.BitSet;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copyright (c) 2002 Free Software Foundation developed under the custody of the Open Web
|
|
||||||
* Application Security Project (http://www.owasp.org) This software package org.owasp.webgoat.is published by OWASP
|
|
||||||
* under the GPL. You should read and accept the LICENSE before you use, modify and/or redistribute
|
|
||||||
* this software.
|
|
||||||
*
|
|
||||||
* @author Jeff Williams <a href="http://www.aspectsecurity.com">Aspect Security</a>
|
|
||||||
* @created October 28, 2003
|
|
||||||
*/
|
|
||||||
public class Exec
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Description of the Method
|
|
||||||
*
|
|
||||||
* @param command Description of the Parameter
|
|
||||||
* @param input Description of the Parameter
|
|
||||||
* @return Description of the Return Value
|
|
||||||
*/
|
|
||||||
public static ExecResults execInput( String command, String input )
|
|
||||||
{
|
|
||||||
return ( execOptions( command, input, 0, 0, false ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Description of the Method
|
|
||||||
*
|
|
||||||
* @param command Description of the Parameter
|
|
||||||
* @return Description of the Return Value
|
|
||||||
*/
|
|
||||||
public static ExecResults execLazy( String command )
|
|
||||||
{
|
|
||||||
return ( execOptions( command, "", 0, 0, true ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Execute an OS command and capture the output in an ExecResults.
|
|
||||||
* All exceptions are caught and stored in the ExecResults.
|
|
||||||
* @param String command is the OS command to execute
|
|
||||||
* @param String input is piped into the OS command
|
|
||||||
* @param int successCode is the expected return code if the command completes successfully
|
|
||||||
* @param int timeout is the number of milliseconds to wait before interrupting the command
|
|
||||||
* @param boolean quit tells the method to exit when there is no more output waiting
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* Description of the Method
|
|
||||||
*
|
|
||||||
* @param command Description of the Parameter
|
|
||||||
* @param input Description of the Parameter
|
|
||||||
* @param successCode Description of the Parameter
|
|
||||||
* @param timeout Description of the Parameter
|
|
||||||
* @param lazy Description of the Parameter
|
|
||||||
* @return Description of the Return Value
|
|
||||||
*/
|
|
||||||
public static ExecResults execOptions( String[] command, String input, int successCode, int timeout, boolean lazy )
|
|
||||||
{
|
|
||||||
Process child = null;
|
|
||||||
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
|
||||||
ByteArrayOutputStream errors = new ByteArrayOutputStream();
|
|
||||||
ExecResults results = new ExecResults( command[0], input, successCode, timeout );
|
|
||||||
BitSet interrupted = new BitSet( 1 );
|
|
||||||
boolean lazyQuit = false;
|
|
||||||
ThreadWatcher watcher;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// start the command
|
|
||||||
child = Runtime.getRuntime().exec( command );
|
|
||||||
|
|
||||||
// get the streams in and out of the command
|
|
||||||
InputStream processIn = child.getInputStream();
|
|
||||||
InputStream processError = child.getErrorStream();
|
|
||||||
OutputStream processOut = child.getOutputStream();
|
|
||||||
|
|
||||||
// start the clock running
|
|
||||||
if ( timeout > 0 )
|
|
||||||
{
|
|
||||||
watcher = new ThreadWatcher( child, interrupted, timeout );
|
|
||||||
new Thread( watcher ).start();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write to the child process' input stream
|
|
||||||
if ( ( input != null ) && !input.equals( "" ) )
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
processOut.write( input.getBytes() );
|
|
||||||
processOut.flush();
|
|
||||||
processOut.close();
|
|
||||||
}
|
|
||||||
catch ( IOException e1 )
|
|
||||||
{
|
|
||||||
results.setThrowable( e1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read from the child process' output stream
|
|
||||||
// The process may get killed by the watcher at any time
|
|
||||||
int c = 0;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
while ( true )
|
|
||||||
{
|
|
||||||
if ( interrupted.get( 0 ) || lazyQuit )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// interrupted
|
|
||||||
c = processIn.read();
|
|
||||||
|
|
||||||
if ( c == -1 )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// end of stream
|
|
||||||
output.write( c );
|
|
||||||
|
|
||||||
if ( lazy && ( processIn.available() < 1 ) )
|
|
||||||
{
|
|
||||||
lazyQuit = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if lazy and nothing then quit (after at least one read)
|
|
||||||
}
|
|
||||||
|
|
||||||
processIn.close();
|
|
||||||
}
|
|
||||||
catch ( IOException e2 )
|
|
||||||
{
|
|
||||||
results.setThrowable( e2 );
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if ( interrupted.get( 0 ) )
|
|
||||||
{
|
|
||||||
results.setInterrupted();
|
|
||||||
}
|
|
||||||
|
|
||||||
results.setOutput( output.toString() );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read from the child process' error stream
|
|
||||||
// The process may get killed by the watcher at any time
|
|
||||||
try
|
|
||||||
{
|
|
||||||
while ( true )
|
|
||||||
{
|
|
||||||
if ( interrupted.get( 0 ) || lazyQuit )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// interrupted
|
|
||||||
c = processError.read();
|
|
||||||
|
|
||||||
if ( c == -1 )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// end of stream
|
|
||||||
output.write( c );
|
|
||||||
|
|
||||||
if ( lazy && ( processError.available() < 1 ) )
|
|
||||||
{
|
|
||||||
lazyQuit = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if lazy and nothing then quit (after at least one read)
|
|
||||||
}
|
|
||||||
|
|
||||||
processError.close();
|
|
||||||
}
|
|
||||||
catch ( IOException e3 )
|
|
||||||
{
|
|
||||||
results.setThrowable( e3 );
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if ( interrupted.get( 0 ) )
|
|
||||||
{
|
|
||||||
results.setInterrupted();
|
|
||||||
}
|
|
||||||
|
|
||||||
results.setErrors( errors.toString() );
|
|
||||||
}
|
|
||||||
|
|
||||||
// wait for the return value of the child process.
|
|
||||||
if ( !interrupted.get( 0 ) && !lazyQuit )
|
|
||||||
{
|
|
||||||
int returnCode = child.waitFor();
|
|
||||||
results.setReturnCode( returnCode );
|
|
||||||
|
|
||||||
if ( returnCode != successCode )
|
|
||||||
{
|
|
||||||
results.setError( ExecResults.BADRETURNCODE );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch ( InterruptedException i )
|
|
||||||
{
|
|
||||||
results.setInterrupted();
|
|
||||||
}
|
|
||||||
catch ( Throwable t )
|
|
||||||
{
|
|
||||||
results.setThrowable( t );
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if ( child != null )
|
|
||||||
{
|
|
||||||
child.destroy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ( results );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Execute an OS command and capture the output in an ExecResults.
|
|
||||||
* All exceptions are caught and stored in the ExecResults.
|
|
||||||
* @param String command is the OS command to execute
|
|
||||||
* @param String input is piped into the OS command
|
|
||||||
* @param int successCode is the expected return code if the command completes successfully
|
|
||||||
* @param int timeout is the number of milliseconds to wait before interrupting the command
|
|
||||||
* @param boolean quit tells the method to exit when there is no more output waiting
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
* Description of the Method
|
|
||||||
*
|
|
||||||
* @param command Description of the Parameter
|
|
||||||
* @param input Description of the Parameter
|
|
||||||
* @param successCode Description of the Parameter
|
|
||||||
* @param timeout Description of the Parameter
|
|
||||||
* @param lazy Description of the Parameter
|
|
||||||
* @return Description of the Return Value
|
|
||||||
*/
|
|
||||||
public static ExecResults execOptions( String command, String input, int successCode, int timeout, boolean lazy )
|
|
||||||
{
|
|
||||||
Process child = null;
|
|
||||||
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
|
||||||
ByteArrayOutputStream errors = new ByteArrayOutputStream();
|
|
||||||
ExecResults results = new ExecResults( command, input, successCode, timeout );
|
|
||||||
BitSet interrupted = new BitSet( 1 );
|
|
||||||
boolean lazyQuit = false;
|
|
||||||
ThreadWatcher watcher;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// start the command
|
|
||||||
child = Runtime.getRuntime().exec( command );
|
|
||||||
|
|
||||||
// get the streams in and out of the command
|
|
||||||
InputStream processIn = child.getInputStream();
|
|
||||||
InputStream processError = child.getErrorStream();
|
|
||||||
OutputStream processOut = child.getOutputStream();
|
|
||||||
|
|
||||||
// start the clock running
|
|
||||||
if ( timeout > 0 )
|
|
||||||
{
|
|
||||||
watcher = new ThreadWatcher( child, interrupted, timeout );
|
|
||||||
new Thread( watcher ).start();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write to the child process' input stream
|
|
||||||
if ( ( input != null ) && !input.equals( "" ) )
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
processOut.write( input.getBytes() );
|
|
||||||
processOut.flush();
|
|
||||||
processOut.close();
|
|
||||||
}
|
|
||||||
catch ( IOException e1 )
|
|
||||||
{
|
|
||||||
results.setThrowable( e1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read from the child process' output stream
|
|
||||||
// The process may get killed by the watcher at any time
|
|
||||||
int c = 0;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
while ( true )
|
|
||||||
{
|
|
||||||
if ( interrupted.get( 0 ) || lazyQuit )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// interrupted
|
|
||||||
c = processIn.read();
|
|
||||||
|
|
||||||
if ( c == -1 )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// end of stream
|
|
||||||
output.write( c );
|
|
||||||
|
|
||||||
if ( lazy && ( processIn.available() < 1 ) )
|
|
||||||
{
|
|
||||||
lazyQuit = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if lazy and nothing then quit (after at least one read)
|
|
||||||
}
|
|
||||||
|
|
||||||
processIn.close();
|
|
||||||
}
|
|
||||||
catch ( IOException e2 )
|
|
||||||
{
|
|
||||||
results.setThrowable( e2 );
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if ( interrupted.get( 0 ) )
|
|
||||||
{
|
|
||||||
results.setInterrupted();
|
|
||||||
}
|
|
||||||
|
|
||||||
results.setOutput( output.toString() );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read from the child process' error stream
|
|
||||||
// The process may get killed by the watcher at any time
|
|
||||||
try
|
|
||||||
{
|
|
||||||
while ( true )
|
|
||||||
{
|
|
||||||
if ( interrupted.get( 0 ) || lazyQuit )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// interrupted
|
|
||||||
c = processError.read();
|
|
||||||
|
|
||||||
if ( c == -1 )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// end of stream
|
|
||||||
output.write( c );
|
|
||||||
|
|
||||||
if ( lazy && ( processError.available() < 1 ) )
|
|
||||||
{
|
|
||||||
lazyQuit = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if lazy and nothing then quit (after at least one read)
|
|
||||||
}
|
|
||||||
|
|
||||||
processError.close();
|
|
||||||
}
|
|
||||||
catch ( IOException e3 )
|
|
||||||
{
|
|
||||||
results.setThrowable( e3 );
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if ( interrupted.get( 0 ) )
|
|
||||||
{
|
|
||||||
results.setInterrupted();
|
|
||||||
}
|
|
||||||
|
|
||||||
results.setErrors( errors.toString() );
|
|
||||||
}
|
|
||||||
|
|
||||||
// wait for the return value of the child process.
|
|
||||||
if ( !interrupted.get( 0 ) && !lazyQuit )
|
|
||||||
{
|
|
||||||
int returnCode = child.waitFor();
|
|
||||||
results.setReturnCode( returnCode );
|
|
||||||
|
|
||||||
if ( returnCode != successCode )
|
|
||||||
{
|
|
||||||
results.setError( ExecResults.BADRETURNCODE );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch ( InterruptedException i )
|
|
||||||
{
|
|
||||||
results.setInterrupted();
|
|
||||||
}
|
|
||||||
catch ( Throwable t )
|
|
||||||
{
|
|
||||||
results.setThrowable( t );
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if ( child != null )
|
|
||||||
{
|
|
||||||
child.destroy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ( results );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Description of the Method
|
|
||||||
*
|
|
||||||
* @param command Description of the Parameter
|
|
||||||
* @return Description of the Return Value
|
|
||||||
*/
|
|
||||||
public static ExecResults execSimple( String[] command )
|
|
||||||
{
|
|
||||||
return ( execOptions( command, "", 0, 0, false ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Description of the Method
|
|
||||||
*
|
|
||||||
* @param command Description of the Parameter
|
|
||||||
* @return Description of the Return Value
|
|
||||||
*/
|
|
||||||
public static ExecResults execSimple( String command )
|
|
||||||
{
|
|
||||||
return ( execOptions( command, "", 0, 0, false ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Description of the Method
|
|
||||||
*
|
|
||||||
* @param command Description of the Parameter
|
|
||||||
* @param args Description of the Parameter
|
|
||||||
* @return Description of the Return Value
|
|
||||||
*/
|
|
||||||
public static ExecResults execSimple( String command, String args )
|
|
||||||
{
|
|
||||||
return ( execOptions( command, args, 0, 0, false ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Description of the Method
|
|
||||||
*
|
|
||||||
* @param command Description of the Parameter
|
|
||||||
* @param timeout Description of the Parameter
|
|
||||||
* @return Description of the Return Value
|
|
||||||
*/
|
|
||||||
public static ExecResults execTimeout( String command, int timeout )
|
|
||||||
{
|
|
||||||
return ( execOptions( command, "", 0, timeout, false ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The main program for the Exec class
|
|
||||||
*
|
|
||||||
* @param args The command line arguments
|
|
||||||
*/
|
|
||||||
public static void main( String[] args )
|
|
||||||
{
|
|
||||||
ExecResults results;
|
|
||||||
String sep = System.getProperty( "line.separator" );
|
|
||||||
System.out.println( "-------------------------------------------" + sep + "TEST 1: execSimple" );
|
|
||||||
results = Exec.execSimple( "c:/swarm-2.1.1/bin/whoami.exe" );
|
|
||||||
System.out.println( results );
|
|
||||||
System.out.println( "-------------------------------------------" + sep + "TEST 2: execSimple (with search)" );
|
|
||||||
results = Exec.execSimple( "netstat -r" );
|
|
||||||
System.out.println( results );
|
|
||||||
|
|
||||||
if ( results.outputContains( "localhost:1031" ) )
|
|
||||||
{
|
|
||||||
System.out.println( "ERROR: listening on 1031" );
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println( "-------------------------------------------" + sep + "TEST 3: execInput" );
|
|
||||||
results = Exec.execInput( "find \"cde\"", "abcdefg1\nhijklmnop\nqrstuv\nabcdefg2" );
|
|
||||||
System.out.println( results );
|
|
||||||
System.out.println( "-------------------------------------------" + sep + "TEST 4:execTimeout" );
|
|
||||||
results = Exec.execTimeout( "ping -t 127.0.0.1", 5 * 1000 );
|
|
||||||
System.out.println( results );
|
|
||||||
System.out.println( "-------------------------------------------" + sep + "TEST 5:execLazy" );
|
|
||||||
results = Exec.execLazy( "ping -t 127.0.0.1" );
|
|
||||||
System.out.println( results );
|
|
||||||
System.out.println( "-------------------------------------------" + sep + "TEST 6:ExecTimeout process never outputs" );
|
|
||||||
results = Exec.execTimeout( "c:/swarm-2.1.1/bin/sleep.exe 20", 5 * 1000 );
|
|
||||||
System.out.println( results );
|
|
||||||
System.out.println( "-------------------------------------------" + sep + "TEST 7:ExecTimeout process waits for input" );
|
|
||||||
results = Exec.execTimeout( "c:/swarm-2.1.1/bin/cat", 5 * 1000 );
|
|
||||||
System.out.println( results );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user