amyroh 01/03/27 12:38:01 Added: catalina/src/share/org/apache/catalina/util/ssi ResponseIncludeWrapper.java ServletOutputStreamWrapper.java SsiCommand.java SsiConfig.java SsiEcho.java SsiExec.java SsiFlastmod.java SsiFsize.java SsiInclude.java SsiMediator.java Log: SSI feature util Revision Changes Path 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/ResponseIncludeWrapper.java Index: ResponseIncludeWrapper.java =================================================================== /* * ResponseIncludeWrapper.java * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/ResponseIncludeWrapper.java,v 1.1 2001/03/27 20:38:00 amyroh Exp $ * $Revision: 1.1 $ * $Date: 2001/03/27 20:38:00 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.catalina.util.ssi; import java.io.OutputStream; import java.io.PrintWriter; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; /** * @author Bip Thelin * @version $Revision: 1.1 $, $Date: 2001/03/27 20:38:00 $ * */ public final class ResponseIncludeWrapper extends HttpServletResponseWrapper { private ServletOutputStream _out; private boolean printwriter = false; private boolean outputstream = false; public ResponseIncludeWrapper(HttpServletResponse res, ServletOutputStream out) { super(res); this._out = out; } public PrintWriter getWriter() throws java.io.IOException { if(!outputstream) { printwriter=true; return (new PrintWriter(_out)); } else { throw new IllegalStateException(); } } public ServletOutputStream getOutputStream() throws java.io.IOException { if(!printwriter) { outputstream=true; return _out; } else { throw new IllegalStateException(); } } } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/ServletOutputStreamWrapper.java Index: ServletOutputStreamWrapper.java =================================================================== /* * ServletOutputStreamWrapper.java * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/ServletOutputStreamWrapper.java,v 1.1 2001/03/27 20:38:00 amyroh Exp $ * $Revision: 1.1 $ * $Date: 2001/03/27 20:38:00 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.catalina.util.ssi; import java.io.OutputStream; import java.io.IOException; import java.io.ByteArrayOutputStream; import javax.servlet.ServletOutputStream; /** * @author Bip Thelin * @version $Revision: 1.1 $, $Date: 2001/03/27 20:38:00 $ * */ public final class ServletOutputStreamWrapper extends ServletOutputStream { private ByteArrayOutputStream _buf = null; public ServletOutputStreamWrapper() { super(); _buf = new ByteArrayOutputStream(); } public final void writeTo(OutputStream out) throws IOException { out.write(_buf.toByteArray()); } public final void write(int b) { _buf.write(b); } } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiCommand.java Index: SsiCommand.java =================================================================== /* * SsiCommand.java * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiCommand.java,v 1.1 2001/03/27 20:38:00 amyroh Exp $ * $Revision: 1.1 $ * $Date: 2001/03/27 20:38:00 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.catalina.util.ssi; /** * @author Bip Thelin * @version $Revision: 1.1 $, $Date: 2001/03/27 20:38:00 $ * */ public interface SsiCommand { public String getStream(String[] strParamType, String[] strParam); public void process(String[] strParamType, String[] strParam); public boolean isPrintable(); public boolean isModified(); } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiConfig.java Index: SsiConfig.java =================================================================== /* * SsiConfig.java * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiConfig.java,v 1.1 2001/03/27 20:38:00 amyroh Exp $ * $Revision: 1.1 $ * $Date: 2001/03/27 20:38:00 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.catalina.util.ssi; import java.util.Properties; /** * @author Bip Thelin * @version $Revision: 1.1 $, $Date: 2001/03/27 20:38:00 $ * */ public final class SsiConfig extends SsiMediator implements SsiCommand { private boolean modified = false; private byte[] errmsg; private String sizefmt; private String timefmt; private static Properties translate; static { translate = new Properties(); translate.put("a","EEE"); translate.put("A","EEEE"); translate.put("b","MMM"); translate.put("h","MMM"); translate.put("B","MMMM"); translate.put("d","dd"); translate.put("D","MM/dd/yy"); translate.put("e","d"); translate.put("H","HH"); translate.put("I","hh"); translate.put("j","E"); translate.put("m","M"); translate.put("M","m"); translate.put("p","a"); translate.put("r","hh:mm:ss a"); translate.put("S","s"); translate.put("T","HH:mm:ss"); translate.put("U","w"); translate.put("W","w"); translate.put("w","E"); translate.put("y","yy"); translate.put("Y","yyyy"); translate.put("z","z"); } public SsiConfig() { init(); } public String getStream(String[] strParamType, String[] strParam) { return ""; } /** * Process request. * * @param strParamType a value of type 'String[]' * @param strParam a value of type 'String[]' */ public final void process(String[] strParamType, String[] strParam) { modified = true; for(int i=0;i<strParamType.length;i++) { if(strParamType[i].equals("errmsg")) errmsg = strParam[i].getBytes(); else if(strParamType[i].equals("sizefmt")) sizefmt = strParam[i]; else if(strParamType[i].equals("timefmt")) timefmt = convertFormat(strParam[i]); } } /** * Return the current error message. * * @return a value of type 'byte[]' */ public final byte[] getError() { return errmsg; } /** * Return the current Size format. * * @return a value of type 'String' */ public final String getSizefmt() { return sizefmt; } /** * Return the current Time format. * * @return a value of type 'String' */ public final String getTimefmt() { return timefmt; } /** * Initialize, run once per page being parsed. * */ public final void flush() { init(); } /** * Returns true if SSI Command does any output. * * @return a value of type 'boolean' */ public final boolean isPrintable() { return false;} /** * Return true if we're modified. * * @return a value of type 'boolean' */ public final boolean isModified() { return modified; } private String convertFormat(String pattern) { boolean inside = false; boolean mark = false; StringBuffer retString = new StringBuffer(); String sRetString = ""; for(int i = 0; i<pattern.length();i++) { if(pattern.charAt(i)=='%'&&!mark) { mark=true; continue; } if(pattern.charAt(i)=='%'&&mark) { mark=false; } if(mark) { if(inside) { retString.append("'"); inside=false; } retString.append(translateCommand(pattern.charAt(i))); mark=false; continue; } if(!inside) { retString.append("'"); inside = true; } retString.append(pattern.charAt(i)); } sRetString = retString.toString(); if(!sRetString.endsWith("'")&&inside) sRetString = sRetString.concat("'"); return sRetString; } private String translateCommand(char c) { String retCommand = translate.getProperty("".valueOf(c)); return retCommand==null?"":retCommand; } /** * Called from <code>flush</code>. * */ private void init() { errmsg = "[an error occurred while processing this directive]".getBytes(); sizefmt = "abbrev"; timefmt = "EEE, dd MMM yyyyy HH:mm:ss z"; } } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiEcho.java Index: SsiEcho.java =================================================================== /* * SsiEcho.java * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiEcho.java,v 1.1 2001/03/27 20:38:00 amyroh Exp $ * $Revision: 1.1 $ * $Date: 2001/03/27 20:38:00 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.catalina.util.ssi; /** * @author Bip Thelin * @version $Revision: 1.1 $, $Date: 2001/03/27 20:38:00 $ * */ public final class SsiEcho extends SsiMediator implements SsiCommand { public SsiEcho() {} public final String getStream(String[] strParamType, String[] strParam) { String retString; if(strParamType[0].equals("var")) retString = retString = super.getServerVariable(strParam[0]); else retString = new String(super.getError()); return retString; } public final void process(String[] strParamType, String[] strParam) {} public final boolean isPrintable() { return true; } public final boolean isModified() { return false; } } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiExec.java Index: SsiExec.java =================================================================== /* * 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 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.catalina.util.ssi; /** * @author Bip Thelin * @version $Revision: 1.1 $, $Date: 2001/03/27 20:38:00 $ * */ public final class SsiExec extends SsiMediator implements SsiCommand { public SsiExec() {} public final String getStream(String[] strParamType, String[] strParam) { return ""; } public final void process(String[] strParamType, String[] strParam) {} public final boolean isPrintable() { return true; } public final boolean isModified() { return false; } } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiFlastmod.java Index: SsiFlastmod.java =================================================================== /* * SsiFlastmod.java * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiFlastmod.java,v 1.1 2001/03/27 20:38:00 amyroh Exp $ * $Revision: 1.1 $ * $Date: 2001/03/27 20:38:00 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.catalina.util.ssi; import java.util.Date; import java.io.IOException; import java.net.URL; import java.net.MalformedURLException; import javax.servlet.ServletContext; /** * @author Bip Thelin * @version $Revision: 1.1 $, $Date: 2001/03/27 20:38:00 $ * */ public final class SsiFlastmod extends SsiMediator implements SsiCommand { public SsiFlastmod() {} public final String getStream(String[] strParamType, String[] strParam) { String path = new String(); long lastModified; String sLastModified = null; URL url = null; if(strParamType[0].equals("file")) { path = super.getFilePath(strParam[0]); } else if(strParamType[0].equals("virtual")) { path = super.getVirtualPath(strParam[0]); } try { url = super.servletContext.getResource(path); lastModified = url.openConnection().getLastModified(); } catch (MalformedURLException e){ lastModified = 0; } catch (IOException e) { lastModified = 0; } catch (NullPointerException e) { lastModified = 0; } if(lastModified==0) sLastModified = (new String(super.getError())); else sLastModified = super.timefmt(new Date(lastModified)); return sLastModified; } protected String getDate(String path) { long lastModified; String sLastModified = null; URL url = null; path = super.getVirtualPath(path); try { url = super.servletContext.getResource(path); lastModified = url.openConnection().getLastModified(); } catch (MalformedURLException e){ lastModified = 0; } catch (IOException e) { lastModified = 0; } catch (NullPointerException e) { lastModified = 0; } if(lastModified==0) sLastModified = (new String(super.getError())); else sLastModified = super.timefmt(new Date(lastModified)); return sLastModified; } public final void process(String[] strParamType, String[] strParam) {} public final boolean isPrintable() { return true; } public final boolean isModified() { return false; } } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiFsize.java Index: SsiFsize.java =================================================================== /* * SsiFsize.java * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiFsize.java,v 1.1 2001/03/27 20:38:00 amyroh Exp $ * $Revision: 1.1 $ * $Date: 2001/03/27 20:38:00 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.catalina.util.ssi; import java.io.IOException; import java.net.URL; import java.net.MalformedURLException; import javax.servlet.ServletContext; /** * @author Bip Thelin * @version $Revision: 1.1 $, $Date: 2001/03/27 20:38:00 $ * */ public final class SsiFsize extends SsiMediator implements SsiCommand { public SsiFsize() {} /** * Figure out the length/size of a given file. * * @param strParamType a value of type 'String[]' * @param strParam a value of type 'String[]' * @param req a value of type 'HttpServletRequest' * @param servletContext a value of type 'ServletContext' * @return a value of type 'String' */ public final String getStream(String[] strParamType, String[] strParam) { String length = ""; String retLength = ""; String path = ""; URL url = null; long lLength = -1; if(strParamType[0].equals("file")) { path = super.getFilePath(strParam[0]); } else if(strParamType[0].equals("virtual")) { path = super.getVirtualPath(strParam[0]); } try { url = super.servletContext.getResource(path); lLength = url.openConnection().getContentLength(); length = (new Long(lLength)).toString(); } catch (MalformedURLException e){ length = null; } catch (IOException e) { length = null; } catch (NullPointerException e) { length = null; } if(length == null) retLength = (new String(super.getError())); else retLength = formatSize(length, ((SsiConfig)super.getCommand("config")).getSizefmt()); return retLength; } public final void process(String[] strParamType, String[] strParam) {} public final boolean isPrintable() { return true; } public final boolean isModified() { return false; } //----------------- Private methods private String formatSize(String length, String format) { String retString = ""; if(format.equalsIgnoreCase("bytes")) { retString = commaFormat(length); } else { double lParse = (new Long(length)).doubleValue(); if(lParse>=1048576) { double abbrevSize = lParse/1048576; long splitSize = (long)abbrevSize; int catSize = (int)(100 * (abbrevSize - splitSize)); retString = commaFormat((new Long(splitSize)).toString())+ "."+catSize+" MB"; } else if(lParse>=1024) { double abbrevSize = lParse/1024; long splitSize = (long)abbrevSize; int catSize = (int)(100 * (abbrevSize - splitSize)); retString = commaFormat((new Long(splitSize)).toString())+ "."+catSize+" KB"; } else { retString = commaFormat(length)+" bytes"; } } return retString; } private String commaFormat(String length) { String retString = ""; for(int i = length.length();i-1>=0;i--) { retString = (length.substring(i-1,i)).concat(retString); if((length.length()-(i-1))%3==0&& retString.length()<length.length()) retString = ",".concat(retString); } return retString; } } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiInclude.java Index: SsiInclude.java =================================================================== /* * SsiInclude.java * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiInclude.java,v 1.1 2001/03/27 20:38:00 amyroh Exp $ * $Revision: 1.1 $ * $Date: 2001/03/27 20:38:00 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.catalina.util.ssi; import java.io.IOException; 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 $ * */ public final class SsiInclude extends SsiMediator implements SsiCommand { public SsiInclude() {} public final String getStream(String[] strParamType, String[] strParam) { String retString = ""; String path = ""; if(strParamType[0].equals("file")) path = super.getFilePath(strParam[0]); else if(strParamType[0].equals("virtual")) path = super.getVirtualPath(strParam[0]); if(path != null) { try { if(super.servletContext.getResource(path) != null) { RequestDispatcher rd = super.servletContext.getRequestDispatcher(path); rd.include(super.req, new ResponseIncludeWrapper(super.res, (ServletOutputStream)super.out)); } else{ retString = new String(super.getError()); } } catch (IOException e) { retString = new String(super.getError()); } catch (ServletException e) { retString = new String(super.getError()); } catch (IllegalArgumentException e) { retString = new String(super.getError()); } catch (NullPointerException e) { retString = new String(super.getError()); } } else { retString = new String(super.getError()); } return retString; } public final void process(String[] strParamType, String[] strParam) {} public final boolean isPrintable() { return true; } public final boolean isModified() { return false; } } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiMediator.java Index: SsiMediator.java =================================================================== /* * SsiMediator.java * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/ssi/SsiMediator.java,v 1.1 2001/03/27 20:38:00 amyroh Exp $ * $Revision: 1.1 $ * $Date: 2001/03/27 20:38:00 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.catalina.util.ssi; import java.io.OutputStream; import java.util.Hashtable; import java.util.Date; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.text.ParseException; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.catalina.util.RequestUtil; import org.apache.catalina.util.DateTool; import org.apache.catalina.util.ssi.SsiConfig; import org.apache.catalina.util.ssi.SsiCommand; import org.apache.catalina.util.ssi.SsiInclude; import org.apache.catalina.util.ssi.SsiEcho; import org.apache.catalina.util.ssi.SsiFsize; import org.apache.catalina.util.ssi.SsiFlastmod; import org.apache.catalina.util.ssi.SsiExec; /** * @author Bip Thelin * @version $Revision: 1.1 $, $Date: 2001/03/27 20:38:00 $ * */ public class SsiMediator { protected static Hashtable serverVariables = new Hashtable(17); /** * The Commands associated with SSI. */ protected static Hashtable ssiCommands = null; protected static HttpServletRequest req = null; protected static HttpServletResponse res = null; protected static OutputStream out = null; protected static ServletContext servletContext = null; protected static String relpath = "/"; protected static String path = new String(); protected static int debug = 0; public SsiMediator() {} static { ssiCommands = new Hashtable(6); ssiCommands.put("config", new SsiConfig()); ssiCommands.put("include", new SsiInclude()); ssiCommands.put("echo", new SsiEcho()); ssiCommands.put("fsize", new SsiFsize()); ssiCommands.put("flastmod", new SsiFlastmod()); ssiCommands.put("exec", new SsiExec()); } public SsiMediator(HttpServletRequest req, HttpServletResponse res, OutputStream out, ServletContext servletContext, int debug, String path) { this.debug = debug; flush(req, res, out, servletContext, path); } public final SsiCommand getCommand(String cmd) { return (SsiCommand)ssiCommands.get(cmd); } public void flush(HttpServletRequest req, HttpServletResponse res, OutputStream out, ServletContext servletContext, String path) { this.req = req; this.res = res; this.out = out; this.servletContext = servletContext; this.path = path; this.relpath = path.substring(0, path.lastIndexOf("/")+1); int c=0; serverVariables.put("AUTH_TYPE", nullToString(req.getAuthType())); serverVariables.put("CONTENT_LENGTH", nullToString(((c=req.getContentLength())<=0)? null: (new Integer(c)).toString())); serverVariables.put("CONTENT_TYPE", nullToString(req.getContentType())); serverVariables.put("GATEWAY_INTERFACE", "CGI/1.1"); serverVariables.put("PATH_INFO", nullToString(req.getPathInfo())); serverVariables.put("PATH_TRANSLATED ", nullToString(req.getPathTranslated())); serverVariables.put("QUERY_STRING", nullToString(req.getQueryString())); serverVariables.put("REMOTE_ADDR", nullToString(req.getRemoteAddr())); serverVariables.put("REMOTE_HOST", nullToString(req.getRemoteHost())); serverVariables.put("REMOTE_IDENT", ""); serverVariables.put("REMOTE_USER", nullToString(req.getRemoteUser())); serverVariables.put("REQUEST_METHOD", nullToString(req.getMethod())); serverVariables.put("SCRIPT_NAME", nullToString(req.getServletPath())); serverVariables.put("SERVER_NAME", nullToString(req.getServerName())); serverVariables.put("SERVER_PORT", (new Integer(req.getServerPort())).toString()); serverVariables.put("SERVER_PROTOCOL", nullToString(req.getProtocol())); serverVariables.put("SERVER_SOFTWARE", nullToString(servletContext.getServerInfo())); serverVariables.put("DOCUMENT_NAME", nullToString(path.substring(path.lastIndexOf("/")+1, path.length()))); serverVariables.put("DOCUMENT_URI", nullToString(path)); serverVariables.put("QUERY_STRING_UNESCAPED", nullToString("")); flushDate(); ((SsiConfig)ssiCommands.get("config")).flush(); } public byte[] getError() { return ((SsiConfig)ssiCommands.get("config")).getError(); } protected void flushDate() { serverVariables.put("DATE_LOCAL", timefmt(new Date())); serverVariables.put("DATE_GMT", timefmt(getGMTDate())); serverVariables.put("LAST_MODIFIED", ((SsiFlastmod)ssiCommands.get("flastmod")).getDate(path)); } protected String timefmt(Date date) { String pattern = ((SsiConfig)ssiCommands.get("config")).getTimefmt(); DateFormat dateFormat = new SimpleDateFormat(pattern, DateTool.LOCALE_US); return dateFormat.format(date); } protected String timefmt(String date) { DateFormat dateFormat = DateFormat.getDateTimeInstance(); Date parsedDate = null; try { parsedDate = dateFormat.parse(date); } catch (ParseException e) { return new String(getError()); } return timefmt(parsedDate); } protected String getServerVariable(String serverVar) { flushDate(); if(serverVariables.get(serverVar)==null) return new String(getError()); else return (String)serverVariables.get(serverVar); } protected String getVirtualPath(String path) { if (path == null) return null; // Resolve encoded characters in the normalized path, // which also handles encoded spaces so we can skip that later. // Placed at the beginning of the chain so that encoded // bad stuff(tm) can be caught by the later checks String normalized = path; if (normalized.indexOf('%') >= 0) normalized = RequestUtil.URLDecode(normalized, "UTF8"); if (normalized == null) return (null); // Normalize the slashes and add leading slash if necessary if (normalized.indexOf('\\') >= 0) normalized = normalized.replace('\\', '/'); if (!normalized.startsWith("/")) normalized = relpath.concat(normalized); // Resolve occurrences of "//" in the normalized path while (true) { int index = normalized.indexOf("//"); if (index < 0) break; normalized = normalized.substring(0, index) + normalized.substring(index + 1); } // Resolve occurrences of "/./" in the normalized path while (true) { int index = normalized.indexOf("/./"); if (index < 0) break; normalized = normalized.substring(0, index) + normalized.substring(index + 2); } // Resolve occurrences of "/../" in the normalized path while (true) { int index = normalized.indexOf("/../"); if (index < 0) break; if (index == 0) return (null); // Trying to go outside our context int index2 = normalized.lastIndexOf('/', index - 1); normalized = normalized.substring(0, index2) + normalized.substring(index + 3); } return (normalized); } /** * Return a path relative to the file being parsed, if they * try to use "../" or have a trailing "/" we return * <code>null</code> since that is not allowed within * a SSI file directive. * * Example of valid path: * "test/path/test.file" * * @param path Path to be normalized */ protected String getFilePath(String path) { if (path == null) return null; // Resolve encoded characters in the normalized path, // which also handles encoded spaces so we can skip that later. // Placed at the beginning of the chain so that encoded // bad stuff(tm) can be caught by the later checks String normalized = path; if (normalized.indexOf('%') >= 0) normalized = RequestUtil.URLDecode(normalized, "UTF8"); if (normalized == null) return (null); // Normalize the slashes if (normalized.indexOf('\\') >= 0) normalized = normalized.replace('\\', '/'); // Resolve occurrences of "//" in the normalized path while (true) { int index = normalized.indexOf("//"); if (index < 0) break; normalized = normalized.substring(0, index) + normalized.substring(index + 1); } // If it starts with a "/" or contains "../" we // return <code>null</code>. if (normalized.startsWith("/") || normalized.indexOf("../") >= 0) return (null); // Return the normalized path that we have completed return (relpath.concat(normalized)); } private String nullToString(String s) { return s==null?"":s; } private String getGMTDate() { Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(); dateFormat.setTimeZone(DateTool.GMT_ZONE); return dateFormat.format(date); } }