From c8698a1b9c5b1bc5bf6e5a9b8a35620604017a09 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 27 Oct 2025 12:17:02 +0100 Subject: [PATCH] [core,settings] add new keys for gateway Add missing settings: * FreeRDP_GatewayHttpReferer * FreeRDP_GatewayHttpUserAgent * FreeRDP_GatewayHttpMsUserAgent --- include/freerdp/settings_types_private.h | 11 ++++- libfreerdp/common/settings_getters.c | 42 ++++++++++++++++++- libfreerdp/common/settings_str.h | 4 ++ libfreerdp/core/settings.c | 13 +++++- .../core/test/settings_property_lists.h | 3 ++ 5 files changed, 69 insertions(+), 4 deletions(-) diff --git a/include/freerdp/settings_types_private.h b/include/freerdp/settings_types_private.h index 6acfaa1c2..10f6dcb66 100644 --- a/include/freerdp/settings_types_private.h +++ b/include/freerdp/settings_types_private.h @@ -512,7 +512,16 @@ struct rdp_settings SETTINGS_DEPRECATED(ALIGN64 char* GatewayAvdAccessAadFormat); /** 2023 * @since version 3.16.0 */ - UINT64 padding2112[2112 - 2024]; /* 2024 */ + SETTINGS_DEPRECATED(ALIGN64 char* GatewayHttpReferer); /** 2024 + * @since version 3.18.0 + */ + SETTINGS_DEPRECATED(ALIGN64 char* GatewayHttpUserAgent); /** 2025 + * @since version 3.18.0 + */ + SETTINGS_DEPRECATED(ALIGN64 char* GatewayHttpMsUserAgent); /** 2026 + * @since version 3.18.0 + */ + UINT64 padding2112[2112 - 2027]; /* 2027 */ /** * RemoteApp diff --git a/libfreerdp/common/settings_getters.c b/libfreerdp/common/settings_getters.c index 6256f259c..5a5ba0969 100644 --- a/libfreerdp/common/settings_getters.c +++ b/libfreerdp/common/settings_getters.c @@ -2373,7 +2373,8 @@ BOOL freerdp_settings_set_uint32(WINPR_ATTR_UNUSED rdpSettings* settings, break; case FreeRDP_ReceivedCapabilitiesSize: - return freerdp_capability_buffer_resize(settings, cnv.c, FALSE); + settings->ReceivedCapabilitiesSize = cnv.c; + break; case FreeRDP_RedirectedSessionId: settings->RedirectedSessionId = cnv.c; @@ -2500,7 +2501,8 @@ BOOL freerdp_settings_set_uint32(WINPR_ATTR_UNUSED rdpSettings* settings, break; case FreeRDP_TargetNetAddressCount: - return freerdp_target_net_addresses_resize(settings, cnv.c); + settings->TargetNetAddressCount = cnv.c; + break; case FreeRDP_TcpAckTimeout: settings->TcpAckTimeout = cnv.c; @@ -2863,6 +2865,15 @@ const char* freerdp_settings_get_string(WINPR_ATTR_UNUSED const rdpSettings* set case FreeRDP_GatewayHttpExtAuthBearer: return settings->GatewayHttpExtAuthBearer; + case FreeRDP_GatewayHttpMsUserAgent: + return settings->GatewayHttpMsUserAgent; + + case FreeRDP_GatewayHttpReferer: + return settings->GatewayHttpReferer; + + case FreeRDP_GatewayHttpUserAgent: + return settings->GatewayHttpUserAgent; + case FreeRDP_GatewayPassword: return settings->GatewayPassword; @@ -3187,6 +3198,15 @@ char* freerdp_settings_get_string_writable(rdpSettings* settings, FreeRDP_Settin case FreeRDP_GatewayHttpExtAuthBearer: return settings->GatewayHttpExtAuthBearer; + case FreeRDP_GatewayHttpMsUserAgent: + return settings->GatewayHttpMsUserAgent; + + case FreeRDP_GatewayHttpReferer: + return settings->GatewayHttpReferer; + + case FreeRDP_GatewayHttpUserAgent: + return settings->GatewayHttpUserAgent; + case FreeRDP_GatewayPassword: return settings->GatewayPassword; @@ -3522,6 +3542,15 @@ BOOL freerdp_settings_set_string_(WINPR_ATTR_UNUSED rdpSettings* settings, case FreeRDP_GatewayHttpExtAuthBearer: return update_string_(&settings->GatewayHttpExtAuthBearer, cnv.c, len); + case FreeRDP_GatewayHttpMsUserAgent: + return update_string_(&settings->GatewayHttpMsUserAgent, cnv.c, len); + + case FreeRDP_GatewayHttpReferer: + return update_string_(&settings->GatewayHttpReferer, cnv.c, len); + + case FreeRDP_GatewayHttpUserAgent: + return update_string_(&settings->GatewayHttpUserAgent, cnv.c, len); + case FreeRDP_GatewayPassword: return update_string_(&settings->GatewayPassword, cnv.c, len); @@ -3877,6 +3906,15 @@ BOOL freerdp_settings_set_string_copy_(WINPR_ATTR_UNUSED rdpSettings* settings, case FreeRDP_GatewayHttpExtAuthBearer: return update_string_copy_(&settings->GatewayHttpExtAuthBearer, cnv.cc, len, cleanup); + case FreeRDP_GatewayHttpMsUserAgent: + return update_string_copy_(&settings->GatewayHttpMsUserAgent, cnv.cc, len, cleanup); + + case FreeRDP_GatewayHttpReferer: + return update_string_copy_(&settings->GatewayHttpReferer, cnv.cc, len, cleanup); + + case FreeRDP_GatewayHttpUserAgent: + return update_string_copy_(&settings->GatewayHttpUserAgent, cnv.cc, len, cleanup); + case FreeRDP_GatewayPassword: return update_string_copy_(&settings->GatewayPassword, cnv.cc, len, cleanup); diff --git a/libfreerdp/common/settings_str.h b/libfreerdp/common/settings_str.h index 8d6b70a0a..cd6a32516 100644 --- a/libfreerdp/common/settings_str.h +++ b/libfreerdp/common/settings_str.h @@ -513,6 +513,10 @@ static const struct settings_str_entry settings_map[] = { { FreeRDP_GatewayHostname, FREERDP_SETTINGS_TYPE_STRING, "FreeRDP_GatewayHostname" }, { FreeRDP_GatewayHttpExtAuthBearer, FREERDP_SETTINGS_TYPE_STRING, "FreeRDP_GatewayHttpExtAuthBearer" }, + { FreeRDP_GatewayHttpMsUserAgent, FREERDP_SETTINGS_TYPE_STRING, + "FreeRDP_GatewayHttpMsUserAgent" }, + { FreeRDP_GatewayHttpReferer, FREERDP_SETTINGS_TYPE_STRING, "FreeRDP_GatewayHttpReferer" }, + { FreeRDP_GatewayHttpUserAgent, FREERDP_SETTINGS_TYPE_STRING, "FreeRDP_GatewayHttpUserAgent" }, { FreeRDP_GatewayPassword, FREERDP_SETTINGS_TYPE_STRING, "FreeRDP_GatewayPassword" }, { FreeRDP_GatewayUrl, FREERDP_SETTINGS_TYPE_STRING, "FreeRDP_GatewayUrl" }, { FreeRDP_GatewayUsername, FREERDP_SETTINGS_TYPE_STRING, "FreeRDP_GatewayUsername" }, diff --git a/libfreerdp/core/settings.c b/libfreerdp/core/settings.c index 3dbcb5e13..3074dc6ac 100644 --- a/libfreerdp/core/settings.c +++ b/libfreerdp/core/settings.c @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -770,6 +771,15 @@ rdpSettings* freerdp_settings_new(DWORD flags) if (!server && !remote) { + if (!freerdp_settings_set_string(settings, FreeRDP_GatewayHttpUserAgent, + FREERDP_USER_AGENT)) + goto out_fail; + if (!freerdp_settings_set_string(settings, FreeRDP_GatewayHttpMsUserAgent, + FREERDP_USER_AGENT)) + goto out_fail; + + if (!freerdp_settings_set_string(settings, FreeRDP_GatewayHttpReferer, "")) + goto out_fail; if (!freerdp_settings_set_string(settings, FreeRDP_GatewayAvdAccessTokenFormat, "ms-appx-web%%3a%%2f%%2fMicrosoft.AAD.BrokerPlugin%%2f%s")) goto out_fail; @@ -777,7 +787,8 @@ rdpSettings* freerdp_settings_new(DWORD flags) "https%%3A%%2F%%2F%s%%2F%s%%2Foauth2%%2Fnativeclient")) goto out_fail; if (!freerdp_settings_set_string(settings, FreeRDP_GatewayAvdScope, - "https%3A%2F%2Fwww.wvd.microsoft.com%2F.default")) + "https%3A%2F%2Fwww.wvd.microsoft.com%2F.default%20openid%" + "20profile%20offline_access")) goto out_fail; if (!freerdp_settings_set_string(settings, FreeRDP_GatewayAvdClientID, diff --git a/libfreerdp/core/test/settings_property_lists.h b/libfreerdp/core/test/settings_property_lists.h index b2a9a2bc0..b47490443 100644 --- a/libfreerdp/core/test/settings_property_lists.h +++ b/libfreerdp/core/test/settings_property_lists.h @@ -405,6 +405,9 @@ static const size_t string_list_indices[] = { FreeRDP_GatewayDomain, FreeRDP_GatewayHostname, FreeRDP_GatewayHttpExtAuthBearer, + FreeRDP_GatewayHttpMsUserAgent, + FreeRDP_GatewayHttpReferer, + FreeRDP_GatewayHttpUserAgent, FreeRDP_GatewayPassword, FreeRDP_GatewayUrl, FreeRDP_GatewayUsername,