Devolutions / Devolutions/IronRDP
`ironrdp-connector`: add the provider-based CredSSP API and error variant (additive); deprecate the old
- Dominant language
- Rust
- Stars
- 3.2k
- Forks
- 275
- Avg merge
- 1d 11h
- Merged PRs (30d)
- 189
Description
Add the trait-driven CredSSP path to `ironrdp-connector` *alongside* the existing sspi-based one so consumers can migrate incrementally. No removals here — this PR keeps the whole workspace green (tracked-shim case of the compatibility policy).
### Scope
- [ ] Introduce `ConnectError` — the focused connect-flow union `{ Sequence(SequenceError), Credssp(Box) }` (see the meta's error model); it replaces the global `ConnectorError`.
- [ ] Add `connect_*_with(provider: &dyn CredsspProvider)` (or a builder that accepts a provider) next to the existing `connect_*`; the new fns return `ConnectError`. The new path offers `HYBRID`/`HYBRID_EX` only per `provider.supported_protocols()`; default to the noop provider from `ironrdp-credssp`.
- [ ] Add the backend-driving loop to `ironrdp-async`/`ironrdp-blocking` (drive `CredsspBackend` via its step/resume interface reusing the `NetworkClient`), alongside the existing `perform_credssp_step`. `AccessDenied` now surfaces as `CredsspError::kind() == AccessDenied`.
- [ ] Deprecate the old surface (tracked-shim policy → removed in #1433): the old `connect_*` and the global `ConnectorError`/`ConnectorResult` get `#[deprecated(since = "", note = "use connect_*_with + ConnectError; see Devolutions/IronRDP#1433")]` with inline docs pointing at #1433. Provide `From`/type-alias glue so existing callers still compile through the window.
### Acceptance criteria
- Both paths compile and work; nothing downstream is forced to change yet (`cargo build --workspace` green with no consumer edits).
Contributor guide
No contributing guide indexed for this repository
Research direction
Start in the ironrdp-connector crate and compare the existing connect_* and ConnectorError surfaces with the requested provider-based API. Then inspect the ironrdp-async and ironrdp-blocking CredSSP flow around perform_credssp_step and the NetworkClient. Done means both paths compile, deprecations and compatibility glue are present, and cargo build --workspace passes without consumer edits.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- authentication, networking
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100