You seem to have a point - I see no reason why "0644" is chosen if timestamp is 
not preserved...

From: <>
Sent: Thursday, July 27, 2017 5:55 PM
Subject: SCPClient upload: FilePermission depends on setting Timestamp


I experienced some trouble trying to upload data with the SCPClient class.
It seems that using the parameter "perms" depends on whether the parameter
"time" is set. Is that meant to act this way? Seems somewhat strange to me.


                          ScpClient scpClient = session.createScpClient();

                          Collection<PosixFilePermission> perms = EnumSet.of
(PosixFilePermission.OWNER_READ, PosixFilePermission.OTHERS_EXECUTE);
                          long now = System.currentTimeMillis();
                          ScpTimestamp tsp = new ScpTimestamp(now, now);
                          scpClient.upload("test\n".getBytes(), "test.txt",
perms, null); //uploads Data with Permissions "644"
                          scpClient.upload("test\n".getBytes(), "test2.txt",
perms, tsp); //uploads Data with Permissions "401" as requested

results in Files:

-r-------x   1 group users     5 Jul 27 16:33 test2.txt
-rw-r--r--   1 group users     5 Jul 27 16:33 test.txt

The class SCPHelper (method sendStream, line 608) builds the scp command
like this:

        Set<PosixFilePermission> perms = EnumSet.copyOf
        String octalPerms = preserve ? getOctalPermissions(perms) : "0644";
        String fileName = resolver.getFileName();
        String cmd = "C" + octalPerms + " " + fileSize + " " + fileName;

So it depends on the param "preserve", which is set in DefaultSCPClient
line 128 as "time != null".

Reply via email to