Repository: ant
Updated Branches:
  refs/heads/master c848ace1e -> c2a61ea21


BZ-43271 BZ-59648 Change permissions on the correct remote file (path) that was 
transferred, instead of accidentally changing the permissions of the directory 
containing the transferred file


Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/b9125733
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/b9125733
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/b9125733

Branch: refs/heads/master
Commit: b9125733c49256ea7349bba968d9eabd468a9223
Parents: 4e2e7d9
Author: Jaikiran Pai <[email protected]>
Authored: Sat Jul 22 14:29:59 2017 +0530
Committer: Jaikiran Pai <[email protected]>
Committed: Sun Jul 23 10:19:01 2017 +0530

----------------------------------------------------------------------
 CONTRIBUTORS                                    |  1 +
 WHATSNEW                                        |  5 ++++
 contributors.xml                                |  4 ++++
 .../optional/ssh/ScpToMessageBySftp.java        | 25 ++++++++++++++++----
 4 files changed, 30 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/b9125733/CONTRIBUTORS
----------------------------------------------------------------------
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 65a1cfa..efab5ab 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -162,6 +162,7 @@ Issa Gorissen
 Ivan Ivanov
 J Bleijenbergh
 Jack J. Woehr
+Jaikiran Pai
 James Duncan Davidson
 Jan Cumps
 Jan Matèrne

http://git-wip-us.apache.org/repos/asf/ant/blob/b9125733/WHATSNEW
----------------------------------------------------------------------
diff --git a/WHATSNEW b/WHATSNEW
index 42f49a7..beb2cd1 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -8,6 +8,11 @@ Fixed bugs:
    value.
    Bugzilla Report 60767
 
+ * Bugzilla Reports 59648 and 43271 - Fixed the issue where the 
+   SCP based tasks would try to change the permissions on the
+   parent directory of a transferred file, instead of changing it
+   on the transferred file itself.
+
 Other changes:
 --------------
 

http://git-wip-us.apache.org/repos/asf/ant/blob/b9125733/contributors.xml
----------------------------------------------------------------------
diff --git a/contributors.xml b/contributors.xml
index fd404f8..5bdf467 100644
--- a/contributors.xml
+++ b/contributors.xml
@@ -674,6 +674,10 @@
     <last>Woehr</last>
   </name>
   <name>
+    <first>Jaikiran</first>
+    <last>Pai</last>
+  </name>  
+  <name>
     <first>James</first>
     <middle>Duncan</middle>
     <last>Davidson</last>

http://git-wip-us.apache.org/repos/asf/ant/blob/b9125733/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessageBySftp.java
----------------------------------------------------------------------
diff --git 
a/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessageBySftp.java 
b/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessageBySftp.java
index 2b32907..b9a8943 100644
--- 
a/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessageBySftp.java
+++ 
b/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessageBySftp.java
@@ -135,11 +135,9 @@ public class ScpToMessageBySftp extends 
ScpToMessage/*AbstractSshMessage*/ {
             try {
                 sendFileToRemote(channel, localFile, remotePath);
             } catch (final SftpException e) {
-                final JSchException schException = new JSchException("Could 
not send '" + localFile
+                throw new JSchException("Could not send '" + localFile
                         + "' to '" + remotePath + "' - "
-                        + e.toString());
-                schException.initCause(e);
-                throw schException;
+                        + e.toString(), e);
             }
         } finally {
             if (channel != null) {
@@ -250,7 +248,24 @@ public class ScpToMessageBySftp extends 
ScpToMessage/*AbstractSshMessage*/ {
                 log("Sending: " + localFile.getName() + " : " + filesize);
             }
             channel.put(localFile.getAbsolutePath(), remotePath, monitor);
-            channel.chmod(getFileMode(), remotePath);
+            // set the fileMode on the transferred file. The "remotePath" can 
potentially be a directory
+            // into which the file got transferred, so we can't/shouldn't go 
ahead and try to change that directory's
+            // permissions. Instead we determine the path of the transferred 
file on remote.
+            final String transferredFileRemotePath;
+            if (channel.stat(remotePath).isDir()) {
+                // Note: It's correct to use "/" as the file separator without 
worrying about what the remote
+                // server's file separator is, since the SFTP spec expects "/" 
to be considered as file path
+                // separator. See section 6.2 "File Names" of the spec, which 
states:
+                // "This protocol represents file names as strings.  File 
names are
+                // assumed to use the slash ('/') character as a directory 
separator."
+                transferredFileRemotePath = remotePath + "/" + 
localFile.getName();
+            } else {
+                transferredFileRemotePath = remotePath;
+            }
+            if (this.getVerbose()) {
+                log("Setting file mode '" + 
Integer.toOctalString(getFileMode()) + "' on remote path " + 
transferredFileRemotePath);
+            }
+            channel.chmod(getFileMode(), transferredFileRemotePath);
         } finally {
             if (this.getVerbose()) {
                 final long endTime = System.currentTimeMillis();

Reply via email to