Added PromptForCredentials setting.
authorArmin Novak <armin.novak@thincast.com>
Mon, 15 Jul 2019 08:08:39 +0000 (10:08 +0200)
committerArmin Novak <armin.novak@thincast.com>
Mon, 15 Jul 2019 10:01:30 +0000 (12:01 +0200)
client/common/file.c
include/freerdp/client/file.h
include/freerdp/settings.h
libfreerdp/common/settings_getters.c
libfreerdp/core/gateway/ncacn_http.c
libfreerdp/core/gateway/rdg.c
libfreerdp/core/gateway/rpc_bind.c
libfreerdp/core/nla.c
libfreerdp/core/settings.c
libfreerdp/core/test/settings_property_lists.h

index be742ec..6869e23 100644 (file)
@@ -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,
index 8f12a29..74bb3d3 100644 (file)
 #include <freerdp/api.h>
 #include <freerdp/freerdp.h>
 
-#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
index 906f966..808ea07 100644 (file)
@@ -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 */
index 1953004..67bc545 100644 (file)
@@ -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;
index 300cced..0dfb94a 100644 (file)
@@ -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;
                        }
 
index 498bc23..bb06111 100644 (file)
@@ -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;
                        }
 
index eb253a7..fbe0de6 100644 (file)
@@ -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;
                        }
 
index d40869c..1716ec3 100644 (file)
@@ -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);
index 063833b..ccf76da 100644 (file)
@@ -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);
 
index 2f9b3c1..9bfd866 100644 (file)
@@ -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