From 3b38479ec56698f6db53d7638692068dd9bdf6f3 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Mon, 15 Jul 2019 10:08:39 +0200 Subject: [PATCH] Added PromptForCredentials setting. --- client/common/file.c | 151 ++++++++++++++++++++++++- include/freerdp/client/file.h | 139 ----------------------- include/freerdp/settings.h | 10 +- libfreerdp/common/settings_getters.c | 15 +++ libfreerdp/core/gateway/ncacn_http.c | 9 +- libfreerdp/core/gateway/rdg.c | 9 +- libfreerdp/core/gateway/rpc_bind.c | 9 +- libfreerdp/core/nla.c | 7 +- libfreerdp/core/settings.c | 1 + libfreerdp/core/test/settings_property_lists.h | 2 + 10 files changed, 199 insertions(+), 153 deletions(-) diff --git a/client/common/file.c b/client/common/file.c index be742ec..6869e23 100644 --- a/client/common/file.c +++ b/client/common/file.c @@ -53,6 +53,144 @@ static BYTE BOM_UTF16_LE[2] = { 0xFF, 0xFE }; #define INVALID_INTEGER_VALUE 0xFFFFFFFF +#define RDP_FILE_LINE_FLAG_FORMATTED 0x00000001 +#define RDP_FILE_LINE_FLAG_STANDARD 0x00000002 +#define RDP_FILE_LINE_FLAG_TYPE_STRING 0x00000010 +#define RDP_FILE_LINE_FLAG_TYPE_INTEGER 0x00000020 +#define RDP_FILE_LINE_FLAG_TYPE_BINARY 0x00000040 + +struct rdp_file_line +{ + int index; + char* text; + DWORD flags; + char* name; + LPSTR sValue; + DWORD iValue; + PBYTE bValue; + int valueLength; +}; +typedef struct rdp_file_line rdpFileLine; + +struct rdp_file +{ + DWORD UseMultiMon; /* use multimon */ + DWORD ScreenModeId; /* screen mode id */ + DWORD SpanMonitors; /* span monitors */ + DWORD SmartSizing; /* smartsizing */ + DWORD EnableSuperSpan; /* enablesuperpan */ + DWORD SuperSpanAccelerationFactor; /* superpanaccelerationfactor */ + + DWORD DesktopWidth; /* desktopwidth */ + DWORD DesktopHeight; /* desktopheight */ + DWORD DesktopSizeId; /* desktop size id */ + DWORD SessionBpp; /* session bpp */ + + DWORD Compression; /* compression */ + DWORD KeyboardHook; /* keyboardhook */ + DWORD DisableCtrlAltDel; /* disable ctrl+alt+del */ + + DWORD AudioMode; /* audiomode */ + DWORD AudioQualityMode; /* audioqualitymode */ + DWORD AudioCaptureMode; /* audiocapturemode */ + DWORD VideoPlaybackMode; /* videoplaybackmode */ + + DWORD ConnectionType; /* connection type */ + + DWORD NetworkAutoDetect; /* networkautodetect */ + DWORD BandwidthAutoDetect; /* bandwidthautodetect */ + + DWORD PinConnectionBar; /* pinconnectionbar */ + DWORD DisplayConnectionBar; /* displayconnectionbar */ + + DWORD WorkspaceId; /* workspaceid */ + DWORD EnableWorkspaceReconnect; /* enableworkspacereconnect */ + + DWORD DisableWallpaper; /* disable wallpaper */ + DWORD AllowFontSmoothing; /* allow font smoothing */ + DWORD AllowDesktopComposition; /* allow desktop composition */ + DWORD DisableFullWindowDrag; /* disable full window drag */ + DWORD DisableMenuAnims; /* disable menu anims */ + DWORD DisableThemes; /* disable themes */ + DWORD DisableCursorSetting; /* disable cursor setting */ + + DWORD BitmapCacheSize; /* bitmapcachesize */ + DWORD BitmapCachePersistEnable; /* bitmapcachepersistenable */ + + LPSTR Username; /* username */ + LPSTR Domain; /* domain */ + LPSTR Password; /*password*/ + PBYTE Password51; /* password 51 */ + + LPSTR FullAddress; /* full address */ + LPSTR AlternateFullAddress; /* alternate full address */ + DWORD ServerPort; /* server port */ + + DWORD RedirectDrives; /* redirectdrives */ + DWORD RedirectPrinters; /* redirectprinters */ + DWORD RedirectComPorts; /* redirectcomports */ + DWORD RedirectSmartCards; /* redirectsmartcards */ + DWORD RedirectClipboard; /* redirectclipboard */ + DWORD RedirectPosDevices; /* redirectposdevices */ + DWORD RedirectDirectX; /* redirectdirectx */ + DWORD DisablePrinterRedirection; /* disableprinterredirection */ + DWORD DisableClipboardRedirection; /* disableclipboardredirection */ + LPSTR UsbDevicesToRedirect; /* usbdevicestoredirect */ + + DWORD ConnectToConsole; /* connect to console */ + DWORD AdministrativeSession; /* administrative session */ + DWORD AutoReconnectionEnabled; /* autoreconnection enabled */ + DWORD AutoReconnectMaxRetries; /* autoreconnect max retries */ + + DWORD PublicMode; /* public mode */ + DWORD AuthenticationLevel; /* authentication level */ + DWORD PromptCredentialOnce; /* promptcredentialonce */ + DWORD PromptForCredentials; /* prompt for credentials */ + DWORD NegotiateSecurityLayer; /* negotiate security layer */ + DWORD EnableCredSSPSupport; /* enablecredsspsupport */ + LPSTR LoadBalanceInfo; /* loadbalanceinfo */ + + DWORD RemoteApplicationMode; /* remoteapplicationmode */ + LPSTR RemoteApplicationName; /* remoteapplicationname */ + LPSTR RemoteApplicationIcon; /* remoteapplicationicon */ + LPSTR RemoteApplicationProgram; /* remoteapplicationprogram */ + LPSTR RemoteApplicationFile; /* remoteapplicationfile */ + LPSTR RemoteApplicationGuid; /* remoteapplicationguid */ + LPSTR RemoteApplicationCmdLine; /* remoteapplicationcmdline */ + DWORD RemoteApplicationExpandCmdLine; /* remoteapplicationexpandcmdline */ + DWORD RemoteApplicationExpandWorkingDir; /* remoteapplicationexpandworkingdir */ + DWORD DisableConnectionSharing; /* disableconnectionsharing */ + DWORD DisableRemoteAppCapsCheck; /* disableremoteappcapscheck */ + + LPSTR AlternateShell; /* alternate shell */ + LPSTR ShellWorkingDirectory; /* shell working directory */ + + LPSTR GatewayHostname; /* gatewayhostname */ + DWORD GatewayUsageMethod; /* gatewayusagemethod */ + DWORD GatewayProfileUsageMethod; /* gatewayprofileusagemethod */ + DWORD GatewayCredentialsSource; /* gatewaycredentialssource */ + LPSTR GatewayAccessToken; /* gatewayaccesstoken */ + + DWORD UseRedirectionServerName; /* use redirection server name */ + + DWORD RdgIsKdcProxy; /* rdgiskdcproxy */ + LPSTR KdcProxyName; /* kdcproxyname */ + + LPSTR DrivesToRedirect; /* drivestoredirect */ + LPSTR DevicesToRedirect; /* devicestoredirect */ + LPSTR WinPosStr; /* winposstr */ + + LPSTR PreconnectionBlob; /* pcb */ + + int lineCount; + int lineSize; + rdpFileLine* lines; + + int argc; + char** argv; + int argSize; +}; + /* * Set an integer in a rdpFile * @@ -168,10 +306,9 @@ static int freerdp_client_rdp_file_set_integer(rdpFile* file, const char* name, file->AuthenticationLevel = value; else if (_stricmp(name, "promptcredentialonce") == 0) file->PromptCredentialOnce = value; - else if (_stricmp(name, "prompt for credentials") == 0) + else if ((_stricmp(name, "prompt for credentials") == 0) || + (_stricmp(name, "prompt for credentials on client") == 0)) file->PromptForCredentials = value; - else if (_stricmp(name, "promptcredentialonce") == 0) - file->PromptForCredentialsOnce = value; else if (_stricmp(name, "negotiate security layer") == 0) file->NegotiateSecurityLayer = value; else if (_stricmp(name, "enablecredsspsupport") == 0) @@ -620,6 +757,7 @@ BOOL freerdp_client_populate_rdp_file_from_settings(rdpFile* file, const rdpSett SETTING_MODIFIED_SET_STRING(file->GatewayAccessToken, settings, GatewayAccessToken); SETTING_MODIFIED_SET(file->GatewayUsageMethod, settings, GatewayUsageMethod); SETTING_MODIFIED_SET(file->PromptCredentialOnce, settings, GatewayUseSameCredentials); + SETTING_MODIFIED_SET(file->PromptForCredentials, settings, PromptForCredentials); SETTING_MODIFIED_SET(file->RemoteApplicationMode, settings, RemoteApplicationMode); SETTING_MODIFIED_SET_STRING(file->RemoteApplicationProgram, settings, RemoteApplicationProgram); SETTING_MODIFIED_SET_STRING(file->RemoteApplicationName, settings, RemoteApplicationName); @@ -979,6 +1117,13 @@ BOOL freerdp_client_populate_settings_from_rdp_file(rdpFile* file, rdpSettings* return FALSE; } + if (~file->PromptForCredentials) + { + if (!freerdp_settings_set_bool(settings, FreeRDP_PromptForCredentials, + file->PromptForCredentials)) + return FALSE; + } + if (~file->RemoteApplicationMode) { if (!freerdp_settings_set_bool(settings, FreeRDP_RemoteApplicationMode, diff --git a/include/freerdp/client/file.h b/include/freerdp/client/file.h index 8f12a29..74bb3d3 100644 --- a/include/freerdp/client/file.h +++ b/include/freerdp/client/file.h @@ -23,145 +23,6 @@ #include #include -#define RDP_FILE_LINE_FLAG_FORMATTED 0x00000001 -#define RDP_FILE_LINE_FLAG_STANDARD 0x00000002 -#define RDP_FILE_LINE_FLAG_TYPE_STRING 0x00000010 -#define RDP_FILE_LINE_FLAG_TYPE_INTEGER 0x00000020 -#define RDP_FILE_LINE_FLAG_TYPE_BINARY 0x00000040 - -struct rdp_file_line -{ - int index; - char* text; - DWORD flags; - char* name; - LPSTR sValue; - DWORD iValue; - PBYTE bValue; - int valueLength; -}; -typedef struct rdp_file_line rdpFileLine; - -struct rdp_file -{ - DWORD UseMultiMon; /* use multimon */ - DWORD ScreenModeId; /* screen mode id */ - DWORD SpanMonitors; /* span monitors */ - DWORD SmartSizing; /* smartsizing */ - DWORD EnableSuperSpan; /* enablesuperpan */ - DWORD SuperSpanAccelerationFactor; /* superpanaccelerationfactor */ - - DWORD DesktopWidth; /* desktopwidth */ - DWORD DesktopHeight; /* desktopheight */ - DWORD DesktopSizeId; /* desktop size id */ - DWORD SessionBpp; /* session bpp */ - - DWORD Compression; /* compression */ - DWORD KeyboardHook; /* keyboardhook */ - DWORD DisableCtrlAltDel; /* disable ctrl+alt+del */ - - DWORD AudioMode; /* audiomode */ - DWORD AudioQualityMode; /* audioqualitymode */ - DWORD AudioCaptureMode; /* audiocapturemode */ - DWORD VideoPlaybackMode; /* videoplaybackmode */ - - DWORD ConnectionType; /* connection type */ - - DWORD NetworkAutoDetect; /* networkautodetect */ - DWORD BandwidthAutoDetect; /* bandwidthautodetect */ - - DWORD PinConnectionBar; /* pinconnectionbar */ - DWORD DisplayConnectionBar; /* displayconnectionbar */ - - DWORD WorkspaceId; /* workspaceid */ - DWORD EnableWorkspaceReconnect; /* enableworkspacereconnect */ - - DWORD DisableWallpaper; /* disable wallpaper */ - DWORD AllowFontSmoothing; /* allow font smoothing */ - DWORD AllowDesktopComposition; /* allow desktop composition */ - DWORD DisableFullWindowDrag; /* disable full window drag */ - DWORD DisableMenuAnims; /* disable menu anims */ - DWORD DisableThemes; /* disable themes */ - DWORD DisableCursorSetting; /* disable cursor setting */ - - DWORD BitmapCacheSize; /* bitmapcachesize */ - DWORD BitmapCachePersistEnable; /* bitmapcachepersistenable */ - - LPSTR Username; /* username */ - LPSTR Domain; /* domain */ - LPSTR Password; /*password*/ - PBYTE Password51; /* password 51 */ - - LPSTR FullAddress; /* full address */ - LPSTR AlternateFullAddress; /* alternate full address */ - DWORD ServerPort; /* server port */ - - DWORD RedirectDrives; /* redirectdrives */ - DWORD RedirectPrinters; /* redirectprinters */ - DWORD RedirectComPorts; /* redirectcomports */ - DWORD RedirectSmartCards; /* redirectsmartcards */ - DWORD RedirectClipboard; /* redirectclipboard */ - DWORD RedirectPosDevices; /* redirectposdevices */ - DWORD RedirectDirectX; /* redirectdirectx */ - DWORD DisablePrinterRedirection; /* disableprinterredirection */ - DWORD DisableClipboardRedirection; /* disableclipboardredirection */ - LPSTR UsbDevicesToRedirect; /* usbdevicestoredirect */ - - DWORD ConnectToConsole; /* connect to console */ - DWORD AdministrativeSession; /* administrative session */ - DWORD AutoReconnectionEnabled; /* autoreconnection enabled */ - DWORD AutoReconnectMaxRetries; /* autoreconnect max retries */ - - DWORD PublicMode; /* public mode */ - DWORD AuthenticationLevel; /* authentication level */ - DWORD PromptCredentialOnce; /* promptcredentialonce */ - DWORD PromptForCredentials; /* prompt for credentials */ - DWORD PromptForCredentialsOnce; /* promptcredentialonce */ - DWORD NegotiateSecurityLayer; /* negotiate security layer */ - DWORD EnableCredSSPSupport; /* enablecredsspsupport */ - LPSTR LoadBalanceInfo; /* loadbalanceinfo */ - - DWORD RemoteApplicationMode; /* remoteapplicationmode */ - LPSTR RemoteApplicationName; /* remoteapplicationname */ - LPSTR RemoteApplicationIcon; /* remoteapplicationicon */ - LPSTR RemoteApplicationProgram; /* remoteapplicationprogram */ - LPSTR RemoteApplicationFile; /* remoteapplicationfile */ - LPSTR RemoteApplicationGuid; /* remoteapplicationguid */ - LPSTR RemoteApplicationCmdLine; /* remoteapplicationcmdline */ - DWORD RemoteApplicationExpandCmdLine; /* remoteapplicationexpandcmdline */ - DWORD RemoteApplicationExpandWorkingDir; /* remoteapplicationexpandworkingdir */ - DWORD DisableConnectionSharing; /* disableconnectionsharing */ - DWORD DisableRemoteAppCapsCheck; /* disableremoteappcapscheck */ - - LPSTR AlternateShell; /* alternate shell */ - LPSTR ShellWorkingDirectory; /* shell working directory */ - - LPSTR GatewayHostname; /* gatewayhostname */ - DWORD GatewayUsageMethod; /* gatewayusagemethod */ - DWORD GatewayProfileUsageMethod; /* gatewayprofileusagemethod */ - DWORD GatewayCredentialsSource; /* gatewaycredentialssource */ - LPSTR GatewayAccessToken; /* gatewayaccesstoken */ - - DWORD UseRedirectionServerName; /* use redirection server name */ - - DWORD RdgIsKdcProxy; /* rdgiskdcproxy */ - LPSTR KdcProxyName; /* kdcproxyname */ - - LPSTR DrivesToRedirect; /* drivestoredirect */ - LPSTR DevicesToRedirect; /* devicestoredirect */ - LPSTR WinPosStr; /* winposstr */ - - LPSTR PreconnectionBlob; /* pcb */ - - int lineCount; - int lineSize; - rdpFileLine* lines; - - int argc; - char** argv; - int argSize; -}; - typedef struct rdp_file rdpFile; #ifdef __cplusplus diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 906f966..808ea07 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -678,6 +678,7 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL; #define FreeRDP_Password51 (1280) #define FreeRDP_Password51Length (1281) #define FreeRDP_SmartcardLogon (1282) +#define FreeRDP_PromptForCredentials (1283) #define FreeRDP_KerberosKdc (1344) #define FreeRDP_KerberosRealm (1345) #define FreeRDP_IgnoreCertificate (1408) @@ -1129,10 +1130,11 @@ struct rdp_settings */ /* Credentials Cache */ - ALIGN64 BYTE* Password51; /* 1280 */ - ALIGN64 UINT32 Password51Length; /* 1281 */ - ALIGN64 BOOL SmartcardLogon; /* 1282 */ - UINT64 padding1344[1344 - 1283]; /* 1283 */ + ALIGN64 BYTE* Password51; /* 1280 */ + ALIGN64 UINT32 Password51Length; /* 1281 */ + ALIGN64 BOOL SmartcardLogon; /* 1282 */ + ALIGN64 BOOL PromptForCredentials; /* 1283 */ + UINT64 padding1344[1344 - 1284]; /* 1284 */ /* Kerberos Authentication */ ALIGN64 char* KerberosKdc; /* 1344 */ diff --git a/libfreerdp/common/settings_getters.c b/libfreerdp/common/settings_getters.c index 1953004..67bc545 100644 --- a/libfreerdp/common/settings_getters.c +++ b/libfreerdp/common/settings_getters.c @@ -204,6 +204,9 @@ BOOL freerdp_settings_get_bool(rdpSettings* settings, size_t id) case FreeRDP_SmartcardLogon: return settings->SmartcardLogon; + case FreeRDP_PromptForCredentials: + return settings->PromptForCredentials; + case FreeRDP_IgnoreCertificate: return settings->IgnoreCertificate; @@ -761,6 +764,10 @@ BOOL freerdp_settings_set_bool(rdpSettings* settings, size_t id, BOOL val) settings->SmartcardLogon = val; break; + case FreeRDP_PromptForCredentials: + settings->PromptForCredentials = val; + break; + case FreeRDP_IgnoreCertificate: settings->IgnoreCertificate = val; break; @@ -2290,6 +2297,9 @@ const char* freerdp_settings_get_string(rdpSettings* settings, size_t id) case FreeRDP_DrivesToRedirect: return settings->DrivesToRedirect; + case FreeRDP_RDP2TCPArgs: + return settings->RDP2TCPArgs; + default: WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__, id); return FALSE; @@ -2623,6 +2633,11 @@ BOOL freerdp_settings_set_string(rdpSettings* settings, size_t id, const char* v settings->DrivesToRedirect = _strdup(val); return settings->DrivesToRedirect != NULL; + case FreeRDP_RDP2TCPArgs: + free(settings->RDP2TCPArgs); + settings->RDP2TCPArgs = _strdup(val); + return settings->RDP2TCPArgs != NULL; + default: WLog_ERR(TAG, "[%s] Invalid key index %"PRIuz, __FUNCTION__, id); return FALSE; diff --git a/libfreerdp/core/gateway/ncacn_http.c b/libfreerdp/core/gateway/ncacn_http.c index 300cced..0dfb94a 100644 --- a/libfreerdp/core/gateway/ncacn_http.c +++ b/libfreerdp/core/gateway/ncacn_http.c @@ -146,14 +146,19 @@ BOOL rpc_ncacn_http_ntlm_init(rdpContext* context, RpcChannel* channel) if (!settings->GatewayPassword || !settings->GatewayUsername || !strlen(settings->GatewayPassword) || !strlen(settings->GatewayUsername)) { - if (instance->GatewayAuthenticate) + if (!instance->settings->PromptForCredentials || !instance->GatewayAuthenticate) + { + freerdp_set_last_error(context, FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS); + return TRUE; + } + else { BOOL proceed = instance->GatewayAuthenticate(instance, &settings->GatewayUsername, &settings->GatewayPassword, &settings->GatewayDomain); if (!proceed) { - freerdp_set_last_error(context, FREERDP_ERROR_CONNECT_CANCELLED); + freerdp_set_last_error(context, FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS); return TRUE; } diff --git a/libfreerdp/core/gateway/rdg.c b/libfreerdp/core/gateway/rdg.c index 498bc23..bb06111 100644 --- a/libfreerdp/core/gateway/rdg.c +++ b/libfreerdp/core/gateway/rdg.c @@ -867,14 +867,19 @@ static BOOL rdg_get_gateway_credentials(rdpContext* context) if (!settings->GatewayPassword || !settings->GatewayUsername || !strlen(settings->GatewayPassword) || !strlen(settings->GatewayUsername)) { - if (instance->GatewayAuthenticate) + if (!instance->settings->PromptForCredentials || !instance->GatewayAuthenticate) + { + freerdp_set_last_error(context, FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS); + return FALSE; + } + else { BOOL proceed = instance->GatewayAuthenticate(instance, &settings->GatewayUsername, &settings->GatewayPassword, &settings->GatewayDomain); if (!proceed) { - freerdp_set_last_error(context, FREERDP_ERROR_CONNECT_CANCELLED); + freerdp_set_last_error(context, FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS); return FALSE; } diff --git a/libfreerdp/core/gateway/rpc_bind.c b/libfreerdp/core/gateway/rpc_bind.c index eb253a7..fbe0de6 100644 --- a/libfreerdp/core/gateway/rpc_bind.c +++ b/libfreerdp/core/gateway/rpc_bind.c @@ -136,14 +136,19 @@ int rpc_send_bind_pdu(rdpRpc* rpc) if (promptPassword) { - if (instance->GatewayAuthenticate) + if (!instance->settings->PromptForCredentials || !instance->GatewayAuthenticate) + { + freerdp_set_last_error(instance->context, FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS); + return 0; + } + else { BOOL proceed = instance->GatewayAuthenticate(instance, &settings->GatewayUsername, &settings->GatewayPassword, &settings->GatewayDomain); if (!proceed) { - freerdp_set_last_error(instance->context, FREERDP_ERROR_CONNECT_CANCELLED); + freerdp_set_last_error(instance->context, FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS); return 0; } diff --git a/libfreerdp/core/nla.c b/libfreerdp/core/nla.c index d40869c..1716ec3 100644 --- a/libfreerdp/core/nla.c +++ b/libfreerdp/core/nla.c @@ -279,7 +279,12 @@ static int nla_client_init(rdpNla* nla) if (PromptPassword) { - if (instance->Authenticate) + if (!instance->settings->PromptForCredentials || !instance->Authenticate) + { + freerdp_set_last_error(instance->context, FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS); + return 0; + } + else { BOOL proceed = instance->Authenticate(instance, &settings->Username, &settings->Password, &settings->Domain); diff --git a/libfreerdp/core/settings.c b/libfreerdp/core/settings.c index 063833b..ccf76da 100644 --- a/libfreerdp/core/settings.c +++ b/libfreerdp/core/settings.c @@ -623,6 +623,7 @@ rdpSettings* freerdp_settings_new(DWORD flags) settings->ActionScript = _strdup("~/.config/freerdp/action.sh"); settings->SmartcardLogon = FALSE; + settings->PromptForCredentials = TRUE; settings->TlsSecLevel = 1; settings->OrderSupport = calloc(1, 32); diff --git a/libfreerdp/core/test/settings_property_lists.h b/libfreerdp/core/test/settings_property_lists.h index 2f9b3c1..9bfd866 100644 --- a/libfreerdp/core/test/settings_property_lists.h +++ b/libfreerdp/core/test/settings_property_lists.h @@ -68,6 +68,7 @@ static const size_t bool_list_indices[] = FreeRDP_MstscCookieMode, FreeRDP_SendPreconnectionPdu, FreeRDP_SmartcardLogon, + FreeRDP_PromptForCredentials, FreeRDP_IgnoreCertificate, FreeRDP_ExternalCertificateManagement, FreeRDP_AutoAcceptCertificate, @@ -364,6 +365,7 @@ static const size_t string_list_indices[] = FreeRDP_RemoteApplicationWorkingDir, FreeRDP_ImeFileName, FreeRDP_DrivesToRedirect, + FreeRDP_RDP2TCPArgs, }; #define have_pointer_list_indices -- 2.7.4