You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/09/29 16:42:12 UTC

svn commit: r1628197 - in /tomcat/trunk: java/org/apache/catalina/ java/org/apache/catalina/loader/ java/org/apache/catalina/webresources/ webapps/docs/

Author: markt
Date: Mon Sep 29 14:42:11 2014
New Revision: 1628197

URL: http://svn.apache.org/r1628197
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=57038
Add a WebResource.getCoseBase() method, implement for all WebResource implementations and then use it in the web application class loader to set the correct code base for  resources loaded from JARs and WARs.

Modified:
    tomcat/trunk/java/org/apache/catalina/WebResource.java
    tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
    tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java
    tomcat/trunk/java/org/apache/catalina/webresources/CachedResource.java
    tomcat/trunk/java/org/apache/catalina/webresources/EmptyResource.java
    tomcat/trunk/java/org/apache/catalina/webresources/FileResource.java
    tomcat/trunk/java/org/apache/catalina/webresources/JarResource.java
    tomcat/trunk/java/org/apache/catalina/webresources/JarResourceRoot.java
    tomcat/trunk/java/org/apache/catalina/webresources/JarWarResource.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/WebResource.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/WebResource.java?rev=1628197&r1=1628196&r2=1628197&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/WebResource.java (original)
+++ tomcat/trunk/java/org/apache/catalina/WebResource.java Mon Sep 29 14:42:11 2014
@@ -137,6 +137,13 @@ public interface WebResource {
     URL getURL();
 
     /**
+     * Get code base for this resource that will be used when looking up the
+     * assigned permissions for the code base in the security policy file when
+     * running under a security manager.
+     */
+    URL getCodeBase();
+
+    /**
      * Obtain a reference to the WebResourceRoot of which this WebResource is a
      * part.
      */

Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?rev=1628197&r1=1628196&r2=1628197&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java Mon Sep 29 14:42:11 2014
@@ -2534,7 +2534,7 @@ public abstract class WebappClassLoaderB
 
         entry = new ResourceEntry();
         entry.source = resource.getURL();
-        entry.codeBase = entry.source;
+        entry.codeBase = resource.getCodeBase();
         entry.lastModified = resource.getLastModified();
 
         if (needConvert && path.endsWith(".properties")) {

Modified: tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java?rev=1628197&r1=1628196&r2=1628197&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java Mon Sep 29 14:42:11 2014
@@ -33,18 +33,20 @@ public abstract class AbstractArchiveRes
     private final String baseUrl;
     private final JarEntry resource;
     private final Manifest manifest;
+    private final String codeBaseUrl;
     private final String name;
     private boolean readCerts = false;
     private Certificate[] certificates;
 
     protected AbstractArchiveResource(WebResourceRoot root, String webAppPath,
             String base, String baseUrl, JarEntry jarEntry,
-            String internalPath, Manifest manifest) {
+            String internalPath, Manifest manifest, String codeBaseUrl) {
         super(root, webAppPath);
         this.base = base;
         this.baseUrl = baseUrl;
         this.resource = jarEntry;
         this.manifest = manifest;
+        this.codeBaseUrl = codeBaseUrl;
 
         String resourceName = resource.getName();
         if (resourceName.charAt(resourceName.length() - 1) == '/') {
@@ -132,12 +134,24 @@ public abstract class AbstractArchiveRes
 
     @Override
     public URL getURL() {
+        String url = baseUrl + "!/" + resource.getName();
         try {
-            return new URL(baseUrl + "!/" + resource.getName());
+            return new URL(url);
         } catch (MalformedURLException e) {
             if (getLog().isDebugEnabled()) {
-                getLog().debug(sm.getString("fileResource.getUrlFail",
-                        resource.getName(), baseUrl), e);
+                getLog().debug(sm.getString("fileResource.getUrlFail", url), e);
+            }
+            return null;
+        }
+    }
+
+    @Override
+    public URL getCodeBase() {
+        try {
+            return new URL(codeBaseUrl);
+        } catch (MalformedURLException e) {
+            if (getLog().isDebugEnabled()) {
+                getLog().debug(sm.getString("fileResource.getUrlFail", codeBaseUrl), e);
             }
             return null;
         }

Modified: tomcat/trunk/java/org/apache/catalina/webresources/CachedResource.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/CachedResource.java?rev=1628197&r1=1628196&r2=1628197&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/CachedResource.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/CachedResource.java Mon Sep 29 14:42:11 2014
@@ -296,6 +296,11 @@ public class CachedResource implements W
     }
 
     @Override
+    public URL getCodeBase() {
+        return webResource.getCodeBase();
+    }
+
+    @Override
     public Certificate[] getCertificates() {
         return webResource.getCertificates();
     }

Modified: tomcat/trunk/java/org/apache/catalina/webresources/EmptyResource.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/EmptyResource.java?rev=1628197&r1=1628196&r2=1628197&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/EmptyResource.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/EmptyResource.java Mon Sep 29 14:42:11 2014
@@ -151,6 +151,11 @@ public class EmptyResource implements We
     }
 
     @Override
+    public URL getCodeBase() {
+        return null;
+    }
+
+    @Override
     public Certificate[] getCertificates() {
         return null;
     }

Modified: tomcat/trunk/java/org/apache/catalina/webresources/FileResource.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/FileResource.java?rev=1628197&r1=1628196&r2=1628197&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/FileResource.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/FileResource.java Mon Sep 29 14:42:11 2014
@@ -207,6 +207,11 @@ public class FileResource extends Abstra
     }
 
     @Override
+    public URL getCodeBase() {
+        return getURL();
+    }
+
+    @Override
     public Certificate[] getCertificates() {
         return null;
     }

Modified: tomcat/trunk/java/org/apache/catalina/webresources/JarResource.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/JarResource.java?rev=1628197&r1=1628196&r2=1628197&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/JarResource.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/JarResource.java Mon Sep 29 14:42:11 2014
@@ -38,7 +38,7 @@ public class JarResource extends Abstrac
             String baseUrl, JarEntry jarEntry, String internalPath,
             Manifest manifest) {
         super(root, webAppPath, base, "jar:" + baseUrl, jarEntry, internalPath,
-                manifest);
+                manifest, baseUrl);
     }
 
     @Override

Modified: tomcat/trunk/java/org/apache/catalina/webresources/JarResourceRoot.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/JarResourceRoot.java?rev=1628197&r1=1628196&r2=1628197&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/JarResourceRoot.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/JarResourceRoot.java Mon Sep 29 14:42:11 2014
@@ -122,18 +122,29 @@ public class JarResourceRoot extends Abs
 
     @Override
     public URL getURL() {
+        String url = baseUrl + "!/";
         try {
-            return new URL(baseUrl + "!/");
+            return new URL(url);
         } catch (MalformedURLException e) {
             if (log.isDebugEnabled()) {
-                log.debug(sm.getString("fileResource.getUrlFail",
-                        "", baseUrl), e);
+                log.debug(sm.getString("fileResource.getUrlFail", url), e);
             }
             return null;
         }
     }
 
     @Override
+    public URL getCodeBase() {
+        try {
+            return new URL(baseUrl);
+        } catch (MalformedURLException e) {
+            if (getLog().isDebugEnabled()) {
+                getLog().debug(sm.getString("fileResource.getUrlFail", baseUrl), e);
+            }
+            return null;
+        }
+    }
+    @Override
     protected Log getLog() {
         return log;
     }

Modified: tomcat/trunk/java/org/apache/catalina/webresources/JarWarResource.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/JarWarResource.java?rev=1628197&r1=1628196&r2=1628197&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/JarWarResource.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/JarWarResource.java Mon Sep 29 14:42:11 2014
@@ -41,7 +41,7 @@ public class JarWarResource extends Abst
             String baseUrl, JarEntry jarEntry, String archivePath,
             String internalPath, Manifest manifest) {
         super(root, webAppPath, base, "jar:war:" + baseUrl + "^/" + archivePath,
-                jarEntry, internalPath, manifest);
+                jarEntry, internalPath, manifest, "jar" + baseUrl + "!/" + archivePath);
         this.archivePath = archivePath;
     }
 

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1628197&r1=1628196&r2=1628197&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon Sep 29 14:42:11 2014
@@ -75,6 +75,12 @@
         to allow equals characters in cookie values but is configured to allow
         name only cookies. (markt)
       </fix>
+      <fix>
+        <bug>57038</bug>: Add a <code>WebResource.getCoseBase()</code> method,
+        implement for all <code>WebResource</code> implementations and then use
+        it in the web application class loader to set the correct code base for
+        resources loaded from JARs and WARs. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Web applications">



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


Re: svn commit: r1628197 - in /tomcat/trunk: java/org/apache/catalina/ java/org/apache/catalina/loader/ java/org/apache/catalina/webresources/ webapps/docs/

Posted by Mark Thomas <ma...@apache.org>.
On 30/09/2014 13:34, Konstantin Kolinko wrote:
> 2014-09-29 18:42 GMT+04:00  <ma...@apache.org>:
>> Author: markt
>> Date: Mon Sep 29 14:42:11 2014
>> New Revision: 1628197

<snip/>

> 1. On the previous line it is "jar:war:" with a trailing ":",  so I
> guess it had to be s/"jar"/"jar:"/ here.

<snip/>

> 2. s/Cose/Code/

Both fixed. Thanks.

Mark

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


Re: svn commit: r1628197 - in /tomcat/trunk: java/org/apache/catalina/ java/org/apache/catalina/loader/ java/org/apache/catalina/webresources/ webapps/docs/

Posted by Konstantin Kolinko <kn...@gmail.com>.
2014-09-29 18:42 GMT+04:00  <ma...@apache.org>:
> Author: markt
> Date: Mon Sep 29 14:42:11 2014
> New Revision: 1628197
>
> URL: http://svn.apache.org/r1628197
> Log:
> Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=57038
> Add a WebResource.getCoseBase() method, implement for all WebResource implementations and then use it in the web application class loader to set the correct code base for  resources loaded from JARs and WARs.
>
> Modified:
>     tomcat/trunk/java/org/apache/catalina/WebResource.java
>     tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java
>     tomcat/trunk/java/org/apache/catalina/webresources/AbstractArchiveResource.java
>     tomcat/trunk/java/org/apache/catalina/webresources/CachedResource.java
>     tomcat/trunk/java/org/apache/catalina/webresources/EmptyResource.java
>     tomcat/trunk/java/org/apache/catalina/webresources/FileResource.java
>     tomcat/trunk/java/org/apache/catalina/webresources/JarResource.java
>     tomcat/trunk/java/org/apache/catalina/webresources/JarResourceRoot.java
>     tomcat/trunk/java/org/apache/catalina/webresources/JarWarResource.java
>     tomcat/trunk/webapps/docs/changelog.xml



> Modified: tomcat/trunk/java/org/apache/catalina/webresources/JarWarResource.java
> URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/JarWarResource.java?rev=1628197&r1=1628196&r2=1628197&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/catalina/webresources/JarWarResource.java (original)
> +++ tomcat/trunk/java/org/apache/catalina/webresources/JarWarResource.java Mon Sep 29 14:42:11 2014
> @@ -41,7 +41,7 @@ public class JarWarResource extends Abst
>              String baseUrl, JarEntry jarEntry, String archivePath,
>              String internalPath, Manifest manifest) {
>          super(root, webAppPath, base, "jar:war:" + baseUrl + "^/" + archivePath,
> -                jarEntry, internalPath, manifest);
> +                jarEntry, internalPath, manifest, "jar" + baseUrl + "!/" + archivePath);


1. On the previous line it is "jar:war:" with a trailing ":",  so I
guess it had to be s/"jar"/"jar:"/ here.

>          this.archivePath = archivePath;
>      }
>
>
> Modified: tomcat/trunk/webapps/docs/changelog.xml
> URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1628197&r1=1628196&r2=1628197&view=diff
> ==============================================================================
> --- tomcat/trunk/webapps/docs/changelog.xml (original)
> +++ tomcat/trunk/webapps/docs/changelog.xml Mon Sep 29 14:42:11 2014
> @@ -75,6 +75,12 @@
>          to allow equals characters in cookie values but is configured to allow
>          name only cookies. (markt)
>        </fix>
> +      <fix>
> +        <bug>57038</bug>: Add a <code>WebResource.getCoseBase()</code> method,

2. s/Cose/Code/


> +        implement for all <code>WebResource</code> implementations and then use
> +        it in the web application class loader to set the correct code base for
> +        resources loaded from JARs and WARs. (markt)
> +      </fix>



Best regards,
Konstantin Kolinko

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