mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-14 00:14:11 +09:00
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:
@@ -38,6 +38,9 @@ struct proxy_config
|
||||
BOOL FixedTarget;
|
||||
char* TargetHost;
|
||||
UINT16 TargetPort;
|
||||
char* TargetUser;
|
||||
char* TargetDomain;
|
||||
char* TargetPassword;
|
||||
|
||||
/* input */
|
||||
BOOL Keyboard;
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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!");
|
||||
|
||||
Reference in New Issue
Block a user