You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@knox.apache.org by "Larry McCay (JIRA)" <ji...@apache.org> on 2017/06/06 19:29:18 UTC

[jira] [Commented] (KNOX-690) URL Template matching not properly handling encoded URLs

    [ https://issues.apache.org/jira/browse/KNOX-690?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16039507#comment-16039507 ] 

Larry McCay commented on KNOX-690:
----------------------------------

Just for history - this issue came about as a result of rc testing on the 0.9.0 release - the following findings by Sumit led to the filing of this JIRA and the subsequent fix:

"-1 (binding)

I tested the release candidate by building the sources and running unit
tests. Also verified signatures and functionally tested some services like
WehbHDFS, Hive, Hbase and Yarn.

All that looked good but when testing the new UI proxy support for Ambari
I did find an issue with some of the widgets that was caused by the
inability to properly encode request URLs dispatched from Knox with
Œunwise¹ characters in them. I thought I had fixed this before but the fix
was improper. The appropriate fix for
https://issues.apache.org/jira/browse/KNOX-690 however does fix this issue.

I¹d like to propose cherry picking the commits in master for KNOX-690 into
the 0.9.0 branch and cutting another RC."

> URL Template matching not properly handling encoded URLs
> --------------------------------------------------------
>
>                 Key: KNOX-690
>                 URL: https://issues.apache.org/jira/browse/KNOX-690
>             Project: Apache Knox
>          Issue Type: Bug
>          Components: Server
>    Affects Versions: 0.9.0
>            Reporter: Kevin Minder
>            Assignee: Sumit Gupta
>             Fix For: 0.9.0
>
>
> For example as shown below the literal "test-scheme://test-host:42/%7C" does not match the template "*://*:*/|" as it probably should.  The test below can be added to knox-url-decode/gateway-util-urltemplate/src/test/java/org/apache/hadoop/gateway/util/urltemplate/MatcherTest.java to help work on the issue.
> {code}
>   @Test
>   public void testEncodedUrlMatching() throws Exception {
>     Template template;
>     Template input;
>     Matcher<String> matcher;
>     Matcher<?>.Match match;
>     matcher = new Matcher<String>();
>     template = Parser.parseTemplate( "*://*:*/example" );
>     matcher.add( template, "test-example" );
>     template = Parser.parseTemplate( "*://*:*/|" );
>     matcher.add( template, "test-pipe-in-path" );
>     template = Parser.parseTemplate( "*://*:*/test-path?{|=*}" );
>     matcher.add( template, "test-pipe-in-query-param-name" );
>     template = Parser.parseTemplate( "*://*:*/test-path?{test-param-name=*}" );
>     matcher.add( template, "test-pipe-in-query-param-value" );
>     template = Parser.parseTemplate( "*://*:*/path#|" );
>     matcher.add( template, "test-pipe-in-fragment" );
>     input = Parser.parseLiteral( "test-scheme://test-host:42/example" );
>     match = matcher.match( input );
>     assertThat( match, notNullValue() );
>     assertThat( (String)match.getValue(), is( "test-example" ) );
>     input = Parser.parseLiteral( "test-scheme://test-host:42/%7C" );
>     match = matcher.match( input );
>     assertThat( match, notNullValue() );
>     assertThat( (String)match.getValue(), is( "test-pipe-in-path" ) );
>     input = Parser.parseLiteral( "test-scheme://test-host:42/test-path?%7C=test-param-value" );
>     match = matcher.match( input );
>     assertThat( match, notNullValue() );
>     assertThat( (String)match.getValue(), is( "test-pipe-in-query-param-name" ) );
>     input = Parser.parseLiteral( "test-scheme://test-host:42/test-path?test-param-name=%7C" );
>     match = matcher.match( input );
>     assertThat( match, notNullValue() );
>     assertThat( (String)match.getValue(), is( "test-pipe-in-query-param-value" ) );
>     input = Parser.parseLiteral( "test-scheme://test-host:42/test-path#%7C" );
>     match = matcher.match( input );
>     assertThat( match, notNullValue() );
>     assertThat( (String)match.getValue(), is( "test-pipe-in-fragment" ) );
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)