You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ol...@apache.org on 2004/04/28 00:35:21 UTC

cvs commit: jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/cookie TestCookieCompatibilitySpec.java TestCookieIgnoreSpec.java

olegk       2004/04/27 15:35:21

  Modified:    httpclient/src/java/org/apache/commons/httpclient/cookie
                        CookieSpec.java CookieSpecBase.java
                        IgnoreCookiesSpec.java RFC2109Spec.java
               httpclient/src/test/org/apache/commons/httpclient/cookie
                        TestCookieCompatibilitySpec.java
                        TestCookieIgnoreSpec.java
  Log:
  PR #28566 (Handling sub-domain cookies)
  
  Changelog:
  
  * CookieSpec interface extended to expose path & domain matching methods
  * Browser compatibility domain matching algorithm modified to mimic the (mis-)behavior of common browsers
  
  Contributed by Oleg Kalnichevski
  Reviewed by Michael Becke
  
  Revision  Changes    Path
  1.9       +19 -3     jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/cookie/CookieSpec.java
  
  Index: CookieSpec.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/cookie/CookieSpec.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- CookieSpec.java	18 Apr 2004 23:51:37 -0000	1.8
  +++ CookieSpec.java	27 Apr 2004 22:35:21 -0000	1.9
  @@ -151,6 +151,22 @@
           final Cookie cookies[]);
   
       /**
  +     * Performs domain-match as defined by the cookie specification.
  +     * @param host The target host.
  +     * @param domain The cookie domain attribute.
  +     * @return true if the specified host matches the given domain.
  +     */
  +    boolean domainMatch(final String host, final String domain);
  +
  +    /**
  +     * Performs path-match as defined by the cookie specification.
  +     * @param path The target path.
  +     * @param topmostPath The cookie path attribute.
  +     * @return true if the paths match
  +     */
  +    boolean pathMatch(final String path, final String topmostPath);
  +
  +    /**
        * Create a <tt>"Cookie"</tt> header value for an array of cookies.
        *
        * @param cookie the cookie to be formatted as string
  
  
  
  1.26      +12 -19    jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/cookie/CookieSpecBase.java
  
  Index: CookieSpecBase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/cookie/CookieSpecBase.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- CookieSpecBase.java	24 Apr 2004 23:51:57 -0000	1.25
  +++ CookieSpecBase.java	27 Apr 2004 22:35:21 -0000	1.26
  @@ -485,30 +485,23 @@
       }
   
       /**
  -     * Performs a domain-match as described in RFC2109.
  -     * @param host The host to check.
  -     * @param domain The domain.
  +     * Performs domain-match as implemented in common browsers.
  +     * @param host The target host.
  +     * @param domain The cookie domain attribute.
        * @return true if the specified host matches the given domain.
        */
  -    private static boolean domainMatch(String host, String domain) {
  -        boolean match = host.equals(domain) 
  -            || (domain.startsWith(".") && host.endsWith(domain));
  -
  -        return match;
  +    public boolean domainMatch(final String host, final String domain) {
  +        return host.endsWith(domain);
       }
   
       /**
  -     * Performs a path-match slightly smarter than a straight-forward startsWith
  -     * check.
  -     * @param path The path to check.
  -     * @param topmostPath The path to check against.
  +     * Performs path-match as implemented in common browsers.
  +     * @param path The target path.
  +     * @param topmostPath The cookie path attribute.
        * @return true if the paths match
        */
  -    private static boolean pathMatch(
  -        final String path, final String topmostPath) {
  -            
  +    public boolean pathMatch(final String path, final String topmostPath) {
           boolean match = path.startsWith (topmostPath);
  -        
           // if there is a match and these values are not exactly the same we have
           // to make sure we're not matcing "/foobar" and "/foo"
           if (match && path.length() != topmostPath.length()) {
  
  
  
  1.4       +17 -3     jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/cookie/IgnoreCookiesSpec.java
  
  Index: IgnoreCookiesSpec.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/cookie/IgnoreCookiesSpec.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- IgnoreCookiesSpec.java	18 Apr 2004 23:51:37 -0000	1.3
  +++ IgnoreCookiesSpec.java	27 Apr 2004 22:35:21 -0000	1.4
  @@ -119,4 +119,18 @@
           throws MalformedCookieException, IllegalArgumentException {
       }
   
  +    /**
  +     * @return <code>false</code>
  +     */
  +    public boolean domainMatch(final String host, final String domain) {
  +        return false;
  +    }
  +
  +    /**
  +     * @return <code>false</code>
  +     */
  +    public boolean pathMatch(final String path, final String topmostPath) {
  +        return false;
  +    }
  +
   }
  
  
  
  1.19      +16 -3     jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/cookie/RFC2109Spec.java
  
  Index: RFC2109Spec.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/cookie/RFC2109Spec.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- RFC2109Spec.java	25 Apr 2004 11:57:39 -0000	1.18
  +++ RFC2109Spec.java	27 Apr 2004 22:35:21 -0000	1.19
  @@ -162,6 +162,18 @@
           }
       }
   
  +    /**
  +     * Performs domain-match as defined by the RFC2109.
  +     * @param host The target host.
  +     * @param domain The cookie domain attribute.
  +     * @return true if the specified host matches the given domain.
  +     */
  +    public boolean domainMatch(String host, String domain) {
  +        boolean match = host.equals(domain) 
  +            || (domain.startsWith(".") && host.endsWith(domain));
  +
  +        return match;
  +    }
   
       /**
        * Return a name/value string suitable for sending in a <tt>"Cookie"</tt>
  @@ -267,4 +279,5 @@
           }
           return buffer.toString();
       }
  +
   }
  
  
  
  1.5       +15 -6     jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/cookie/TestCookieCompatibilitySpec.java
  
  Index: TestCookieCompatibilitySpec.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/cookie/TestCookieCompatibilitySpec.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestCookieCompatibilitySpec.java	25 Apr 2004 11:57:39 -0000	1.4
  +++ TestCookieCompatibilitySpec.java	27 Apr 2004 22:35:21 -0000	1.5
  @@ -778,8 +778,7 @@
       }
   
       /**
  -     * Tests if that invalid second domain level cookie gets 
  -     * rejected in the strict mode, but gets accepted in the
  +     * Tests if invalid second domain level cookie gets accepted in the
        * browser compatibility mode.
        */
       public void testSecondDomainLevelCookie() throws Exception {
  @@ -937,6 +936,16 @@
           assertEquals("name1", matched[0].getName());
           assertEquals("name2", matched[1].getName());
           assertEquals("name3", matched[2].getName());
  +    }
  +
  +    public void testInvalidMatchDomain() throws Exception {
  +        Cookie cookie = new Cookie("beta.gamma.com", "name", null, "/", null, false); 
  +        cookie.setDomainAttributeSpecified(true);
  +        cookie.setPathAttributeSpecified(true);
  +
  +        CookieSpec cookiespec = new CookieSpecBase();
  +        cookiespec.validate("alpha.beta.gamma.com", 80, "/", false, cookie);
  +        assertTrue(cookiespec.match("alpha.beta.gamma.com", 80, "/", false, cookie));
       }
   
       public void testFormatInvalidCookie() throws Exception {
  
  
  
  1.3       +7 -4      jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/cookie/TestCookieIgnoreSpec.java
  
  Index: TestCookieIgnoreSpec.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/cookie/TestCookieIgnoreSpec.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestCookieIgnoreSpec.java	25 Apr 2004 11:57:39 -0000	1.2
  +++ TestCookieIgnoreSpec.java	27 Apr 2004 22:35:21 -0000	1.3
  @@ -104,6 +104,9 @@
           cookiespec.validate("host", 80, "/", false, (Cookie)null);
           cookiespec.match("host", 80, "/", false, (Cookie)null);
           cookiespec.match("host", 80, "/", false, (Cookie [])null);
  +        cookiespec.domainMatch(null, null);
  +        cookiespec.pathMatch(null, null);
  +        cookiespec.match("host", 80, "/", false, (Cookie [])null);
           cookiespec.formatCookie(null);
           cookiespec.formatCookies(null);
           cookiespec.formatCookieHeader((Cookie)null);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org