package org.eclipse.jetty.nested;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.util.concurrent.CountDownLatch;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.TypeUtil;
public class TestServlet extends HttpServlet
{
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doGet(final HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
resp.setContentType("text/plain");
final PrintStream out = new PrintStream(resp.getOutputStream());
out.println("Try out evil things.");
try
{
out.println("\nList home dir...");
for (File f : new File("/home").listFiles())
out.println(f);
}
catch(Throwable e)
{
e.printStackTrace(out);
}
try
{
out.println("\nList tmp dir...");
for (File f : new File("/var/tmp").listFiles())
out.println(f);
}
catch(Throwable e)
{
e.printStackTrace(out);
}
try
{
out.println("\nCreate a /var/tmp file...");
File file = new File("/var/tmp/eviltest");
out.println(file+" exists="+file.exists());
file.createNewFile();
file.deleteOnExit();
out.println(file+" exists="+file.exists());
file.delete();
}
catch(Throwable e)
{
e.printStackTrace(out);
}
try
{
out.println("\nOpen a localhost server socket ...");
ServerSocket socket = new ServerSocket();
socket.bind(new InetSocketAddress("localhost",0));
out.println("local port = "+socket.getLocalPort());
}
catch(Throwable e)
{
e.printStackTrace(out);
}
try
{
out.println("\nOpen a any server socket ...");
ServerSocket socket = new ServerSocket();
socket.bind(new InetSocketAddress(0));
out.println("local port = "+socket.getLocalPort());
}
catch(Throwable e)
{
e.printStackTrace(out);
}
try
{
out.println("\nTalk to any server socket ...");
final ServerSocket server = new ServerSocket();
server.bind(new InetSocketAddress(0));
out.println("local port = "+server.getLocalPort());
final int port = server.getLocalPort();
final CountDownLatch latch = new CountDownLatch(1);
new Thread()
{
public void run()
{
try
{
Socket inbound = server.accept();
out.println("accepted "+inbound);
BufferedReader in = new BufferedReader(new InputStreamReader(inbound.getInputStream()));
String data= in.readLine();
out.println("read "+data);
}
catch(Throwable e)
{
e.printStackTrace(out);
}
finally
{
latch.countDown();
}
}
}.start();
Socket socket = new Socket("localhost",port);
socket.getOutputStream().write("Hello World\n".getBytes());
latch.await();
socket.close();
}
catch(Throwable e)
{
e.printStackTrace(out);
}
try
{
out.println("\nRead to own content ...");
out.println("Real path / = "+getServletContext().getRealPath("/"));
for (File f : new File(getServletContext().getRealPath("/")).listFiles())
out.println(f);
}
catch(Throwable e)
{
e.printStackTrace(out);
}
try
{
out.println("\nWrite own content ...");
File wibble = new File(getServletContext().getRealPath("/wibble.txt"));
if (!wibble.exists())
wibble.createNewFile();
for (File f : new File(getServletContext().getRealPath("/")).listFiles())
out.println(f);
}
catch(Throwable e)
{
e.printStackTrace(out);
}
out.flush();
out.close();
}
}