]> source.dussan.org Git - archiva.git/commitdiff
[MRM-893]
authorMaria Odea B. Ching <oching@apache.org>
Tue, 12 Aug 2008 07:50:27 +0000 (07:50 +0000)
committerMaria Odea B. Ching <oching@apache.org>
Tue, 12 Aug 2008 07:50:27 +0000 (07:50 +0000)
submitted by Dan Tran

-return a 404 when the request is a resource file appended with a '/'

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@685076 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java
archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/RepositoryServletBrowseTest.java

index 861df090fa198ef6e1232586381fd0aebfd5c398..0e8277359d78f5c82c4bc103acd4b58bbd81b36c 100644 (file)
@@ -409,6 +409,17 @@ public class ArchivaDavResourceFactory
         throws DavException
     {
         File resourceFile = new File( managedRepository.getRepoRoot(), logicalResource.getPath() );
+        
+        //MRM-893, dont send back a file when user intentionally wants a directory
+        if ( locator.getHref( false ).endsWith( "/" ) )
+        {
+            if ( ! resourceFile.isDirectory() )
+            {
+                //force a resource not found 
+                return null;
+            }
+        }
+
         ArchivaDavResource resource =
             new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource.getPath(),
                                     managedRepository.getRepository(), request.getRemoteAddr(),
index baa76521bd51ac28ef828d1af38eee5e511dd6cb..169c90fab4876f64e17f1e3921e6e5cc931e19e3 100644 (file)
@@ -72,6 +72,30 @@ public class RepositoryServletBrowseTest
         String expectedLinks[] = new String[] { "../", "apache/", "codehaus/" };
         assertLinks(expectedLinks, response.getLinks());
     }
+
+    public void testGetDirectoryWhichHasMatchingFile() //MRM-893
+        throws Exception
+    {
+        new File( repoRootInternal, "org/apache/archiva/artifactId/1.0" ).mkdirs();
+        new File( repoRootInternal, "org/apache/archiva/artifactId/1.0/artifactId-1.0.jar" ).createNewFile();
+
+        WebRequest request = new GetMethodWebRequest( "http://machine.com/repository/internal/org/apache/archiva/artifactId" );
+        WebResponse response = sc.getResponse( request );
+        assertEquals( "Response", HttpServletResponse.SC_OK, response.getResponseCode() );
+
+        request = new GetMethodWebRequest( "http://machine.com/repository/internal/org/apache/archiva/artifactId/" );
+        response = sc.getResponse( request );
+        assertEquals( "Response", HttpServletResponse.SC_OK, response.getResponseCode() );
+        
+        request = new GetMethodWebRequest( "http://machine.com/repository/internal/org/apache/archiva/artifactId/1.0/artifactId-1.0.jar" );
+        response = sc.getResponse( request );
+        assertEquals( "Response", HttpServletResponse.SC_OK, response.getResponseCode() );
+        
+        request = new GetMethodWebRequest( "http://machine.com/repository/internal/org/apache/archiva/artifactId/1.0/artifactId-1.0.jar/" );
+        response = sc.getResponse( request );
+        assertEquals( "Response", HttpServletResponse.SC_NOT_FOUND, response.getResponseCode() );
+    }
+    
     
     private void assertLinks(String expectedLinks[], WebLink actualLinks[])
     {