You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by am...@apache.org on 2001/06/01 02:22:02 UTC
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi SsiMediator.java SsiExec.java
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) {}