proxy: add fixed user/domain/passwd

This adds a User, Domain and Password parameter in the Target section of the configuration
to specify and use a fixed backend user, domain or password (overriding the one
passed by the front user).
This commit is contained in:
David Fort
2022-06-09 10:58:59 +02:00
committed by akallabeth
parent e389210673
commit cfe80694da
3 changed files with 56 additions and 12 deletions

View File

@@ -38,6 +38,9 @@ struct proxy_config
BOOL FixedTarget;
char* TargetHost;
UINT16 TargetPort;
char* TargetUser;
char* TargetDomain;
char* TargetPassword;
/* input */
BOOL Keyboard;

View File

@@ -188,7 +188,7 @@ static BOOL pf_config_load_server(wIniFile* ini, proxyConfig* config)
static BOOL pf_config_load_target(wIniFile* ini, proxyConfig* config)
{
const char* target_host;
const char* target_value;
WINPR_ASSERT(config);
config->FixedTarget = pf_config_get_bool(ini, "Target", "FixedTarget", FALSE);
@@ -196,14 +196,41 @@ static BOOL pf_config_load_target(wIniFile* ini, proxyConfig* config)
if (!pf_config_get_uint16(ini, "Target", "Port", &config->TargetPort, config->FixedTarget))
return FALSE;
target_host = pf_config_get_str(ini, "Target", "Host", config->FixedTarget);
if (!target_host)
return FALSE;
if (config->FixedTarget)
{
target_value = pf_config_get_str(ini, "Target", "Host", TRUE);
if (!target_value)
return FALSE;
config->TargetHost = _strdup(target_host);
if (!config->TargetHost)
return FALSE;
config->TargetHost = _strdup(target_value);
if (!config->TargetHost)
return FALSE;
}
target_value = pf_config_get_str(ini, "Target", "User", FALSE);
if (target_value)
{
config->TargetUser = _strdup(target_value);
if (!config->TargetUser)
return FALSE;
}
target_value = pf_config_get_str(ini, "Target", "Password", FALSE);
if (target_value)
{
config->TargetPassword = _strdup(target_value);
if (!config->TargetPassword)
return FALSE;
}
target_value = pf_config_get_str(ini, "Target", "Domain", FALSE);
if (target_value)
{
config->TargetDomain = _strdup(target_value);
if (!config->TargetDomain)
return FALSE;
}
return TRUE;
}
@@ -636,6 +663,11 @@ void pf_server_config_print(const proxyConfig* config)
CONFIG_PRINT_SECTION("Target");
CONFIG_PRINT_STR(config, TargetHost);
CONFIG_PRINT_UINT16(config, TargetPort);
if (config->TargetUser)
CONFIG_PRINT_STR(config, TargetUser);
if (config->TargetDomain)
CONFIG_PRINT_STR(config, TargetDomain);
}
CONFIG_PRINT_SECTION("Input");

View File

@@ -151,6 +151,15 @@ static BOOL pf_server_get_target_info(rdpContext* context, rdpSettings* settings
return FALSE;
}
if (config->TargetUser)
freerdp_settings_set_string(settings, FreeRDP_Username, config->TargetUser);
if (config->TargetDomain)
freerdp_settings_set_string(settings, FreeRDP_Domain, config->TargetDomain);
if (config->TargetPassword)
freerdp_settings_set_string(settings, FreeRDP_Password, config->TargetPassword);
return TRUE;
}
case PROXY_FETCH_TARGET_USE_CUSTOM_ADDR:
@@ -260,27 +269,27 @@ static BOOL pf_server_post_connect(freerdp_peer* peer)
pClientContext* pc;
rdpSettings* client_settings;
proxyData* pdata;
rdpSettings* settings;
rdpSettings* frontSettings;
WINPR_ASSERT(peer);
ps = (pServerContext*)peer->context;
WINPR_ASSERT(ps);
settings = peer->context->settings;
WINPR_ASSERT(settings);
frontSettings = peer->context->settings;
WINPR_ASSERT(frontSettings);
pdata = ps->pdata;
WINPR_ASSERT(pdata);
PROXY_LOG_INFO(TAG, ps, "Accepted client: %s", settings->ClientHostname);
PROXY_LOG_INFO(TAG, ps, "Accepted client: %s", frontSettings->ClientHostname);
if (!pf_server_setup_channels(peer))
{
PROXY_LOG_ERR(TAG, ps, "error setting up channels");
return FALSE;
}
pc = pf_context_create_client_context(settings);
pc = pf_context_create_client_context(frontSettings);
if (pc == NULL)
{
PROXY_LOG_ERR(TAG, ps, "failed to create client context!");