You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by km...@apache.org on 2013/03/15 18:38:50 UTC

[1/3] git commit: Fixed improper handling of form ended params with multiple vlaues.

Fixed improper handling of form ended params with multiple vlaues.


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

Branch: refs/heads/master
Commit: fe50e9b2f752db8893682d6707282d19d823425b
Parents: 37b6d21
Author: Kevin Minder <ke...@hortonworks.com>
Authored: Fri Mar 15 13:35:42 2013 -0400
Committer: Kevin Minder <ke...@hortonworks.com>
Committed: Fri Mar 15 13:36:21 2013 -0400

----------------------------------------------------------------------
 .../gateway/PseudoIdentityAsserterMessages.java    |   31 +++++++++
 ...IdentityAssertionHttpServletRequestWrapper.java |   49 +++++++++------
 ...tityAssertionHttpServletRequestWrapperTest.java |   28 ++++++++
 3 files changed, 88 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-knox/blob/fe50e9b2/gateway-provider-identity-assertion-pseudo/src/main/java/org/apache/hadoop/gateway/PseudoIdentityAsserterMessages.java
----------------------------------------------------------------------
diff --git a/gateway-provider-identity-assertion-pseudo/src/main/java/org/apache/hadoop/gateway/PseudoIdentityAsserterMessages.java b/gateway-provider-identity-assertion-pseudo/src/main/java/org/apache/hadoop/gateway/PseudoIdentityAsserterMessages.java
new file mode 100644
index 0000000..5a34234
--- /dev/null
+++ b/gateway-provider-identity-assertion-pseudo/src/main/java/org/apache/hadoop/gateway/PseudoIdentityAsserterMessages.java
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.gateway;
+
+import org.apache.hadoop.gateway.i18n.messages.Message;
+import org.apache.hadoop.gateway.i18n.messages.MessageLevel;
+import org.apache.hadoop.gateway.i18n.messages.Messages;
+import org.apache.hadoop.gateway.i18n.messages.StackTrace;
+
+@Messages(logger="org.apache.hadoop.gateway")
+public interface PseudoIdentityAsserterMessages {
+
+  @Message( level = MessageLevel.WARN, text = "Skipping unencodable parameter {0}={1}, {2}: {3}" )
+  void skippingUnencodableParameter( String name, String value, String encoding, @StackTrace( level = MessageLevel.DEBUG ) Exception e );
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-knox/blob/fe50e9b2/gateway-provider-identity-assertion-pseudo/src/main/java/org/apache/hadoop/gateway/filter/IdentityAssertionHttpServletRequestWrapper.java
----------------------------------------------------------------------
diff --git a/gateway-provider-identity-assertion-pseudo/src/main/java/org/apache/hadoop/gateway/filter/IdentityAssertionHttpServletRequestWrapper.java b/gateway-provider-identity-assertion-pseudo/src/main/java/org/apache/hadoop/gateway/filter/IdentityAssertionHttpServletRequestWrapper.java
index 716bc91..526a344 100644
--- a/gateway-provider-identity-assertion-pseudo/src/main/java/org/apache/hadoop/gateway/filter/IdentityAssertionHttpServletRequestWrapper.java
+++ b/gateway-provider-identity-assertion-pseudo/src/main/java/org/apache/hadoop/gateway/filter/IdentityAssertionHttpServletRequestWrapper.java
@@ -18,6 +18,8 @@
 package org.apache.hadoop.gateway.filter;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.hadoop.gateway.PseudoIdentityAsserterMessages;
+import org.apache.hadoop.gateway.i18n.messages.MessagesFactory;
 
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
@@ -37,6 +39,8 @@ import java.util.Map;
 
 public class IdentityAssertionHttpServletRequestWrapper extends HttpServletRequestWrapper {
 
+  private static PseudoIdentityAsserterMessages log = MessagesFactory.get( PseudoIdentityAsserterMessages.class );
+
   private static final String PRINCIPAL_PARAM = "user.name";
   
   String username = null;
@@ -159,31 +163,36 @@ public class IdentityAssertionHttpServletRequestWrapper extends HttpServletReque
     }
   }
 
-  static String urlEncode( Map<String,String[]> map, String encoding ) {
+  static String urlEncode( Map<String, String[]> map, String encoding ) {
     StringBuilder sb = new StringBuilder();
-    for (Map.Entry<?,?> entry : map.entrySet()) {
-        if (sb.length() > 0) {
-            sb.append("&");
-        }
-        String[] values = (String[]) entry.getValue();
-        for (int i = 0; i < values.length; i++) {
-          if (values[i] != null) {
-            try {
-            sb.append(String.format("%s=%s",
-                urlEncode( entry.getKey().toString(), encoding ),
-                urlEncode( values[i], encoding )
-            ));
-            }
-            catch (IllegalArgumentException e) {
-              e.printStackTrace();
-              System.out.println("SKIPPING PARAM: " + entry.getKey().toString() + " with value: " + values[i]);
+    for( Map.Entry<String,String[]> entry : map.entrySet() ) {
+      String name = entry.getKey();
+      if( name != null && name.length() > 0 ) {
+        String[] values = entry.getValue();
+        if( values == null || values.length == 0 ) {
+          sb.append( entry.getKey() );
+        } else {
+          for( int i = 0; i < values.length; i++ ) {
+            String value = values[ i ];
+            if( value != null ) {
+              if( sb.length() > 0 ) {
+                sb.append( "&" );
+              }
+              try {
+                sb.append( urlEncode( name, encoding ) );
+                sb.append( "=" );
+                sb.append( urlEncode( value, encoding ) );
+              } catch( IllegalArgumentException e ) {
+                log.skippingUnencodableParameter( name, value, encoding, e );
+              }
             }
           }
         }
+      }
     }
-    return sb.toString();       
-}  
-  
+    return sb.toString();
+  }
+
   @SuppressWarnings({ "deprecation", "unchecked" })
   private static Map<String,String[]> parseQueryString( String queryString ) {
     return javax.servlet.http.HttpUtils.parseQueryString( queryString );

http://git-wip-us.apache.org/repos/asf/incubator-knox/blob/fe50e9b2/gateway-provider-identity-assertion-pseudo/src/test/java/org/apache/hadoop/gateway/filter/IdentityAssertionHttpServletRequestWrapperTest.java
----------------------------------------------------------------------
diff --git a/gateway-provider-identity-assertion-pseudo/src/test/java/org/apache/hadoop/gateway/filter/IdentityAssertionHttpServletRequestWrapperTest.java b/gateway-provider-identity-assertion-pseudo/src/test/java/org/apache/hadoop/gateway/filter/IdentityAssertionHttpServletRequestWrapperTest.java
index 87751cc..e2f1fca 100644
--- a/gateway-provider-identity-assertion-pseudo/src/test/java/org/apache/hadoop/gateway/filter/IdentityAssertionHttpServletRequestWrapperTest.java
+++ b/gateway-provider-identity-assertion-pseudo/src/test/java/org/apache/hadoop/gateway/filter/IdentityAssertionHttpServletRequestWrapperTest.java
@@ -27,9 +27,11 @@ import org.junit.experimental.categories.Category;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.util.HashMap;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.not;
 
 @Category( { UnitTests.class, FastTests.class } )
@@ -202,4 +204,30 @@ public class IdentityAssertionHttpServletRequestWrapperTest {
     assertThat( output, not( containsString( "input-user" ) ) );
   }
 
+  @Test
+  public void testUrlEncode() {
+    String s;
+    HashMap<String,String[]> m;
+
+    m = new HashMap<String,String[]>();
+    m.put( "null-values", null );
+    s = IdentityAssertionHttpServletRequestWrapper.urlEncode( m, "UTF-8" );
+    assertThat( s, is( "null-values" ) );
+
+    m = new HashMap<String,String[]>();
+    m.put( "no-values", new String[0] );
+    s = IdentityAssertionHttpServletRequestWrapper.urlEncode( m, "UTF-8" );
+    assertThat( s, is( "no-values" ) );
+
+    m = new HashMap<String,String[]>();
+    m.put( "one-value", new String[]{ "value1" } );
+    s = IdentityAssertionHttpServletRequestWrapper.urlEncode( m, "UTF-8" );
+    assertThat( s, is( "one-value=value1" ) );
+
+    m = new HashMap<String,String[]>();
+    m.put( "two-values", new String[]{ "value1", "value2" } );
+    s = IdentityAssertionHttpServletRequestWrapper.urlEncode( m, "UTF-8" );
+    assertThat( s, is( "two-values=value1&two-values=value2" ) );
+  }
+
 }