286 Commits

Author SHA1 Message Date
Armin Novak
e6fca2c021 [winpr,stream] Fix Stream_SetPosition return checks 2026-03-02 11:37:20 +01:00
Armin Novak
92ab55c5e1 [winpr,stream] Add Stream_ResetPosition
A helper function that does not require return checks, in contrast to
Stream_SetPosition, which might fail.
2026-03-01 06:11:59 +01:00
Armin Novak
5c510af477 [c23,freerdp] replace NULL with nullptr 2026-02-26 15:06:27 +01:00
Armin Novak
e58819830a [c23] simplify boolean checks 2026-02-26 11:51:05 +01:00
Armin Novak
208bcbd153 [winpr] Add initializer functions
* Add initializer for wStream
* Add initializer for ASN1 decoder
2026-02-25 19:39:24 +01:00
Armin Novak
48267edf2f [winpr] add WINPR_C_ARRAY_INIT
since C23 allows c++ style initializing replace direct use with this
macro
2026-02-25 19:23:08 +01:00
Armin Novak
39e33d9e9d [utils,helpers] add application details getter/setter
* Allow an application to set a vendor/product/version namespace to search
  for configuration files/settings/...
* Replace all FREERDP_VENDOR_STRING and similar macros with these
  getters.
2026-01-29 22:47:45 +01:00
akallabeth
7990eec166 [freerdp] mark all WINPR_ATTR_MALLOC also nodiscard 2026-01-26 13:39:39 +01:00
Jonas Ådahl
e6aa564bd7 Add freerdp_nla_FreeContextBuffer()
This function should be used to free certain buffers retrieved using
freerdp_nla_QueryContextAttributes(). It fetches the right vfunc table
to call into, which typically ends up in sspi_FreeContextBuffer() in
sspi_winpr.c.

This is needed to allow querying the PackageInfo attribute.
2026-01-22 12:50:24 +01:00
akallabeth
d1634f1eba [c,printf] fix wlog format string to match arguments 2026-01-16 11:41:33 +01:00
Armin Novak
a098084d04 [core,nla] fix Wimplicit-int-enum-cast warnings 2026-01-14 10:39:13 +01:00
akallabeth
ef93393152 [core,nla] add value range checks
When reading a enum value from network, first check the value range and
abort with a log message if an invalid value is found
2026-01-09 09:38:03 +01:00
Armin Novak
f7c0bdca6a [clang,warnings] fix Wjump-misses-init 2026-01-08 11:32:39 +01:00
akallabeth
c9b008637b [core,nla] split nla_encode_ts_credentials 2025-12-05 08:20:28 +01:00
David Fort
65bb6c59fc rdpear: handle basic NTLM commands and fix server-side
This patch adds the handling of basic NTLM commands. Because there's some mysterious
4 zero bytes after pickle header in Kerberos packets, not present in NTLM commands, the
patch also had to rework a bit the packet parsing / forging.

The patch also addresses a server-side bug when parsing supplemental creds, if the client
was sending an empty list, we were considering this as an error.

And finally we also implement the parsing of MSV1_0_REMOTE_SUPPLEMENTAL_CREDENTIAL.
This breaks the public API, anyway this was basically unused (as not parsed before) and
the previous API was wrong as what we receive is MSV1_0_REMOTE_SUPPLEMENTAL_CREDENTIAL
not MSV1_0_SUPPLEMENTAL_CREDENTIAL, so I guess the API breakage is ok.
2025-12-04 11:31:09 +01:00
akallabeth
1baa721961 [core] fix const correctness
Make function arguments const if possible.
2025-09-26 11:18:57 +02:00
David Fort
a7b051b590 nla: fix reading of TsCspDetail
Due to a bug in the tag comparison, ReaderName, CardName, CspName and containerName
were not read on server side during a smartcard logon, leading to incomplete settings.
2025-07-02 09:47:02 +02:00
akallabeth
6f03b25f8e [core,nla] use wcslen for password length 2025-06-16 19:07:53 +02:00
David Fort
b67a1aed7e nla: send user and domain hints with smartcard logon
When logging with a smartcard logon, the TS Credentials packet can also contains
hints of the user and the domain that were used. This patch adds these informations.
2025-03-27 15:07:54 +01:00
akallabeth
74cd8d8fe0 [freerdp,warnings] fix -Wunused-parameter 2025-02-13 15:53:54 +01:00
akallabeth
da0229191e [core,nla] fix possible memory leak
when no username is used a NULL identity should be passed. Free up this
identity before setting it NULL
2025-02-07 08:55:09 +01:00
akallabeth
cc934795e4 [warnings] fix integer casting
* use asserting casts to detect overflows or sign conversions
* code cleanup for issues uncovered by casts
2025-01-01 12:58:34 +01:00
akallabeth
239440e28d [warnings] remove or comment unused macros 2024-09-20 18:49:38 +02:00
akallabeth
586f40631f [warnings] fix shorten-64-to-32 2024-09-17 16:13:48 +02:00
akallabeth
a19305569d [assert] fix ULONG_MAX use
most of the time this was used to check ULONG limits. Replace with
correct UINT32_MAX
2024-09-16 08:22:40 +02:00
akallabeth
9cfd748b63 [core,nla] nla_read_TSRemoteGuardPackageCred
* fix maybe uninitialized arguments
* fix return in case of invalid packet
2024-09-14 21:29:24 +02:00
akallabeth
d7f6cf90b4 [core,nla] add missing static for function 2024-09-14 08:24:43 +02:00
akallabeth
71080e61b0 [warnings] fix a bunch of them
* fix uninitialized variable warnings
 * modivy ndr_context_* functions to utilize WINPR_ATTR_MALLOC
 * build_krbtgt use winpr_asprintf
 * add proper Stream_Write_UINT64_BE
2024-09-14 08:24:28 +02:00
David Fort
a4bd5ba886 core, channels: client-side remote credential guard
This patch implements the client-side part of the remote credential guard feature
as described in MS-RDPEAR. The 2 main changes are: shipping the TSRemoteGuardaCreds in
NLA, and implement the rdpear channel that allows LSASS to remote all the calls to
our client. For now it's UNIX only as the windows implementation would be implemented
in a completely different way.
To test, you may establish you ccache and then connect with (RCG enabled on the server):
	xfreerdp /remoteGuard /u:<user> /d:<domain> /v<server>

That should log you in, and in the session you should not be asked for credentials when
doing mstsc /remoteGuard /v:<other server>.
2024-09-11 17:15:11 +02:00
akallabeth
679de71056 [core,nla] remove platform guards for PasswordHash
Fixes #10507: do not ask for password if PasswordHash is supplied on
windows.
2024-08-26 09:23:55 +02:00
Martin Fleisz
d8cd7c2f38 core: Fix handling of logon errors during nla_client_begin
Under certain circumstances `InitializeSecurityContext` returns an error
if a wrong password was provided. This PR checks the returned status
code and correctly sets the last error code. This allows a client
application to ask the user again for credentials.

A scenario where this happens is when a user tries to connect with a wrong
password and both machines are joined to the same domain.
2024-07-01 14:54:53 +02:00
Armin Novak
8d783d5189 [covertity] fix various warnings 2024-06-05 09:19:59 +02:00
Armin Novak
09f679da61 [coverity] 1543075 Explicit null dereferenced 2024-04-15 11:30:31 +02:00
akallabeth
2477b37128 [warnings,types] fix BOOL assingments 2024-04-12 09:45:09 +02:00
akallabeth
05e555feb7 fixed unused-variable warnings 2024-02-22 12:31:50 +01:00
akallabeth
0ba995655d [clang-tidy] cppcoreguidelines-init-variables 2024-02-15 11:49:16 +01:00
akallabeth
207def5c56 [clang-tidy] readability-isolate-declaration 2024-02-15 11:49:16 +01:00
akallabeth
ba8cf8cf21 [build] fix Wmismatched-deallocator warnings
With custom malloc function attributes the fail path in the _New
functions produces warnings due to allocator mismatches. Silence them.
2024-02-05 08:16:55 +01:00
Vic Lee
33447dc16e [nla,transport] move public key retrieval to transport IO. 2024-01-03 08:40:39 +01:00
akallabeth
737cd9b8f6 [warnings] Wshadow, uninitialized variables 2023-11-24 18:19:03 +01:00
akallabeth
c78e466be1 [warnings] fixes Wunused-variable 2023-11-24 18:19:03 +01:00
Armin Novak
6e6559c41a [settings] fix type mismatch warnings 2023-11-24 14:54:56 +01:00
akallabeth
cd4d77af86 [settings] add deprecation warnings
direct struct access to rdpSettings now produces warnings if not
explicitly deactiaved by defining FREERDP_SETTINGS_INTERNAL_USE
2023-11-24 14:54:56 +01:00
David Fort
061148f856 [nla] initial server-side remote credential guard support
Adds support for server-side remote credential guard in NLA. When enabled that allows
the remote user to connect without shipping credentials in TSCred packets. Instead
it will send his TGT encoded with a TGS from the remote server. This way the server
is able to populate that TGT in a local credential cache without knowing the user's
password.

The patch only treats the NLA part and does not contain the associated RDPEAR channel
that allows to have the complete interaction to retrieve new access tokens.
2023-11-20 16:17:00 +01:00
David Fort
ff303a9bda [core,nla] Inject received TSCredentials in the peer's settings
The RDP client sends TSCredentials so that the server can reuse these credentials. This
patch stores these values in the peer's rdpSettings in the corresponding fields.
It handles TSPasswordCreds for user/domain/password connection but also TSSmartCardCreds
when the users has connected with a smartcard.
2023-10-04 09:22:49 +02:00
David Fort
0638c382f9 [core,nla] correctly print the value of earlyUserAuth
The log was printing the previous value instead of the value that is set.
2023-09-27 11:57:49 +02:00
Armin Novak
555fa2c98a [core,nla] print name of error code in log 2023-07-13 09:25:45 +02:00
akallabeth
851f9cce2d [core,nla] fix unused variable warning 2023-06-29 18:34:51 +02:00
Hugues LEFEBVRE
b67afecf0f CredSSP with early user auth (nla_ext) support 2023-06-26 11:53:46 +02:00
Armin Novak
f8e8764ea8 [core,settings] unify identity from settings 2023-04-11 11:37:09 +02:00