This seems to break forms with enctype="multipart/form-data" (15 in OFBiz). Try for instance to upload an image for a product. If you revert this commit it works again.

Jacques

From: <[email protected]>
Author: jonesde
Date: Sat Feb 14 08:17:05 2009
New Revision: 744418

URL: http://svn.apache.org/viewvc?rev=744418&view=rev
Log:
Changed LoginWorker.makeLoginUrl back to returning a String and implemented a more general solution for the @ofbizUrl and @ofbizContentUrl tags so that they do decoding and are now tolerant of encoded URLs just in case it happens; this should be a more general fix and avoid the problem more; also a few cleanups like resolving warnings

Modified:
   ofbiz/trunk/framework/base/src/org/ofbiz/base/util/KeyStoreUtil.java
   
ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GenericEngineFactory.java
   ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java
   
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizContentTransform.java
   ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/KeyStoreUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/KeyStoreUtil.java?rev=744418&r1=744417&r2=744418&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/KeyStoreUtil.java 
(original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/KeyStoreUtil.java Sat 
Feb 14 08:17:05 2009
@@ -18,25 +18,41 @@
 
*******************************************************************************/
package org.ofbiz.base.util;

-import org.apache.commons.codec.binary.Base64;
-import org.ofbiz.base.component.ComponentConfig;
-import org.ofbiz.base.config.GenericConfigException;
-
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.io.Reader;
+import java.io.StringReader;
import java.net.URL;
-import java.security.*;
-import java.security.cert.*;
+import java.security.GeneralSecurityException;
+import java.security.KeyFactory;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.Principal;
+import java.security.PrivateKey;
import java.security.cert.Certificate;
+import java.security.cert.CertificateEncodingException;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Collection;
import java.util.Map;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;

import javolution.util.FastMap;

-import javax.security.auth.x500.X500Principal;
+import org.apache.commons.codec.binary.Base64;
+import org.ofbiz.base.component.ComponentConfig;
+import org.ofbiz.base.config.GenericConfigException;

/**
 * KeyStoreUtil - Utilities for getting KeyManagers and TrustManagers

Modified: 
ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GenericEngineFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GenericEngineFactory.java?rev=744418&r1=744417&r2=744418&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GenericEngineFactory.java
 (original)
+++ 
ofbiz/trunk/framework/service/src/org/ofbiz/service/engine/GenericEngineFactory.java
 Sat Feb 14 08:17:05 2009
@@ -59,7 +59,7 @@
        Element engineElement = UtilXml.firstChildElement(rootElement, "engine", 
"name", engineName);

        if (engineElement == null) {
- throw new GenericServiceException("Cannot find an engine definition for the engine name [" + engineName + "] in the serviceengine.xml file"); + throw new GenericServiceException("Cannot find a service engine definition for the engine name [" + engineName + "] in the serviceengine.xml file");
        }

        String className = engineElement.getAttribute("class");

Modified: 
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java?rev=744418&r1=744417&r2=744418&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java 
(original)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/LoginWorker.java 
Sat Feb 14 08:17:05 2009
@@ -27,7 +27,6 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;

-import javax.security.auth.x500.X500Principal;
import javax.servlet.ServletContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
@@ -43,13 +42,11 @@
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.GeneralException;
import org.ofbiz.base.util.KeyStoreUtil;
-import org.ofbiz.base.util.StringUtil;
import org.ofbiz.base.util.UtilFormatOut;
import org.ofbiz.base.util.UtilHttp;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilProperties;
import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.StringUtil.StringWrapper;
import org.ofbiz.common.login.LoginServices;
import org.ofbiz.entity.GenericDelegator;
import org.ofbiz.entity.GenericEntityException;
@@ -81,25 +78,25 @@
    /** This Map is keyed by the randomly generated externalLoginKey and the 
value is a UserLogin GenericValue object */
    public static Map<String, GenericValue> externalLoginKeys = 
FastMap.newInstance();

-    public static StringWrapper makeLoginUrl(PageContext pageContext) {
+    public static String makeLoginUrl(PageContext pageContext) {
        return makeLoginUrl(pageContext, "checkLogin");
    }

-    public static StringWrapper makeLoginUrl(HttpServletRequest request) {
+    public static String makeLoginUrl(HttpServletRequest request) {
        return makeLoginUrl(request, "checkLogin");
    }

-    public static StringWrapper makeLoginUrl(PageContext pageContext, String 
requestName) {
+    public static String makeLoginUrl(PageContext pageContext, String 
requestName) {
        return makeLoginUrl((HttpServletRequest) pageContext.getRequest(), 
requestName);
    }
-    public static StringWrapper makeLoginUrl(HttpServletRequest request, 
String requestName) {
+    public static String makeLoginUrl(HttpServletRequest request, String 
requestName) {
        Map<String, Object> urlParams = 
UtilHttp.getUrlOnlyParameterMap(request);
        String queryString = UtilHttp.urlEncodeArgs(urlParams, false);
        String currentView = UtilFormatOut.checkNull((String) 
request.getAttribute("_CURRENT_VIEW_"));

        String loginUrl = "/" + requestName;
        if ("login".equals(currentView)) {
-            return StringUtil.wrapString(loginUrl);
+            return loginUrl;
        }
        if (UtilValidate.isNotEmpty(currentView)) {
            loginUrl += "/" + currentView;
@@ -108,7 +105,8 @@
            loginUrl += "?" + queryString;
        }

-        return StringUtil.wrapString(loginUrl);
+        //return StringUtil.wrapString(loginUrl);
+        return loginUrl;
    }

    /**
@@ -360,7 +358,7 @@
String errMsg = UtilProperties.getMessage(resourceWebapp, "loginevents.following_error_occurred_during_login", messageMap, UtilHttp.getLocale(request));
                    request.setAttribute("_ERROR_MESSAGE_", errMsg);
                }
-                request.setAttribute("_ERROR_MESSAGE_LIST_", (List) 
result.get(ModelService.ERROR_MESSAGE_LIST));
+                request.setAttribute("_ERROR_MESSAGE_LIST_", 
result.get(ModelService.ERROR_MESSAGE_LIST));
                return "error";
            } else {
                password = request.getParameter("newPassword");
@@ -720,10 +718,10 @@
                    String userLoginId = null;

                    for (int i = 0; i < clientCerts.length; i++) {
-                        X500Principal x500 = 
clientCerts[i].getSubjectX500Principal();
+                        //X500Principal x500 = 
clientCerts[i].getSubjectX500Principal();
                        //Debug.log("Checking client certification for 
authentication: " + x500.getName(), module);

-                        Map x500Map = 
KeyStoreUtil.getCertX500Map(clientCerts[i]);
+                        Map<String, String> x500Map = 
KeyStoreUtil.getCertX500Map(clientCerts[i]);
                        if (i == 0) {
                            String cn = (String) x500Map.get("CN");
                            cn = cn.replaceAll("\\\\", "");
@@ -765,7 +763,7 @@
        return "success";
    }

- protected static boolean checkValidIssuer(GenericDelegator delegator, Map x500Map, BigInteger serialNumber) throws GeneralException { + protected static boolean checkValidIssuer(GenericDelegator delegator, Map<String, String> x500Map, BigInteger serialNumber) throws GeneralException {
        List<EntityCondition> conds = FastList.newInstance();
conds.add(EntityCondition.makeCondition(EntityOperator.OR, EntityCondition.makeConditionMap("commonName", x500Map.get("CN")),
                EntityCondition.makeConditionMap("commonName", null),

Modified: 
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizContentTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizContentTransform.java?rev=744418&r1=744417&r2=744418&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizContentTransform.java
 (original)
+++ 
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizContentTransform.java
 Sat Feb 14 08:17:05 2009
@@ -24,7 +24,10 @@

import javax.servlet.http.HttpServletRequest;

+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.StringUtil;
import org.ofbiz.webapp.taglib.ContentUrlTag;
+import org.owasp.esapi.errors.EncodingException;

import freemarker.core.Environment;
import freemarker.ext.beans.BeanModel;
@@ -36,35 +39,45 @@
 */
public class OfbizContentTransform implements TemplateTransformModel {

-        public Writer getWriter(final Writer out, Map args) {
-            final StringBuilder buf = new StringBuilder();
-            return new Writer(out) {
-                public void write(char cbuf[], int off, int len) {
-                    buf.append(cbuf, off, len);
-                }
-
-                public void flush() throws IOException {
-                    out.flush();
-                }
-
-                public void close() throws IOException {
-                    try {
-                        Environment env = Environment.getCurrentEnvironment();
-                        BeanModel req = (BeanModel)env.getVariable("request");
-                        HttpServletRequest request = req == null ? null : 
(HttpServletRequest) req.getWrappedObject();
-
-                        // make the link
-                        StringBuffer newURL = new StringBuffer();
-                        ContentUrlTag.appendContentPrefix(request, newURL);
-                        if (newURL.length() > 0 && newURL.charAt(newURL.length() - 1) 
!= '/' && buf.charAt(0) != '/') {
-                            newURL.append('/');
-                        }
-                        newURL.append(buf.toString());
-                        out.write(newURL.toString());
-                    } catch (TemplateModelException e) {
-                        throw new IOException(e.getMessage());
+    public final static String module = OfbizUrlTransform.class.getName();
+
+    public Writer getWriter(final Writer out, Map args) {
+        final StringBuilder buf = new StringBuilder();
+        return new Writer(out) {
+            public void write(char cbuf[], int off, int len) {
+                buf.append(cbuf, off, len);
+            }
+
+            public void flush() throws IOException {
+                out.flush();
+            }
+
+            public void close() throws IOException {
+                try {
+                    Environment env = Environment.getCurrentEnvironment();
+                    BeanModel req = (BeanModel)env.getVariable("request");
+                    HttpServletRequest request = req == null ? null : 
(HttpServletRequest) req.getWrappedObject();
+
+                    String requestUrl = buf.toString();
+                    // just in case the request is encoded, decode before 
making the link
+                    try {
+                        requestUrl = 
StringUtil.defaultWebEncoder.decodeFromURL(requestUrl);
+                    } catch (EncodingException e) {
+                        Debug.logError(e, "Error decoding URL string [" + requestUrl + 
"]: " + e.toString(), module);
+                    }
+
+                    // make the link
+                    StringBuffer newURL = new StringBuffer();
+                    ContentUrlTag.appendContentPrefix(request, newURL);
+                    if (newURL.length() > 0 && newURL.charAt(newURL.length() - 1) != 
'/' && requestUrl.charAt(0) != '/') {
+                        newURL.append('/');
                    }
+                    newURL.append(requestUrl);
+                    out.write(newURL.toString());
+                } catch (TemplateModelException e) {
+                    throw new IOException(e.getMessage());
                }
-            };
-        }
+            }
+        };
    }
+}

Modified: 
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java?rev=744418&r1=744417&r2=744418&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java 
(original)
+++ 
ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java 
Sat Feb 14 08:17:05 2009
@@ -21,10 +21,16 @@
import java.io.IOException;
import java.io.Writer;
import java.util.Map;
+
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.StringUtil;
+import org.ofbiz.webapp.control.RequestHandler;
+import org.owasp.esapi.errors.EncodingException;
+
import freemarker.core.Environment;
import freemarker.ext.beans.BeanModel;
import freemarker.template.SimpleScalar;
@@ -32,12 +38,12 @@
import freemarker.template.TemplateScalarModel;
import freemarker.template.TemplateTransformModel;

-import org.ofbiz.webapp.control.RequestHandler;
-
/**
 * OfbizUrlTransform - Freemarker Transform for URLs (links)
 */
public class OfbizUrlTransform implements TemplateTransformModel {
+
+    public final static String module = OfbizUrlTransform.class.getName();

    public boolean checkArg(Map args, String key, boolean defaultValue) {
        if (!args.containsKey(key)) {
@@ -80,10 +86,18 @@
                        if (res != null) {
                            response = (HttpServletResponse) 
res.getWrappedObject();
                        }
-
+
+                        String requestUrl = buf.toString();
+                        // just in case the request is encoded, decode before 
making the link
+                        try {
+                            requestUrl = 
StringUtil.defaultWebEncoder.decodeFromURL(requestUrl);
+                        } catch (EncodingException e) {
+                            Debug.logError(e, "Error decoding URL string [" + requestUrl 
+ "]: " + e.toString(), module);
+                        }
+
                        // make the link
                        RequestHandler rh = (RequestHandler) 
ctx.getAttribute("_REQUEST_HANDLER_");
-                        out.write(rh.makeLink(request, response, 
buf.toString(), fullPath, secure, encode));
+                        out.write(rh.makeLink(request, response, requestUrl, 
fullPath, secure, encode));
                    } else if (prefix != null) {
                        if (prefix instanceof TemplateScalarModel) {
                            TemplateScalarModel s = (TemplateScalarModel) 
prefix;




Reply via email to