View Javadoc

1   package org.eclipse.jetty.nested;
2   //========================================================================
3   //Copyright (c) 2006-2012 Mort Bay Consulting Pty. Ltd.
4   //------------------------------------------------------------------------
5   //All rights reserved. This program and the accompanying materials
6   //are made available under the terms of the Eclipse Public License v1.0
7   //and Apache License v2.0 which accompanies this distribution.
8   //The Eclipse Public License is available at 
9   //http://www.eclipse.org/legal/epl-v10.html
10  //The Apache License v2.0 is available at
11  //http://www.opensource.org/licenses/apache2.0.php
12  //You may elect to redistribute this code under either of these licenses. 
13  //========================================================================
14  
15  import java.io.BufferedInputStream;
16  import java.io.BufferedReader;
17  import java.io.ByteArrayOutputStream;
18  import java.io.File;
19  import java.io.IOException;
20  import java.io.InputStreamReader;
21  import java.io.PrintStream;
22  import java.net.InetSocketAddress;
23  import java.net.ServerSocket;
24  import java.net.Socket;
25  import java.net.SocketAddress;
26  import java.util.concurrent.CountDownLatch;
27  
28  import javax.servlet.ServletException;
29  import javax.servlet.ServletOutputStream;
30  import javax.servlet.http.HttpServlet;
31  import javax.servlet.http.HttpServletRequest;
32  import javax.servlet.http.HttpServletResponse;
33  
34  import org.eclipse.jetty.util.IO;
35  import org.eclipse.jetty.util.TypeUtil;
36  
37  public class TestServlet extends HttpServlet
38  {
39  
40      /* (non-Javadoc)
41       * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
42       */
43      @Override
44      protected void doGet(final HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
45      {
46          resp.setContentType("text/plain");
47          final PrintStream out = new PrintStream(resp.getOutputStream());
48          
49          out.println("Try out evil things.");
50  
51          try
52          {
53              out.println("\nList home dir...");
54              for (File f : new File("/home").listFiles())
55                  out.println(f);
56          }
57          catch(Throwable e)
58          {
59              e.printStackTrace(out);
60          }
61          try
62          {
63              out.println("\nList tmp dir...");
64              for (File f : new File("/var/tmp").listFiles())
65                  out.println(f);
66          }
67          catch(Throwable e)
68          {
69              e.printStackTrace(out);
70          }
71          
72          try
73          {
74              out.println("\nCreate a /var/tmp file...");
75              File file = new File("/var/tmp/eviltest");
76  
77              out.println(file+" exists="+file.exists());
78              file.createNewFile();
79              file.deleteOnExit();
80              out.println(file+" exists="+file.exists());
81              file.delete();
82          }
83          catch(Throwable e)
84          {
85              e.printStackTrace(out);
86          }
87          
88  
89          try
90          {
91              out.println("\nOpen a localhost server socket ...");
92              
93              ServerSocket socket = new ServerSocket();
94              socket.bind(new InetSocketAddress("localhost",0));
95              out.println("local port = "+socket.getLocalPort());
96          }
97          catch(Throwable e)
98          {
99              e.printStackTrace(out);
100         }
101         
102         try
103         {
104             out.println("\nOpen a any server socket ...");
105             
106             ServerSocket socket = new ServerSocket();
107             socket.bind(new InetSocketAddress(0));
108             out.println("local port = "+socket.getLocalPort());
109         }
110         catch(Throwable e)
111         {
112             e.printStackTrace(out);
113         }
114         try
115         {
116             out.println("\nTalk to any server socket ...");
117             
118             final ServerSocket server = new ServerSocket();
119             server.bind(new InetSocketAddress(0));
120             out.println("local port = "+server.getLocalPort());
121             final int port = server.getLocalPort();
122             
123             final CountDownLatch latch = new CountDownLatch(1);
124             
125             new Thread()
126             {
127                 public void run()
128                 {
129                     try
130                     {
131                         Socket inbound = server.accept();
132                         out.println("accepted "+inbound);
133                         BufferedReader in = new BufferedReader(new InputStreamReader(inbound.getInputStream()));
134                         String data= in.readLine();
135                         out.println("read "+data);
136                     }
137                     catch(Throwable e)
138                     {
139                         e.printStackTrace(out);
140                     }
141                     finally
142                     {
143                         latch.countDown();
144                     }
145                 }
146             }.start();
147             
148            
149             Socket socket = new Socket("localhost",port); 
150             socket.getOutputStream().write("Hello World\n".getBytes());
151             
152             latch.await();
153             socket.close();
154         }
155         catch(Throwable e)
156         {
157             e.printStackTrace(out);
158         }
159         
160         try
161         {
162             out.println("\nRead to own content ...");
163             out.println("Real path / = "+getServletContext().getRealPath("/"));
164            
165             for (File f : new File(getServletContext().getRealPath("/")).listFiles())
166                 out.println(f);
167             
168         }
169         catch(Throwable e)
170         {
171             e.printStackTrace(out);
172         }
173         
174         
175         try
176         {
177             out.println("\nWrite own content ...");
178             
179             File wibble = new File(getServletContext().getRealPath("/wibble.txt"));
180             if (!wibble.exists())
181                 wibble.createNewFile();
182             
183             for (File f : new File(getServletContext().getRealPath("/")).listFiles())
184                 out.println(f);
185             
186         }
187         catch(Throwable e)
188         {
189             e.printStackTrace(out);
190         }
191      
192         out.flush();
193         out.close();
194     }
195     
196 
197 }