You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by lm...@apache.org on 2016/12/18 19:25:05 UTC

knox git commit: KNOX-820 - Knox query processing: If the originalUrl value has "ampersand"(&) in it, the value after ampersand is ignored.

Repository: knox
Updated Branches:
  refs/heads/master 7287e3559 -> 29538657c


KNOX-820 - Knox query processing: If the originalUrl value has "ampersand"(&) in it, the value after ampersand is ignored.

Project: http://git-wip-us.apache.org/repos/asf/knox/repo
Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/29538657
Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/29538657
Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/29538657

Branch: refs/heads/master
Commit: 29538657c2c1e89dbcc75fa41128b995dc0724a8
Parents: 7287e35
Author: Larry McCay <lm...@hortonworks.com>
Authored: Sun Dec 18 14:24:54 2016 -0500
Committer: Larry McCay <lm...@hortonworks.com>
Committed: Sun Dec 18 14:24:54 2016 -0500

----------------------------------------------------------------------
 .../gateway/service/knoxsso/WebSSOResource.java | 33 +++++++++++++++++++-
 .../apache/hadoop/gateway/util/UrlsTest.java    |  7 +++++
 2 files changed, 39 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/29538657/gateway-service-knoxsso/src/main/java/org/apache/hadoop/gateway/service/knoxsso/WebSSOResource.java
----------------------------------------------------------------------
diff --git a/gateway-service-knoxsso/src/main/java/org/apache/hadoop/gateway/service/knoxsso/WebSSOResource.java b/gateway-service-knoxsso/src/main/java/org/apache/hadoop/gateway/service/knoxsso/WebSSOResource.java
index 20c6534..7f2114a 100644
--- a/gateway-service-knoxsso/src/main/java/org/apache/hadoop/gateway/service/knoxsso/WebSSOResource.java
+++ b/gateway-service-knoxsso/src/main/java/org/apache/hadoop/gateway/service/knoxsso/WebSSOResource.java
@@ -22,6 +22,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.Principal;
 import java.util.ArrayList;
+import java.util.Map;
 
 import javax.annotation.PostConstruct;
 import javax.servlet.ServletContext;
@@ -159,7 +160,7 @@ public class WebSSOResource {
       // in the case where there are no SAML redirects done before here
       // we need to get it from the request parameters
       removeOriginalUrlCookie = false;
-      original = request.getParameter(ORIGINAL_URL_REQUEST_PARAM);
+      original = getOriginalUrlFromQueryParams();
       if (original == null) {
         log.originalURLNotFound();
         throw new WebApplicationException("Original URL not found in the request.", Response.Status.BAD_REQUEST);
@@ -228,6 +229,36 @@ public class WebSSOResource {
     return Response.seeOther(location).entity("{ \"redirectTo\" : " + original + " }").build();
   }
 
+  private String getOriginalUrlFromQueryParams() {
+    String original = request.getParameter(ORIGINAL_URL_REQUEST_PARAM);
+    StringBuffer buf = new StringBuffer(original);
+
+    // Add any other query params.
+    // Probably not ideal but will not break existing integrations by requiring
+    // some encoding.
+    Map<String, String[]> params = request.getParameterMap();
+    for (String name : params.keySet()) {
+      if (!ORIGINAL_URL_REQUEST_PARAM.equals(name)
+          && !original.contains(name + "=")) {
+        buf.append("&").append(name);
+        String[] values = params.get(name);
+        if (values.length > 0 && values[0] != null) {
+          buf.append("=");
+        }
+        for (int i = 0; i < values.length; i++) {
+          if (values[0] != null) {
+            buf.append(values[i]);
+            if (i < values.length-1) {
+              buf.append("&").append(name).append("=");
+            }
+          }
+        }
+      }
+    }
+
+    return buf.toString();
+  }
+
   private long getExpiry() {
     long expiry = 0l;
     if (tokenTTL == -1) {

http://git-wip-us.apache.org/repos/asf/knox/blob/29538657/gateway-util-common/src/test/java/org/apache/hadoop/gateway/util/UrlsTest.java
----------------------------------------------------------------------
diff --git a/gateway-util-common/src/test/java/org/apache/hadoop/gateway/util/UrlsTest.java b/gateway-util-common/src/test/java/org/apache/hadoop/gateway/util/UrlsTest.java
index ac6ce93..3b1e9cc 100644
--- a/gateway-util-common/src/test/java/org/apache/hadoop/gateway/util/UrlsTest.java
+++ b/gateway-util-common/src/test/java/org/apache/hadoop/gateway/util/UrlsTest.java
@@ -82,4 +82,11 @@ public class UrlsTest {
     assertEquals( "x/y/z", Urls.trimLeadingAndTrailingSlashJoin( "x", "y", "z" ) );
   }
 
+  @Test
+  public void testURLEncoding() throws Exception {
+    assertEquals( "%26", Urls.encode( "&" ) );
+    assertEquals( "&query=hive_table", Urls.decode( "%26query=hive_table" ) );
+    assertEquals( "%3F", Urls.encode( "?" ) );
+  }
+
 }