Curd Reinert created SSHD-1137:
----------------------------------
Summary: IOException for unsupported NOFOLLOW_LINKS on AIX when
accessing with OpenSSH SFTP client
Key: SSHD-1137
URL: https://issues.apache.org/jira/browse/SSHD-1137
Project: MINA SSHD
Issue Type: Bug
Affects Versions: 2.5.1
Environment: SFTP-Server running on AIX
OpenSSH SFTP client
Reporter: Curd Reinert
When accessing an SFTP server running on AIX with an OpenSSH SFTP client (e.g.
OpenSSH_7.9p1, OpenSSL 1.1.1a 20 Nov 2018, but other versions as well), I get
the following exception:
{{[DEBUG][sshd-TravicLinkSftpSubsystem-thread-1] 01.03.2021 10:00:31,019 Class:
org.apache.sshd.server.subsystem.sftp.AbstractSftpSubsystemHelper Method:
handleSetFileAttributeFailure Line: 2645 -
/nhandleSetFileAttributeFailure(TravicLinkServerSession [Thread
=sshd-TravicLinkSftpSubsystem-thread-1, Mandant=DEKAFFM, Partner=DEALI001,
pause=false, Hashcode=1524776343])[/kati/kursanfo_in/enk1.csv]
posix:permissions=[OWNER_READ, OWNER_WRITE, GROUP_READ, OTHERS_READ] failure
details}}
{{java.io.IOException: NOFOLLOW_LINKS is not supported on this platform}}
{{ at sun.nio.fs.UnixPath.openForAttributeAccess(UnixPath.java:793)}}
{{ at
sun.nio.fs.UnixFileAttributeViews$Posix.setMode(UnixFileAttributeViews.java:242)}}
{{ at
sun.nio.fs.UnixFileAttributeViews$Posix.setPermissions(UnixFileAttributeViews.java:272)}}
{{ at
org.apache.sshd.server.subsystem.sftp.AbstractSftpSubsystemHelper.setFilePermissions(AbstractSftpSubsystemHelper.java:2793)}}
{{ at
org.apache.sshd.server.subsystem.sftp.AbstractSftpSubsystemHelper.setFileAttribute(AbstractSftpSubsystemHelper.java:2672)}}
{{ at
org.apache.sshd.server.subsystem.sftp.AbstractSftpSubsystemHelper.setFileAttributes(AbstractSftpSubsystemHelper.java:2620)}}
{{ at
org.apache.sshd.server.subsystem.sftp.AbstractSftpSubsystemHelper.doSetAttributes(AbstractSftpSubsystemHelper.java:2541)}}
{{ at
org.apache.sshd.server.subsystem.sftp.FileHandle.<init>(FileHandle.java:77)}}
{{ at
org.apache.sshd.server.subsystem.sftp.SftpSubsystem.doOpen(SftpSubsystem.java:911)}}
{{ at
org.apache.sshd.server.subsystem.sftp.AbstractSftpSubsystemHelper.doOpen(AbstractSftpSubsystemHelper.java:532)}}
{{ at
org.apache.sshd.server.subsystem.sftp.AbstractSftpSubsystemHelper.doProcess(AbstractSftpSubsystemHelper.java:386)}}
{{ at
org.apache.sshd.server.subsystem.sftp.SftpSubsystem.doProcess(SftpSubsystem.java:344)}}
{{ at
de.ppi.fis.traviclink.transfer.transport.ftpserver.ssh.TravicLinkSftpSubsystem.doProcess(TravicLinkSftpSubsystem.java:75)}}
{{ at
org.apache.sshd.server.subsystem.sftp.AbstractSftpSubsystemHelper.process(AbstractSftpSubsystemHelper.java:377)}}
{{ at
org.apache.sshd.server.subsystem.sftp.SftpSubsystem.run(SftpSubsystem.java:317)}}
{{ at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:522)}}
{{ at java.util.concurrent.FutureTask.run(FutureTask.java:277)}}
{{ at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1153)}}
{{ at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)}}
{{ at java.lang.Thread.run(Thread.java:785)}}
I've had a look into the source code. It seems the permissions requested by
the client (OWNER_READ, OWNER_WRITE, GROUP_READ, OTHERS_READ) are not supported
by the file systems. This fails equally on Windows, Linux or AIX for an initial
open, and therefore the catch block in [FileHandle (line
75)|https://gitbox.apache.org/repos/asf?p=mina-sshd.git;a=blob;f=sshd-sftp/src/main/java/org/apache/sshd/sftp/server/FileHandle.java;h=40c1056048f43184bc8aa589210dd18efb8130a7;hb=HEAD#l75]
is reached. Here the openFile for the channel is repeated without file
attributes - succesfully - and then an attempt is made to set the file
attributes with subsystem.doSetAttributes(file, attrs, false) - but this call
needs that third argument for the follow link option, and setting it to false
leads to using the "NOFOLLOW_LINK" option, and that is not supported on AIX,
which finally causes the opening to fail.
My assumption is that when setting the file attributes, the caller assumed that
"false" is a good choice as a default for a case when there is no indication if
links should be followed or not. But I would say the reverse is true, and
"true" should be used in this case, as it probably is if the original open does
not fail.
Changing "false" into "true" in FileHandle, line 77, should do the trick.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]