Commit Graph

3584 Commits

Author SHA1 Message Date
akallabeth 1163cc4d5c [core] add internal settings.h include 2023-11-24 14:54:56 +01:00
akallabeth 82eefe0bd1 [settings] auto generate key types from struct
* use enum types for settings getter/setter to have compiler check if
  keys are valid
* generate enum types from struct at compile time
* CMake option WITH_OPAQUE_SETTINGS to hide rdpStruct implementation
  from external projects
2023-11-24 14:54:56 +01:00
akallabeth 3ca26384ee [core] only move state on demand active
rdp_client_connect_demand_active returns STATE_RUN_ACTIVE if we received
it, some other return otherwise
2023-11-21 13:54:29 +01:00
akallabeth 0ee61dcb62 [core,connection] improve parsing of demand active
Split up parsing, so we don´t have to reread the data.
2023-11-21 13:54:29 +01:00
akallabeth e3a84921de [core,gateway] fix TSG_PACKET_TYPE_QUARENC_RESPONSE
parsing of TSG_PACKET_TYPE_QUARENC_RESPONSE was incomplete, fix that
2023-11-20 18:00:42 +01:00
Armin Novak e451b4cad1 [core,gateway] rpc use generated session id 2023-11-20 18:00:42 +01:00
Armin Novak 7d02a97a88 [core,gateway] change type of GUID arguments
use const GUID* for GUID strings and format the string internally
2023-11-20 18:00:42 +01:00
Armin Novak e62e1dbbaf [core,gateway] add RDG-Correlation-Id
implement [MS-TSGU] 2.2.3.2.2 RDG-Correlation-Id
2023-11-20 18:00:42 +01:00
Armin Novak 148e61606a [core,gateway] silence reading of rts signature
sometimes we just try to read the signature and do not want errors
logged.
2023-11-20 18:00:42 +01:00
Armin Novak 99f3a9c0e6 [core,gateway] add rts_recv_ping_pdu 2023-11-20 18:00:42 +01:00
Armin Novak f367465485 [core,gateway] improve rpc logging 2023-11-20 18:00:42 +01:00
Armin Novak 9fcde2db74 [core,gateway] removed duplicate vc_state_str 2023-11-20 18:00:42 +01:00
Armin Novak 8990ffefca [core,gateway] rpc dynamic logger 2023-11-20 18:00:42 +01:00
Armin Novak 36647567ac [core,gateway] fix parsing of RTS PDU
* [MS-RPCH] 2.2.4.51 FlowControlAckWithDestination RTS PDU
2023-11-20 18:00:42 +01:00
Armin Novak 814ab2a212 [core,gateway] use dynamic logger in tsg 2023-11-20 18:00:42 +01:00
Armin Novak 6e7a35f8bc [core,gateway] log rts_recv_out_of_sequence_pdu 2023-11-20 18:00:42 +01:00
Armin Novak a0db106306 [core,gateway] add vc state logging 2023-11-20 18:00:42 +01:00
Armin Novak fac9fa5f90 [core,gateway] add rpc stringify functions 2023-11-20 18:00:42 +01:00
Armin Novak 60ceff95c5 [fflush] remove of unnecessary fflush 2023-11-20 18:00:42 +01:00
Armin Novak cf76e70e85 [core,gateway] fix rts_read_auth_verifier_with_stub
check offset against fragment size, not remaining size
2023-11-20 18:00:42 +01:00
Armin Novak 65d3c6fe9b [core,gateway] update tsg parsing 2023-11-20 18:00:42 +01:00
Armin Novak 135c4cc78c [core,gateway] try to parse remaining RPC PDU
if not all bytes have been parsed, try parsing again
2023-11-20 18:00:42 +01:00
Armin Novak 230563b337 [core,gateway] log incomplete parsed RPC PDU 2023-11-20 18:00:42 +01:00
Armin Novak d36adb2654 [core,gateway] fix RTS_PDU_PING handling
ping messages might occur before connection is fully established, so
reply to incoming ping. Fixes #9505
2023-11-20 18:00:42 +01:00
Armin Novak 1807652975 [core,helpers] add new stringify functions
* freerdp_get_logon_error_info_type_ex
* freerdp_get_logon_error_info_data_ex
2023-11-20 18:00:42 +01:00
Armin Novak 957ec80443 [core,gatewayay] improve rpc error logging 2023-11-20 18:00:42 +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
Armin Novak 98a4eb77ef [core] VirtualChannelChunkSize adjustments
* add CHANNEL_CHUNK_MAX_LENGTH
* remove duplicate definitions
* default to CHANNEL_CHUNK_MAX_LENGTH
2023-11-03 12:43:25 +01:00
Armin Novak e56fcb45cb [core,aad] move cJSON related parsing to core
hide cJSON parser from freerdp-client library, link privately
2023-11-02 11:30:55 +01:00
David Fort 60ea534ccd [core] fix marshalling of DynamicTimeZone
The field is an UTF16 field, the length was announced as the length of the
UTF8 string.
2023-10-24 12:42:10 +02:00
akallabeth 0b018057b5 [core,input] use time() instead of timespec_get
android only supports the latter with API >= 29
2023-10-19 16:37:28 +02:00
Mariusz Bialonczyk 1d1171489f [tools] update-settings-tests, update-rdpSettings, clang-format 2023-10-19 16:37:28 +02:00
Mariusz Bialonczyk 550ba7fe34 [libfreerdp] final freerdp_prevent_session_lock() implementation
Injects fake mouse movement when idle
2023-10-19 16:37:28 +02:00
Mariusz Bialonczyk 90f82bf418 [input] call input_update_last_event() when desired 2023-10-19 16:37:28 +02:00
Mariusz Bialonczyk 21f7bd37cf [input] input_update_last_event() and variables 2023-10-19 16:37:28 +02:00
akallabeth 9ebbefa5fe [settings] remove unused extensions
The extensions from the unstable API zone were unused, so remove them
2023-10-19 14:22:19 +02:00
akallabeth 4d99b4ff9b [settings] add ClipboardUseSelection 2023-10-19 14:22:19 +02:00
David VERON 63e1863c9a fixes rdp_read_info_null_string api
Removed buggy "isNullTerminated" parameter, as RDP specs tells
that cbLen includes the nullTerminator if there is one.
2023-10-16 15:18:52 +02:00
Armin Novak c91a250623 [warnings] add WINPR_FORMAT_ARG
with WINPR_FORMAT_ARG format strings are marked for MSVC to avoid
warnings
2023-10-16 15:10:13 +02:00
Armin Novak 53b65ff7bd [documentation] fix Wdocumentation warnings 2023-10-16 15:10:13 +02:00
Armin Novak 07543a6042 [warnings] fix various warnings
* missing const in casts
* missing static for functions
* missing WINPR_ATTR_FORMAT_ARG for printf like functions
2023-10-16 15:10:13 +02:00
Armin Novak 138d3df028 [core,gcc] parse CS_UNUSED1 message
parse message to avoid log entries server side for this kind of PDU
2023-10-13 16:05:27 +02:00
akallabeth 4df4404faa [core,input] add qoe event handling 2023-10-13 16:05:27 +02:00
akallabeth 20e15ac326 [core] added relative mouse event support 2023-10-13 16:05:27 +02:00
akallabeth 1f7bc15bb1 [settings] add HasQoeEvent 2023-10-13 16:05:27 +02:00
akallabeth 910e3b9fb4 [settings] added new setting for HasRelativeMouseEvent 2023-10-13 16:05:27 +02:00
akallabeth 002b27f2e5 [core] add RDP_VERSION_10_12 2023-10-13 16:05:27 +02:00
akallabeth 80122c1784 [core,aad] cast constants to DWORD 2023-10-10 22:59:53 +02:00
David Fort a8c5926154 [server,drdynvc] use a hashtable for dynamic channels instead of an arrayList
This speeds up all operations around dynamic channels.
2023-10-09 10:47:34 +02: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 3c18a9980f [client,win32] implement connection to child session
Under windows you can connect to a child session by requesting a named pipe to
the local server, and then do some RDP on this named pipe.
The protocol is like for /vmconnect with CredSSP, then Nego and then the "normal"
workflow for a connection. For CredSSP we force the usage of NTLM for the Negociate
SSPI, and the credentials are empty.
2023-09-27 11:57: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
akallabeth 86acc8d31a [warnings] fixed reserved-identifer warnings 2023-09-25 08:39:01 +02:00
akallabeth 0595f2f7fe [core,gateway] fix tautological check in arm 2023-09-21 10:57:43 +02:00
akallabeth 635626be12 [client,common] avd related keys to rdp file parser 2023-09-21 10:30:09 +02:00
akallabeth 7746c8f4ae [core,orders] fix #9402 polyline order processing 2023-09-21 10:00:19 +02:00
akallabeth 1d25242eac [core,transport] fix evaluation of nla errors
if there is no rdpNla fall back to default error password expired.
2023-09-21 10:00:19 +02:00
akallabeth e5ad90627b [gateway,arm] fix abort condition for retries 2023-09-20 09:29:45 +02:00
akallabeth c1db0029d9 [core,update] fix possible leak on gdi reset 2023-09-20 09:29:45 +02:00
Armin Novak 6399635abf [core] fix leaks reported in #9400 2023-09-19 09:35:52 +02:00
David Fort 190ecf640f [drdynvc] improvements of server-side DRDYNVC
This patch prepares the reading of the dynamic channel version so that next we
can take in account this to take advantage of advanced features in last versions
(compressions or priorities).
The patch also implement notifying the VCM event when the dynamic channel becomes ready
so that users of FreeRDP can just do calls to WTSVirtualChannelManagerGetDrdynvcState
when the channel event is set (no blind calls).
2023-09-18 13:05:44 +02:00
Armin Novak 4152ce5dee [gateway,arm] fix input string length check 2023-09-15 11:24:21 +02:00
akallabeth be7f2979ee [gateway,http] const correct HttpResponse 2023-09-14 17:38:08 +02:00
akallabeth bd595d363d [arm] add retry callback for transport
If the connection is blocked due to some VM requiring spinup time before
being ready to use call the newly created callback RetryDialog.
2023-09-14 12:02:26 +02:00
akallabeth ab111b07bc [gateway,http] add a '\0' terminator to body read
ensure that every string read by the http functions is '\0' terminated.
2023-09-14 12:02:26 +02:00
akallabeth 13648c84af [gateway,arm] restructure AVD handling
* Split handling into smaller functions
* Move bad request retry out of request function to avoid memory growth
2023-09-14 12:02:26 +02:00
Eduard Mielieshkin 87529fe5ac changed the log messages 2023-09-14 12:02:26 +02:00
Eduard Mielieshkin a785fd9c4a formatted using clang-format 2023-09-14 12:02:26 +02:00
Eduard Mielieshkin 4dcf35c0cb PoC: waiting until an AVD instance is up 2023-09-14 12:02:26 +02:00
David Fort 1afaaa82d3 [core,arm] Various fixes and adjustements for #9363
Treat the case where the publicIpAddress is there but empty.
Don't try RDSTLS if the password has not been been provided.
When RDSTLS is what we will do, disengage all the other security kinds.
2023-09-14 09:00:46 +02:00
Armin Novak 5f8f69512b [core,orders] fix reading order number field
the field for delta rectangles/points/... are only transmitted if they
changed from the previous order of the same type. So keep the original
value and update only if a new one is read.
2023-09-04 12:24:57 +02:00
Armin Novak 12e6bbe13b [core,orders] log order fields not in packet 2023-09-04 11:32:35 +02:00
Armin Novak 1a1f422d79 [core,orders] unify delta point buffer allocation 2023-09-04 11:32:35 +02:00
Armin Novak 36b58c0688 [core,orders] abort if required filed is not found 2023-09-04 11:32:35 +02:00
Armin Novak 618102b28f [core,orders] update log message 2023-09-04 11:32:35 +02:00
David Fort 8a39859612 [arm] various improvements
This patch moves the ARM configuration before starting the connection process, so
that we can do some provisioning of the FreeRDP settings with the items retrieved
from Azure.
Most notably that allows us to connect directly using RDSTLS security.
2023-09-04 10:24:56 +02:00
akallabeth ce41d514ab [core,info] fix rdp_read_info_string
* Use proper freerdp_set_string* functions to set string
* In case of failure clean up existing string values
2023-09-02 07:56:21 +02:00
akallabeth 2102fa907a [core,connection] use dynamic logger rdp->log
for state transition logging use dynamic logger instead.
2023-09-02 07:56:21 +02:00
akallabeth 54021b50b0 [core,peer] fix initial state transitions
update initial state transitions according to [MS-RDPBCGR]
the diagram is misleading, some of the text below ambigious, but
1.3.1.1 Connection Sequence phase 10 description lists the dependencies
of server initiated messages.
2023-09-02 07:56:21 +02:00
akallabeth 4461219497 [core,rdp] make monitor layout PDU optional
the PDU might arrive or not, do not get stuck if not.
2023-09-02 07:56:21 +02:00
Armin Novak 1bbed81041 [core,orders] fix checks for multi opaque rect 2023-08-28 13:07:28 +02:00
akallabeth 60dd48e698 [api] fix integer overflow warnings 2023-08-25 14:36:05 +02:00
akallabeth bb5345c60e [freerdp,api] add FREERDP_ENTRY_POINT
C requires prototypes or compilers will complain about them missing. Our
library entry points do not have such, therefore add the macro
FREERDP_ENTRY_POINT which declares the function prototype automatically
before the function.
2023-08-25 14:36:05 +02:00
akallabeth 4e824b243f [winpr] add WINPR_ATTR_FORMAT_ARG
this macro declares the function argument (pos,arg) to be a printf
style format string and enables compiler checks for that.
2023-08-25 12:56:36 +02:00
akallabeth 9cee9b3c08 [c standard] use WINPR_FALLTHROUGH
use the macro to silence intentional switch fallthrough locations
2023-08-25 12:56:36 +02:00
akallabeth 0a90e9214e [core,aad] fix type mismatch warning 2023-08-25 12:56:36 +02:00
akallabeth feb5ab52cb [core,rdp] add log messages for unexpected data 2023-08-25 08:42:31 +02:00
akallabeth d3ba8ebf00 [core,update] log BeginPaint/EndPaint failure 2023-08-23 14:27:51 +02:00
akallabeth 023c2dba6e [core,autodetect] log unknown message types 2023-08-23 14:27:51 +02:00
akallabeth 769ffbd8a0 [core,fastpat] add logging for failures 2023-08-23 14:27:51 +02:00
akallabeth 74b1d5da89 [core,redirection] add logging
add log messages for all possible failure causes
2023-08-23 14:27:51 +02:00
Marc-André Moreau 30c31d64e8 WinSCard dynamic API loading with /winscard-module cli argument 2023-08-23 12:26:27 +02:00
Armin Novak 65a05fc490 [core,server] set freed pointer NULL
Fixes #9271: after freeing the memory reset it to NULL to signal it was
already handled.
2023-08-21 13:35:36 +02:00
2fly2 bce9f1cbe6 [core,settings] default disable ThinClient setting
fixes show black window when connect transparent app in
windows server 2012r2
2023-08-21 13:03:56 +02:00
akallabeth 22fffdd5ea [freerdp,api] log NULL IFCALL/IFCALLRET calls 2023-08-04 12:59:11 +02:00
akallabeth e51a5b33fb [core,orders] fix undefined variable, unify log strings 2023-08-03 13:54:03 +02:00
ehdgks0627 2496037f03 Standardize failure messages for order functions 2023-08-03 13:54:03 +02:00
ehdgks0627 105ce6c56b Update error message when update_read* function failed 2023-08-03 13:54:03 +02:00
Armin Novak 0cd36c1526 [build] fix Wmissing-prototypes 2023-08-01 08:37:58 +02:00
Joan Torres a332db7cf5 [libfreerdp] fix endianness issues
There were some fields sent without considering endianness, making the
clients fail when parsing those fields.

Use Data_Write_XXX functions so the endiannes won't affect the byte order
and the clients will read properly the fields.
2023-08-01 07:56:16 +02:00
Richard Markiewicz f59c98eebe [core,info] Fix rdp_info_read_string conversion check 2023-08-01 07:15:59 +02:00
Armin Novak ef5c0e78ab [build] use define WINPR_FALLTHROUGH
with c17 compatible compilers annotate with [[fallthrough]]
2023-07-31 23:46:53 +02:00
Armin Novak e7c2a75e1e [gateway,rpc] return FREERDP_ERROR_CONNECT_ACCESS_DENIED
unify http and rpc gateway return codes
2023-07-31 16:51:14 +02:00
Armin Novak c656bb9d1d [core,gateway] ensure '\0' termination of http response 2023-07-31 16:51:14 +02:00
Armin Novak de6aaded94 [core,gateway] improve http_response_print
print out all response data.
2023-07-31 08:46:57 +02:00
Armin Novak 8be9a3a5dd [core,gateway] unify http response logging 2023-07-31 08:32:43 +02:00
Armin Novak 03b78dd57b [aad] print http status response message 2023-07-28 16:42:23 +02:00
Armin Novak cd7cb514a8 [core,gateway] unify http response logging 2023-07-28 16:42:23 +02:00
Armin Novak 0bdb62e9b5 [libfreerdp] fix integere narrow warnings 2023-07-28 15:48:32 +02:00
ehdgks0627 d04ba8d6ef Correct typos and formatting errors in format strings
In several files, fixed typos in format strings that were causing unexpected output and formatting issues.
2023-07-28 15:34:46 +02:00
Armin Novak 077aff0217 [core] fix cast warnings 2023-07-28 13:42:12 +02:00
Armin Novak 9d5e95c60b [core] fix unary minus warnings 2023-07-28 13:42:12 +02:00
Armin Novak 76169c26cd [core,caps] fix warnings 2023-07-27 20:02:43 +02:00
Armin Novak 6c01433f6a [core,smartcardlogon] fix warnings 2023-07-27 20:02:43 +02:00
Armin Novak e61880d077 [standard] replace __FUNCTION__ with __func__ 2023-07-27 20:02:43 +02:00
Martin Fleisz bb9c32ed72 gateway: Allow authentication using a NULL (current user) identity 2023-07-26 16:35:36 +02:00
fifthdegree 8330aa1ac4 Log aad authentication_result as hex and string 2023-07-26 09:44:17 +02:00
Armin Novak a5ea634516 [core] fix cJSON compat
* only export used symbols, provide prototypes when required
* clean up some length checks
2023-07-24 09:54:49 +02:00
akallabeth 14d0ec9335 [core] move http status to string to utils
freerdp_http_status_string and freerdp_http_status_string_format are now
exposed as public API functions to work with http status codes
2023-07-21 14:53:19 +02:00
dev 80c7818f99 fix warning 2023-07-21 09:14:54 +02:00
Armin Novak 3d1bb4e1d9 [client,common] allow forcing default callbacks
All clients can implement their own callbacks for
certificate/credential/smartcard/... but there is a common (default)
implementation for all clients.
with the new setting FreeRDP_UseCommonStdioCallbacks it is now possible
to force these over the client implementation provided ones
2023-07-20 14:25:08 +02:00
akallabeth a0d38914d6 [core,aad] refactor use of cJSON
* link cJSON public to FreeRDP
* export compatibility functions for older versions of cJSON
2023-07-20 14:20:28 +02:00
akallabeth 5d8e21927c [warnings] fix compiler warnings 2023-07-20 14:20:28 +02:00
akallabeth 734117351d [aad,avc] unify callbacks to GetAccessToken
The AAD and AVD authentication mechanisms both need an OAuth2 token.
They only differ in the provided arguments, so unify the callbacks into
a single one with variable argument lists.
2023-07-20 14:20:28 +02:00
fifthdegree d309fcd6e8 Restructure Azure AD related stuff
- Move responsibility for obtaining access tokens to clients
- Add function for getting access tokens for AVD
- Get correct server hostname during AVD setup
- Add utility function for doing http requests
2023-07-20 14:20:28 +02:00
Pascal Nowack 4d7d136d1a core/server: Remove invalid cast
The context of wMessage is already a pointer, so the cast into UINT_PTR
is wrong here.
Additionally, casts from void pointers are superfluous.
2023-07-20 11:36:11 +02:00
Armin Novak 6d9d118593 [core,nego] remove AUTHZ_RESULT from nego header 2023-07-13 09:25:45 +02:00
Armin Novak 555fa2c98a [core,nla] print name of error code in log 2023-07-13 09:25:45 +02:00
Armin Novak 10e010329c [client,file] add WebAuthN rdp file parsing support 2023-07-10 10:45:28 +02:00
akallabeth e18918356f [core,rdp] set logger context 2023-07-06 15:51:56 +02:00
Martin Fleisz a5aad5159c core: Fix issues in settings copy code
This code fixes an issue where some settings were lost when copying
settings around. I.e. the device count was first set but then calling
`freerdp_settings_set_pointer_len` caused the device count to be reset
to 0 because we passed `NULL` for the data value.

This means the count got lost upon the first copy and further copies
also resulted in losing the array data (because the count was set to 0).

This PR fixes this issue by first resetting the array and afterwards
setting the correct count value.
2023-07-06 14:26:38 +02:00
akallabeth 4c862892b4 [core,gateway] clean up websocket transport 2023-07-05 13:18:54 +02:00
akarl10 76abdcdabf [core,gateway] cleanup http response 2023-07-05 10:43:27 +02:00
akallabeth 18185e9dbc [test] disable TestConnect on windows
build directories are different and the test logic can not find the
binaries necessary to launch
2023-07-05 08:46:00 +02:00
akallabeth d9b03b45ed [test] add executable suffix for TestConnect 2023-07-05 08:46:00 +02:00
Michael Saxl a5a60c888b [core,transport] free wst transport after use 2023-07-04 20:33:13 +02:00
Martin Fleisz 622a2a8df0 misc: More int to BOOL conversion fixes
This is a follow up to #9129.

This PR fixes some problematic `int` to `BOOL` conversions that might
cause overflows when checking for bit flags.
2023-07-04 09:45:20 +02:00
Martin Fleisz 37f9d5b494 core: Fix flag check to enable/disable RDSTLS security
On some platforms (i.e. Mac) the BOOL type might be narrower than the
`RedirectionFlags` type leading to an overflow when just assigning the
logical AND result to the setting. This fix makes sure that the value is
correctly set to either `TRUE` or `FALSE`.
2023-07-04 09:17:05 +02:00
akallabeth a01f3ec5ab [client,common] allow adding a named keyboard pipe
This allows starting FreeRDP clients with a named pipe that will type in
text written to the named pipe as keyboard input
2023-07-03 13:21:43 +02:00
Michael Saxl 132ce797db [core,gateway,wst] fix use after free in wst_connect 2023-07-03 10:00:12 +02:00
akallabeth e03b6596c6 [build] fix unused but set variable warnings 2023-06-29 18:34:51 +02:00
akallabeth 851f9cce2d [core,nla] fix unused variable warning 2023-06-29 18:34:51 +02:00
akallabeth 5dcd9fcb8a [core,gateway] eliminate intermediate buffer 2023-06-29 18:34:51 +02:00
Armin Novak 66cb8c68d4 [core,nego] change nego_set_routing_token argument
Use void* instead of BYTE* as the real type is unknown and warnings can
be avoided
2023-06-29 14:46:41 +02:00
akallabeth 37d9c891b4 [core,gateway] fix return value checks 2023-06-29 14:30:09 +02:00
akallabeth b9ec4ef60d [core,info] fix stream read check
read into variable of wrong type, fixed that.
2023-06-29 14:30:09 +02:00
Armin Novak de7fea7347 [core,gcc] gcc_read_client_data_blocks update checks
* Update checks for stream consumed
* Update log messages, use stringified version of block type
2023-06-29 08:09:53 +02:00
akarl10 8d707adcb2 [core,gateway] make http authentication work again for websocket transport 2023-06-28 11:40:22 +02:00
akarl10 7f19fab76e [core,gateway] only encode a cookie line if there is a cookie 2023-06-28 10:47:47 +02:00
akallabeth 3f78b3c379 [build] fix unused compiler warnings 2023-06-28 09:45:09 +02:00
Armin Novak 4d807a0bf0 [core,gateway] fix check for authentication 2023-06-27 21:15:08 +02:00
Armin Novak ea66b23631 [core,gateway] fix various issues with arm transport
* fix possible leaks
* split big functions
* fix missing NULL checks
2023-06-27 21:15:08 +02:00
akallabeth ca47058e8c [core,gateway] use custom copy for listdictionary 2023-06-27 21:15:08 +02:00
akallabeth 84fabc49e2 [core,gateway] fix locking in http_encode_cookie_line 2023-06-27 21:15:08 +02:00
akarl10 d62b088527 [gateway,wst] Update log about supported url types 2023-06-27 21:15:08 +02:00
akarl10 1108d88fc4 [gateway,wst] make WWW-Authenticate: NTLM (without data) work again
This happens in wst.c because the first try is always anonymous
2023-06-27 21:15:08 +02:00
Michael Saxl d55e035260 [gateway,arm] Azure Virtual Desktop Gateway support
This PR creates a new /gateway:type:arm transport.
It depends on CJSON

The arm transport is not a transport by itself but is responsible
for getting the websocket endpoint from a configuration url derived from
the configured gateway host in the rdpw file or cmdline
2023-06-27 21:15:08 +02:00
akallabeth 40dd43cb01 [core,gcc] use static substream for client data 2023-06-26 19:17:55 +02:00
akallabeth b69c259967 [core,gcc] dump unknown GCC types with trace log 2023-06-26 19:17:55 +02:00
Hugues LEFEBVRE b67afecf0f CredSSP with early user auth (nla_ext) support 2023-06-26 11:53:46 +02:00
akallabeth ff2b57c634 [core,peer] fixed invalid pointer to log function 2023-06-26 10:53:43 +02:00
akallabeth 4d350978dd [core] assert rdp->context 2023-06-26 10:53:43 +02:00
akarl10 63c80423a9 [multitransport] Ignore unknown data
If the reserved filed is not 0 the request PDU seems to contain
some extra data. Two bytes of 0 (probably a version field) followed by a
JSON payload (not null terminated, until the end of the packet. There
seems to be no dedicated length field)
2023-06-26 09:09:47 +02:00
Armin Novak 52ec17309a [core,caps] use settings getter/setter for unicode 2023-06-23 08:18:16 +02:00
Michael Saxl 44c1ec3276 [gateway,websocket] implement plain websocket transport
* factor out most websocket specific code parts into websocket.c
* create wst.c (Websocket Transport) as gateway transport implementation
* introduce GatewayUrl setting that holds the websocket url
* introduce GatewayHttpExtAuthBearer that holds the HTTP Bearer
* GatewayHttpExtAuthBearer can be used by both rdg and wst
2023-06-22 09:21:42 +02:00
Michael Saxl 6478edda5b rdg bearer support 2023-06-22 09:21:42 +02:00
akallabeth 1fc0d5b4b1 [winpr] remove casts for winpr_RAND calls 2023-06-21 09:57:52 +02:00
fifthdegree 80f357ddcb Add missing arg to aad token request format string 2023-06-19 08:42:33 +02:00
Armin Novak df3c78a91d [server,core] add CheckPeerAcceptRestrictions
the new (optional) callback CheckPeerAcceptRestrictions is used to check
for server implementation specific connection requirements before
accepting a client.
2023-06-14 17:15:21 +02:00
Richard Markiewicz 946cfb1068 [core,license] Fix build on msvnc with WITH_DEBUG_LICENSE 2023-06-14 17:14:45 +02:00
Mikhail Kashin aeb6ec6f97 [core] fix handling loadbalanceinfo tsv://MS Terminal Services Plugin 2023-06-14 09:06:50 +02:00
Marc-André Moreau 4d4dcd4511 Fix usage of explicit server name when different from connection host 2023-06-13 09:20:17 -04:00
fifthdegree 53023a0627 Fix AAD token request body 2023-06-13 07:39:49 +02:00
akallabeth 45a54b1883 [core] fix typo in debug string 2023-06-12 11:13:43 +02:00
Armin Novak 381183f421 [core,gateway] align RPC_FAULT_CODES
some architectures require alignment (apple looking at you)
2023-06-08 08:11:05 +02:00
Armin Novak 970f0c54e8 [stream] use const correct Stream_Pointer access 2023-06-08 08:09:33 +02:00
Armin Novak 81e95e51ca [winpr,ncrypt] log problems during cert enumeration 2023-06-07 23:05:54 +02:00
Armin Novak a4c6b36a19 [build] fix memory sanitizer stack frame warnings 2023-06-07 09:14:45 +02:00
Armin Novak b40e20ce85 [gateway,rdg] fix a leak and NULL access in RDG 2023-06-05 15:47:05 +02:00
Sergey Bronnikov 1c0c804981 [cmake] Introduce a target for building fuzzing tests
Part of #5063
2023-06-05 11:28:48 +02:00
Armin Novak 9a7aa8dbac [core,rdp] log rdp_read_share_control_header
in rdp_read_share_control_header read and log all available header data
before checking remaining length.
2023-06-05 11:07:30 +02:00
Armin Novak d0bf018e95 [test] fix uninitialized variables in test case 2023-05-31 17:44:41 +02:00
akallabeth d71c58a04b [core,licensing] allow all SEC_AUTODETECT_REQ messages
follow up to fdcc36dd8d
autodetect messages also seem to be sent over global channel id
instead of message channel id
2023-05-26 11:52:54 +02:00
akallabeth 393577750e [settings] add FreeRDP_ClipboardFeatureMask 2023-05-25 16:26:39 +02:00
akallabeth 4ee6cfe13a [warnings] fix -Wmissing-prototypes 2023-05-24 08:24:32 +02:00
fifthdegree 449b96adb2 Use popup browser for AAD auth in SDL client
Optionally build the SDL client with Qt WebEngine to create a popup
browser for authentication to AAD. Also change the URL output on the
command line to use the "nativeclient" redirect for easier copy/pasting
of the authorization code.
2023-05-23 06:04:55 +02:00
fifthdegree ba7fdcb5f0 Move alloc_sprintf into the winpr string api 2023-05-23 06:04:55 +02:00
Armin Novak 7832ba2361 [core,transport] properly log failure reason retries exceeded 2023-05-23 05:04:55 +02:00
Armin Novak da38ca3254 [core,server] decrease logging verbosity 2023-05-23 05:04:55 +02:00
Armin Novak a433e1b761 [core,rdp] use a dynamic logger for rdpRdp 2023-05-23 05:04:55 +02:00
David Fort a659290bd9 [smartcard] fix smartcard listing with /kerberos:pkcs11-module:<path>
When a PKCS11 module was provided, the CSP could not be set by command line
arguments, leading to an error when loading the ncrypt module, and an empty
smartcard list.
2023-05-17 10:50:45 +02:00
Sergey Bronnikov c06be5dc35 core: fix api in a fuzzing test
API has been changed in d1ddf7a6c7
("[crypto,test] update to new cert/crypto API").
2023-05-16 22:33:49 +02:00
David Fort b4355c0308 [codecs] fix freerdp_bitmap_planar_context_new call
freerdp_bitmap_planar_context_new() expects flags as first argument not a BOOL,
even if giving FALSE ends with the same result, it makes it more clear.
2023-05-16 10:57:18 +02:00
akallabeth 38946561bb [core,settigs] default to 32bpp session color depth 2023-05-11 13:24:09 +02:00
akallabeth cf477c581c [core,aad] use rdpPrivateKey instead of direct SSL 2023-05-10 09:59:10 +02:00
akallabeth 9ddd21e909 [core,connection] print a warning
if we receive an unexpected channel message print a warning.
2023-05-03 13:46:39 +02:00
akallabeth fdcc36dd8d [core,connection] relax state machine
contrary to '[MS-RDPBCGR] 1.3.9 Connect-Time and Continuous Network
Characteristics Detection' we have seen autodetection reqeusts mixed in
between licensing messages. This relaxes the state machine and allows
handling.
2023-05-03 13:46:39 +02:00
akallabeth 12a2e55588 [core,autodetect] improve logging
* use dynamically allocated logger of context
* improve stringification, print string representations with value for
  message and header types
2023-05-03 13:46:39 +02:00
Pascal Nowack 288f4d58f0 core: Make a couple of capability defines public
The settings for these defines are public, but these settings cannot be
properly used, when the respective defines are not public too.
2023-05-02 09:51:40 +02:00
Pascal Nowack dec0f950d1 core/info: Assume compression level 0 when INFO_COMPRESSION not present
It's unlikely, that a client supports a higher compression level, when
it did not advertise that level.
2023-05-02 09:51:40 +02:00
Pascal Nowack 50c3559a43 core/capabilities: Fix handling of Virtual Channel Capability Set
The VirtualChannelChunkSize can only be larger than 1600 Bytes, when
both client and server write that value in their capability set
regardless of the value itself.
Also, Microsoft clients and servers only advertise the capabilities that
are relevant for the other peer, e.g. mstsc only tells the server that
it supports decompressing compressed data from the server, but it does
not advertise, that it is able to compress data for the server.

Additionally, correctly apply the read capabilities after reading them.
2023-05-02 09:51:40 +02:00
Pascal Nowack 264d19765c core/server: Use correct size for DVC data PDUs
The VirtualChannelChunkSize setting refers to the VCChunkSize for static
channels and not to the maximum size for DVC data PDUs.
DVC data PDUs are according to [MS-RDPEDYC] always limited to 1600
Bytes.
2023-05-02 09:51:40 +02:00
Martin Fleisz 4859a5dfd4 core: Fix possible memory leak in smartcard certificate enumeration
When enumerating smartcard certificates we check if we have duplicates
in our certificate list. In case we detect a duplicate we just return
`TRUE` (indicating that we consumed the certificate info) but do not
free the smartcard info instance.
2023-04-28 11:45:59 +02:00
Armin Novak ca13987e84 [core,gateway] tighten checks for fault PDU 2023-04-28 10:16:49 +02:00
akallabeth 516668d02b [fclose] ensure no invalid pointers are passed.
fclose has undefined behaviour for NULL pointers, so check for these.
2023-04-28 07:39:35 +02:00
fifthdegree b1c4cb493f Set KDC URL in a way compatible with Windows 2023-04-27 16:31:30 +02:00
David Fort 7b0b273ec1 mcs: drop a server-side warning on FreeRDP_ChannelDefArray::len
Server side we often see "FreeRDP_ChannelDefArray::len expected to be >= 31,
but have XXX", where XXX is lower than 31.

This patche fixes that, the old code was setting the size of ChannelDefArray to the
number of ChannelCount, which is usually not what we want. We want to keep it to 31
and have ChannelCount indicate how many of these channels are used.
2023-04-27 08:37:11 +02:00
Armin Novak 4d3d1bfe4d [core,autodetect] revert to [MS-RDPBCGR] states
remove 'convenience' states in main RDP state machine for autodetect
2023-04-24 14:18:20 +02:00
Armin Novak f357f1d418 [core,license] allow empty cert info 2023-04-24 13:03:40 +02:00
Richard Markiewicz 13e52cfae2 [channels,settings] add a setting to ignore invalid devices 2023-04-24 11:29:05 +02:00
akallabeth ecc32eaf2e [core,info] unify string read, log unexpected
* unify reading of domain and username strings with all the checks
* add handling of (undocumented) padding in [MS-RDPBCGR]
  2.2.10.1.1.2 Logon Info Version 2 (TS_LOGON_INFO_VERSION_2)
  occurring with windows 11
2023-04-24 10:59:17 +02:00
akallabeth c0dc193a39 [winpr,input] use enum for keyboard types
* move type definition to WinPR as used there too.
* supported keyboard types are defined in
  [MS-RDPBCGR] 2.2.1.3.2 Client Core Data (TS_UD_CS_CORE)]
  use a enum instead of magic numbers to make code more readable.
2023-04-21 12:31:51 +02:00
Martin Fleisz 73911425d4 gateway: Do not encrypt message during RPC NTLM auth
Commit 2de7a4c249 introduced major changes
in the gateway authentication code. One of these changes was to decouple
NTLM specific authentication from the gateway code.

However with these changes, gateway authenciation with the old RPC code
stopped working and returned an authentication error. The problem is
that currently `credssp_auth_encrypt` encrypts the given message along
creating a signature.

The old code prevented encryption of the message by specifying
`SECBUFFER_READONLY` on the message buffer. The native Windows SSPI then
leaves this buffer as-is and gateway authentication works again.

This fix only applies to Windows platforms using the native SSPI API.
Interestingly this works on other platforms using the WinPR SSPI so
there seems to be a difference between the implementations (but that's a
topic for another PR).
2023-04-21 08:15:00 +02:00
Armin Novak 8994d4a213 [core,license] fix length checks
check the correct stream.
2023-04-19 10:51:33 +02:00
Joan Torres 3bcbdeb9fc [core,rdstls] Avoid Stream_SafeSeek on pdu parsing 2023-04-18 20:14:36 +02:00
Pascal Nowack 8362b3707e pointer: Rename position to hotspot position in Color Pointer Update
The attributes xPos and yPos for a Color Pointer Update are confusing,
as they may be confused with the xPos and yPos of the pointer bitmap on
the actual screen.
Rename these attributes to what they actually represent, and that is the
hotspot position.
xPos and yPos are still members of the hotspot. However, hotSpotX and
hotSpotY are much more clearer.
In addition to that, the Large Pointer Update uses the same names for
the hotspot coordinates.
2023-04-14 08:31:20 +02:00
Armin Novak abe49dfd3d [core,settings] fix missing return path 2023-04-13 14:41:16 +02:00
Armin Novak 391f5e0ddb [settings] add freerdp_supported_color_depths_string 2023-04-13 14:35:51 +02:00
Armin Novak fcdd3a1e75 [core,gcc] SupportedColorDepths and HighColorDepth
Split these, now independent from ColorDepth
2023-04-13 14:35:51 +02:00
Armin Novak 39767c5423 [settings] add supported color depths setting 2023-04-13 14:35:51 +02:00
Pascal Nowack 43f0fbdc12 core/autodetect: Allow overriding connect-time autodetection handling
Currently, FreeRDP-based server implementations can do connect-time
autodetection.
However, without having any control over it.

In order to be able to override the default connect-time autodetection
handling, introduce three new states for the state machine of the
connection sequence and two new callbacks for the autodetect handling.

These are:
- CONNECTION_STATE_CONNECT_TIME_AUTO_DETECT_BEGIN
- CONNECTION_STATE_CONNECT_TIME_AUTO_DETECT_IN_PROGRESS
- CONNECTION_STATE_CONNECT_TIME_AUTO_DETECT_END

- OnConnectTimeAutoDetectBegin()
- OnConnectTimeAutoDetectProgress()

The END state is pretty simple: When the autodetection is finished and
the autodetect state is FREERDP_AUTODETECT_STATE_COMPLETE, transition
into the next state of the connection sequence.

The BEGIN state is entered, when capability-wise network autodetection
is available.
In this state, the OnConnectTimeAutoDetectBegin callback is called, the
server implementation may initialize any related handling here.
If the server implementation determines, that no further handling is
required, it can end the autodetection phase by returning
FREERDP_AUTODETECT_STATE_COMPLETE.
If not, and an autodetection request is sent, it returns
FREERDP_AUTODETECT_STATE_REQUEST.
The state machine of the connection sequence will then switch into the
IN_PROGRESS state.

In the IN_PROGRESS state, any incoming PDU is handled first, then the
OnConnectTimeAutoDetectProgress callback is called.
Like in the BEGIN state, the return value will determine, whether the
state machine of the connection sequence goes into the END state or goes
into (or rather stays) in the IN_PROGRESS state.
2023-04-13 09:58:52 +02:00
Pascal Nowack 91ff145ae8 core/autodetect: Rework server side API to be closer to documentation
The current state of the autodetect API for the server side does not
include all allowed scenarios where the network autodetection can be
used.
This for example includes the connect-time autodetection, as the
related calls are hidden inside FreeRDP, and not exposed as public API.
In order to avoid duplicate send methods, check the state of the
connection sequence.
If the connection sequence is not yet done, use the connect-time request
types.
Otherwise, use the continuous request types.

The Bandwidth Measure Payload PDU is a little special case, as it is
only allowed to be sent during the connection sequence.
To ensure this, add an assertion in its sending method.

Also fix the handling for the Network Characteristics Sync PDU:
Previously, after parsing the PDU data, the read data was just sent
again to the client, which is wrong.
To fix this issue, introduce a callback for this client-to-server PDU,
so that the actual server implementation can hook up its own handling
for this PDU.
Depending on the situation, the server side may want to discard or use
the retrieved data here.

Moreover, decouple the send-handling for the Network Characteristics
Result PDU from the local autodetect variables.
Currently, these variables are shared between the send and receive
methods.
This leads to access problems, where the server side, wants to use a
different thread to send the autodetect PDU, as the receive handler may
receive an autodetect PDU and overwrite these values with possible
nonsense values.
This is especially the case with RTT response PDUs, as the written
netCharAverageRTT and netCharBaseRTT values are only correct, when only
one RTTRequest happens at a time and no stray RTTResponses are received.
2023-04-13 09:58:52 +02:00
Armin Novak f8e8764ea8 [core,settings] unify identity from settings 2023-04-11 11:37:09 +02:00
Armin Novak 9b498efa79 [core,nla] unify identity creation 2023-04-11 11:37:09 +02:00
Armin Novak e2f85fc329 [core,nla] ensure the identity is created with unicode 2023-04-11 11:37:09 +02:00
Armin Novak 13c025e04c [winpr,sspi] remove sspi_SetAuthIdentityWithUnicodePassword
the function is useless as we always use the SetAuthIdentityW API now
2023-04-11 11:37:09 +02:00
Armin Novak aac0c0d01d [core,gateway] fix expected size for rts_read_auth_verifier_no_checks 2023-04-11 11:31:57 +02:00
Armin Novak c638c51484 [core,gateway] fix expected length rts_read_auth_verifier_with_stub 2023-04-11 11:31:57 +02:00
Armin Novak adc6b60bcf [core,gateway] silence rts_read_common_pdu_header
rts_read_common_pdu_header is used to determine if the packet was read
successfully. In that case it might fail but there should be no logging
done to not spam it with unnecessary warnings.
2023-04-11 11:31:57 +02:00
akallabeth 6a35f11faa [core,gateway] fix warnings with static stream 2023-04-11 11:30:41 +02:00
akallabeth f3b7c1b84d [core,gateway] log http status codes 2023-04-11 11:21:27 +02:00
akallabeth 0f1b0cac76 [core,gateway] add http_status_string_format 2023-04-11 11:21:27 +02:00
akallabeth 8eec678710 [core,gateway] add http_status_string 2023-04-11 11:21:27 +02:00
Joan Torres 1f58b64f68 [core,redirection] Fix sending redirection certificate
TargetCertificate option is set in TARGET_CERTIFICATE_CONTAINER format.

Exposed ELEMENT_TYPE_CERTIFICATE and ENCODING_TYPE_ASN1_DER1 to allow
building it externally in the mentioned format.
2023-04-11 10:29:16 +02:00
akallabeth 1a951a7ebc [core,credssp] simplified name cache 2023-04-06 16:15:45 +02:00
akallabeth 182f15e475 [core] add logger to rdpContext
Add a dynamic logger for rdpContext
2023-04-06 12:11:46 +02:00
Armin Novak f4462f69e1 [core,credssp] fix logging with unicode
convert argument to proper type before logging
2023-04-05 11:40:22 +02:00
Armin Novak 2d1c56888d [core,gateway] log win32 error code of fault PDU 2023-04-05 10:02:27 +02:00
Armin Novak 14fd94a38c [core,gateway] fix http_request_write
ensure the stream is big enough to hold the data
2023-04-05 08:56:33 +02:00
Armin Novak 50ce5b834d [core,server] warn if cert not RDP security compatible 2023-03-28 17:19:03 +02:00
David Fort b7b46b8123 [codecs] make progressive honor threading flags
Progressive codec was not honoring the threading flags in settings like does
remoteFX, so even when no multiple threads decoding was asked, progressive was
using multiple threads anyway. This patch fixes it.
2023-03-20 15:32:28 +01:00
Armin Novak 937c158174 [core,gateway] copy data for credssp
the authentication data needs to be copied for use in credssp
fixes #8811
2023-03-17 22:28:13 +01:00
akallabeth 00572768b9 [core,rdp] fixed wrong format string 2023-03-15 08:22:23 +01:00
akallabeth a5b42f0f84 [includes] untangled circular includes 2023-03-15 08:22:23 +01:00
akallabeth a360f1ca8c [build] fix a few compiler warnings 2023-03-13 13:04:45 +01:00
Martin Fleisz ecc29d00c0 core: Allow NULL identity for NLA authentication
During the recent changes the possiblity to perform NLA auth using the
current identity was removed.

In case we receive AUTH_NO_CREDENTIALS with NLA we should resume using a
NULL-identity and not abort the connection.
2023-03-13 10:59:57 +01:00
Armin Novak 0c8a08817c [core,utils] do not abort on auth fail
Authenticate and GatewayAuthenticate return FALSE when there are no
credentials supplied. AuthenticateEx indicates connection termination
with that return value. Handle this accordingly
2023-03-13 09:36:07 +01:00
Armin Novak 461a307c42 [core,utils] prefer legacy over AuthenticateEx
the new AuthenticateEx callback has a default implementation. To not
break old clients only setting Authenticate or GatewayAuthenticate
callbacks prefer the old ones over the new one.
2023-03-13 09:36:07 +01:00
Armin Novak 39bf831d50 [core,nego] unify SelectedProtocol usage 2023-03-13 09:36:07 +01:00
Armin Novak e9bc54e8b7 [core] improve logging in freerdp_set_last_error 2023-03-13 09:36:07 +01:00