Package org.apache.sshd.sftp.common
Class SftpHelper
java.lang.Object
org.apache.sshd.sftp.common.SftpHelper
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic int
attributesToPermissions
(boolean isReg, boolean isDir, boolean isLnk, Collection<PosixFilePermission> perms) Converts a file / folder's attributes into a maskstatic AclEntry
buildAclEntry
(int aclType, int aclFlag, int aclMask, String aclWho) static SftpClient.Attributes
complete
(SftpClient.Attributes attrs, String longName) Fills in missing information in the attributes if an SFTP v3 long name is available.static AclEntryType
decodeAclEntryType
(int aclType) static Set
<AclEntryFlag> decodeAclFlags
(int aclFlag) static Set
<AclEntryPermission> decodeAclMask
(int aclMask) decodeACLs
(Buffer buffer, int version) static int
Returns the equivalent SFTP value for the ACL typestatic long
encodeAclFlags
(Collection<AclEntryFlag> flags) static long
static <B extends Buffer>
BencodeACLs
(B buffer, int version, Collection<AclEntry> acl) static int
fileTypeFromChar
(char ch) Converts a POSIX/Linux file type indicator (as if obtained by "ls -l") to a file type.static int
fileTypeToPermission
(int type) Converts a file type into a POSIX permission mask valuestatic boolean
static Boolean
getEndOfFileIndicatorValue
(Buffer buffer, int version) Retrieves the end-of-file indicator forSSH_FXP_DATA
responses, provided the version is at least 6, and the buffer has enough available datastatic Boolean
getEndOfListIndicatorValue
(Buffer buffer, int version) Retrieves the end-of-list indicator forSSH_FXP_NAME
responses, provided the version is at least 6, and the buffer has enough available datastatic String
getLongName
(String shortName, Map<String, ?> attributes) Creates an "ls -l" compatible long name stringstatic Boolean
indicateEndOfNamesList
(Buffer buffer, int version, PropertyResolver resolver) Appends the end-of-list=TRUE
indicator forSSH_FXP_NAME
responses, provided the version is at least 6 and the feature is enabledstatic Boolean
indicateEndOfNamesList
(Buffer buffer, int version, PropertyResolver resolver, boolean indicatorValue) Appends the end-of-list indicator forSSH_FXP_NAME
responses, provided the version is at least 6, the feature is enabled and the indicator value is notnull
private static boolean
isUnixPermissions
(String longName) static Set
<PosixFilePermission> permissionsToAttributes
(int perms) Translates a mask of permissions into its enumeration values equivalentsstatic int
permissionsToFileType
(int perms) Converts a POSIX permissions mask to a file type valuestatic NavigableMap
<String, Object> static NavigableMap
<String, byte[]> readExtensions
(Buffer buffer) static FileTime
Decodes aFileTime
value from a bufferstatic String
resolveStatusMessage
(int subStatus) static int
Returns the most adequate sub-status for the provided exceptionstatic NavigableMap
<String, byte[]> toBinaryExtensions
(Map<String, String> extensions) static NavigableMap
<String, String> toStringExtensions
(Map<String, ?> extensions) static <B extends Buffer>
BwriteAclEntry
(B buffer, AclEntry acl) static <B extends Buffer>
BwriteACLs
(B buffer, int version, Collection<AclEntry> acl) static <B extends Buffer>
BwriteAttributes
(B buffer, SftpClient.Attributes attributes, int sftpVersion) static <B extends Buffer>
BwriteAttrs
(B buffer, int version, Map<String, ?> attributes) Writes a file / folder's attributes to a bufferstatic <B extends Buffer>
BwriteAttrsV3
(B buffer, int version, Map<String, ?> attributes) Writes the retrieved file / directory attributes in V3 formatstatic <B extends Buffer>
BwriteAttrsV4
(B buffer, int version, Map<String, ?> attributes) Writes the retrieved file / directory attributes in V4+ formatstatic <B extends Buffer>
BwriteExtensions
(B buffer, Map<?, ?> extensions) static <B extends Buffer>
BEncodes aFileTime
value into a buffer
-
Field Details
-
DEFAULT_SUBSTATUS_MESSAGE
-
UNIX_PERMISSIONS_START
-
-
Constructor Details
-
SftpHelper
private SftpHelper()
-
-
Method Details
-
getEndOfFileIndicatorValue
Retrieves the end-of-file indicator forSSH_FXP_DATA
responses, provided the version is at least 6, and the buffer has enough available data- Parameters:
buffer
- TheBuffer
to retrieve the data fromversion
- The SFTP version being used- Returns:
- The indicator value -
null
if none retrieved - See Also:
-
getEndOfListIndicatorValue
Retrieves the end-of-list indicator forSSH_FXP_NAME
responses, provided the version is at least 6, and the buffer has enough available data- Parameters:
buffer
- TheBuffer
to retrieve the data fromversion
- The SFTP version being used- Returns:
- The indicator value -
null
if none retrieved - See Also:
-
indicateEndOfNamesList
Appends the end-of-list=TRUE
indicator forSSH_FXP_NAME
responses, provided the version is at least 6 and the feature is enabled- Parameters:
buffer
- TheBuffer
to append the indicatorversion
- The SFTP version being usedresolver
- ThePropertyResolver
to query whether to enable the feature- Returns:
- The actual indicator value used -
null
if none appended - See Also:
-
indicateEndOfNamesList
public static Boolean indicateEndOfNamesList(Buffer buffer, int version, PropertyResolver resolver, boolean indicatorValue) Appends the end-of-list indicator forSSH_FXP_NAME
responses, provided the version is at least 6, the feature is enabled and the indicator value is notnull
- Parameters:
buffer
- TheBuffer
to append the indicatorversion
- The SFTP version being usedresolver
- ThePropertyResolver
to query whether to enable the featureindicatorValue
- The indicator value -null
means don't append the indicator- Returns:
- The actual indicator value used -
null
if none appended - See Also:
-
writeAttrs
Writes a file / folder's attributes to a buffer -
writeAttrsV3
Writes the retrieved file / directory attributes in V3 format- Type Parameters:
B
- Type ofBuffer
being updated- Parameters:
buffer
- The target buffer instanceversion
- The actual version - must beSftpConstants.SFTP_V3
attributes
- TheMap
of attributes- Returns:
- The updated buffer
-
writeAttrsV4
Writes the retrieved file / directory attributes in V4+ format- Type Parameters:
B
- Type ofBuffer
being updated- Parameters:
buffer
- The target buffer instanceversion
- The actual version - must be at leastSftpConstants.SFTP_V4
attributes
- TheMap
of attributes- Returns:
- The updated buffer
-
writeAttributes
public static <B extends Buffer> B writeAttributes(B buffer, SftpClient.Attributes attributes, int sftpVersion) -
getBool
- Parameters:
bool
- TheBoolean
value- Returns:
true
it the argument is non-null
and itsBoolean.booleanValue()
istrue
-
attributesToPermissions
public static int attributesToPermissions(boolean isReg, boolean isDir, boolean isLnk, Collection<PosixFilePermission> perms) Converts a file / folder's attributes into a mask- Parameters:
isReg
-true
if this is a normal fileisDir
-true
if this is a directoryisLnk
-true
if this is a symbolic linkperms
- The file / folder's accessPosixFilePermission
s- Returns:
- A mask encoding the file / folder's attributes
-
permissionsToFileType
public static int permissionsToFileType(int perms) Converts a POSIX permissions mask to a file type value- Parameters:
perms
- The POSIX permissions mask- Returns:
- The file type - see
SSH_FILEXFER_TYPE_xxx
values
-
fileTypeToPermission
public static int fileTypeToPermission(int type) Converts a file type into a POSIX permission mask value- Parameters:
type
- File type - seeSSH_FILEXFER_TYPE_xxx
values- Returns:
- The matching POSIX permission mask value
-
fileTypeFromChar
public static int fileTypeFromChar(char ch) Converts a POSIX/Linux file type indicator (as if obtained by "ls -l") to a file type.- Parameters:
ch
- character to convert- Returns:
- the file type
-
complete
Fills in missing information in the attributes if an SFTP v3 long name is available. If missing information cannot be extracted from the long name, it is not filled in, but no error or exception is generated.The SFTP draft RFC discourages parsing a long name to extract information and states the attributes should be used instead. But some SFTP v3 servers do not send all information in the attributes... for instance the SolarWinds SFTP server on Windows does not include the file type flags in the permissions. The only way to determine the file type is then to look at the permissions string in the long name.
- Parameters:
attrs
-SftpClient.Attributes
to complete, if necessarylongName
- to use to find missing information, may benull
or empty.- Returns:
attrs
-
isUnixPermissions
-
permissionsToAttributes
Translates a mask of permissions into its enumeration values equivalents- Parameters:
perms
- The permissions mask- Returns:
- A
Set
of the equivalentPosixFilePermission
s
-
resolveSubstatus
Returns the most adequate sub-status for the provided exception- Parameters:
t
- The thrownThrowable
- Returns:
- The matching sub-status
-
resolveStatusMessage
-
readAttrs
-
readExtensions
-
writeExtensions
-
toStringExtensions
-
toBinaryExtensions
-
readACLs
-
decodeACLs
-
buildAclEntry
-
decodeAclEntryType
- Parameters:
aclType
- TheACE4_ACCESS_xxx_ACE_TYPE
value- Returns:
- The matching
AclEntryType
ornull
if unknown value
-
decodeAclFlags
-
decodeAclMask
-
writeACLs
-
encodeACLs
-
writeAclEntry
-
encodeAclEntryType
Returns the equivalent SFTP value for the ACL type- Parameters:
type
- TheAclEntryType
- Returns:
- The equivalent
ACE_SYSTEM_xxx_TYPE
or negative ifnull
or unknown type
-
encodeAclFlags
-
encodeAclMask
-
writeTime
Encodes aFileTime
value into a buffer- Type Parameters:
B
- Type ofBuffer
being updated- Parameters:
buffer
- The target buffer instanceversion
- The encoding versionflags
- The encoding flagstime
- The value to encode- Returns:
- The updated buffer
-
readTime
Decodes aFileTime
value from a buffer- Parameters:
buffer
- The sourceBuffer
version
- The encoding versionflags
- The encoding flags- Returns:
- The decoded value
-
getLongName
Creates an "ls -l" compatible long name string- Parameters:
shortName
- The short file name - can also be "." or ".."attributes
- The file's attributes - e.g., size, owner, permissions, etc.- Returns:
- A
String
representing the "long" file name as per SFTP version 3 - section 7
-