Add rdpkey protocol security method 22/266122/5
authorJunkyeong, Kim <jk0430.kim@samsung.com>
Mon, 8 Nov 2021 05:54:00 +0000 (14:54 +0900)
committerJunkyeong, Kim <jk0430.kim@samsung.com>
Mon, 15 Nov 2021 06:39:48 +0000 (15:39 +0900)
Support rdpkey protocol.
Set the rdp key file location from e-tizen-data.

Change-Id: I3fd94c90dbaed9db0cae8d3fd5d13ffd0eac92d3
Signed-off-by: Junkyeong, Kim <jk0430.kim@samsung.com>
src/e_mod_rdp.c

index 43c4035..9c76f3c 100644 (file)
@@ -849,6 +849,17 @@ _e_rdp_frame_timer(void *data)
    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)
@@ -1137,6 +1148,9 @@ e_rdp_peer_init(freerdp_peer *client, E_Rdp_Backend *b)
 
    settings = client->settings;
 
+   if (b->rdp_key)
+     settings->RdpKeyFile = strdup(b->rdp_key);
+
    if (b->tls_enabled)
      {
         settings->CertificateFile = strdup(b->server_cert);
@@ -1151,6 +1165,7 @@ e_rdp_peer_init(freerdp_peer *client, E_Rdp_Backend *b)
    if (!client->Initialize(client))
      {
         ERR("peer initialization failed\n");
+        _e_rdp_free_keyfile(b, settings);
         return -1;
      }
 
@@ -1202,6 +1217,7 @@ e_rdp_peer_init(freerdp_peer *client, E_Rdp_Backend *b)
    return 0;
 
 error_initialize:
+   _e_rdp_free_keyfile(b, settings);
    client->Close(client);
    return -1;
 }
@@ -1325,8 +1341,13 @@ e_rdp_backend_destroy(void)
 
    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);
 }
 
@@ -1339,10 +1360,16 @@ e_rdp_backend_create(E_Rdp_Conf_Edd *config)
    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)
      {
@@ -1350,7 +1377,7 @@ e_rdp_backend_create(E_Rdp_Conf_Edd *config)
         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;
      }
 
@@ -1358,7 +1385,7 @@ e_rdp_backend_create(E_Rdp_Conf_Edd *config)
    if (!b->output)
      {
         ERR("output create failed");
-        goto err_free_strings;
+        goto err_output_create;
      }
 
    b->listener = freerdp_listener_new();
@@ -1377,15 +1404,20 @@ e_rdp_backend_create(E_Rdp_Conf_Edd *config)
 
    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;