Package org.apache.sshd.sftp.common
Class SftpHelper
- java.lang.Object
-
- org.apache.sshd.sftp.common.SftpHelper
-
public final class SftpHelper extends java.lang.Object
-
-
Field Summary
Fields Modifier and Type Field Description static java.util.Map<java.lang.Integer,java.lang.String>
DEFAULT_SUBSTATUS_MESSAGE
private static java.util.regex.Pattern
UNIX_PERMISSIONS_START
-
Constructor Summary
Constructors Modifier Constructor Description private
SftpHelper()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static int
attributesToPermissions(boolean isReg, boolean isDir, boolean isLnk, java.util.Collection<java.nio.file.attribute.PosixFilePermission> perms)
Converts a file / folder's attributes into a maskstatic java.nio.file.attribute.AclEntry
buildAclEntry(int aclType, int aclFlag, int aclMask, java.lang.String aclWho)
static SftpClient.Attributes
complete(SftpClient.Attributes attrs, java.lang.String longName)
Fills in missing information in the attributes if an SFTP v3 long name is available.static java.nio.file.attribute.AclEntryType
decodeAclEntryType(int aclType)
static java.util.Set<java.nio.file.attribute.AclEntryFlag>
decodeAclFlags(int aclFlag)
static java.util.Set<java.nio.file.attribute.AclEntryPermission>
decodeAclMask(int aclMask)
static java.util.List<java.nio.file.attribute.AclEntry>
decodeACLs(Buffer buffer, int version)
static int
encodeAclEntryType(java.nio.file.attribute.AclEntryType type)
Returns the equivalent SFTP value for the ACL typestatic long
encodeAclFlags(java.util.Collection<java.nio.file.attribute.AclEntryFlag> flags)
static long
encodeAclMask(java.util.Collection<java.nio.file.attribute.AclEntryPermission> mask)
static <B extends Buffer>
BencodeACLs(B buffer, int version, java.util.Collection<java.nio.file.attribute.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
getBool(java.lang.Boolean bool)
static java.lang.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 java.lang.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 java.lang.String
getLongName(java.lang.String shortName, java.util.Map<java.lang.String,?> attributes)
Creates an "ls -l" compatible long name stringstatic java.lang.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 java.lang.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(java.lang.String longName)
static java.util.Set<java.nio.file.attribute.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 java.util.List<java.nio.file.attribute.AclEntry>
readACLs(Buffer buffer, int version)
static java.util.NavigableMap<java.lang.String,java.lang.Object>
readAttrs(Buffer buffer, int version)
static java.util.NavigableMap<java.lang.String,byte[]>
readExtensions(Buffer buffer)
static java.nio.file.attribute.FileTime
readTime(Buffer buffer, int version, int flags)
Decodes aFileTime
value from a bufferstatic java.lang.String
resolveStatusMessage(int subStatus)
static int
resolveSubstatus(java.lang.Throwable t)
Returns the most adequate sub-status for the provided exceptionstatic java.util.NavigableMap<java.lang.String,byte[]>
toBinaryExtensions(java.util.Map<java.lang.String,java.lang.String> extensions)
static java.util.NavigableMap<java.lang.String,java.lang.String>
toStringExtensions(java.util.Map<java.lang.String,?> extensions)
static <B extends Buffer>
BwriteAclEntry(B buffer, java.nio.file.attribute.AclEntry acl)
static <B extends Buffer>
BwriteACLs(B buffer, int version, java.util.Collection<java.nio.file.attribute.AclEntry> acl)
static <B extends Buffer>
BwriteAttributes(B buffer, SftpClient.Attributes attributes, int sftpVersion)
static <B extends Buffer>
BwriteAttrs(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes a file / folder's attributes to a bufferstatic <B extends Buffer>
BwriteAttrsV3(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes the retrieved file / directory attributes in V3 formatstatic <B extends Buffer>
BwriteAttrsV4(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes the retrieved file / directory attributes in V4+ formatstatic <B extends Buffer>
BwriteExtensions(B buffer, java.util.Map<?,?> extensions)
static <B extends Buffer>
BwriteTime(B buffer, int version, int flags, java.nio.file.attribute.FileTime time)
Encodes aFileTime
value into a buffer
-
-
-
Method Detail
-
getEndOfFileIndicatorValue
public static java.lang.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 data- Parameters:
buffer
- TheBuffer
to retrieve the data fromversion
- The SFTP version being used- Returns:
- The indicator value -
null
if none retrieved - See Also:
- SFTP v6 - section 9.3
-
getEndOfListIndicatorValue
public static java.lang.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 data- Parameters:
buffer
- TheBuffer
to retrieve the data fromversion
- The SFTP version being used- Returns:
- The indicator value -
null
if none retrieved - See Also:
- SFTP v6 - section
9.4,
indicateEndOfNamesList(Buffer, int, PropertyResolver, boolean)
-
indicateEndOfNamesList
public static java.lang.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 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(Buffer, int, PropertyResolver, boolean)
-
indicateEndOfNamesList
public static java.lang.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:
- SFTP v6 -
section 9.4,
SftpModuleProperties.APPEND_END_OF_LIST_INDICATOR
-
writeAttrs
public static <B extends Buffer> B writeAttrs(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
Writes a file / folder's attributes to a buffer- Type Parameters:
B
- Type ofBuffer
being updated- Parameters:
buffer
- The target buffer instanceversion
- The output encoding versionattributes
- TheMap
of attributes- Returns:
- The updated buffer
- See Also:
writeAttrsV3(Buffer, int, Map)
,writeAttrsV4(Buffer, int, Map)
-
writeAttrsV3
public static <B extends Buffer> B writeAttrsV3(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
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
public static <B extends Buffer> B writeAttrsV4(B buffer, int version, java.util.Map<java.lang.String,?> attributes)
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
public static boolean getBool(java.lang.Boolean bool)
- 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, java.util.Collection<java.nio.file.attribute.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
public static SftpClient.Attributes complete(SftpClient.Attributes attrs, java.lang.String longName)
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
private static boolean isUnixPermissions(java.lang.String longName)
-
permissionsToAttributes
public static java.util.Set<java.nio.file.attribute.PosixFilePermission> permissionsToAttributes(int perms)
Translates a mask of permissions into its enumeration values equivalents- Parameters:
perms
- The permissions mask- Returns:
- A
Set
of the equivalentPosixFilePermission
s
-
resolveSubstatus
public static int resolveSubstatus(java.lang.Throwable t)
Returns the most adequate sub-status for the provided exception- Parameters:
t
- The thrownThrowable
- Returns:
- The matching sub-status
-
resolveStatusMessage
public static java.lang.String resolveStatusMessage(int subStatus)
-
readAttrs
public static java.util.NavigableMap<java.lang.String,java.lang.Object> readAttrs(Buffer buffer, int version)
-
readExtensions
public static java.util.NavigableMap<java.lang.String,byte[]> readExtensions(Buffer buffer)
-
writeExtensions
public static <B extends Buffer> B writeExtensions(B buffer, java.util.Map<?,?> extensions)
-
toStringExtensions
public static java.util.NavigableMap<java.lang.String,java.lang.String> toStringExtensions(java.util.Map<java.lang.String,?> extensions)
-
toBinaryExtensions
public static java.util.NavigableMap<java.lang.String,byte[]> toBinaryExtensions(java.util.Map<java.lang.String,java.lang.String> extensions)
-
readACLs
public static java.util.List<java.nio.file.attribute.AclEntry> readACLs(Buffer buffer, int version)
-
decodeACLs
public static java.util.List<java.nio.file.attribute.AclEntry> decodeACLs(Buffer buffer, int version)
-
buildAclEntry
public static java.nio.file.attribute.AclEntry buildAclEntry(int aclType, int aclFlag, int aclMask, java.lang.String aclWho)
-
decodeAclEntryType
public static java.nio.file.attribute.AclEntryType decodeAclEntryType(int aclType)
- Parameters:
aclType
- TheACE4_ACCESS_xxx_ACE_TYPE
value- Returns:
- The matching
AclEntryType
ornull
if unknown value
-
decodeAclFlags
public static java.util.Set<java.nio.file.attribute.AclEntryFlag> decodeAclFlags(int aclFlag)
-
decodeAclMask
public static java.util.Set<java.nio.file.attribute.AclEntryPermission> decodeAclMask(int aclMask)
-
writeACLs
public static <B extends Buffer> B writeACLs(B buffer, int version, java.util.Collection<java.nio.file.attribute.AclEntry> acl)
-
encodeACLs
public static <B extends Buffer> B encodeACLs(B buffer, int version, java.util.Collection<java.nio.file.attribute.AclEntry> acl)
-
writeAclEntry
public static <B extends Buffer> B writeAclEntry(B buffer, java.nio.file.attribute.AclEntry acl)
-
encodeAclEntryType
public static int encodeAclEntryType(java.nio.file.attribute.AclEntryType type)
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
public static long encodeAclFlags(java.util.Collection<java.nio.file.attribute.AclEntryFlag> flags)
-
encodeAclMask
public static long encodeAclMask(java.util.Collection<java.nio.file.attribute.AclEntryPermission> mask)
-
writeTime
public static <B extends Buffer> B writeTime(B buffer, int version, int flags, java.nio.file.attribute.FileTime time)
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
public static java.nio.file.attribute.FileTime readTime(Buffer buffer, int version, int flags)
Decodes aFileTime
value from a buffer- Parameters:
buffer
- The sourceBuffer
version
- The encoding versionflags
- The encoding flags- Returns:
- The decoded value
-
getLongName
public static java.lang.String getLongName(java.lang.String shortName, java.util.Map<java.lang.String,?> attributes)
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
-
-