Repository: maven-wagon Updated Branches: refs/heads/master f76c0982b -> 1247688c2
[WAGON-363] wagon-ftp fails to create non-existing directory when path contains "/../" This closes #33 Project: http://git-wip-us.apache.org/repos/asf/maven-wagon/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-wagon/commit/1247688c Tree: http://git-wip-us.apache.org/repos/asf/maven-wagon/tree/1247688c Diff: http://git-wip-us.apache.org/repos/asf/maven-wagon/diff/1247688c Branch: refs/heads/master Commit: 1247688c22984fe40c6e51ce7c05315c33b10769 Parents: f76c098 Author: Stefan Braune <stefan.bra...@novum-online.de> Authored: Tue Mar 21 01:50:43 2017 +0100 Committer: Michael Osipov <micha...@apache.org> Committed: Tue Apr 11 22:20:08 2017 +0200 ---------------------------------------------------------------------- .../maven/wagon/providers/ftp/FtpWagon.java | 26 ++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/1247688c/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java ---------------------------------------------------------------------- diff --git a/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java b/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java index c234e36..ddaadfc 100644 --- a/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java +++ b/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java @@ -49,6 +49,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.List; + /** * FtpWagon * @@ -82,6 +83,7 @@ public class FtpWagon this.passiveMode = passiveMode; } + @Override protected void openConnectionInternal() throws ConnectionException, AuthenticationException { @@ -192,6 +194,7 @@ public class FtpWagon return new FTPClient(); } + @Override protected void firePutCompleted( Resource resource, File file ) { try @@ -223,6 +226,7 @@ public class FtpWagon super.firePutCompleted( resource, file ); } + @Override protected void fireGetCompleted( Resource resource, File localFile ) { try @@ -239,6 +243,7 @@ public class FtpWagon super.fireGetCompleted( resource, localFile ); } + @Override public void closeConnection() throws ConnectionException { @@ -256,6 +261,7 @@ public class FtpWagon } } + @Override public void fillOutputData( OutputData outputData ) throws TransferFailedException { @@ -343,6 +349,7 @@ public class FtpWagon // // ---------------------------------------------------------------------- + @Override public void fillInputData( InputData inputData ) throws TransferFailedException, ResourceDoesNotExistException { @@ -421,23 +428,27 @@ public class FtpWagon this.wagon = wagon; } + @Override public void protocolCommandSent( ProtocolCommandEvent event ) { wagon.fireSessionDebug( "Command sent: " + event.getMessage() ); } + @Override public void protocolReplyReceived( ProtocolCommandEvent event ) { wagon.fireSessionDebug( "Reply received: " + event.getMessage() ); } } + @Override protected void fireSessionDebug( String msg ) { super.fireSessionDebug( msg ); } + @Override public List<String> getFileList( String destinationDirectory ) throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException { @@ -476,6 +487,7 @@ public class FtpWagon } } + @Override public boolean resourceExists( String resourceName ) throws TransferFailedException, AuthorizationException { @@ -503,11 +515,13 @@ public class FtpWagon } } + @Override public boolean supportsDirectoryCopy() { return true; } + @Override public void putDirectory( File sourceDirectory, String destinationDirectory ) throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException { @@ -769,21 +783,29 @@ public class FtpWagon String nextDir = fileName.substring( 0, slashPos ); + boolean changedDir = false; // we only create the nextDir if it doesn't yet exist if ( !ftp.changeWorkingDirectory( nextDir ) ) { ok &= ftp.makeDirectory( nextDir ); } + else + { + changedDir = true; + } if ( ok ) { // set the permissions for the freshly created directory setPermissions( permissions ); - ftp.changeWorkingDirectory( nextDir ); + if ( !changedDir ) + { + ftp.changeWorkingDirectory( nextDir ); + } // now create the deeper directories - String remainingDirs = fileName.substring( slashPos + 1 ); + final String remainingDirs = fileName.substring( slashPos + 1 ); ok &= makeFtpDirectoryRecursive( remainingDirs, permissions ); } }