All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project tries to adhere to Semantic Versioning.
- Merge Update SMBDirectory.Exists to call SMBFile.Exists - by jordanlytle
- Update SMBDirectory.Exists to call SMBFile.Exists. This fixes a bug where SMBDirectory.Exists returns true for both files and Directories.
- Merge Create non-shared SMBConnection for SMBStream - by wgv-jxiao
- When opening a file stream create a new non-shared
SMBConnection
forSMBStream
to avoid conflicts on the stream during read and write operations
- When opening a file stream create a new non-shared
- Update SMBLibraryLite to 1.4.3.2
- Revert changes in SMB2Client and SMB2FileStore to not use tree identifier (TID) when calling
WaitOnCommand
- Revert changes in SMB2Client and SMB2FileStore to not use tree identifier (TID) when calling
- Update SMBLibraryLite to 1.4.3.1
- Check and set SMB2Client connection status based on client socket status when reusing a connection
- Added tests for
IDriveInfo
for cases where a directory name and a file name are used.
RootDirectory
inSMBDriveInfo
- How credentials are retrieved if a share path is passed in for
SMBDriveInfoFactory.FromDriveName()
- Update SMBLibraryLite to 1.4.3
- Prevents STATUS_PENDING from being returned from SMB2Client.WaitOnCommand()
- Temporary fix for
Not Enough Credits
- SMB2Client and SMB2FileStore use tree identifier (TID) when calling
WaitOnCommand
- Merge Release unusable SMBConnection - by wgv-jxiao
- In
SMBConnection.CreateSMBConnection()
, check if client connection is still alive for the current thread, if not reestablish connection.
- In
SMBFile.Open()
disposeSMBConnection
on failureSMBDriveInfo
null check onAttributeInformation
forSMBFileSystemInformation
- Merge Ensure File Closeure in Error Scenarios - by wgv-cwoods
FileStoreUtilities.CloseFile(ISMBFileStore, ref object)
added- Now called where all
fileStore.CloseFile
were previously called and onfinally
oftry catch
- Now called where all
InvalidCredentialException
andSMBException
now have a default constructor and are nowSerializable
- Update SMBLibraryLite to 1.4.3-beta
- Prevents STATUS_PENDING from being returned from SMB2Client.WaitOnCommand().
- Close any potential
fileStore
andhandles
inSMBDirectory.Exists
andSMBFile.Exists
when an exception is caught before returning false - Added
SMBDirectory
andSMBDirectoryInfo
tests that check if operations succeed with trailing separators
PathExtensions.RemoveLeadingAndTrailingSeparators()
was callingRemoveLeadingSeparators
twice and not callingRemoveTrailingSeparators
- Update SMBLibraryLite to 1.4.3-alpha
- Temporaily Fixes "Not enough credits" exception when reading large files
- Updated SmbLibraryLite to 1.4.2
- Version number is reflective of TalAloni/SMBLibrary changeset
- All NetBIOS and SMB Client code is up to date
- Version number is reflective of TalAloni/SMBLibrary changeset
- Add
ISmbFileSystemSettings
andSmbFileSystemSettings
to allow configuringClientSessionTimeout
which defaults to45
secondsClientSessionTimeout
is used to set the max time to wait for aSTATUS_PENDING
status to clear. As per spec, it seemed like the most appropriate timeout name to use.- Replaced all old
STATUS_PENDING
(and others) retry logic to use the configuredClientSessionTimeout
- Handle
STATUS_PENDING
inSMBStream.Read()
- Return
SmbException
inSMBStream.Read()
- Apply
AccessMask.SYNCHRONIZE
andCreateOptions.FILE_SYNCHRONOUS_IO_NONALERT
to allfileStore.CreateFile
calls to ensure synchrony on operations.- Left retry logic in place for now,
STATUS_PENDING
seems to no longer occur
- Left retry logic in place for now,
- Set explicit
ShareAccess.Read
andShareAccess.Write
tofileStore.CreateFile
calls for better Samba compabitility.- Windows Share ACL was fine with how we were defining
ShareAccess
on calls. Samba shares seem to be picky about it.
- Windows Share ACL was fine with how we were defining
- Remove calls to
ToUniversalTime()
fromSet*Time
in SMBFile - Add tests in
FileTests
forIFile.Open
operations
- Fix
Set*TimeUtc
calls to useToUniversalTime()
in SMBFile - Match
DirectoryName
behavior inSMBFIleInfo
withbase.FileInfo
SMBFile.Move()
would leave the file specified insourceFileName
.- Added test cases to
FileTests
for expected behavior
- Added test cases to
- Implemented
SMBPath.IsPathRooted
for share paths
- Handle
null
input forSMBPath.GetDirectoryName()
andSMBPath.GetFileName
- Check if input
driveName
is a share path or share name and operate on input, instead of trying to determine if the input is not a share path or share name- Too difficult to try to determine if input is for host's file system or for a share
- Add logging output to
dotnet test
indockerfile
PathExtension.IsValidSharePath
throwing when input is invalid, instead of catchingUri
exception and returning `false
- Add
RemoveLeadingAndTrailingSeperators()
toPathExtensions
- Replace calls to
RemoveAnySeperators()
toRemoveLeadingAndTrailingSeperators()
- Make
RemoveAnySeperators()
private
- Fix implementaion of
SMBPath.GetDirectoryName()
where the returning string was not the fill path of the parent directory of input path - Fix call to
SMBPath.GetDirectoryName
inSMBFileInfo
- Add
ILoggerFactory
as optional parameter toSMBFileSystem
- Add loging to
SMBFile
- Add loging to
SMBDirectory
- Add loging to
SMBDirectoryInfoFactory
- Add loging to
SMBFileInfoFactory
- Add loging to
SMBDriveInfoFactory
- Add
ITestOutputHelper
to unit tests - Wrap exceptions in
SMBExcpetion
- Unescaped
Uri
strings fromPathExtensions
were causing issues on calls toCreateFile
due to lingeringUri
escaped symbols
- Logic for setting
Parent
andRoot
forSMBDirectoryInfo
that was causingSackOverflow
andnull
reference exceptions