All notable changes are documented or linked to in this file. The format of the changelog is based on
'Keep a Changelog'. In short, this changelog is sorted the most recent
release at the top, and the first section documents features that are in the development
branch but have not yet landed in the main
branch from which releases are generated.
rsasl
adheres to Semantic Versioning; with
the notable exception of custom mechanism support and excluding
bug-fixes there will not be any backwards-incompatible changes within a major version release.
The MSRV (minimum supported Rust version) of the project is documented in the Cargo.toml
and in the
README. Changes to the MSRV are considered a non-breaking change and thus can happen in a MINOR
release. They will however never happen in a patch release.
Upcoming Changes — Not Yet ;)
v2.2.0 — 2024-10-15
- #58 — Constructing OAuthBearerError is not (directly) possible
- #57 — Export types for unstable_custom_mechanism feature
v2.1.0 — 2024-08-21
SCRAM-SHA-512
andSCRAM-SHA-512-PLUS
mechanisms were added by WenyXu
-
#26 — SCRAM-SHA512 and SCRAM-SHA512-PLUS support
The two mechanisms have been added by WenyXu, as mentioned above
v2.0.2 — 2024-08-10
- Mathieu-Lala added a lot of build engineering, improving the CI and adding dependabot alerts.
- Mathieu-Lala also moved the I/O-dependant code from
acid_io
tocore2
. This change is not user-visible as it only applies tono_std
systems which are not supported yet.
- #41 — Library not compiling on rust v1.82.0 Changes in the typechecker made rsasl not compile on Rust versions past v1.81. Thanks to Mathieu-Lala this was fixed for rsasl v2.0.2
v2.0.1 — 2023-09-12
-
#29 —
GSSAPI
fails to build on macOSThis issue seems to be caused by the same problem as estokes/libgssapi#2. Building libgssapi without default features solves this build issue.
v2.0.0 — 2023-02-04
GSSAPI
mechanism implementation- Security layer functionality in
Session
- Mechanisms preference can be selected by implementations of
Callback
usingCallback::prefer
.
- Recursive callbacks calls are now prevented by making property methods on
MechanismData
take&mut self
. See ADR-0003 ([crate::docs::adr] on docs.rs, GitHub link otherwise) for further details about why this change was done.
-
#9 —
GSSAPI
Mechanism support -
#18 — Decide if recursive callback calls are acceptable
Closed by the above change explicitly making them impossible
v2.0.0-rc.4 — 2022-11-22
SASLClient::start_suggested
can now be called with anyimpl IntoIterator<Item=&&Mechname>
. As&[&Mechname]
does implement this trait no changes are required for users of this method.- A new method
SASLClient::start_suggested_iter
is added that takesimpl IntoIterator<Item=&Mechname>
, i.e. an iterator with a layer of indirection removed compared to the non-_iter
variant. This variant is more efficient if direct references to&Mechname
can be constructed. It also may be easier to use with a zero-copy parsing approach than the non-_iter
variant.
- MSRV was raised to rustc 1.61.0 due to that release stabilizing generic parameters in
const fn
.
v2.0.0-rc.3 — 2022-10-12
- Thanks to Mathieu Lala work rsasl is much closer to a stable release! PR#19 fixes most clippy lints and marks
externally visible structs and enums
#[non_exhaustive]
so we don't program ourselves into a corner.
-
#14 — Ensure types that are visible by external crates can be extended without breaking semver.
This fix makes using rsasl safer for downstream crates as version updates have a smaller change of breakage and uphold more semver guarantees.
v2.0.0-rc.2 — 2022-09-28
- All dependencies on
std::io::Write
have been moved toacid_io::Write
from theacid_io
crate. This will make moving towards a#[no_std]
-enabled version of rsasl easier, as the move ofstd::io
intocore
is still somewhat far off. All types implementingstd::io::Write
also automatically implementacid_io::Write
, so no changes to downstream code should be necessary. - An
OAUTHBEARER
mechanism implementation
-
Finished the changes started in
-preview12
and-rc.1
; instead ofSession::step
andSession::step64
returning a tuple they now only return aState
which contains a two-valued enum for "was a message produced". This means the previous (potentially wrong!) "message size" is now not returned anymore. Clients that must know the exact length of output written (e.g. because the surrounding protocol includes length values, or they need to special-case zero-length messages) should use a length-tracking writer.To move to the new version, instead of e.g. the following:
let (state, written) = session.step(input, &mut output)?;
code must now use
let state = session.step(input, &mut output)?; let written = state.has_sent_message();
for the same effect.
- The client-side XOAUTH2 implementation now correctly indicates a final (empty) message to be sent when an error was returned by the server.
- #10 — OAUTHBEARER Mechanism support
v2.0.0-rc.1 — 2022-08-30
v2.0.0-rc.1
is a re-release of the v2.0.0-preview12
version due to me messing up the pre-release version
numbering of the preview
releases. preview12
is ordered alphanumerically as mixed ASCII and thus considered smaller
than preview9
. To enforce numeric sorting the number must be separated using a dot, so e.g. preview.12
. However
preview.12
is considered smaller than all previewXX
releases because it is shorter. Thus rsasl now uses rc
as 'r' is sorted after 'p' and thus 'rc.X' > 'previewYZ'. Sorry for the confusion.
v2.0.0-preview12 — 2022-08-30
- New integration tests that should make it easier to test rsasl against other implementations
Session::step64
did not return the actual bytes written but the bytes encoded into base64. As the exact length isn't know step64 now returns abool
instead of anOption<usize>
to indicate if a message should be sent.
v2.0.0-preview11 — 2022-08-25
- Fixed a bug where the XOAUTH2 mechanisms were registered as
PLAIN
instead, making allPLAIN
authentication fail.
v2.0.0-preview10 — 2022-08-24
ANONYMOUS
client now correctly allows no token to be providedANONYMOUS
server will now correctly allow no token to be provided by a clientEXTERNAL
client now correctly requests an optionalAuthzId
instead of a requiredAuthId
EXTERNAL
server now correctly providesAuthzid
instead ofAuthid
PLAIN
client correctly rejects empty authid or password. Empty authzid is still treated as no authzid provided.PLAIN
server now allows non-UTF8 passwords, and does not apply saslprep to the authzid anymore. If authid or password are empty after saslprep an error is returned.SCRAM
server now calls validate correctly
v2.0.0-preview9 — 2022-08-08
Mechname::new
is now more appropiately namedMechname::parse
SASLConfig::with_credentials
only enabledLOGIN
if no authzid is provided- Session is now
Send
+Sync
- XOAUTH2 now compiles with the msrv 1.56.0
- clippy passes the code with default lints now
v2.0.0-preview8 — 2022-08-05
rsasl is now licensed under Apache-2.0 and MIT dual license.
- Properties can now contain data with other lifetimes than
'static
- XOAUTH2 mechanism, both server and client-side.
- Testing utilities for the server side of an authentication exchange
Request::satisfy_with
is now limited toSizedProperty
.- The
-PLUS
variants of SCRAM aren't automatically registered by the static registry anymore. Instead they should be manually registered if they are to be used.
- Fixed 'actionable' callbacks not correctly indicating they were handled
v2.0.0-preview7 — 2022-07-30
First 'alpha' release of rsasl 2.0.0, with most of the API stabilized enough that testing if rsasl is usable by third-party crates in other situations than BFFH is possible.
Examples of using rsasl in other crates:
v2.0.0-preview1 — 2021-12-03
First preview release for the pure-Rust version. This is a full rewrite of rsasl, changing just about every part of the code. Most of the code was transpiled using c2rust and then ported piece by piece to more sensible and modern Rust.
Big thanks to all c2rust contributors making this release possible.
v1.4.1 — 2021-10-20
- Fixes potential bad pointer conversion on non-x86 targets
v1.4.0 — 2021-10-09
- Usability improvements with better type aliases
- Improved error messages
SaslError
markedEq
andOrd
- Fixes a null-pointer panic when passing invalid SaslErrors
- Initial stabilized release