return ECORE_CALLBACK_RENEW;
}
+static void
+_e_rdp_free_keyfile(E_Rdp_Backend *b, rdpSettings *settings)
+{
+ if (b->rdp_key)
+ free(settings->RdpKeyFile);
+ if (b->tls_enabled)
+ {
+ free(settings->CertificateFile);
+ free(settings->PrivateKeyFile);
+ }
+}
static BOOL
e_rdp_peer_capabilities(freerdp_peer *client)
settings = client->settings;
+ if (b->rdp_key)
+ settings->RdpKeyFile = strdup(b->rdp_key);
+
if (b->tls_enabled)
{
settings->CertificateFile = strdup(b->server_cert);
if (!client->Initialize(client))
{
ERR("peer initialization failed\n");
+ _e_rdp_free_keyfile(b, settings);
return -1;
}
return 0;
error_initialize:
+ _e_rdp_free_keyfile(b, settings);
client->Close(client);
return -1;
}
e_rdp_output_destroy(b->output);
- free(b->server_cert);
- free(b->server_key);
+ if (b->rdp_key)
+ free(b->rdp_key);
+ if (b->tls_enabled)
+ {
+ free(b->server_cert);
+ free(b->server_key);
+ }
free(b);
}
b = E_NEW(E_Rdp_Backend, 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(b, EINA_FALSE);
- b->rdp_key = NULL;
b->no_clients_resize = config->no_clients_resize;
b->force_no_compression = config->force_no_compression;
+ if (config->rdp_key)
+ {
+ b->rdp_key = strdup(config->rdp_key);
+ if (!b->rdp_key)
+ goto err_config;
+ }
+
/* activate TLS only if certificate/key are available */
if (config->server_cert && config->server_key)
{
b->server_cert = strdup(config->server_cert);
b->server_key = strdup(config->server_key);
if (!b->server_cert || !b->server_key)
- goto err_free_strings;
+ goto err_config;
b->tls_enabled = 1;
}
if (!b->output)
{
ERR("output create failed");
- goto err_free_strings;
+ goto err_output_create;
}
b->listener = freerdp_listener_new();
return EINA_TRUE;
- err_listener:
+err_listener:
freerdp_listener_free(b->listener);
e_rdp_output_destroy(b->output);
b->output = NULL;
- err_free_strings:
- free(b->server_cert);
- free(b->server_key);
+err_output_create:
+err_config:
+ if (b->server_cert)
+ free(b->server_cert);
+ if (b->server_key)
+ free(b->server_key);
+ if (b->rdp_key)
+ free(b->rdp_key);
free(b);
return EINA_FALSE;