summaryrefslogtreecommitdiffstats
path: root/libxrdp/xrdp_sec.c
diff options
context:
space:
mode:
authorArvidNorr <norrarvid@gmail.com>2012-06-17 23:55:23 -0700
committerArvidNorr <norrarvid@gmail.com>2012-06-17 23:55:23 -0700
commit2509442b361b93578431697a083a2ed186e25146 (patch)
tree21180d4c9df7d7ad652ad1a82fd431a82b46c3ca /libxrdp/xrdp_sec.c
parent3d9c81ef7b0f68c3ed63ca0109432f0889aba32b (diff)
parent67a2a3c4c7c2487dffd487a93d7bfe3e89f2328f (diff)
downloadxrdp-proprietary-2509442b361b93578431697a083a2ed186e25146.tar.gz
xrdp-proprietary-2509442b361b93578431697a083a2ed186e25146.zip
Merge pull request #27 from ArvidNorr/deadlock
Deadlock
Diffstat (limited to 'libxrdp/xrdp_sec.c')
-rw-r--r--libxrdp/xrdp_sec.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/libxrdp/xrdp_sec.c b/libxrdp/xrdp_sec.c
index 952ff12f..381e8435 100644
--- a/libxrdp/xrdp_sec.c
+++ b/libxrdp/xrdp_sec.c
@@ -148,9 +148,20 @@ xrdp_sec_create(struct xrdp_rdp* owner, struct trans* trans, int crypt_level,
self->rc4_key_size = 2;
self->crypt_level = 3;
break;
+ default:
+ g_writeln("Fatal : Illegal crypt_level");
+ break ;
}
self->channel_code = channel_code;
+ if(self->decrypt_rc4_info!=NULL)
+ {
+ g_writeln("xrdp_sec_create - decrypt_rc4_info already created !!!");
+ }
self->decrypt_rc4_info = ssl_rc4_info_create();
+ if(self->encrypt_rc4_info!=NULL)
+ {
+ g_writeln("xrdp_sec_create - encrypt_rc4_info already created !!!");
+ }
self->encrypt_rc4_info = ssl_rc4_info_create();
self->mcs_layer = xrdp_mcs_create(self, trans, &self->client_mcs_data,
&self->server_mcs_data);
@@ -165,14 +176,17 @@ xrdp_sec_delete(struct xrdp_sec* self)
{
if (self == 0)
{
+ g_writeln("xrdp_sec_delete: indata is null");
return;
}
xrdp_channel_delete(self->chan_layer);
xrdp_mcs_delete(self->mcs_layer);
- ssl_rc4_info_delete(self->decrypt_rc4_info);
- ssl_rc4_info_delete(self->encrypt_rc4_info);
+ ssl_rc4_info_delete(self->decrypt_rc4_info); /* TODO clear all data */
+ ssl_rc4_info_delete(self->encrypt_rc4_info); /* TODO clear all data */
g_free(self->client_mcs_data.data);
g_free(self->server_mcs_data.data);
+ /* Crypto information must always be cleared */
+ g_memset(self,0,sizeof(struct xrdp_sec));
g_free(self);
}
@@ -722,6 +736,7 @@ xrdp_sec_process_mcs_data_channels(struct xrdp_sec* self, struct stream* s)
/* this is an option set in xrdp.ini */
if (self->channel_code != 1) /* are channels on? */
{
+ g_writeln("Processing channel data from client - The channel is off");
return 0;
}
in_uint32_le(s, num_channels);