RDP profiles can go through a Remote Desktop Gateway (MS-TSGU over an
HTTPS WebSocket) with its own username and password, stored like other
credentials (rdp-gateway-password). The gateway stream is bridged to a
loopback socket so the blocking RDP client uses it like any transport.
IronRDP's gateway crate (0.0.1) is vendored with fixes: it used
ironrdp-tls, which accepts any certificate, before sending Basic
credentials — the gateway is now verified against the web PKI; its
asserts on gateway-supplied lengths are errors instead of panics; and
the server port is passed through. Checked against a self-signed
openssl s_server: the connection is refused ('invalid peer certificate')
before any request or credential is sent. Not tested against a real
gateway; Basic-auth gateways only (no NTLM).
224 lines
5.2 KiB
TOML
224 lines
5.2 KiB
TOML
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
|
#
|
|
# When uploading crates to the registry Cargo will automatically
|
|
# "normalize" Cargo.toml files for maximal compatibility
|
|
# with all versions of Cargo and also rewrite `path` dependencies
|
|
# to registry (e.g., crates.io) dependencies.
|
|
#
|
|
# If you are reading this file be aware that the original Cargo.toml
|
|
# will likely look very different (and much more reasonable).
|
|
# See Cargo.toml.orig for the original contents.
|
|
|
|
[package]
|
|
edition = "2024"
|
|
rust-version = "1.89"
|
|
name = "ironrdp-mstsgu"
|
|
version = "0.0.1"
|
|
authors = [
|
|
"Devolutions Inc. <infos@devolutions.net>",
|
|
"Teleport <goteleport.com>",
|
|
]
|
|
build = false
|
|
autolib = false
|
|
autobins = false
|
|
autoexamples = false
|
|
autotests = false
|
|
autobenches = false
|
|
description = "Terminal Services Gateway Server Protocol"
|
|
homepage = "https://github.com/Devolutions/IronRDP"
|
|
readme = "README.md"
|
|
keywords = [
|
|
"rdp",
|
|
"remote-desktop",
|
|
"network",
|
|
"client",
|
|
"protocol",
|
|
]
|
|
categories = ["network-programming"]
|
|
license = "MIT OR Apache-2.0"
|
|
repository = "https://github.com/Devolutions/IronRDP"
|
|
resolver = "2"
|
|
|
|
# Nexus patch: TLS is always rustls (ring) with web PKI verification; see src/lib.rs.
|
|
[features]
|
|
default = []
|
|
|
|
[lib]
|
|
name = "ironrdp_mstsgu"
|
|
path = "src/lib.rs"
|
|
test = false
|
|
doctest = false
|
|
|
|
[dependencies.base64]
|
|
version = "0.22"
|
|
|
|
[dependencies.bitflags]
|
|
version = "2.11"
|
|
|
|
[dependencies.futures-util]
|
|
version = "0.3"
|
|
|
|
[dependencies.http-body-util]
|
|
version = "0.1"
|
|
|
|
[dependencies.hyper]
|
|
version = "1.9"
|
|
features = [
|
|
"client",
|
|
"http1",
|
|
]
|
|
|
|
[dependencies.hyper-util]
|
|
version = "0.1"
|
|
features = ["tokio"]
|
|
|
|
[dependencies.ironrdp-core]
|
|
version = "0.2"
|
|
features = ["std"]
|
|
|
|
[dependencies.ironrdp-error]
|
|
version = "0.2"
|
|
|
|
[dependencies.tokio-rustls]
|
|
version = "0.26"
|
|
default-features = false
|
|
features = ["ring", "tls12"]
|
|
|
|
[dependencies.webpki-roots]
|
|
version = "1"
|
|
|
|
[dependencies.log]
|
|
version = "0.4"
|
|
|
|
[dependencies.tokio]
|
|
version = "1.52"
|
|
features = [
|
|
"macros",
|
|
"rt",
|
|
]
|
|
|
|
[dependencies.tokio-tungstenite]
|
|
version = "0.29"
|
|
|
|
[dependencies.tokio-util]
|
|
version = "0.7"
|
|
|
|
[dependencies.uuid]
|
|
version = "1"
|
|
features = ["v4"]
|
|
|
|
[lints.clippy]
|
|
alloc_instead_of_core = "warn"
|
|
allow_attributes = "warn"
|
|
as_conversions = "warn"
|
|
as_pointer_underscore = "warn"
|
|
as_ptr_cast_mut = "warn"
|
|
as_underscore = "warn"
|
|
cast_lossless = "warn"
|
|
cast_possible_truncation = "warn"
|
|
cast_possible_wrap = "warn"
|
|
cast_ptr_alignment = "warn"
|
|
cast_sign_loss = "warn"
|
|
cfg_not_test = "warn"
|
|
checked_conversions = "warn"
|
|
clone_on_ref_ptr = "warn"
|
|
cloned_instead_of_copied = "warn"
|
|
collection_is_never_read = "warn"
|
|
copy_iterator = "warn"
|
|
dbg_macro = "warn"
|
|
deref_by_slicing = "warn"
|
|
disallowed_script_idents = "warn"
|
|
doc_include_without_cfg = "warn"
|
|
empty_drop = "warn"
|
|
empty_enum_variants_with_brackets = "warn"
|
|
expl_impl_clone_on_copy = "warn"
|
|
filetype_is_file = "warn"
|
|
float_cmp = "warn"
|
|
float_cmp_const = "warn"
|
|
fn_to_numeric_cast_any = "warn"
|
|
get_unwrap = "warn"
|
|
implicit_clone = "warn"
|
|
infinite_loop = "warn"
|
|
inline_always = "warn"
|
|
large_futures = "warn"
|
|
large_include_file = "warn"
|
|
large_stack_frames = "warn"
|
|
large_types_passed_by_value = "warn"
|
|
lossy_float_literal = "warn"
|
|
map_with_unused_argument_over_ranges = "warn"
|
|
mem_forget = "warn"
|
|
missing_panics_doc = "warn"
|
|
missing_safety_doc = "warn"
|
|
mixed_read_write_in_expression = "warn"
|
|
multiple_inherent_impl = "warn"
|
|
multiple_unsafe_ops_per_block = "warn"
|
|
needless_raw_strings = "warn"
|
|
non_ascii_literal = "warn"
|
|
non_zero_suggestions = "warn"
|
|
or_fun_call = "warn"
|
|
panic = "warn"
|
|
partial_pub_fields = "warn"
|
|
precedence_bits = "warn"
|
|
print_stderr = "warn"
|
|
print_stdout = "warn"
|
|
ptr_cast_constness = "warn"
|
|
pub_without_shorthand = "warn"
|
|
range_plus_one = "warn"
|
|
rc_buffer = "warn"
|
|
rc_mutex = "warn"
|
|
redundant_clone = "warn"
|
|
redundant_type_annotations = "warn"
|
|
renamed_function_params = "warn"
|
|
rest_pat_in_fully_bound_structs = "warn"
|
|
return_self_not_must_use = "warn"
|
|
same_name_method = "warn"
|
|
self_named_module_files = "warn"
|
|
semicolon_outside_block = "warn"
|
|
separated_literal_suffix = "warn"
|
|
similar_names = "warn"
|
|
std_instead_of_core = "warn"
|
|
str_to_string = "warn"
|
|
string_add = "warn"
|
|
string_lit_chars_any = "warn"
|
|
string_slice = "warn"
|
|
suspicious_xor_used_as_pow = "warn"
|
|
todo = "warn"
|
|
trait_duplication_in_bounds = "warn"
|
|
transmute_ptr_to_ptr = "warn"
|
|
try_err = "warn"
|
|
type_repetition_in_bounds = "warn"
|
|
undocumented_unsafe_blocks = "warn"
|
|
unnecessary_box_returns = "warn"
|
|
unnecessary_safety_comment = "warn"
|
|
unnecessary_self_imports = "warn"
|
|
unused_result_ok = "warn"
|
|
unused_self = "warn"
|
|
unused_trait_names = "warn"
|
|
unwrap_used = "warn"
|
|
useless_let_if_seq = "warn"
|
|
wildcard_dependencies = "warn"
|
|
wildcard_imports = "warn"
|
|
|
|
[lints.rust]
|
|
absolute_paths_not_starting_with_crate = "warn"
|
|
ambiguous_negative_literals = "warn"
|
|
elided_lifetimes_in_paths = "warn"
|
|
invalid_reference_casting = "warn"
|
|
keyword_idents = "warn"
|
|
macro_use_extern_crate = "warn"
|
|
missing_unsafe_on_extern = "warn"
|
|
noop_method_call = "warn"
|
|
redundant_imports = "warn"
|
|
redundant_lifetimes = "warn"
|
|
single_use_lifetimes = "warn"
|
|
trivial_numeric_casts = "warn"
|
|
unit_bindings = "warn"
|
|
unreachable_pub = "warn"
|
|
unsafe_attr_outside_unsafe = "warn"
|
|
unsafe_op_in_unsafe_fn = "warn"
|
|
unused_crate_dependencies = "warn"
|
|
unused_lifetimes = "warn"
|
|
unused_macro_rules = "warn"
|
|
unused_qualifications = "warn"
|
|
unused_unsafe = "warn"
|