diff options
Diffstat (limited to 'src/rdp/rdp_settings.c')
-rw-r--r-- | src/rdp/rdp_settings.c | 2278 |
1 files changed, 2278 insertions, 0 deletions
diff --git a/src/rdp/rdp_settings.c b/src/rdp/rdp_settings.c new file mode 100644 index 0000000..ecb1dcc --- /dev/null +++ b/src/rdp/rdp_settings.c @@ -0,0 +1,2278 @@ +/* BSD-2-Clause license + * + * Copyright (c) 2018-2023 NST <www.newinfosec.ru>, sss <sss at dark-alexandr dot net>. + * + */ + +#include <stdbool.h> +#include <stddef.h> + +#include <webrdp_module_api.h> +#include <webrdp_core_api.h> + +#include "rdp_backend_api.h" +#include "rdp_impl.h" + +/* this variable used in integer settng name field to indicate used setting */ +static const char *setting_used = "1"; + +bool +rdp_set_setting_str(backend_setting_str *setting, void *internals) +{ + rdp_internals *i = internals; +#ifdef DEBUG + { + char buf[128]; + snprintf(buf, 127, + "rdp backend handling setting string: \"%s: %s\"", + setting->name, setting->value); + i->core->api_utils->log_msg( + (const uint8_t *)buf, strlen(buf), wrdp_log_level_trace, 0); + } +#endif /* DEBUG */ + if (!strcmp(setting->name, "host")) + { + free(i->my_settings.host.value); + i->my_settings.host.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "pcb")) + { + /* + free (i->my_settings.pcb.value); + i->my_settings.pcb.value = strdup (setting->value); */ + return true; + } + else if (!strcmp(setting->name, "user") && setting->value) + { + free(i->my_settings.user.value); + i->my_settings.user.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "password") && setting->value) + { + free(i->my_settings.password.value); + i->my_settings.password.value = strdup(setting->value); + return true; + } + + /* handle int settings passed as strings */ + if (!strcmp(setting->name, "port")) + { + i->my_settings.port.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.port.value = atoll(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "width")) + { + i->my_settings.width.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.width.value = atoll(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "height")) + { + i->my_settings.height.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.height.value = atoll(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "perf")) + { + i->my_settings.perf.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.perf.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "fntlm")) + { + i->my_settings.fntlm.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.fntlm.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "nowallp")) + { + i->my_settings.nowallp.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.nowallp.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "nowdrag")) + { + i->my_settings.nowdrag.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.nowdrag.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "nomani")) + { + i->my_settings.nomani.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.nomani.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "notheme")) + { + i->my_settings.notheme.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.notheme.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "nonla")) + { + i->my_settings.nonla.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.nonla.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "notls")) + { + i->my_settings.notls.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.notls.value = atoi(setting->value); + } + return true; + } + + /*new settings from freerdp header (strings) begin */ + else if (!strcmp(setting->name, "Domain") && setting->value) + { + free(i->my_settings.Domain.value); + i->my_settings.Domain.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "PasswordHash") && setting->value) + { + free(i->my_settings.PasswordHash.value); + i->my_settings.PasswordHash.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "AcceptedCert") && setting->value) + { + free(i->my_settings.AcceptedCert.value); + i->my_settings.AcceptedCert.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "ClientHostname") && setting->value) + { + free(i->my_settings.ClientHostname.value); + i->my_settings.ClientHostname.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "ClientProductId") && setting->value) + { + free(i->my_settings.ClientProductId.value); + i->my_settings.ClientProductId.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "AlternateShell") && setting->value) + { + free(i->my_settings.AlternateShell.value); + i->my_settings.AlternateShell.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "ShellWorkingDirectory") + && setting->value) + { + free(i->my_settings.ShellWorkingDirectory.value); + i->my_settings.ShellWorkingDirectory.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "ClientAddress") && setting->value) + { + free(i->my_settings.ClientAddress.value); + i->my_settings.ClientAddress.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "ClientDir") && setting->value) + { + free(i->my_settings.ClientDir.value); + i->my_settings.ClientDir.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "DynamicDSTTimeZoneKeyName") + && setting->value) + { + free(i->my_settings.DynamicDSTTimeZoneKeyName.value); + i->my_settings.DynamicDSTTimeZoneKeyName.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "RemoteAssistanceSessionId") + && setting->value) + { + free(i->my_settings.RemoteAssistanceSessionId.value); + i->my_settings.RemoteAssistanceSessionId.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "RemoteAssistancePassStub") + && setting->value) + { + free(i->my_settings.RemoteAssistancePassStub.value); + i->my_settings.RemoteAssistancePassStub.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "RemoteAssistancePassword") + && setting->value) + { + free(i->my_settings.RemoteAssistancePassword.value); + i->my_settings.RemoteAssistancePassword.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "RemoteAssistanceRCTicket") + && setting->value) + { + free(i->my_settings.RemoteAssistanceRCTicket.value); + i->my_settings.RemoteAssistanceRCTicket.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "AuthenticationServiceClass") + && setting->value) + { + free(i->my_settings.AuthenticationServiceClass.value); + i->my_settings.AuthenticationServiceClass.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "AllowedTlsCiphers") && setting->value) + { + free(i->my_settings.AllowedTlsCiphers.value); + i->my_settings.AllowedTlsCiphers.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "NtlmSamFile") && setting->value) + { + free(i->my_settings.NtlmSamFile.value); + i->my_settings.NtlmSamFile.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "PreconnectionBlob") && setting->value) + { + free(i->my_settings.PreconnectionBlob.value); + i->my_settings.PreconnectionBlob.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "RedirectionAcceptedCert") + && setting->value) + { + free(i->my_settings.RedirectionAcceptedCert.value); + i->my_settings.RedirectionAcceptedCert.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "KerberosKdc") && setting->value) + { + free(i->my_settings.KerberosKdc.value); + i->my_settings.KerberosKdc.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "KerberosRealm") && setting->value) + { + free(i->my_settings.KerberosRealm.value); + i->my_settings.KerberosRealm.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "CertificateName") && setting->value) + { + free(i->my_settings.CertificateName.value); + i->my_settings.CertificateName.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "CertificateFile") && setting->value) + { + free(i->my_settings.CertificateFile.value); + i->my_settings.CertificateFile.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "PrivateKeyFile") && setting->value) + { + free(i->my_settings.PrivateKeyFile.value); + i->my_settings.PrivateKeyFile.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "CertificateContent") && setting->value) + { + free(i->my_settings.CertificateContent.value); + i->my_settings.CertificateContent.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "PrivateKeyContent") && setting->value) + { + free(i->my_settings.PrivateKeyContent.value); + i->my_settings.PrivateKeyContent.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "WindowTitle") && setting->value) + { + free(i->my_settings.WindowTitle.value); + i->my_settings.WindowTitle.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "WmClass") && setting->value) + { + free(i->my_settings.WmClass.value); + i->my_settings.WmClass.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "ComputerName") && setting->value) + { + free(i->my_settings.ComputerName.value); + i->my_settings.ComputerName.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "ConnectionFile") && setting->value) + { + free(i->my_settings.ConnectionFile.value); + i->my_settings.ConnectionFile.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "AssistanceFile") && setting->value) + { + free(i->my_settings.AssistanceFile.value); + i->my_settings.AssistanceFile.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "HomePath") && setting->value) + { + free(i->my_settings.HomePath.value); + i->my_settings.HomePath.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "ConfigPath") && setting->value) + { + free(i->my_settings.ConfigPath.value); + i->my_settings.ConfigPath.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "CurrentPath") && setting->value) + { + free(i->my_settings.CurrentPath.value); + i->my_settings.CurrentPath.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "DumpRemoteFxFile") && setting->value) + { + free(i->my_settings.DumpRemoteFxFile.value); + i->my_settings.DumpRemoteFxFile.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "PlayRemoteFxFile") && setting->value) + { + free(i->my_settings.PlayRemoteFxFile.value); + i->my_settings.PlayRemoteFxFile.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "GatewayHostname") && setting->value) + { + free(i->my_settings.GatewayHostname.value); + i->my_settings.GatewayHostname.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "GatewayUsername") && setting->value) + { + free(i->my_settings.GatewayUsername.value); + i->my_settings.GatewayUsername.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "GatewayPassword") && setting->value) + { + free(i->my_settings.GatewayPassword.value); + i->my_settings.GatewayPassword.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "GatewayDomain") && setting->value) + { + free(i->my_settings.GatewayDomain.value); + i->my_settings.GatewayDomain.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "GatewayAccessToken") && setting->value) + { + free(i->my_settings.GatewayAccessToken.value); + i->my_settings.GatewayAccessToken.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "GatewayAcceptedCert") + && setting->value) + { + free(i->my_settings.GatewayAcceptedCert.value); + i->my_settings.GatewayAcceptedCert.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "ProxyHostname") && setting->value) + { + free(i->my_settings.ProxyHostname.value); + i->my_settings.ProxyHostname.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "RemoteApplicationName") + && setting->value) + { + free(i->my_settings.RemoteApplicationName.value); + i->my_settings.RemoteApplicationName.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "RemoteApplicationIcon") + && setting->value) + { + free(i->my_settings.RemoteApplicationIcon.value); + i->my_settings.RemoteApplicationIcon.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "RemoteApplicationProgram") + && setting->value) + { + free(i->my_settings.RemoteApplicationProgram.value); + i->my_settings.RemoteApplicationProgram.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "RemoteApplicationFile") + && setting->value) + { + free(i->my_settings.RemoteApplicationFile.value); + i->my_settings.RemoteApplicationFile.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "RemoteApplicationGuid") + && setting->value) + { + free(i->my_settings.RemoteApplicationGuid.value); + i->my_settings.RemoteApplicationGuid.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "RemoteApplicationCmdLine") + && setting->value) + { + free(i->my_settings.RemoteApplicationCmdLine.value); + i->my_settings.RemoteApplicationCmdLine.value + = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "ImeFileName") && setting->value) + { + free(i->my_settings.ImeFileName.value); + i->my_settings.ImeFileName.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "DrivesToRedirect") && setting->value) + { + free(i->my_settings.DrivesToRedirect.value); + i->my_settings.DrivesToRedirect.value = strdup(setting->value); + return true; + } + else if (!strcmp(setting->name, "ActionScript") && setting->value) + { + free(i->my_settings.ActionScript.value); + i->my_settings.ActionScript.value = strdup(setting->value); + return true; + } + /*new settings from freerdp header (strings) end */ + + /* TODO: handle also integer settings passed as strings */ + + /* new settings from freerdp header (integers as string) begin */ + + else if (!strcmp(setting->name, "ServerMode")) + { + i->my_settings.ServerMode.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.ServerMode.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "WaitForOutputBufferFlush")) + { + i->my_settings.WaitForOutputBufferFlush.name + = (char *)setting_used; + if (setting->value) + { + i->my_settings.WaitForOutputBufferFlush.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "MaxTimeInCheckLoop")) + { + i->my_settings.MaxTimeInCheckLoop.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.MaxTimeInCheckLoop.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "DesktopWidth")) + { + i->my_settings.DesktopWidth.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.DesktopWidth.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "DesktopHeight")) + { + i->my_settings.DesktopHeight.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.DesktopHeight.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "Workarea")) + { + i->my_settings.Workarea.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.Workarea.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "Fullscreen")) + { + i->my_settings.Fullscreen.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.Fullscreen.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "GrabKeyboard")) + { + i->my_settings.GrabKeyboard.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.GrabKeyboard.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "Decorations")) + { + i->my_settings.Decorations.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.Decorations.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "RdpVersion")) + { + i->my_settings.RdpVersion.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.RdpVersion.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "ColorDepth")) + { + i->my_settings.ColorDepth.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.ColorDepth.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "ExtSecurity")) + { + i->my_settings.ExtSecurity.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.ExtSecurity.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "NlaSecurity")) + { + i->my_settings.NlaSecurity.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.NlaSecurity.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "TlsSecurity")) + { + i->my_settings.TlsSecurity.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.TlsSecurity.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "RdpSecurity")) + { + i->my_settings.RdpSecurity.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.RdpSecurity.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "NegotiateSecurityLayer")) + { + i->my_settings.NegotiateSecurityLayer.name + = (char *)setting_used; + if (setting->value) + { + i->my_settings.NegotiateSecurityLayer.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "RestrictedAdminModeRequired")) + { + i->my_settings.RestrictedAdminModeRequired.name + = (char *)setting_used; + if (setting->value) + { + i->my_settings.RestrictedAdminModeRequired.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "MstscCookieMode")) + { + i->my_settings.MstscCookieMode.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.MstscCookieMode.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "CookieMaxLength")) + { + i->my_settings.CookieMaxLength.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.CookieMaxLength.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "ClientBuild")) + { + i->my_settings.ClientBuild.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.ClientBuild.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "KeyboardType")) + { + i->my_settings.KeyboardType.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.KeyboardType.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "KeyboardSubType")) + { + i->my_settings.KeyboardSubType.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.KeyboardSubType.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "KeyboardFunctionKey")) + { + i->my_settings.KeyboardFunctionKey.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.KeyboardFunctionKey.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "KeyboardLayout")) + { + i->my_settings.KeyboardLayout.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.KeyboardLayout.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "UseRdpSecurityLayer")) + { + i->my_settings.UseRdpSecurityLayer.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.UseRdpSecurityLayer.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "SaltedChecksum")) + { + i->my_settings.SaltedChecksum.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.SaltedChecksum.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "ServerPort")) + { + i->my_settings.ServerPort.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.ServerPort.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "GatewayPort")) + { + i->my_settings.GatewayPort.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.GatewayPort.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "DesktopResize")) + { + i->my_settings.DesktopResize.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.DesktopResize.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "ToggleFullscreen")) + { + i->my_settings.ToggleFullscreen.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.ToggleFullscreen.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "Floatbar")) + { + i->my_settings.Floatbar.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.Floatbar.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "DesktopPosX")) + { + i->my_settings.DesktopPosX.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.DesktopPosX.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "DesktopPosY")) + { + i->my_settings.DesktopPosY.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.DesktopPosY.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "SoftwareGdi")) + { + i->my_settings.SoftwareGdi.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.SoftwareGdi.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "UnmapButtons")) + { + i->my_settings.UnmapButtons.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.UnmapButtons.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "PerformanceFlags")) + { + i->my_settings.PerformanceFlags.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.PerformanceFlags.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "AllowFontSmoothing")) + { + i->my_settings.AllowFontSmoothing.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.AllowFontSmoothing.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "AllowDesktopComposition")) + { + i->my_settings.AllowDesktopComposition.name + = (char *)setting_used; + if (setting->value) + { + i->my_settings.AllowDesktopComposition.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "DisableWallpaper")) + { + i->my_settings.DisableWallpaper.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.DisableWallpaper.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "DisableFullWindowDrag")) + { + i->my_settings.DisableFullWindowDrag.name + = (char *)setting_used; + if (setting->value) + { + i->my_settings.DisableFullWindowDrag.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "DisableMenuAnims")) + { + i->my_settings.DisableMenuAnims.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.DisableMenuAnims.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "DisableThemes")) + { + i->my_settings.DisableThemes.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.DisableThemes.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "ConnectionType")) + { + i->my_settings.ConnectionType.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.ConnectionType.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "EncryptionMethods")) + { + i->my_settings.EncryptionMethods.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.EncryptionMethods.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "EncryptionLevel")) + { + i->my_settings.EncryptionLevel.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.EncryptionLevel.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "FIPSMode")) + { + i->my_settings.FIPSMode.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.FIPSMode.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "CompressionEnabled")) + { + i->my_settings.CompressionEnabled.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.CompressionEnabled.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "LogonNotify")) + { + i->my_settings.LogonNotify.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.LogonNotify.value = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "BrushSupportLevel")) + { + i->my_settings.BrushSupportLevel.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.BrushSupportLevel.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "RemoteApplicationMode")) + { + i->my_settings.RemoteApplicationMode.name + = (char *)setting_used; + if (setting->value) + { + i->my_settings.RemoteApplicationMode.value + = atoi(setting->value); + } + return true; + } + else if (!strcmp(setting->name, "TcpAckTimeout")) + { + i->my_settings.TcpAckTimeout.name = (char *)setting_used; + if (setting->value) + { + i->my_settings.TcpAckTimeout.value + = atoi(setting->value); + } + return true; + } + /* new settings from freerdp header (integers as string) end */ + + /* error: unhandled setting */ + { + char buf[128]; + snprintf(buf, 127, "rdp_module: unknown setting string: %s", + setting->name); + i->core->api_utils->log_msg((const uint8_t *)buf, strlen(buf), + wrdp_log_level_warning, 0); + } + return false; +} + +bool +rdp_set_setting_int(backend_setting_int *setting, void *internals) +{ + rdp_internals *i = internals; +#ifdef DEBUG + { + char buf[128]; + snprintf(buf, 127, + "rdp backend handling setting int: \"%s: %ld\"", + setting->name, setting->value); + i->core->api_utils->log_msg( + (const uint8_t *)buf, strlen(buf), wrdp_log_level_trace, 0); + } +#endif + if (!strcmp(setting->name, "port")) + { + i->my_settings.port.name = (char *)setting_used; + i->my_settings.port.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "width")) + { + i->my_settings.width.name = (char *)setting_used; + i->my_settings.width.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "height")) + { + i->my_settings.height.name = (char *)setting_used; + i->my_settings.height.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "perf")) + { + i->my_settings.perf.name = (char *)setting_used; + i->my_settings.perf.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "fntlm")) + { + i->my_settings.fntlm.name = (char *)setting_used; + i->my_settings.fntlm.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "nowallp")) + { + i->my_settings.nowallp.name = (char *)setting_used; + i->my_settings.nowallp.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "nowdrag")) + { + i->my_settings.nowdrag.name = (char *)setting_used; + i->my_settings.nowdrag.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "nomani")) + { + i->my_settings.nomani.name = (char *)setting_used; + i->my_settings.nomani.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "notheme")) + { + i->my_settings.notheme.name = (char *)setting_used; + i->my_settings.notheme.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "nonla")) + { + i->my_settings.nonla.name = (char *)setting_used; + i->my_settings.nonla.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "notls")) + { + i->my_settings.notls.name = (char *)setting_used; + i->my_settings.notls.value = setting->value; + return true; + } + + /* new settings from freerdp header (integers) begin */ + else if (!strcmp(setting->name, "ServerMode")) + { + i->my_settings.ServerMode.name = (char *)setting_used; + i->my_settings.ServerMode.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "WaitForOutputBufferFlush")) + { + i->my_settings.WaitForOutputBufferFlush.name + = (char *)setting_used; + i->my_settings.WaitForOutputBufferFlush.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "MaxTimeInCheckLoop")) + { + i->my_settings.MaxTimeInCheckLoop.name = (char *)setting_used; + i->my_settings.MaxTimeInCheckLoop.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "DesktopWidth")) + { + i->my_settings.DesktopWidth.name = (char *)setting_used; + i->my_settings.DesktopWidth.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "DesktopHeight")) + { + i->my_settings.DesktopHeight.name = (char *)setting_used; + i->my_settings.DesktopHeight.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "Workarea")) + { + i->my_settings.Workarea.name = (char *)setting_used; + i->my_settings.Workarea.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "Fullscreen")) + { + i->my_settings.Fullscreen.name = (char *)setting_used; + i->my_settings.Fullscreen.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "GrabKeyboard")) + { + i->my_settings.GrabKeyboard.name = (char *)setting_used; + i->my_settings.GrabKeyboard.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "Decorations")) + { + i->my_settings.Decorations.name = (char *)setting_used; + i->my_settings.Decorations.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "RdpVersion")) + { + i->my_settings.RdpVersion.name = (char *)setting_used; + i->my_settings.RdpVersion.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "ColorDepth")) + { + i->my_settings.ColorDepth.name = (char *)setting_used; + i->my_settings.ColorDepth.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "ExtSecurity")) + { + i->my_settings.ExtSecurity.name = (char *)setting_used; + i->my_settings.ExtSecurity.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "NlaSecurity")) + { + i->my_settings.NlaSecurity.name = (char *)setting_used; + i->my_settings.NlaSecurity.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "TlsSecurity")) + { + i->my_settings.TlsSecurity.name = (char *)setting_used; + i->my_settings.TlsSecurity.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "RdpSecurity")) + { + i->my_settings.RdpSecurity.name = (char *)setting_used; + i->my_settings.RdpSecurity.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "NegotiateSecurityLayer")) + { + i->my_settings.NegotiateSecurityLayer.name + = (char *)setting_used; + i->my_settings.NegotiateSecurityLayer.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "RestrictedAdminModeRequired")) + { + i->my_settings.RestrictedAdminModeRequired.name + = (char *)setting_used; + i->my_settings.RestrictedAdminModeRequired.value + = setting->value; + return true; + } + else if (!strcmp(setting->name, "MstscCookieMode")) + { + i->my_settings.MstscCookieMode.name = (char *)setting_used; + i->my_settings.MstscCookieMode.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "CookieMaxLength")) + { + i->my_settings.CookieMaxLength.name = (char *)setting_used; + i->my_settings.CookieMaxLength.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "ClientBuild")) + { + i->my_settings.ClientBuild.name = (char *)setting_used; + i->my_settings.ClientBuild.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "KeyboardType")) + { + i->my_settings.KeyboardType.name = (char *)setting_used; + i->my_settings.KeyboardType.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "KeyboardSubType")) + { + i->my_settings.KeyboardSubType.name = (char *)setting_used; + i->my_settings.KeyboardSubType.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "KeyboardFunctionKey")) + { + i->my_settings.KeyboardFunctionKey.name = (char *)setting_used; + i->my_settings.KeyboardFunctionKey.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "KeyboardLayout")) + { + i->my_settings.KeyboardLayout.name = (char *)setting_used; + i->my_settings.KeyboardLayout.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "UseRdpSecurityLayer")) + { + i->my_settings.UseRdpSecurityLayer.name = (char *)setting_used; + i->my_settings.UseRdpSecurityLayer.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "SaltedChecksum")) + { + i->my_settings.SaltedChecksum.name = (char *)setting_used; + i->my_settings.SaltedChecksum.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "ServerPort")) + { + i->my_settings.ServerPort.name = (char *)setting_used; + i->my_settings.ServerPort.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "GatewayPort")) + { + i->my_settings.GatewayPort.name = (char *)setting_used; + i->my_settings.GatewayPort.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "DesktopResize")) + { + i->my_settings.DesktopResize.name = (char *)setting_used; + i->my_settings.DesktopResize.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "ToggleFullscreen")) + { + i->my_settings.ToggleFullscreen.name = (char *)setting_used; + i->my_settings.ToggleFullscreen.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "Floatbar")) + { + i->my_settings.Floatbar.name = (char *)setting_used; + i->my_settings.Floatbar.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "DesktopPosX")) + { + i->my_settings.DesktopPosX.name = (char *)setting_used; + i->my_settings.DesktopPosX.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "DesktopPosY")) + { + i->my_settings.DesktopPosY.name = (char *)setting_used; + i->my_settings.DesktopPosY.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "SoftwareGdi")) + { + i->my_settings.SoftwareGdi.name = (char *)setting_used; + i->my_settings.SoftwareGdi.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "UnmapButtons")) + { + i->my_settings.UnmapButtons.name = (char *)setting_used; + i->my_settings.UnmapButtons.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "PerformanceFlags")) + { + i->my_settings.PerformanceFlags.name = (char *)setting_used; + i->my_settings.PerformanceFlags.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "AllowFontSmoothing")) + { + i->my_settings.AllowFontSmoothing.name = (char *)setting_used; + i->my_settings.AllowFontSmoothing.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "AllowDesktopComposition")) + { + i->my_settings.AllowDesktopComposition.name + = (char *)setting_used; + i->my_settings.AllowDesktopComposition.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "DisableWallpaper")) + { + i->my_settings.DisableWallpaper.name = (char *)setting_used; + i->my_settings.DisableWallpaper.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "DisableFullWindowDrag")) + { + i->my_settings.DisableFullWindowDrag.name + = (char *)setting_used; + i->my_settings.DisableFullWindowDrag.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "DisableMenuAnims")) + { + i->my_settings.DisableMenuAnims.name = (char *)setting_used; + i->my_settings.DisableMenuAnims.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "DisableThemes")) + { + i->my_settings.DisableThemes.name = (char *)setting_used; + i->my_settings.DisableThemes.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "ConnectionType")) + { + i->my_settings.ConnectionType.name = (char *)setting_used; + i->my_settings.ConnectionType.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "EncryptionMethods")) + { + i->my_settings.EncryptionMethods.name = (char *)setting_used; + i->my_settings.EncryptionMethods.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "EncryptionLevel")) + { + i->my_settings.EncryptionLevel.name = (char *)setting_used; + i->my_settings.EncryptionLevel.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "FIPSMode")) + { + i->my_settings.FIPSMode.name = (char *)setting_used; + i->my_settings.FIPSMode.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "CompressionEnabled")) + { + i->my_settings.CompressionEnabled.name = (char *)setting_used; + i->my_settings.CompressionEnabled.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "LogonNotify")) + { + i->my_settings.LogonNotify.name = (char *)setting_used; + i->my_settings.LogonNotify.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "BrushSupportLevel")) + { + i->my_settings.BrushSupportLevel.name = (char *)setting_used; + i->my_settings.BrushSupportLevel.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "RemoteApplicationMode")) + { + i->my_settings.RemoteApplicationMode.name + = (char *)setting_used; + i->my_settings.RemoteApplicationMode.value = setting->value; + return true; + } + else if (!strcmp(setting->name, "TcpAckTimeout")) + { + i->my_settings.TcpAckTimeout.name = (char *)setting_used; + i->my_settings.TcpAckTimeout.value = setting->value; + return true; + } + + /* new settings from freerdp header (integers) end */ + + /* error: unhandled setting */ + { + char buf[128]; + snprintf(buf, 127, "rdp_module: unknown setting int: %s", + setting->name); + i->core->api_utils->log_msg((const uint8_t *)buf, strlen(buf), + wrdp_log_level_warning, 0); + } + return false; +} + +void +rdp_settings_free(rdp_internals *internals) +{ + rdp_internals *i = internals; + if (i->my_settings.host.value) + { + free((void *)i->my_settings.host.value); + } + if (i->my_settings.pcb.value) + { + free((void *)i->my_settings.pcb.value); + } + if (i->my_settings.user.value) + { + free((void *)i->my_settings.user.value); + } + if (i->my_settings.password.value) + { + free((void *)i->my_settings.password.value); + } + /* new */ + if (i->my_settings.Domain.value) + { + free((void *)i->my_settings.Domain.value); + } + if (i->my_settings.PasswordHash.value) + { + free((void *)i->my_settings.PasswordHash.value); + } + if (i->my_settings.AcceptedCert.value) + { + free((void *)i->my_settings.AcceptedCert.value); + } + if (i->my_settings.ClientHostname.value) + { + free((void *)i->my_settings.ClientHostname.value); + } + if (i->my_settings.ClientProductId.value) + { + free((void *)i->my_settings.ClientProductId.value); + } + if (i->my_settings.AlternateShell.value) + { + free((void *)i->my_settings.AlternateShell.value); + } + if (i->my_settings.ShellWorkingDirectory.value) + { + free((void *)i->my_settings.ShellWorkingDirectory.value); + } + if (i->my_settings.ClientAddress.value) + { + free((void *)i->my_settings.ClientAddress.value); + } + if (i->my_settings.ClientDir.value) + { + free((void *)i->my_settings.ClientDir.value); + } + if (i->my_settings.DynamicDSTTimeZoneKeyName.value) + { + free((void *)i->my_settings.DynamicDSTTimeZoneKeyName.value); + } + if (i->my_settings.RemoteAssistanceSessionId.value) + { + free((void *)i->my_settings.RemoteAssistanceSessionId.value); + } + if (i->my_settings.RemoteAssistancePassStub.value) + { + free((void *)i->my_settings.RemoteAssistancePassStub.value); + } + if (i->my_settings.RemoteAssistancePassword.value) + { + free((void *)i->my_settings.RemoteAssistancePassword.value); + } + if (i->my_settings.RemoteAssistanceRCTicket.value) + { + free((void *)i->my_settings.RemoteAssistanceRCTicket.value); + } + if (i->my_settings.AuthenticationServiceClass.value) + { + free((void *)i->my_settings.AuthenticationServiceClass.value); + } + if (i->my_settings.AllowedTlsCiphers.value) + { + free((void *)i->my_settings.AllowedTlsCiphers.value); + } + if (i->my_settings.NtlmSamFile.value) + { + free((void *)i->my_settings.NtlmSamFile.value); + } + if (i->my_settings.PreconnectionBlob.value) + { + free((void *)i->my_settings.PreconnectionBlob.value); + } + if (i->my_settings.RedirectionAcceptedCert.value) + { + free((void *)i->my_settings.RedirectionAcceptedCert.value); + } + if (i->my_settings.KerberosKdc.value) + { + free((void *)i->my_settings.KerberosKdc.value); + } + if (i->my_settings.KerberosRealm.value) + { + free((void *)i->my_settings.KerberosRealm.value); + } + if (i->my_settings.CertificateName.value) + { + free((void *)i->my_settings.CertificateName.value); + } + if (i->my_settings.CertificateFile.value) + { + free((void *)i->my_settings.CertificateFile.value); + } + if (i->my_settings.PrivateKeyFile.value) + { + free((void *)i->my_settings.PrivateKeyFile.value); + } + if (i->my_settings.CertificateContent.value) + { + free((void *)i->my_settings.CertificateContent.value); + } + if (i->my_settings.PrivateKeyContent.value) + { + free((void *)i->my_settings.PrivateKeyContent.value); + } + if (i->my_settings.WindowTitle.value) + { + free((void *)i->my_settings.WindowTitle.value); + } + if (i->my_settings.WmClass.value) + { + free((void *)i->my_settings.WmClass.value); + } + if (i->my_settings.ComputerName.value) + { + free((void *)i->my_settings.ComputerName.value); + } + if (i->my_settings.ConnectionFile.value) + { + free((void *)i->my_settings.ConnectionFile.value); + } + if (i->my_settings.AssistanceFile.value) + { + free((void *)i->my_settings.AssistanceFile.value); + } + if (i->my_settings.HomePath.value) + { + free((void *)i->my_settings.HomePath.value); + } + if (i->my_settings.ConfigPath.value) + { + free((void *)i->my_settings.ConfigPath.value); + } + if (i->my_settings.CurrentPath.value) + { + free((void *)i->my_settings.CurrentPath.value); + } + if (i->my_settings.DumpRemoteFxFile.value) + { + free((void *)i->my_settings.DumpRemoteFxFile.value); + } + if (i->my_settings.PlayRemoteFxFile.value) + { + free((void *)i->my_settings.PlayRemoteFxFile.value); + } + if (i->my_settings.GatewayHostname.value) + { + free((void *)i->my_settings.GatewayHostname.value); + } + if (i->my_settings.GatewayUsername.value) + { + free((void *)i->my_settings.GatewayUsername.value); + } + if (i->my_settings.GatewayPassword.value) + { + free((void *)i->my_settings.GatewayPassword.value); + } + if (i->my_settings.GatewayDomain.value) + { + free((void *)i->my_settings.GatewayDomain.value); + } + if (i->my_settings.GatewayAccessToken.value) + { + free((void *)i->my_settings.GatewayAccessToken.value); + } + if (i->my_settings.GatewayAcceptedCert.value) + { + free((void *)i->my_settings.GatewayAcceptedCert.value); + } + if (i->my_settings.ProxyHostname.value) + { + free((void *)i->my_settings.ProxyHostname.value); + } + if (i->my_settings.RemoteApplicationName.value) + { + free((void *)i->my_settings.RemoteApplicationName.value); + } + if (i->my_settings.RemoteApplicationIcon.value) + { + free((void *)i->my_settings.RemoteApplicationIcon.value); + } + if (i->my_settings.RemoteApplicationProgram.value) + { + free((void *)i->my_settings.RemoteApplicationProgram.value); + } + if (i->my_settings.RemoteApplicationFile.value) + { + free((void *)i->my_settings.RemoteApplicationFile.value); + } + if (i->my_settings.RemoteApplicationGuid.value) + { + free((void *)i->my_settings.RemoteApplicationGuid.value); + } + if (i->my_settings.RemoteApplicationCmdLine.value) + { + free((void *)i->my_settings.RemoteApplicationCmdLine.value); + } + if (i->my_settings.ImeFileName.value) + { + free((void *)i->my_settings.ImeFileName.value); + } + if (i->my_settings.DrivesToRedirect.value) + { + free((void *)i->my_settings.DrivesToRedirect.value); + } + if (i->my_settings.ActionScript.value) + { + free((void *)i->my_settings.ActionScript.value); + } +} + +bool +rdp_init_settings(void *internals) +{ + rdp_internals *i = internals; + rdpSettings *s = i->instance->context->settings; + + /* via are not server here ) */ + s->ServerMode = FALSE; + + s->TlsSecurity = !(i->my_settings.notls.value); + if (i->my_settings.host.value && i->my_settings.host.value[0]) + { + s->ServerHostname = strdup((char *)i->my_settings.host.value); + } + else + { + const char *msg = "rdp_module: server hostname does not set."; + i->core->api_utils->log_msg( + (const uint8_t *)msg, strlen(msg), wrdp_log_level_error, 0); + return FALSE; + } + if (i->my_settings.port.name && i->my_settings.port.name[0] == '1') + { + s->ServerPort = i->my_settings.port.value; + } + if (i->my_settings.user.value && i->my_settings.user.value[0]) + { + s->Username = strdup((char *)i->my_settings.user.value); + } + if (i->my_settings.password.value && i->my_settings.password.value[0]) + { + s->Password = strdup((char *)i->my_settings.password.value); + } + if (!i->my_settings.user.value && !i->my_settings.password.value) + { + /* TODO: disable authentication */ + } + if (i->my_settings.nowallp.name + && i->my_settings.nowallp.name[0] == '1') + { + s->DisableWallpaper = i->my_settings.nowallp.value; + s->PerformanceFlags |= PERF_DISABLE_WALLPAPER; + } + if (i->my_settings.nowdrag.name + && i->my_settings.nowdrag.name[0] == '1') + { + s->DisableFullWindowDrag = i->my_settings.nowdrag.value; + s->PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG; + } + if (i->my_settings.nomani.name && i->my_settings.nomani.name[0] == '1') + { + s->DisableMenuAnims = i->my_settings.nomani.value; + s->PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS; + } + if (i->my_settings.notheme.name + && i->my_settings.notheme.name[0] == '1') + { + s->DisableThemes = i->my_settings.notheme.value; + s->PerformanceFlags |= PERF_DISABLE_THEMING; + } + if (i->my_settings.nonla.name && i->my_settings.nonla.name[0] == '1') + { + s->NlaSecurity = !(i->my_settings.nonla.value); + } + if (i->my_settings.width.name && i->my_settings.width.name[0] == '1') + { + s->DesktopWidth = i->my_settings.width.value; + } + if (i->my_settings.height.name && i->my_settings.height.name[0] == '1') + { + s->DesktopHeight = i->my_settings.height.value; + } + if (i->my_settings.pcb.value && i->my_settings.pcb.value[0]) + { + s->SendPreconnectionPdu = TRUE; + s->PreconnectionBlob = strdup(i->my_settings.pcb.value); + } + + s->IgnoreCertificate = TRUE; + + if (i->my_settings.perf.name && i->my_settings.perf.name[0] == '1') + { + switch (i->my_settings.perf.value) + { + case 0: + //LAN + s->PerformanceFlags = PERF_FLAG_NONE; + s->ConnectionType = CONNECTION_TYPE_LAN; + s->AllowFontSmoothing = TRUE; + break; + case 1: + //Broadband + s->PerformanceFlags = PERF_DISABLE_WALLPAPER; + s->ConnectionType + = CONNECTION_TYPE_BROADBAND_HIGH; + break; + case 2: + //Modem + s->PerformanceFlags + = PERF_DISABLE_WALLPAPER + | PERF_DISABLE_FULLWINDOWDRAG + | PERF_DISABLE_MENUANIMATIONS + | PERF_DISABLE_THEMING; + s->ConnectionType = CONNECTION_TYPE_MODEM; + break; + } + } + + /* new settings from freerdp header (strings) begin */ + + if (i->my_settings.Domain.value) + { + s->Domain = strdup(i->my_settings.Domain.value); + } + if (i->my_settings.PasswordHash.value) + { + s->PasswordHash = strdup(i->my_settings.PasswordHash.value); + } + if (i->my_settings.AcceptedCert.value) + { + s->AcceptedCert = strdup(i->my_settings.AcceptedCert.value); + } + if (i->my_settings.ClientHostname.value) + { + s->ClientHostname = strdup(i->my_settings.ClientHostname.value); + } + if (i->my_settings.ClientProductId.value) + { + s->ClientProductId + = strdup(i->my_settings.ClientProductId.value); + } + if (i->my_settings.AlternateShell.value) + { + s->AlternateShell = strdup(i->my_settings.AlternateShell.value); + } + if (i->my_settings.ShellWorkingDirectory.value) + { + s->ShellWorkingDirectory + = strdup(i->my_settings.ShellWorkingDirectory.value); + } + if (i->my_settings.ClientAddress.value) + { + s->ClientAddress = strdup(i->my_settings.ClientAddress.value); + } + if (i->my_settings.ClientDir.value) + { + s->ClientDir = strdup(i->my_settings.ClientDir.value); + } + if (i->my_settings.DynamicDSTTimeZoneKeyName.value) + { + s->DynamicDSTTimeZoneKeyName + = strdup(i->my_settings.DynamicDSTTimeZoneKeyName.value); + } + if (i->my_settings.RemoteAssistanceSessionId.value) + { + s->RemoteAssistanceSessionId + = strdup(i->my_settings.RemoteAssistanceSessionId.value); + } + if (i->my_settings.RemoteAssistancePassStub.value) + { + s->RemoteAssistancePassStub + = strdup(i->my_settings.RemoteAssistancePassStub.value); + } + if (i->my_settings.RemoteAssistancePassword.value) + { + s->RemoteAssistancePassword + = strdup(i->my_settings.RemoteAssistancePassword.value); + } + if (i->my_settings.RemoteAssistanceRCTicket.value) + { + s->RemoteAssistanceRCTicket + = strdup(i->my_settings.RemoteAssistanceRCTicket.value); + } + if (i->my_settings.AuthenticationServiceClass.value) + { + s->AuthenticationServiceClass + = strdup(i->my_settings.AuthenticationServiceClass.value); + } + if (i->my_settings.AllowedTlsCiphers.value) + { + s->AllowedTlsCiphers + = strdup(i->my_settings.AllowedTlsCiphers.value); + } + if (i->my_settings.NtlmSamFile.value) + { + s->NtlmSamFile = strdup(i->my_settings.NtlmSamFile.value); + } + if (i->my_settings.PreconnectionBlob.value) + { + s->PreconnectionBlob + = strdup(i->my_settings.PreconnectionBlob.value); + } + if (i->my_settings.RedirectionAcceptedCert.value) + { + s->RedirectionAcceptedCert + = strdup(i->my_settings.RedirectionAcceptedCert.value); + } + if (i->my_settings.KerberosKdc.value) + { + s->KerberosKdc = strdup(i->my_settings.KerberosKdc.value); + } + if (i->my_settings.KerberosRealm.value) + { + s->KerberosRealm = strdup(i->my_settings.KerberosRealm.value); + } + if (i->my_settings.CertificateName.value) + { + s->CertificateName + = strdup(i->my_settings.CertificateName.value); + } + if (i->my_settings.CertificateFile.value) + { + s->CertificateFile + = strdup(i->my_settings.CertificateFile.value); + } + if (i->my_settings.PrivateKeyFile.value) + { + s->PrivateKeyFile = strdup(i->my_settings.PrivateKeyFile.value); + } + if (i->my_settings.CertificateContent.value) + { + s->CertificateContent + = strdup(i->my_settings.CertificateContent.value); + } + if (i->my_settings.PrivateKeyContent.value) + { + s->PrivateKeyContent + = strdup(i->my_settings.PrivateKeyContent.value); + } + if (i->my_settings.WindowTitle.value) + { + s->WindowTitle = strdup(i->my_settings.WindowTitle.value); + } + if (i->my_settings.WmClass.value) + { + s->WmClass = strdup(i->my_settings.WmClass.value); + } + if (i->my_settings.ComputerName.value) + { + s->ComputerName = strdup(i->my_settings.ComputerName.value); + } + if (i->my_settings.ConnectionFile.value) + { + s->ConnectionFile = strdup(i->my_settings.ConnectionFile.value); + } + if (i->my_settings.AssistanceFile.value) + { + s->AssistanceFile = strdup(i->my_settings.AssistanceFile.value); + } + if (i->my_settings.HomePath.value) + { + s->HomePath = strdup(i->my_settings.HomePath.value); + } + if (i->my_settings.ConfigPath.value) + { + s->ConfigPath = strdup(i->my_settings.ConfigPath.value); + } + if (i->my_settings.CurrentPath.value) + { + s->CurrentPath = strdup(i->my_settings.CurrentPath.value); + } + if (i->my_settings.DumpRemoteFxFile.value) + { + s->DumpRemoteFxFile + = strdup(i->my_settings.DumpRemoteFxFile.value); + } + if (i->my_settings.PlayRemoteFxFile.value) + { + s->PlayRemoteFxFile + = strdup(i->my_settings.PlayRemoteFxFile.value); + } + if (i->my_settings.GatewayHostname.value) + { + s->GatewayHostname + = strdup(i->my_settings.GatewayHostname.value); + } + if (i->my_settings.GatewayUsername.value) + { + s->GatewayUsername + = strdup(i->my_settings.GatewayUsername.value); + } + if (i->my_settings.GatewayPassword.value) + { + s->GatewayPassword + = strdup(i->my_settings.GatewayPassword.value); + } + if (i->my_settings.GatewayDomain.value) + { + s->GatewayDomain = strdup(i->my_settings.GatewayDomain.value); + } + if (i->my_settings.GatewayAccessToken.value) + { + s->GatewayAccessToken + = strdup(i->my_settings.GatewayAccessToken.value); + } + if (i->my_settings.GatewayAcceptedCert.value) + { + s->GatewayAcceptedCert + = strdup(i->my_settings.GatewayAcceptedCert.value); + } + if (i->my_settings.ProxyHostname.value) + { + s->ProxyHostname = strdup(i->my_settings.ProxyHostname.value); + } + if (i->my_settings.RemoteApplicationName.value) + { + s->RemoteApplicationName + = strdup(i->my_settings.RemoteApplicationName.value); + } + if (i->my_settings.RemoteApplicationIcon.value) + { + s->RemoteApplicationIcon + = strdup(i->my_settings.RemoteApplicationIcon.value); + } + if (i->my_settings.RemoteApplicationProgram.value) + { + s->RemoteApplicationProgram + = strdup(i->my_settings.RemoteApplicationProgram.value); + } + if (i->my_settings.RemoteApplicationFile.value) + { + s->RemoteApplicationFile + = strdup(i->my_settings.RemoteApplicationFile.value); + } + if (i->my_settings.RemoteApplicationGuid.value) + { + s->RemoteApplicationGuid + = strdup(i->my_settings.RemoteApplicationGuid.value); + } + if (i->my_settings.RemoteApplicationCmdLine.value) + { + s->RemoteApplicationCmdLine + = strdup(i->my_settings.RemoteApplicationCmdLine.value); + } + if (i->my_settings.ImeFileName.value) + { + s->ImeFileName = strdup(i->my_settings.ImeFileName.value); + } + if (i->my_settings.DrivesToRedirect.value) + { + s->DrivesToRedirect + = strdup(i->my_settings.DrivesToRedirect.value); + } + if (i->my_settings.ActionScript.value) + { + s->ActionScript = strdup(i->my_settings.ActionScript.value); + } + + /* new settings from freerdp header (strings) end */ + + /* new settings from freerdp header (integers) begin */ + + if (i->my_settings.ServerMode.name + && i->my_settings.ServerMode.name[0] == '1') + { + s->ServerMode = i->my_settings.ServerMode.value; + } + if (i->my_settings.WaitForOutputBufferFlush.name + && i->my_settings.WaitForOutputBufferFlush.name[0] == '1') + { + s->WaitForOutputBufferFlush + = i->my_settings.WaitForOutputBufferFlush.value; + } + if (i->my_settings.MaxTimeInCheckLoop.name + && i->my_settings.MaxTimeInCheckLoop.name[0] == '1') + { + s->MaxTimeInCheckLoop = i->my_settings.MaxTimeInCheckLoop.value; + } + if (i->my_settings.DesktopWidth.name + && i->my_settings.DesktopWidth.name[0] == '1') + { + s->DesktopWidth = i->my_settings.DesktopWidth.value; + } + if (i->my_settings.Workarea.name + && i->my_settings.Workarea.name[0] == '1') + { + s->Workarea = i->my_settings.Workarea.value; + } + if (i->my_settings.Fullscreen.name + && i->my_settings.Fullscreen.name[0] == '1') + { + s->Fullscreen = i->my_settings.Fullscreen.value; + } + if (i->my_settings.GrabKeyboard.name + && i->my_settings.GrabKeyboard.name[0] == '1') + { + s->GrabKeyboard = i->my_settings.GrabKeyboard.value; + } + if (i->my_settings.Decorations.name + && i->my_settings.Decorations.name[0] == '1') + { + s->Decorations = i->my_settings.Decorations.value; + } + if (i->my_settings.RdpVersion.name + && i->my_settings.RdpVersion.name[0] == '1') + { + s->RdpVersion = i->my_settings.RdpVersion.value; + } + if (i->my_settings.ColorDepth.name + && i->my_settings.ColorDepth.name[0] == '1') + { + s->ColorDepth = i->my_settings.ColorDepth.value; + } + if (i->my_settings.ExtSecurity.name + && i->my_settings.ExtSecurity.name[0] == '1') + { + s->ExtSecurity = i->my_settings.ExtSecurity.value; + } + if (i->my_settings.NlaSecurity.name + && i->my_settings.NlaSecurity.name[0] == '1') + { + s->NlaSecurity = i->my_settings.NlaSecurity.value; + } + if (i->my_settings.TlsSecurity.name + && i->my_settings.TlsSecurity.name[0] == '1') + { + s->TlsSecurity = i->my_settings.TlsSecurity.value; + } + if (i->my_settings.RdpSecurity.name + && i->my_settings.RdpSecurity.name[0] == '1') + { + s->RdpSecurity = i->my_settings.RdpSecurity.value; + } + if (i->my_settings.NegotiateSecurityLayer.name + && i->my_settings.NegotiateSecurityLayer.name[0] == '1') + { + s->NegotiateSecurityLayer + = i->my_settings.NegotiateSecurityLayer.value; + } + if (i->my_settings.RestrictedAdminModeRequired.name + && i->my_settings.RestrictedAdminModeRequired.name[0] == '1') + { + s->RestrictedAdminModeRequired + = i->my_settings.RestrictedAdminModeRequired.value; + } + if (i->my_settings.MstscCookieMode.name + && i->my_settings.MstscCookieMode.name[0] == '1') + { + s->MstscCookieMode = i->my_settings.MstscCookieMode.value; + } + if (i->my_settings.CookieMaxLength.name + && i->my_settings.CookieMaxLength.name[0] == '1') + { + s->CookieMaxLength = i->my_settings.CookieMaxLength.value; + } + if (i->my_settings.ClientBuild.name + && i->my_settings.ClientBuild.name[0] == '1') + { + s->ClientBuild = i->my_settings.ClientBuild.value; + } + if (i->my_settings.KeyboardType.name + && i->my_settings.KeyboardType.name[0] == '1') + { + s->KeyboardType = i->my_settings.KeyboardType.value; + } + if (i->my_settings.KeyboardSubType.name + && i->my_settings.KeyboardSubType.name[0] == '1') + { + s->KeyboardSubType = i->my_settings.KeyboardSubType.value; + } + if (i->my_settings.KeyboardFunctionKey.name + && i->my_settings.KeyboardFunctionKey.name[0] == '1') + { + s->KeyboardFunctionKey + = i->my_settings.KeyboardFunctionKey.value; + } + if (i->my_settings.KeyboardLayout.name + && i->my_settings.KeyboardLayout.name[0] == '1') + { + s->KeyboardLayout = i->my_settings.KeyboardLayout.value; + } + if (i->my_settings.UseRdpSecurityLayer.name + && i->my_settings.UseRdpSecurityLayer.name[0] == '1') + { + s->UseRdpSecurityLayer + = i->my_settings.UseRdpSecurityLayer.value; + } + if (i->my_settings.SaltedChecksum.name + && i->my_settings.SaltedChecksum.name[0] == '1') + { + s->SaltedChecksum = i->my_settings.SaltedChecksum.value; + } + if (i->my_settings.ServerPort.name + && i->my_settings.ServerPort.name[0] == '1') + { + s->ServerPort = i->my_settings.ServerPort.value; + } + if (i->my_settings.GatewayPort.name + && i->my_settings.GatewayPort.name[0] == '1') + { + s->GatewayPort = i->my_settings.GatewayPort.value; + } + if (i->my_settings.DesktopResize.name + && i->my_settings.DesktopResize.name[0] == '1') + { + s->DesktopResize = i->my_settings.DesktopResize.value; + } + if (i->my_settings.ToggleFullscreen.name + && i->my_settings.ToggleFullscreen.name[0] == '1') + { + s->ToggleFullscreen = i->my_settings.ToggleFullscreen.value; + } + if (i->my_settings.Floatbar.name + && i->my_settings.Floatbar.name[0] == '1') + { + s->Floatbar = i->my_settings.Floatbar.value; + } + if (i->my_settings.DesktopPosX.name + && i->my_settings.DesktopPosX.name[0] == '1') + { + s->DesktopPosX = i->my_settings.DesktopPosX.value; + } + if (i->my_settings.DesktopPosY.name + && i->my_settings.DesktopPosY.name[0] == '1') + { + s->DesktopPosY = i->my_settings.DesktopPosY.value; + } + if (i->my_settings.SoftwareGdi.name + && i->my_settings.SoftwareGdi.name[0] == '1') + { + s->SoftwareGdi = i->my_settings.SoftwareGdi.value; + } + if (i->my_settings.UnmapButtons.name + && i->my_settings.UnmapButtons.name[0] == '1') + { + s->UnmapButtons = i->my_settings.UnmapButtons.value; + } + if (i->my_settings.PerformanceFlags.name + && i->my_settings.PerformanceFlags.name[0] == '1') + { + s->PerformanceFlags = i->my_settings.PerformanceFlags.value; + } + if (i->my_settings.AllowFontSmoothing.name + && i->my_settings.AllowFontSmoothing.name[0] == '1') + { + s->AllowFontSmoothing = i->my_settings.AllowFontSmoothing.value; + } + if (i->my_settings.AllowDesktopComposition.name + && i->my_settings.AllowDesktopComposition.name[0] == '1') + { + s->AllowDesktopComposition + = i->my_settings.AllowDesktopComposition.value; + } + if (i->my_settings.DisableWallpaper.name + && i->my_settings.DisableWallpaper.name[0] == '1') + { + s->DisableWallpaper = i->my_settings.DisableWallpaper.value; + } + if (i->my_settings.DisableFullWindowDrag.name + && i->my_settings.DisableFullWindowDrag.name[0] == '1') + { + s->DisableFullWindowDrag + = i->my_settings.DisableFullWindowDrag.value; + } + if (i->my_settings.DisableMenuAnims.name + && i->my_settings.DisableMenuAnims.name[0] == '1') + { + s->DisableMenuAnims = i->my_settings.DisableMenuAnims.value; + } + if (i->my_settings.DisableThemes.name + && i->my_settings.DisableThemes.name[0] == '1') + { + s->DisableThemes = i->my_settings.DisableThemes.value; + } + if (i->my_settings.ConnectionType.name + && i->my_settings.ConnectionType.name[0] == '1') + { + s->ConnectionType = i->my_settings.ConnectionType.value; + } + if (i->my_settings.EncryptionMethods.name + && i->my_settings.EncryptionMethods.name[0] == '1') + { + s->EncryptionMethods = i->my_settings.EncryptionMethods.value; + } + if (i->my_settings.EncryptionLevel.name + && i->my_settings.EncryptionLevel.name[0] == '1') + { + s->EncryptionLevel = i->my_settings.EncryptionLevel.value; + } + if (i->my_settings.FIPSMode.name + && i->my_settings.FIPSMode.name[0] == '1') + { + s->FIPSMode = i->my_settings.FIPSMode.value; + } + if (i->my_settings.CompressionEnabled.name + && i->my_settings.CompressionEnabled.name[0] == '1') + { + s->CompressionEnabled = i->my_settings.CompressionEnabled.value; + } + if (i->my_settings.LogonNotify.name + && i->my_settings.LogonNotify.name[0] == '1') + { + s->LogonNotify = i->my_settings.LogonNotify.value; + } + if (i->my_settings.BrushSupportLevel.name + && i->my_settings.BrushSupportLevel.name[0] == '1') + { + s->BrushSupportLevel = i->my_settings.BrushSupportLevel.value; + } + if (i->my_settings.RemoteApplicationMode.name + && i->my_settings.RemoteApplicationMode.name[0] == '1') + { + s->RemoteApplicationMode + = i->my_settings.RemoteApplicationMode.value; + } + if (i->my_settings.TcpAckTimeout.name + && i->my_settings.TcpAckTimeout.name[0] == '1') + { + s->TcpAckTimeout = i->my_settings.TcpAckTimeout.value; + } + /* new settings from freerdp header (integers) end */ + + /* TODO: handle rest of options: + * fntlm + */ + + return true; +} |