mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
[core,freerdp] New API freerdp_presist_credentials
A new function that allows persisting runtime changes to credential settings so reconnect/redirect/... does not lose current values.
This commit is contained in:
@@ -736,6 +736,20 @@ owned by rdpRdp */
|
||||
FREERDP_API BOOL freerdp_is_valid_mcs_create_request(const BYTE* data, size_t size);
|
||||
FREERDP_API BOOL freerdp_is_valid_mcs_create_response(const BYTE* data, size_t size);
|
||||
|
||||
/** \brief Persist the current credentials (gateway, target server, ...)
|
||||
*
|
||||
* FreeRDP internally keeps a backup of connection settings to revert to whenever a reconnect
|
||||
* is required. If a client modifies settings during runtime after pre-connect call this
|
||||
* function or the credentials will be lost on any reconnect, redirect, ...
|
||||
*
|
||||
* \param context The RDP context to use, must not be \b NULL
|
||||
*
|
||||
* \return \b TRUE if successful, \b FALSE if settings could not be applied (wrong session
|
||||
* state, ...)
|
||||
* \since version 3.12.0
|
||||
*/
|
||||
FREERDP_API BOOL freerdp_presist_credentials(rdpContext* context);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1459,3 +1459,11 @@ BOOL freerdp_is_valid_mcs_create_response(const BYTE* data, size_t size)
|
||||
test_mcs_free(mcs);
|
||||
return result;
|
||||
}
|
||||
|
||||
BOOL freerdp_presist_credentials(rdpContext* context)
|
||||
{
|
||||
if (!context)
|
||||
return FALSE;
|
||||
WINPR_ASSERT(context->rdp);
|
||||
return utils_persist_credentials(context->rdp->originalSettings, context->rdp->settings);
|
||||
}
|
||||
|
||||
@@ -253,6 +253,29 @@ BOOL utils_sync_credentials(rdpSettings* settings, BOOL toGateway)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL utils_persist_credentials(rdpSettings* settings, const rdpSettings* current)
|
||||
{
|
||||
if (!settings || !current)
|
||||
return FALSE;
|
||||
|
||||
const SSIZE_T keys[] = { FreeRDP_GatewayUsername, FreeRDP_GatewayDomain,
|
||||
FreeRDP_GatewayPassword, FreeRDP_Username,
|
||||
FreeRDP_Domain, FreeRDP_Password };
|
||||
|
||||
for (size_t x = 0; x < ARRAYSIZE(keys); x++)
|
||||
{
|
||||
const SSIZE_T key = keys[x];
|
||||
if (!freerdp_settings_copy_item(settings, current, key))
|
||||
{
|
||||
WLog_ERR(TAG, "Failed to copy %s from current to backup settings",
|
||||
freerdp_settings_get_name_for_key(key));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL utils_str_is_empty(const char* str)
|
||||
{
|
||||
if (!str)
|
||||
|
||||
@@ -50,6 +50,7 @@ BOOL utils_abort_event_is_set(const rdpRdp* rdp);
|
||||
BOOL utils_reset_abort(rdpRdp* rdp);
|
||||
BOOL utils_abort_connect(rdpRdp* rdp);
|
||||
BOOL utils_sync_credentials(rdpSettings* settings, BOOL toGateway);
|
||||
BOOL utils_persist_credentials(rdpSettings* settings, const rdpSettings* current);
|
||||
|
||||
BOOL utils_str_is_empty(const char* str);
|
||||
BOOL utils_str_copy(const char* value, char** dst);
|
||||
|
||||
Reference in New Issue
Block a user