- Set
additional_informationfield inSMB2SetInfoRequestto a flags field rather than a single enum as per protocol docs
- Add missing
FileAttributesenum values - Set messages with
FileAttributesto be non-strict allowing unknown values in the future to be parsed without an error
- Raises
ObjectPathNotFoundif a DFS referral is required but not referrals are available (jborean93#149)
- Added support for 256bit keyed encryption ciphers
- Added support for signing with AES GCM
- Now sends the
SMB2_NETNAME_NEGOTIATE_CONTEXT_IDwith the negotiate request - Adds the Python requirement of pykrb5 for Kerberos support on non-Windows
- Fix unpacking security descriptor ACEs with extra data on the end - jborean93#143
- Set
index_numberinFileInternalInformationto be an unsigned integer to match the other structures - Clear out expired DFS referrals to avoid memory leaks and stale DFS information - jborean93#136
- Improve connection health checks to reduce the occurances of an infinite deadlock
- Added more exception error classes
- Added
create_actionto theOpenobject that describes how the file was opened - Added
follow_symlinksoption toSMBDirEntry.from_pathto control whether the entry is based on the path or the link target (if there is one)
- Fix up cached credential logic when setting
domain_controllerin the initial config singleton
- Remove
print()statement that was used during testing
- Dropped support for Python 2.7 and 3.5
- Add performance improvement on reads with large files
- Added the
require_signingkwarg tosmbclient.register_session()to allow the caller to control whether signing is required on the connection or not - Fix
OverflowErrorwhen handling FILETIME values beyond the year 9999 - caps the value to9999-12-31due to a Python limitation - Fix up credit charge calculation which causes a
STATUS_INVALID_PARAMETERresponse for certain read/write lengths - Ensure responses with a failure are cleaned up from the outstanding request table to avoid memory leaks
- Unified DFS path handling when using any API that uses a transaction to open the file
- This includes
smbclient.renameandsmbclient.replace
- This includes
- Fixed up
smbclient.renameto work with directories smbclient.scandirwill continue to use the connection cache when getting stat information of a dir entrysmbclient.shutil.rmtreewill continue to use the connection cache when removing child entries
- Added
smbprotocol.exceptions.SMBConnectionClosedthat is raised when trying to send or receive data on a connection that has been closed - Added
smbprotocol.exceptions.WrongPasswordthat is raised when some servers indicate the password is not correct or the account is locked out - Do not attempt to reuse any cached connections that have been closed in
smbclient - Added a lock when writing to the socket, only 1 thread can write a message at a single point in time
- Revamped the SMB receiver code to simplify the logic and make it more durable
- Removed the TCP recv thread for each connection, now each connection uses just 1 thread instead of 2
- Be more defensive when reading data from a socket to ensure we get all the data we require
- Handled server side FIN packets that close the connection unexpectedly, any requests waiting for a response will raise
SMBConnectionClosed
- Fixed up secure negotiation logic when connecting to older SMB dialects
- Will attempt to perform secure negotiation even on older dialects that may not implement it properly
- Added
ClientConfigoptionrequire_secure_negotiateto globally turn off secure negotiation if the client wishes - Fix explicit
ntlmorkerberosauthentication when the server response with the initial SPNEGO mech list token
- Changed initial credit request from
256to64when creating the SMB session- This is done to avoid overloading the SMB server
- If
smbclientrequires more credits to perform an operation it will request it automatically
- Improve credit handling when reading and writing large amounts of data to reduce the number of requests being made
- Fixed up
write()insmbclient.open_file()to be able to write bytes greater than themax_write_size - Fixed issue when receiving an unknown NtStatus error code from the server
- Added
PipeBusyexception forSTATUS_PIPE_NOT_AVAILABLE 0xC00000ADerror responses - Fix credit granting calculation when receiving a compound response
- Original logic granted
len(responses) - 1credits than what the server actually given causing errors when the client ran out of credits without it knowing
- Original logic granted
- Added
auth_protocoltoSession,ClientConfig, andregister_session()to control what authentication protocol is used- This can be
negotiate(default),kerberos, orntlmwherenegotiateselectskerberosorntlmdepending on what's available
- This can be
- Added experimental support for DFS shares when using
smbclientfunction - Added
smbclient.ClientConfig()to set global default options on new connections - Moved the SMB Header structures to
smbprotocol.header - Added
null_terminatedoption for aTextFieldvalue - Fix broken pipe errors that occur on long running connections by sending a echo request for each connection session every 10 minutes
- Speed up logging statements for large messages like a read and write message
- Changed authentication dep to pyspnego that handles all the authentication work
- Fixed up authentication against hosts that don't present the initial GSSAPI token like Azure File Storage
- Added specific exception types for every
NtStatusvalue to make it easier to catch only specific exceptions - Added the following exceptions to the list of known exception codes
STATUS_NETWORK_NAME_DELETEDSTATUS_NOT_FOUNDSTATUS_PATH_NOT_COVEREDSTATUS_DFS_UNAVAILABLESTATUS_SERVER_UNAVAILABLE
- Fix session key generation when creating a new session from an existing connection object
- Fix issue when reading a large file that exceeds 65KB and raises
STATUS_END_OF_FILE. - Fix issue where
listdir,scandir,walkwould only enumerate a subset of entries in a directories with lots of sub files/folders
- Dropped support for Python 2.6 and Python 3.4
- Added the
smbclientpackage that provides a higher level API for interactive with SMB servers - Deprecated
smbprotocol.query_infoin favour ofsmbprotocol.file_info,query_infowill be removed in the next major release - Add automatic symlink resolver when a symlink is in the path being opened
- Fix issue when trying to connect to host with IPv6 address
- Fix response parsing for SMB2 Create Response Lease V1 and V2
- Added the ability to set the Oplock level when opening a file
- Revamped the socket listener and message processor to run in a separate thread for faster message resolving
- Added the
FileSystemWatcherinchange_notify.pyto provider a way to watch for changes on the SMB filesystem - Added the
.cancel()method onto a Request to cancel an SMB request on the server
- Fix issue where timeout was not being applied to the new connection
- Fix various deprecated regex escape patterns
- Added support for Windows Kerberos and implicit credential support through the optional extra library pywin32
- Simplified the fallback NTLM context object
- Fix initial negotiate message not setting connection timeout value
- Fix endless loop when running a compound message that failed
Initial release of smbprotocol, it contains the following features
- Support for Dialect 2.0.2 to 3.1.1
- Supports message encryption and signing
- Works with both NTLM and Kerberos auth (latter requiring a non-windows library)
- Open files, directories and pipes
- Open command with create_contexts to set extra attributes on an open
- Read/Write the files
- Send IOCTL commands
- Sending of multiple messages in one packet (compounding)