smbprotocol

Python SMBv2 and v3 Client

MIT License

Downloads
5.2M
Stars
320
Committers
17

Bot releases are visible (Hide)

smbprotocol - v1.14.0 Latest Release

Published by jborean93 about 2 months ago

What's Changed

1.14.0 - 2024-08-26

New Contributors

Full Changelog: https://github.com/jborean93/smbprotocol/compare/v1.13.0...v1.14.0

smbprotocol - v1.13.0

Published by jborean93 7 months ago

What's Changed

New Contributors

1.13.0 - 2024-03-21

  • Added the property smb_info on SMBDirEntry which returns a named tuple SMBDirEntryInformation containing metadata already retrieved in the scandir operation.
    • This avoid having to call stat() to retrieve data like the file attributes or datetime fields that is already available
  • Ensure DateTimeField values are set to UTC timezones as FILETIME values are in UTC
  • Stop using datetime.datetime.utcfromtimestamp() as it has been deprecated
  • Added default timeout for disconnect operations for 60 seconds to ensure the process doesn't hang forever when closing a broken connection
  • smbprotocol.connection.Connection.disconnect() now waits (with a timeout) for the message processing threads to be stopped before returning.
  • Do not set the SMB SessionId and TreeId in the headers to 0xFFFFFFFF for related compound requests
  • Ensures the source file for shutil.copyfile is opened with share_access="r" for better compatibility with files already opened by something else
  • Remove endless authentication loop when the context is complete and no more input messages are needed

Full Changelog: https://github.com/jborean93/smbprotocol/compare/v1.12.0...v1.13.0

smbprotocol - v1.12.0

Published by jborean93 12 months ago

What's Changed

1.12.0 - 2023-11-09

New Contributors

Full Changelog: https://github.com/jborean93/smbprotocol/compare/v1.11.0...v1.12.0

smbprotocol - v1.11.0

Published by jborean93 about 1 year ago

What's Changed

1.11.0 - 2023-09-06

  • Fix up pre authenticated session id lookups that were failing with Linux ksmbd
  • Removes logging.NullHandler() being set in the root smbprotocol namespace
  • Adds basic support for remote to local and vice versa file operations with smbclient.shutil.copytree
  • Fixes DFS infinite recursion error when dealing with a file that does not exist on a DFS namespace

New Contributors

Full Changelog: https://github.com/jborean93/smbprotocol/compare/v1.10.1...v1.11.0

smbprotocol - v1.10.1

Published by jborean93 almost 2 years ago

1.10.1 - 2022-11-14

Full Changelog: https://github.com/jborean93/smbprotocol/compare/v1.10.0...v1.10.1

smbprotocol - v1.10.0

Published by jborean93 almost 2 years ago

What's Changed

New Contributors

Full Changelog: https://github.com/jborean93/smbprotocol/compare/v1.9.0...v1.10.0

smbprotocol -

Published by jborean93 over 2 years ago

1.9.0 - 2022-02-01

  • Fix connection cache reuse for some DFS referral requests
  • Add smbclient.path to the smbclient import allowing import smbclient; smbclient.path.func()
smbprotocol -

Published by jborean93 almost 3 years ago

1.8.3 - 2021-11-19

  • Set additional_information field in SMB2SetInfoRequest to a flags field rather than a single enum as per protocol docs
smbprotocol -

Published by jborean93 almost 3 years ago

1.8.2 - 2021-11-03

  • Add missing FileAttributes enum values
  • Set messages with FileAttributes to be non-strict allowing unknown values in the future to be parsed without an error
smbprotocol -

Published by jborean93 almost 3 years ago

1.8.1 - 2021-10-27

smbprotocol -

Published by jborean93 about 3 years ago

1.8.0 - 2021-10-21

  • Added support for 256bit keyed encryption ciphers
  • Added support for signing with AES GCM
  • Now sends the SMB2_NETNAME_NEGOTIATE_CONTEXT_ID with 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 - https://github.com/jborean93/smbprotocol/pull/143
  • Set index_number in FileInternalInformation to be an unsigned integer to match the other structures
  • Clear out expired DFS referrals to avoid memory leaks and stale DFS information - https://github.com/jborean93/smbprotocol/issues/136
smbprotocol -

Published by jborean93 about 3 years ago

1.7.0 - 2021-09-22

  • Improve connection health checks to reduce the occurances of an infinite deadlock
  • Added more exception error classes
  • Added create_action to the Open object that describes how the file was opened
  • Added follow_symlinks option to SMBDirEntry.from_path to control whether the entry is based on the path or the link target (if there is one)
smbprotocol -

Published by jborean93 about 3 years ago

1.6.2 - 2021-08-16

  • Fix up cached credential logic when setting domain_controller in the initial config singleton
smbprotocol -

Published by jborean93 about 3 years ago

1.6.1 - 2021-07-29

  • Remove print() statement that was used during testing
smbprotocol -

Published by jborean93 about 3 years ago

1.6.0 - 2021-07-28

  • Dropped support for Python 2.7 and 3.5
  • Add performance improvement on reads with large files
  • Added the require_signing kwarg to smbclient.register_session() to allow the caller to control whether signing is required on the connection or not
  • Fix OverflowError when handling FILETIME values beyond the year 9999 - caps the value to 9999-12-31 due to a Python limitation
  • Fix up credit charge calculation which causes a STATUS_INVALID_PARAMETER response for certain read/write lengths
  • Ensure responses with a failure are cleaned up from the outstanding request table to avoid memory leaks
smbprotocol - 1.5.1 - 2021-05-08

Published by jborean93 over 3 years ago

  • Unified DFS path handling when using any API that uses a transaction to open the file
    • This includes smbclient.rename and smbclient.replace
  • Fixed up smbclient.rename to work with directories
  • smbclient.scandir will continue to use the connection cache when getting stat information of a dir entry
  • smbclient.shutil.rmtree will continue to use the connection cache when removing child entries
smbprotocol -

Published by jborean93 over 3 years ago

1.5.0 - 2021-03-25

  • Added smbprotocol.exceptions.SMBConnectionClosed that is raised when trying to send or receive data on a connection that has been closed
  • Added smbprotocol.exceptions.WrongPassword that 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
smbprotocol -

Published by jborean93 over 3 years ago

1.4.0 - 2021-02-02

  • 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 ClientConfig option require_secure_negotiate to globally turn off secure negotiation if the client wishes
  • Fix explicit ntlm or kerberos authentication when the server response with the initial SPNEGO mech list token
smbprotocol -

Published by jborean93 over 3 years ago

1.3.0 - 2021-01-23

  • Changed initial credit request from 256 to 64 when creating the SMB session
    • This is done to avoid overloading the SMB server
    • If smbclient requires 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() in smbclient.open_file() to be able to write bytes greater than the max_write_size
  • Fixed issue when receiving an unknown NtStatus error code from the server
  • Added PipeBusy exception for STATUS_PIPE_NOT_AVAILABLE 0xC00000AD error responses
  • Fix credit granting calculation when receiving a compound response
    • Original logic granted len(responses) - 1 credits than what the server actually given causing errors when the client ran out of credits without it knowing
  • Added auth_protocol to Session, ClientConfig, and register_session() to control what authentication protocol is used
    • This can be negotiate (default), kerberos, or ntlm where negotiate selects kerberos or ntlm depending on what's available
smbprotocol -

Published by jborean93 about 4 years ago

1.2.0 - 2020-09-22

  • Added experimental support for DFS shares when using smbclient function
  • Added smbclient.ClientConfig() to set global default options on new connections
  • Moved the SMB Header structures to smbprotocol.header
  • Added null_terminated option for a TextField value
  • Fix broken pipe errors that occur on long running connections by sending a echo request for each connection session every 10 minutes
Package Rankings
Top 23.2% on Conda-forge.org
Top 0.69% on Pypi.org
Badges
Extracted from project README
Test workflow codecov PyPI version License