amyroh 01/05/31 17:22:02 Modified: catalina/src/share/org/apache/catalina/util/ssi SsiMediator.java SsiExec.java Log: Add SSI exec cgi feature. Revision Changes Path 1.6 +34 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiMediator.java Index: SsiMediator.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiMediator.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- SsiMediator.java 2001/05/16 17:57:14 1.5 +++ SsiMediator.java 2001/06/01 00:22:01 1.6 @@ -1,8 +1,8 @@ /* * SsiMediator.java - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiMediator.java,v 1.5 2001/05/16 17:57:14 remm Exp $ - * $Revision: 1.5 $ - * $Date: 2001/05/16 17:57:14 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiMediator.java,v 1.6 2001/06/01 00:22:01 amyroh Exp $ + * $Revision: 1.6 $ + * $Date: 2001/06/01 00:22:01 $ * * ==================================================================== * @@ -86,7 +86,7 @@ /** * @author Bip Thelin * @author Amy Roh - * @version $Revision: 1.5 $, $Date: 2001/05/16 17:57:14 $ + * @version $Revision: 1.6 $, $Date: 2001/06/01 00:22:01 $ * */ public class SsiMediator { @@ -467,6 +467,36 @@ // Return the normalized path that we have completed return (relpath.concat(normalized)); + } + + protected String getCGIPath(String path) { + + String cgibinStr = "/cgi-bin/"; + + if (path == null) + return null; + + if (!path.startsWith(cgibinStr)) { + return null; + } else { + //normalized = normalized.substring(1, cgibinStr.length()); + //normalized = cgiPathPrefix + File.separator + normalized; + path = "http://localhost:8080" + contextPath + path; + } + return (path); + } + + protected String getCommandPath(String path) { + + String commandShellStr = "/bin/sh"; + + if (path == null) + return null; + + if (!path.startsWith("/")) + path = "/" + path; + path = commandShellStr + path; + return (path); } /** 1.2 +86 -5 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiExec.java Index: SsiExec.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiExec.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SsiExec.java 2001/03/27 20:38:00 1.1 +++ SsiExec.java 2001/06/01 00:22:01 1.2 @@ -1,8 +1,8 @@ /* * SsiExec.java - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiExec.java,v 1.1 2001/03/27 20:38:00 amyroh Exp $ - * $Revision: 1.1 $ - * $Date: 2001/03/27 20:38:00 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiExec.java,v 1.2 2001/06/01 00:22:01 amyroh Exp $ + * $Revision: 1.2 $ + * $Date: 2001/06/01 00:22:01 $ * * ==================================================================== * @@ -64,9 +64,25 @@ package org.apache.catalina.util.ssi; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import javax.servlet.ServletException; +import javax.servlet.ServletContext; +import javax.servlet.ServletOutputStream; +import javax.servlet.RequestDispatcher; + /** * @author Bip Thelin - * @version $Revision: 1.1 $, $Date: 2001/03/27 20:38:00 $ + * @author Amy Roh + * @version $Revision: 1.2 $, $Date: 2001/06/01 00:22:01 $ * */ public final class SsiExec @@ -76,7 +92,72 @@ public final String getStream(String[] strParamType, String[] strParam) { - return ""; + + String retString = ""; + String path = ""; + + if(strParamType[0].equals("cgi")) { + path = super.getCGIPath(strParam[0]); + if (path != null) { + try { + URL url = new URL(path); + InputStream istream = url.openStream(); + int i = istream.read(); + while (i != -1) { + super.out.write(i); + i = istream.read(); + } + } catch (IOException e) { + retString = new String(super.getError()); + } + } else { + retString = new String(super.getError()); + } + } else if(strParamType[0].equals("cmd")) + + path = super.getCommandPath(strParam[0]); + + if (path!=null) { + BufferedReader commandsStdOut = null; + BufferedReader commandsStdErr = null; + BufferedOutputStream commandsStdIn = null; + BufferedWriter out = new BufferedWriter(new OutputStreamWriter(super.out)); + //byte[] bBuf = new byte[1024]; + char[] cBuf = new char[1024]; + int bufRead = -1; + + Runtime rt = null; + Process proc = null; + + try { + rt = Runtime.getRuntime(); + proc = rt.exec(path); + + commandsStdIn = new BufferedOutputStream(proc.getOutputStream()); + //boolean isRunning = true; + commandsStdOut = new BufferedReader(new InputStreamReader(proc.getInputStream())); + commandsStdErr = new BufferedReader(new InputStreamReader(proc.getErrorStream())); + BufferedWriter servletContainerStdout = null; + + while ((bufRead = commandsStdErr.read(cBuf)) != -1) { + out.write(cBuf, 0, bufRead); + } + + cBuf = new char[1024]; + while ((bufRead = commandsStdOut.read(cBuf)) != -1) { + out.write(cBuf, 0, bufRead); + } + + super.out.flush(); + + proc.exitValue(); + } catch (IOException ex) { + } + } else { + retString = new String(super.getError()); + } + + return retString; } public final void process(String[] strParamType, String[] strParam) {}