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) {}