From 5842a1631f2f55db2860ea04c484bd96904ad6ca Mon Sep 17 00:00:00 2001 From: cool Date: Thu, 25 Aug 2011 16:10:49 -1100 Subject: [PATCH 01/30] inital commit including tls cert verification --- libfreerdp-core/credssp.c | 30 ++++++++++++++++++++++++++++++ libfreerdp-core/crypto.c | 30 ++++++++++++++++++++++++++++++ libfreerdp-core/crypto.h | 3 +++ libfreerdp-core/tls.c | 35 +++++++++++++++++++++++++++++++++++ libfreerdp-core/tls.h | 2 +- 5 files changed, 99 insertions(+), 1 deletion(-) diff --git a/libfreerdp-core/credssp.c b/libfreerdp-core/credssp.c index d58969ce8..d26041907 100644 --- a/libfreerdp-core/credssp.c +++ b/libfreerdp-core/credssp.c @@ -641,3 +641,33 @@ void credssp_free(rdpCredssp* credssp) xfree(credssp); } } +char* crypto_cert_fingerprint(X509 *xcert) +{ + unsigned char fp[EVP_MAX_MD_SIZE]; + int i; + unsigned int fp_len; + X509_digest(xcert,EVP_sha1(),fp,&fp_len); + char *fp_buf=xzalloc(3*fp_len); + char *p = fp_buf; + for (i = 0; i < fp_len - 1; i++) + { + sprintf(p, "%02x:", fp[i]); + p = (char*) &fp_buf[i * 3]; + } + sprintf(p, "%02x", fp[i]); + return fp_buf; +} +void crypto_cert_printinfo(X509 *xcert) +{ + char *subject; + char *issuer; + char *fp; + subject=X509_NAME_oneline(X509_get_subject_name(xcert),NULL,0); + issuer=X509_NAME_oneline(X509_get_issuer_name(xcert),NULL,0); + fp=crypto_cert_fingerprint(xcert); + printf("Cerificate details:\n"); + printf("\tSubject : %s\n",subject); + printf("\tIssuer : %s\n",issuer); + printf("\tCert Thumbprint (sha1) : %s\n",fp); + xfree(fp); +} diff --git a/libfreerdp-core/crypto.c b/libfreerdp-core/crypto.c index 05a969bef..366e8d7c3 100644 --- a/libfreerdp-core/crypto.c +++ b/libfreerdp-core/crypto.c @@ -189,3 +189,33 @@ void crypto_nonce(uint8* nonce, int size) { RAND_bytes((void*) nonce, size); } +char* crypto_cert_fingerprint(X509 *xcert) +{ + unsigned char fp[EVP_MAX_MD_SIZE]; + int i; + unsigned int fp_len; + X509_digest(xcert,EVP_sha1(),fp,&fp_len); + char *fp_buf=xzalloc(3*fp_len); + char *p = fp_buf; + for (i = 0; i < fp_len - 1; i++) + { + sprintf(p, "%02x:", fp[i]); + p = (char*) &fp_buf[i * 3]; + } + sprintf(p, "%02x", fp[i]); + return fp_buf; +} +void crypto_cert_printinfo(X509 *xcert) +{ + char *subject; + char *issuer; + char *fp; + subject=X509_NAME_oneline(X509_get_subject_name(xcert),NULL,0); + issuer=X509_NAME_oneline(X509_get_issuer_name(xcert),NULL,0); + fp=crypto_cert_fingerprint(xcert); + printf("Cerificate details:\n"); + printf("\tSubject : %s\n",subject); + printf("\tIssuer : %s\n",issuer); + printf("\tCert Thumbprint (sha1) : %s\n",fp); + xfree(fp); +} diff --git a/libfreerdp-core/crypto.h b/libfreerdp-core/crypto.h index 5a8746790..c93fb1a20 100644 --- a/libfreerdp-core/crypto.h +++ b/libfreerdp-core/crypto.h @@ -41,6 +41,7 @@ #define EXPONENT_MAX_SIZE 4 #define MODULUS_MAX_SIZE 64 +#define CA_LOCAL_PATH ".freerdp/cacert" #include #include @@ -83,6 +84,8 @@ void crypto_rc4_free(CryptoRc4 rc4); typedef struct crypto_cert_struct* CryptoCert; CryptoCert crypto_cert_read(uint8* data, uint32 length); +char* cypto_cert_fingerprint(X509* xcert); +void crypto_cert_printinfo(X509* xcert); void crypto_cert_free(CryptoCert cert); boolean crypto_cert_verify(CryptoCert server_cert, CryptoCert cacert); boolean crypto_cert_get_public_key(CryptoCert cert, rdpBlob* public_key); diff --git a/libfreerdp-core/tls.c b/libfreerdp-core/tls.c index 080c4a871..156f5e10b 100644 --- a/libfreerdp-core/tls.c +++ b/libfreerdp-core/tls.c @@ -246,6 +246,41 @@ rdpTls* tls_new() return tls; } +boolean tls_verify_cert(CryptoCert cert) +{ + X509 *xcert=cert->px509; + char dir_path[1024]=""; + int ret=0; + X509_STORE *cert_ctx=NULL; + X509_LOOKUP *lookup=NULL; + X509_STORE_CTX *csc; + cert_ctx=X509_STORE_new(); + if (cert_ctx == NULL) + goto end; + OpenSSL_add_all_algorithms(); + lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file()); + if (lookup == NULL) + goto end; + lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_hash_dir()); + if (lookup == NULL) + goto end; + X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT); + X509_LOOKUP_add_dir(lookup,"/home/whoami/project/install",X509_FILETYPE_ASN1); + csc = X509_STORE_CTX_new(); + if (csc == NULL) + goto end; + X509_STORE_set_flags(cert_ctx, 0); + if(!X509_STORE_CTX_init(csc,cert_ctx,xcert,0)) + goto end; + int i=X509_verify_cert(csc); + int cert_error=X509_STORE_CTX_get_error(cert_ctx); + X509_STORE_CTX_free(csc); + X509_STORE_free(cert_ctx); + ret=0; + end: + ret = (i > 0); + return(ret); +} void tls_free(rdpTls* tls) { diff --git a/libfreerdp-core/tls.h b/libfreerdp-core/tls.h index 9a7da598a..61988a3ef 100644 --- a/libfreerdp-core/tls.h +++ b/libfreerdp-core/tls.h @@ -50,7 +50,7 @@ int tls_read(rdpTls* tls, uint8* data, int length); int tls_write(rdpTls* tls, uint8* data, int length); CryptoCert tls_get_certificate(rdpTls* tls); boolean tls_print_error(char* func, SSL* connection, int value); - +boolean tls_verify_cert(CryptoCert cert); rdpTls* tls_new(); void tls_free(rdpTls* tls); From 8175c1106b0b2dc6c2fd1d270b8bc6937bbb96d8 Mon Sep 17 00:00:00 2001 From: cool Date: Thu, 25 Aug 2011 16:32:24 -1100 Subject: [PATCH 02/30] minor modification --- libfreerdp-core/credssp.c | 30 ------------------------------ libfreerdp-core/tls.c | 3 +-- 2 files changed, 1 insertion(+), 32 deletions(-) diff --git a/libfreerdp-core/credssp.c b/libfreerdp-core/credssp.c index d26041907..d58969ce8 100644 --- a/libfreerdp-core/credssp.c +++ b/libfreerdp-core/credssp.c @@ -641,33 +641,3 @@ void credssp_free(rdpCredssp* credssp) xfree(credssp); } } -char* crypto_cert_fingerprint(X509 *xcert) -{ - unsigned char fp[EVP_MAX_MD_SIZE]; - int i; - unsigned int fp_len; - X509_digest(xcert,EVP_sha1(),fp,&fp_len); - char *fp_buf=xzalloc(3*fp_len); - char *p = fp_buf; - for (i = 0; i < fp_len - 1; i++) - { - sprintf(p, "%02x:", fp[i]); - p = (char*) &fp_buf[i * 3]; - } - sprintf(p, "%02x", fp[i]); - return fp_buf; -} -void crypto_cert_printinfo(X509 *xcert) -{ - char *subject; - char *issuer; - char *fp; - subject=X509_NAME_oneline(X509_get_subject_name(xcert),NULL,0); - issuer=X509_NAME_oneline(X509_get_issuer_name(xcert),NULL,0); - fp=crypto_cert_fingerprint(xcert); - printf("Cerificate details:\n"); - printf("\tSubject : %s\n",subject); - printf("\tIssuer : %s\n",issuer); - printf("\tCert Thumbprint (sha1) : %s\n",fp); - xfree(fp); -} diff --git a/libfreerdp-core/tls.c b/libfreerdp-core/tls.c index 156f5e10b..d8299b3c3 100644 --- a/libfreerdp-core/tls.c +++ b/libfreerdp-core/tls.c @@ -265,7 +265,7 @@ boolean tls_verify_cert(CryptoCert cert) if (lookup == NULL) goto end; X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT); - X509_LOOKUP_add_dir(lookup,"/home/whoami/project/install",X509_FILETYPE_ASN1); + X509_LOOKUP_add_dir(lookup,CA_LOCAL_PATH,X509_FILETYPE_ASN1); csc = X509_STORE_CTX_new(); if (csc == NULL) goto end; @@ -273,7 +273,6 @@ boolean tls_verify_cert(CryptoCert cert) if(!X509_STORE_CTX_init(csc,cert_ctx,xcert,0)) goto end; int i=X509_verify_cert(csc); - int cert_error=X509_STORE_CTX_get_error(cert_ctx); X509_STORE_CTX_free(csc); X509_STORE_free(cert_ctx); ret=0; From fa13467ed4cda7fbce46347d4d4664aa723a2b11 Mon Sep 17 00:00:00 2001 From: cool Date: Thu, 25 Aug 2011 17:20:56 -1100 Subject: [PATCH 03/30] temporary commit --- include/freerdp/utils/certstore.h | 27 ++++++++++++ libfreerdp-utils/cerstore.c | 68 +++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 include/freerdp/utils/certstore.h create mode 100644 libfreerdp-utils/cerstore.c diff --git a/include/freerdp/utils/certstore.h b/include/freerdp/utils/certstore.h new file mode 100644 index 000000000..244b9d07b --- /dev/null +++ b/include/freerdp/utils/certstore.h @@ -0,0 +1,27 @@ +#ifndef __CERTSTORE_UTILS_H +#define __CERTSTORE_UTILS_H + +typedef struct rdp_certstore rdpCertstore; +typedef struct rdp_certdata rdpCertdata; + +#include +#include +#include +#include +#include +#include +#include +struct rdp_certdata +{ + char* thumbprint; + char* hostname; +} +struct rdp_certstore +{ + FILE* fp; + char* path; + char* file; + char* home; + boolean available; + struct rdp_certdata* certdata; +}; diff --git a/libfreerdp-utils/cerstore.c b/libfreerdp-utils/cerstore.c new file mode 100644 index 000000000..7e4209762 --- /dev/null +++ b/libfreerdp-utils/cerstore.c @@ -0,0 +1,68 @@ +/** + * FreeRDP: A Remote Desktop Protocol Client + * certstore Utils + * + * Copyright 2011 Marc-Andre Moreau + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#ifdef _WIN32 +#include +#endif + +static char cert_dir[] = "freerdp"; +static char certstore_file[] = "known_hosts"; + +void certstore_init(rdpCertstore* certstore) +{ + int length; + char* home_path; + struct stat stat_info; + + home_path = getenv("HOME"); + certstore->available = True; + + if (home_path == NULL) + { + printf("could not get home path\n"); + certstore->available = False; + return; + } + + certstore->home = (char*) xstrdup(home_path); + printf("home path: %s\n", certstore->home); + + certstore->path = (char*) xmalloc(strlen(certstore->home) + strlen("/.") + strlen(cert_dir) + 1); + sprintf(certstore->path, "%s/.%s", certstore->home, cert_dir); + printf("certstore path: %s\n", certstore->path); + + if (stat(certstore->path, &stat_info) != 0) + { +#ifndef _WIN32 + mkdir(certstore->path, S_IRUSR | S_IWUSR | S_IXUSR); +#else + CreateDirectory(certstore->path, 0); +#endif + printf("creating directory %s\n", certstore->path); + } + + length = strlen(certstore->path); + certstore->file = (char*) xmalloc(strlen(certstore->path) + strlen("/") + strlen(certstore_file) + 1); + sprintf(certstore->file, "%s/%s", certstore->path, certstore_file); + printf("certstore file: %s\n", certstore->file); + + certstore_open(certstore); +} From a863c107ab4670b6e22bffe8fdefe48505c2ac2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Fri, 26 Aug 2011 18:36:35 -0400 Subject: [PATCH 04/30] libfreerdp-utils: added pcap serializer/deserializer --- cunit/CMakeLists.txt | 2 + cunit/test_freerdp.c | 5 + cunit/test_pcap.c | 95 +++++++++++++++++ cunit/test_pcap.h | 26 +++++ include/freerdp/utils/pcap.h | 80 ++++++++++++++ include/freerdp/utils/stopwatch.h | 4 +- libfreerdp-utils/CMakeLists.txt | 1 + libfreerdp-utils/pcap.c | 172 ++++++++++++++++++++++++++++++ libfreerdp-utils/stopwatch.c | 12 ++- 9 files changed, 395 insertions(+), 2 deletions(-) create mode 100644 cunit/test_pcap.c create mode 100644 cunit/test_pcap.h create mode 100644 include/freerdp/utils/pcap.h create mode 100644 libfreerdp-utils/pcap.c diff --git a/cunit/CMakeLists.txt b/cunit/CMakeLists.txt index 5b5171259..88fe5cc3f 100644 --- a/cunit/CMakeLists.txt +++ b/cunit/CMakeLists.txt @@ -44,6 +44,8 @@ add_executable(test_freerdp test_list.h test_orders.c test_orders.h + test_pcap.c + test_pcap.h test_license.c test_license.h test_stream.c diff --git a/cunit/test_freerdp.c b/cunit/test_freerdp.c index d07206914..d5ffa047c 100644 --- a/cunit/test_freerdp.c +++ b/cunit/test_freerdp.c @@ -37,6 +37,7 @@ #include "test_librfx.h" #include "test_freerdp.h" #include "test_rail.h" +#include "test_pcap.h" void dump_data(unsigned char * p, int len, int width, char* name) { @@ -188,6 +189,10 @@ int main(int argc, char* argv[]) { add_per_suite(); } + else if (strcmp("pcap", argv[*pindex]) == 0) + { + add_pcap_suite(); + } else if (strcmp("ber", argv[*pindex]) == 0) { add_ber_suite(); diff --git a/cunit/test_pcap.c b/cunit/test_pcap.c new file mode 100644 index 000000000..99fb71403 --- /dev/null +++ b/cunit/test_pcap.c @@ -0,0 +1,95 @@ +/** + * FreeRDP: A Remote Desktop Protocol Client + * pcap File Format Unit Tests + * + * Copyright 2011 Marc-Andre Moreau + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include "test_pcap.h" + +int init_pcap_suite(void) +{ + return 0; +} + +int clean_pcap_suite(void) +{ + return 0; +} + +int add_pcap_suite(void) +{ + add_test_suite(pcap); + + add_test_function(pcap); + + return 0; +} + +uint8 test_packet_1[16] = + "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"; + +uint8 test_packet_2[32] = + "\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB" + "\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB"; + +uint8 test_packet_3[64] = + "\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC" + "\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC" + "\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC" + "\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC"; + +typedef struct +{ + void* data; + uint32 length; +} test_packet; + +void test_pcap(void) +{ + rdpPcap* pcap; + pcap_record record; + test_packet packets[3]; + + packets[0].data = test_packet_1; + packets[0].length = sizeof(test_packet_1); + packets[1].data = test_packet_2; + packets[1].length = sizeof(test_packet_2); + packets[2].data = test_packet_3; + packets[2].length = sizeof(test_packet_3); + + pcap = pcap_open("/tmp/test.pcap", True); + pcap_add_record(pcap, test_packet_1, sizeof(test_packet_1)); + pcap_add_record(pcap, test_packet_2, sizeof(test_packet_2)); + pcap_add_record(pcap, test_packet_3, sizeof(test_packet_3)); + pcap_close(pcap); + + pcap = pcap_open("/tmp/test.pcap", False); + + int i = 0; + while (pcap_has_next_record(pcap)) + { + pcap_get_next_record(pcap, &record); + CU_ASSERT(record.length == packets[i].length) + i++; + } + + pcap_close(pcap); +} + diff --git a/cunit/test_pcap.h b/cunit/test_pcap.h new file mode 100644 index 000000000..f506edcaa --- /dev/null +++ b/cunit/test_pcap.h @@ -0,0 +1,26 @@ +/** + * FreeRDP: A Remote Desktop Protocol Client + * pcap File Format Unit Tests + * + * Copyright 2011 Marc-Andre Moreau + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "test_freerdp.h" + +int init_pcap_suite(void); +int clean_pcap_suite(void); +int add_pcap_suite(void); + +void test_pcap(void); diff --git a/include/freerdp/utils/pcap.h b/include/freerdp/utils/pcap.h new file mode 100644 index 000000000..893ff8589 --- /dev/null +++ b/include/freerdp/utils/pcap.h @@ -0,0 +1,80 @@ +/** + * FreeRDP: A Remote Desktop Protocol Client + * pcap File Format Utils + * + * Copyright 2011 Marc-Andre Moreau + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __UTILS_PCAP_H +#define __UTILS_PCAP_H + +#include +#include +#include + +struct _pcap_header +{ + uint32 magic_number; /* magic number */ + uint16 version_major; /* major version number */ + uint16 version_minor; /* minor version number */ + sint32 thiszone; /* GMT to local correction */ + uint32 sigfigs; /* accuracy of timestamps */ + uint32 snaplen; /* max length of captured packets, in octets */ + uint32 network; /* data link type */ +}; +typedef struct _pcap_header pcap_header; + +struct _pcap_record_header +{ + uint32 ts_sec; /* timestamp seconds */ + uint32 ts_usec; /* timestamp microseconds */ + uint32 incl_len; /* number of octets of packet saved in file */ + uint32 orig_len; /* actual length of packet */ +}; +typedef struct _pcap_record_header pcap_record_header; + +typedef struct _pcap_record pcap_record; + +struct _pcap_record +{ + pcap_record_header header; + void* data; + uint32 length; + pcap_record* next; +}; + +struct rdp_pcap +{ + FILE* fp; + char* name; + STOPWATCH* sw; + boolean write; + int file_size; + int record_count; + pcap_header header; + pcap_record* head; + pcap_record* tail; + pcap_record* record; +}; +typedef struct rdp_pcap rdpPcap; + +FREERDP_API rdpPcap* pcap_open(char* name, boolean write); +FREERDP_API void pcap_close(rdpPcap* pcap); + +FREERDP_API void pcap_add_record(rdpPcap* pcap, void* data, uint32 length); +FREERDP_API boolean pcap_has_next_record(rdpPcap* pcap); +FREERDP_API boolean pcap_get_next_record(rdpPcap* pcap, pcap_record* record); + +#endif /* __UTILS_PCAP_H */ diff --git a/include/freerdp/utils/stopwatch.h b/include/freerdp/utils/stopwatch.h index c7fa46457..58d7be5e1 100644 --- a/include/freerdp/utils/stopwatch.h +++ b/include/freerdp/utils/stopwatch.h @@ -22,6 +22,7 @@ #include #include +#include #include struct _STOPWATCH @@ -40,6 +41,7 @@ FREERDP_API void stopwatch_start(STOPWATCH* stopwatch); FREERDP_API void stopwatch_stop(STOPWATCH* stopwatch); FREERDP_API void stopwatch_reset(STOPWATCH* stopwatch); -double stopwatch_get_elapsed_time_in_seconds(STOPWATCH* stopwatch); +FREERDP_API double stopwatch_get_elapsed_time_in_seconds(STOPWATCH* stopwatch); +FREERDP_API void stopwatch_get_elapsed_time_in_useconds(STOPWATCH* stopwatch, uint32* sec, uint32* usec); #endif /* __UTILS_STOPWATCH_H */ diff --git a/libfreerdp-utils/CMakeLists.txt b/libfreerdp-utils/CMakeLists.txt index a0b6037dd..cb7adbfbc 100644 --- a/libfreerdp-utils/CMakeLists.txt +++ b/libfreerdp-utils/CMakeLists.txt @@ -30,6 +30,7 @@ set(FREERDP_UTILS_SRCS load_plugin.c memory.c mutex.c + pcap.c profiler.c rail.c registry.c diff --git a/libfreerdp-utils/pcap.c b/libfreerdp-utils/pcap.c new file mode 100644 index 000000000..4282971ee --- /dev/null +++ b/libfreerdp-utils/pcap.c @@ -0,0 +1,172 @@ +/** + * FreeRDP: A Remote Desktop Protocol Client + * pcap File Format Utils + * + * Copyright 2011 Marc-Andre Moreau + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include +#include + +#include + +#define PCAP_MAGIC 0xA1B2C3D4 + +void pcap_read_header(rdpPcap* pcap, pcap_header* header) +{ + fread((void*) header, sizeof(pcap_header), 1, pcap->fp); +} + +void pcap_write_header(rdpPcap* pcap, pcap_header* header) +{ + fwrite((void*) header, sizeof(pcap_header), 1, pcap->fp); +} + +void pcap_read_record_header(rdpPcap* pcap, pcap_record_header* record) +{ + fread((void*) record, sizeof(pcap_record_header), 1, pcap->fp); +} + +void pcap_write_record_header(rdpPcap* pcap, pcap_record_header* record) +{ + fwrite((void*) record, sizeof(pcap_record_header), 1, pcap->fp); +} + +void pcap_read_record(rdpPcap* pcap, pcap_record* record) +{ + pcap_read_record_header(pcap, &record->header); + record->length = record->header.incl_len; + record->data = xmalloc(record->length); + fread(record->data, record->length, 1, pcap->fp); +} + +void pcap_write_record(rdpPcap* pcap, pcap_record* record) +{ + pcap_write_record_header(pcap, &record->header); + fwrite(record->data, record->length, 1, pcap->fp); +} + +void pcap_add_record(rdpPcap* pcap, void* data, uint32 length) +{ + pcap_record* record; + + if (pcap->tail == NULL) + { + pcap->tail = (pcap_record*) xzalloc(sizeof(pcap_record)); + pcap->head = pcap->tail; + pcap->record = pcap->head; + record = pcap->tail; + } + else + { + record = (pcap_record*) xzalloc(sizeof(pcap_record)); + pcap->tail->next = record; + pcap->tail = record; + } + + record->data = data; + record->length = length; + record->header.incl_len = length; + record->header.orig_len = length; + + stopwatch_stop(pcap->sw); + stopwatch_get_elapsed_time_in_useconds(pcap->sw, &record->header.ts_sec, &record->header.ts_usec); + stopwatch_start(pcap->sw); +} + +boolean pcap_has_next_record(rdpPcap* pcap) +{ + if (pcap->file_size - (ftell(pcap->fp)) <= 16) + return False; + + return True; +} + +boolean pcap_get_next_record(rdpPcap* pcap, pcap_record* record) +{ + if (pcap_has_next_record(pcap) != True) + return False; + + pcap_read_record(pcap, record); + + return True; +} + +rdpPcap* pcap_open(char* name, boolean write) +{ + rdpPcap* pcap; + + pcap = (rdpPcap*) xzalloc(sizeof(rdpPcap)); + + if (pcap != NULL) + { + pcap->name = name; + pcap->write = write; + pcap->record_count = 0; + + if (write) + { + pcap->fp = fopen(name, "w+"); + pcap->header.magic_number = 0xA1B2C3D4; + pcap->header.version_major = 2; + pcap->header.version_minor = 4; + pcap->header.thiszone = 0; + pcap->header.sigfigs = 0; + pcap->header.snaplen = 65535; + pcap->header.network = 0; + pcap_write_header(pcap, &pcap->header); + } + else + { + pcap->fp = fopen(name, "r"); + fseek(pcap->fp, 0, SEEK_END); + pcap->file_size = (int) ftell(pcap->fp); + fseek(pcap->fp, 0, SEEK_SET); + pcap_read_header(pcap, &pcap->header); + } + + pcap->sw = stopwatch_create(); + stopwatch_start(pcap->sw); + } + + return pcap; +} + +void pcap_flush(rdpPcap* pcap) +{ + while (pcap->record != NULL) + { + pcap_write_record(pcap, pcap->record); + pcap->record = pcap->record->next; + } + + if (pcap->fp != NULL) + fflush(pcap->fp); +} + +void pcap_close(rdpPcap* pcap) +{ + pcap_flush(pcap); + + if (pcap->fp != NULL) + fclose(pcap->fp); + + stopwatch_stop(pcap->sw); + stopwatch_free(pcap->sw); +} diff --git a/libfreerdp-utils/stopwatch.c b/libfreerdp-utils/stopwatch.c index 55b814f06..e74c1d909 100644 --- a/libfreerdp-utils/stopwatch.c +++ b/libfreerdp-utils/stopwatch.c @@ -56,5 +56,15 @@ void stopwatch_reset(STOPWATCH* stopwatch) double stopwatch_get_elapsed_time_in_seconds(STOPWATCH* stopwatch) { - return ((double)stopwatch->elapsed) / CLOCKS_PER_SEC; + return ((double) stopwatch->elapsed) / CLOCKS_PER_SEC; } + +void stopwatch_get_elapsed_time_in_useconds(STOPWATCH* stopwatch, uint32* sec, uint32* usec) +{ + double uelapsed; + + *sec = ((uint32) stopwatch->elapsed) / CLOCKS_PER_SEC; + uelapsed = stopwatch->elapsed - ((double)(*sec) * CLOCKS_PER_SEC); + *usec = (uelapsed / (CLOCKS_PER_SEC / 1000000)); +} + From 9f256c837424a8884a0ce6ca9f9743ef5fe61df7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Fri, 26 Aug 2011 20:26:40 -0400 Subject: [PATCH 05/30] libfreerdp-core: add option to dump remotefx to pcap --- client/X11/xfreerdp.c | 2 +- cunit/test_pcap.c | 4 ++++ include/freerdp/settings.h | 3 +++ include/freerdp/update.h | 4 ++++ include/freerdp/utils/pcap.h | 1 + libfreerdp-core/freerdp.c | 10 ++++++++++ libfreerdp-core/surface.c | 8 ++++++++ libfreerdp-utils/args.c | 11 +++++++++++ libfreerdp-utils/pcap.c | 3 +++ 9 files changed, 45 insertions(+), 1 deletion(-) diff --git a/client/X11/xfreerdp.c b/client/X11/xfreerdp.c index e17f91b51..48da95fb1 100644 --- a/client/X11/xfreerdp.c +++ b/client/X11/xfreerdp.c @@ -718,7 +718,7 @@ int main(int argc, char* argv[]) chanman = freerdp_chanman_new(); SET_CHANMAN(instance, chanman); - instance->settings->sw_gdi = False; + instance->settings->sw_gdi = True; if (freerdp_parse_args(instance->settings, argc, argv, xf_process_plugin_args, chanman, xf_process_ui_args, NULL) < 0) diff --git a/cunit/test_pcap.c b/cunit/test_pcap.c index 99fb71403..d18856f4d 100644 --- a/cunit/test_pcap.c +++ b/cunit/test_pcap.c @@ -76,7 +76,9 @@ void test_pcap(void) pcap = pcap_open("/tmp/test.pcap", True); pcap_add_record(pcap, test_packet_1, sizeof(test_packet_1)); + pcap_flush(pcap); pcap_add_record(pcap, test_packet_2, sizeof(test_packet_2)); + pcap_flush(pcap); pcap_add_record(pcap, test_packet_3, sizeof(test_packet_3)); pcap_close(pcap); @@ -90,6 +92,8 @@ void test_pcap(void) i++; } + CU_ASSERT(i == 3); + pcap_close(pcap); } diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 861620fc6..cc870e9d9 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -297,6 +297,9 @@ struct rdp_settings uint8 rfx_codec_id; boolean frame_acknowledge; + boolean dump_rfx; + char* dump_rfx_file; + boolean remote_app; uint8 num_icon_caches; uint16 num_icon_cache_entries; diff --git a/include/freerdp/update.h b/include/freerdp/update.h index 591d5bef2..96ae25526 100644 --- a/include/freerdp/update.h +++ b/include/freerdp/update.h @@ -22,6 +22,7 @@ #include #include +#include /* Common */ @@ -1072,6 +1073,9 @@ struct rdp_update void* param1; void* param2; + boolean dump_rfx; + rdpPcap* pcap_rfx; + pcBeginPaint BeginPaint; pcEndPaint EndPaint; pcSetBounds SetBounds; diff --git a/include/freerdp/utils/pcap.h b/include/freerdp/utils/pcap.h index 893ff8589..db840c8d9 100644 --- a/include/freerdp/utils/pcap.h +++ b/include/freerdp/utils/pcap.h @@ -76,5 +76,6 @@ FREERDP_API void pcap_close(rdpPcap* pcap); FREERDP_API void pcap_add_record(rdpPcap* pcap, void* data, uint32 length); FREERDP_API boolean pcap_has_next_record(rdpPcap* pcap); FREERDP_API boolean pcap_get_next_record(rdpPcap* pcap, pcap_record* record); +FREERDP_API void pcap_flush(rdpPcap* pcap); #endif /* __UTILS_PCAP_H */ diff --git a/libfreerdp-core/freerdp.c b/libfreerdp-core/freerdp.c index 504079fc9..4b06392e5 100644 --- a/libfreerdp-core/freerdp.c +++ b/libfreerdp-core/freerdp.c @@ -34,9 +34,19 @@ boolean freerdp_connect(freerdp* instance) rdp = (rdpRdp*) instance->rdp; IFCALL(instance->PreConnect, instance); + status = rdp_client_connect((rdpRdp*) instance->rdp); + if (status) + { + if (instance->settings->dump_rfx) + { + instance->update->dump_rfx = instance->settings->dump_rfx; + instance->update->pcap_rfx = pcap_open(instance->settings->dump_rfx_file, True); + } + IFCALL(instance->PostConnect, instance); + } return status; } diff --git a/libfreerdp-core/surface.c b/libfreerdp-core/surface.c index 6c17e310c..98748cac4 100644 --- a/libfreerdp-core/surface.c +++ b/libfreerdp-core/surface.c @@ -17,6 +17,8 @@ * limitations under the License. */ +#include + #include "surface.h" static int update_recv_surfcmd_surface_bits(rdpUpdate* update, STREAM* s) @@ -62,6 +64,12 @@ boolean update_recv_surfcmds(rdpUpdate* update, uint16 size, STREAM* s) while (size > 2) { + if (update->dump_rfx) + { + pcap_add_record(update->pcap_rfx, s->p, size); + pcap_flush(update->pcap_rfx); + } + stream_read_uint16(s, cmdType); size -= 2; diff --git a/libfreerdp-utils/args.c b/libfreerdp-utils/args.c index c260c2d28..7e2fbb324 100644 --- a/libfreerdp-utils/args.c +++ b/libfreerdp-utils/args.c @@ -242,6 +242,17 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv, settings->performance_flags = PERF_FLAG_NONE; settings->large_pointer = True; } + else if (strcmp("--dump-rfx", argv[index]) == 0) + { + index++; + if (index == argc) + { + printf("missing file name\n"); + return -1; + } + settings->dump_rfx_file = xstrdup(argv[index]); + settings->dump_rfx = True; + } else if (strcmp("-m", argv[index]) == 0) { settings->mouse_motion = 0; diff --git a/libfreerdp-utils/pcap.c b/libfreerdp-utils/pcap.c index 4282971ee..e07f9c244 100644 --- a/libfreerdp-utils/pcap.c +++ b/libfreerdp-utils/pcap.c @@ -80,6 +80,9 @@ void pcap_add_record(rdpPcap* pcap, void* data, uint32 length) pcap->tail = record; } + if (pcap->record == NULL) + pcap->record = record; + record->data = data; record->length = length; record->header.incl_len = length; From 25e761e58b3f9669cc45d6957de597eaa104c640 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Fri, 26 Aug 2011 21:44:37 -0400 Subject: [PATCH 06/30] libfreerdp-core: got the server to send some dumped RemoteFX frames --- .gitignore | 3 +++ include/freerdp/update.h | 3 +++ include/freerdp/utils/pcap.h | 2 ++ libfreerdp-core/fastpath.c | 32 +++++++++++++++++++++++++++++++- libfreerdp-core/fastpath.h | 1 + libfreerdp-core/surface.c | 14 +++++++------- libfreerdp-core/update.c | 8 +++++++- libfreerdp-utils/pcap.c | 18 ++++++++++++++++++ server/test/freerdp_server.c | 32 ++++++++++++++++++++++++++++++++ 9 files changed, 104 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 99a76ffaa..67dec24f2 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,9 @@ docs/api ipch Debug +# test files +*.pcap + # Binaries *.a *.so diff --git a/include/freerdp/update.h b/include/freerdp/update.h index 96ae25526..006f624b2 100644 --- a/include/freerdp/update.h +++ b/include/freerdp/update.h @@ -23,6 +23,7 @@ #include #include #include +#include /* Common */ @@ -1064,6 +1065,7 @@ typedef void (*pcMonitoredDesktop)(rdpUpdate* update, WINDOW_ORDER_INFO* orderIn typedef void (*pcNonMonitoredDesktop)(rdpUpdate* update, WINDOW_ORDER_INFO* orderInfo); typedef void (*pcSurfaceBits)(rdpUpdate* update, SURFACE_BITS_COMMAND* surface_bits_command); +typedef void (*pcSurfaceCommand)(rdpUpdate* update, STREAM* s); struct rdp_update { @@ -1146,6 +1148,7 @@ struct rdp_update pcNonMonitoredDesktop NonMonitoredDesktop; pcSurfaceBits SurfaceBits; + pcSurfaceCommand SurfaceCommand; BITMAP_UPDATE bitmap_update; PALETTE_UPDATE palette_update; diff --git a/include/freerdp/utils/pcap.h b/include/freerdp/utils/pcap.h index db840c8d9..a431fbc60 100644 --- a/include/freerdp/utils/pcap.h +++ b/include/freerdp/utils/pcap.h @@ -76,6 +76,8 @@ FREERDP_API void pcap_close(rdpPcap* pcap); FREERDP_API void pcap_add_record(rdpPcap* pcap, void* data, uint32 length); FREERDP_API boolean pcap_has_next_record(rdpPcap* pcap); FREERDP_API boolean pcap_get_next_record(rdpPcap* pcap, pcap_record* record); +FREERDP_API boolean pcap_get_next_record_header(rdpPcap* pcap, pcap_record* record); +FREERDP_API boolean pcap_get_next_record_content(rdpPcap* pcap, pcap_record* record); FREERDP_API void pcap_flush(rdpPcap* pcap); #endif /* __UTILS_PCAP_H */ diff --git a/libfreerdp-core/fastpath.c b/libfreerdp-core/fastpath.c index e48e4a2ae..848170080 100644 --- a/libfreerdp-core/fastpath.c +++ b/libfreerdp-core/fastpath.c @@ -394,7 +394,7 @@ boolean fastpath_recv_inputs(rdpFastPath* fastpath, STREAM* s) { /** * If numberEvents is not provided in fpInputHeader, it will be provided - * as onee additional byte here. + * as one additional byte here. */ if (stream_get_left(s) < 1) @@ -475,6 +475,36 @@ boolean fastpath_send_update_pdu(rdpFastPath* fastpath, STREAM* s) return True; } +boolean fastpath_send_fragmented_update_pdu(rdpFastPath* fastpath, STREAM* s) +{ + uint16 length; + uint32 totalLength; + STREAM* update; + + totalLength = stream_get_length(s); + update = fastpath_update_pdu_init(fastpath); + + if (totalLength <= FASTPATH_MAX_PACKET_SIZE) + { + stream_write_uint8(update, FASTPATH_UPDATETYPE_SURFCMDS | (FASTPATH_FRAGMENT_SINGLE << 4)); + stream_write_uint16(update, totalLength); + stream_write(update, s->data, totalLength); + return fastpath_send_update_pdu(fastpath, update); + } + + while (totalLength > 0) + { + if (totalLength < FASTPATH_MAX_PACKET_SIZE) + length = totalLength; + else + length = FASTPATH_MAX_PACKET_SIZE; + + totalLength -= length; + } + + return True; +} + boolean fastpath_send_surfcmd_frame_marker(rdpFastPath* fastpath, uint16 frameAction, uint32 frameId) { STREAM* s; diff --git a/libfreerdp-core/fastpath.h b/libfreerdp-core/fastpath.h index 5a6166aef..25899b3ba 100644 --- a/libfreerdp-core/fastpath.h +++ b/libfreerdp-core/fastpath.h @@ -100,6 +100,7 @@ boolean fastpath_send_input_pdu(rdpFastPath* fastpath, STREAM* s); STREAM* fastpath_update_pdu_init(rdpFastPath* fastpath); boolean fastpath_send_update_pdu(rdpFastPath* fastpath, STREAM* s); +boolean fastpath_send_fragmented_update_pdu(rdpFastPath* fastpath, STREAM* s); boolean fastpath_send_surfcmd_frame_marker(rdpFastPath* fastpath, uint16 frameAction, uint32 frameId); boolean fastpath_send_surfcmd_surface_bits(rdpFastPath* fastpath, SURFACE_BITS_COMMAND* cmd); diff --git a/libfreerdp-core/surface.c b/libfreerdp-core/surface.c index 98748cac4..fb3075c4f 100644 --- a/libfreerdp-core/surface.c +++ b/libfreerdp-core/surface.c @@ -23,8 +23,8 @@ static int update_recv_surfcmd_surface_bits(rdpUpdate* update, STREAM* s) { - SURFACE_BITS_COMMAND* cmd = &update->surface_bits_command; int pos; + SURFACE_BITS_COMMAND* cmd = &update->surface_bits_command; stream_read_uint16(s, cmd->destLeft); stream_read_uint16(s, cmd->destTop); @@ -62,14 +62,14 @@ boolean update_recv_surfcmds(rdpUpdate* update, uint16 size, STREAM* s) { uint16 cmdType; + if (update->dump_rfx) + { + pcap_add_record(update->pcap_rfx, s->p, size); + pcap_flush(update->pcap_rfx); + } + while (size > 2) { - if (update->dump_rfx) - { - pcap_add_record(update->pcap_rfx, s->p, size); - pcap_flush(update->pcap_rfx); - } - stream_read_uint16(s, cmdType); size -= 2; diff --git a/libfreerdp-core/update.c b/libfreerdp-core/update.c index ffc1e3c49..b63e4b8a0 100644 --- a/libfreerdp-core/update.c +++ b/libfreerdp-core/update.c @@ -322,10 +322,15 @@ static void update_end_paint(rdpUpdate* update) { } +static void update_send_surface_command(rdpUpdate* update, STREAM* s) +{ + rdpRdp* rdp = (rdpRdp*) update->rdp; + fastpath_send_fragmented_update_pdu(rdp->fastpath, s); +} + static void update_send_surface_bits(rdpUpdate* update, SURFACE_BITS_COMMAND* surface_bits_command) { rdpRdp* rdp = (rdpRdp*)update->rdp; - fastpath_send_surfcmd_surface_bits(rdp->fastpath, surface_bits_command); } @@ -362,6 +367,7 @@ void update_register_server_callbacks(rdpUpdate* update) update->Synchronize = update_send_synchronize; update->PointerSystem = update_send_pointer_system; update->SurfaceBits = update_send_surface_bits; + update->SurfaceCommand = update_send_surface_command; } rdpUpdate* update_new(rdpRdp* rdp) diff --git a/libfreerdp-utils/pcap.c b/libfreerdp-utils/pcap.c index e07f9c244..a0ca538c8 100644 --- a/libfreerdp-utils/pcap.c +++ b/libfreerdp-utils/pcap.c @@ -101,6 +101,24 @@ boolean pcap_has_next_record(rdpPcap* pcap) return True; } +boolean pcap_get_next_record_header(rdpPcap* pcap, pcap_record* record) +{ + if (pcap_has_next_record(pcap) != True) + return False; + + pcap_read_record_header(pcap, &record->header); + record->length = record->header.incl_len; + record->data = xmalloc(record->length); + + return True; +} + +boolean pcap_get_next_record_content(rdpPcap* pcap, pcap_record* record) +{ + fread(record->data, record->length, 1, pcap->fp); + return True; +} + boolean pcap_get_next_record(rdpPcap* pcap, pcap_record* record) { if (pcap_has_next_record(pcap) != True) diff --git a/server/test/freerdp_server.c b/server/test/freerdp_server.c index 00d07da47..afab4a8b9 100644 --- a/server/test/freerdp_server.c +++ b/server/test/freerdp_server.c @@ -232,6 +232,33 @@ static void test_peer_draw_icon(freerdp_peer* client, int x, int y) info->icon_y = y; } +void test_peer_dump_rfx(freerdp_peer* client) +{ + STREAM* s; + rdpUpdate* update; + rdpPcap* pcap_rfx; + pcap_record record; + + s = stream_new(512); + update = client->update; + client->update->pcap_rfx = pcap_open("rfx_test.pcap", False); + pcap_rfx = client->update->pcap_rfx; + + while (pcap_has_next_record(pcap_rfx)) + { + pcap_get_next_record_header(pcap_rfx, &record); + + s->data = xrealloc(s->data, record.length); + record.data = s->data; + s->size = record.length; + + pcap_get_next_record_content(pcap_rfx, &record); + s->p = s->data + s->size; + + update->SurfaceCommand(update, s); + } +} + boolean test_peer_post_connect(freerdp_peer* client) { /** @@ -259,6 +286,11 @@ boolean test_peer_post_connect(freerdp_peer* client) test_peer_draw_background(client); test_peer_load_icon(client); + if (client->update->dump_rfx) + { + test_peer_dump_rfx(client); + } + /* Return False here would stop the execution of the peer mainloop. */ return True; } From d9706ff2257ff9aad6e15a8855c5408e4eeebdc7 Mon Sep 17 00:00:00 2001 From: Nils Andresen Date: Sat, 27 Aug 2011 09:13:14 +0200 Subject: [PATCH 07/30] libfreerdp-utils/args.c: added -h for help --- libfreerdp-utils/args.c | 42 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/libfreerdp-utils/args.c b/libfreerdp-utils/args.c index 7e2fbb324..2d177d306 100644 --- a/libfreerdp-utils/args.c +++ b/libfreerdp-utils/args.c @@ -51,7 +51,47 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv, while (index < argc) { - if (strcmp("-a", argv[index]) == 0) + if ((strcmp("-h", argv[index]) == 0 ) || (strcmp("--help", argv[index]) == 0 )) + { + printf("\n" + "FreeRDP - A Free Remote Desktop Protocol Client\n" + "See http://www.freerdp.com for more information\n" + "\n" + "Usage: %s [options] server:port\n" + " -0: connect to console session\n" + " -a: set color depth in bit, default is 16\n" + " -c: initial working directory\n" + " -D: hide window decorations\n" + " -d: domain\n" + " -f: fullscreen mode\n" + " -g: set geometry, using format WxH or X%% or 'workarea', default is 1024x768\n" + " -h: print this help\n" + " -k: set keyboard layout ID\n" + " -m: don't send mouse motion events\n" + " -n: hostname\n" + " -o: console audio\n" + " -p: password\n" + " -s: set startup-shell\n" + " -t: alternative port number, default is 3389\n" + " -u: username\n" + " -x: performance flags (m[odem], b[roadband] or l[an])\n" + " -z: enable compression\n" + " --app: RemoteApp connection. This implies -g workarea\n" + " --ext: load an extension\n" + " --no-auth: disable authentication\n" + " --no-fastpath: disable fast-path\n" + " --no-osb: disable off screen bitmaps, default on\n" + " --plugin: load a virtual channel plugin\n" + " --rfx: enable RemoteFX\n" + " --no-rdp: disable Standard RDP encryption\n" + " --no-tls: disable TLS encryption\n" + " --no-nla: disable network level authentication\n" + " --sec: force protocol security (rdp, tls or nla)\n" + " --version: print version information\n" + "\n", argv[0]); + return -1; //TODO: What is the correct return + } + else if (strcmp("-a", argv[index]) == 0) { index++; if (index == argc) From 793de462fc2ed85b4af4e09af2d7cca75d9372f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Sat, 27 Aug 2011 17:11:20 -0400 Subject: [PATCH 08/30] server: improved replaying of RemoteFX data --- libfreerdp-core/capabilities.c | 4 +++ libfreerdp-core/fastpath.c | 46 ++++++++++++++++++++++++++++++---- libfreerdp-core/surface.c | 22 ++++++++++------ server/test/freerdp_server.c | 4 ++- 4 files changed, 62 insertions(+), 14 deletions(-) diff --git a/libfreerdp-core/capabilities.c b/libfreerdp-core/capabilities.c index daa697cc9..fb0269c23 100644 --- a/libfreerdp-core/capabilities.c +++ b/libfreerdp-core/capabilities.c @@ -1371,6 +1371,10 @@ void rdp_read_bitmap_codecs_capability_set(STREAM* s, rdpSettings* settings) */ void rdp_write_rfx_client_capability_container(STREAM* s, rdpSettings* settings) { + uint16 captureFlags; + + captureFlags = settings->dump_rfx ? 0 : CARDP_CAPS_CAPTURE_NON_CAC; + stream_write_uint16(s, 49); /* codecPropertiesLength */ /* TS_RFX_CLNT_CAPS_CONTAINER */ diff --git a/libfreerdp-core/fastpath.c b/libfreerdp-core/fastpath.c index 848170080..322417da1 100644 --- a/libfreerdp-core/fastpath.c +++ b/libfreerdp-core/fastpath.c @@ -457,9 +457,10 @@ boolean fastpath_send_update_pdu(rdpFastPath* fastpath, STREAM* s) uint16 length; length = stream_get_length(s); + if (length > FASTPATH_MAX_PACKET_SIZE) { - printf("Maximum FastPath Update PDU length is %d\n", FASTPATH_MAX_PACKET_SIZE); + printf("Maximum FastPath Update PDU length is %d (actual:%d)\n", FASTPATH_MAX_PACKET_SIZE, length); return False; } @@ -477,29 +478,64 @@ boolean fastpath_send_update_pdu(rdpFastPath* fastpath, STREAM* s) boolean fastpath_send_fragmented_update_pdu(rdpFastPath* fastpath, STREAM* s) { + int fragment; uint16 length; + uint16 maxLength; uint32 totalLength; STREAM* update; totalLength = stream_get_length(s); - update = fastpath_update_pdu_init(fastpath); + maxLength = FASTPATH_MAX_PACKET_SIZE - 6; - if (totalLength <= FASTPATH_MAX_PACKET_SIZE) + if (totalLength <= maxLength) { + update = fastpath_update_pdu_init(fastpath); stream_write_uint8(update, FASTPATH_UPDATETYPE_SURFCMDS | (FASTPATH_FRAGMENT_SINGLE << 4)); stream_write_uint16(update, totalLength); stream_write(update, s->data, totalLength); return fastpath_send_update_pdu(fastpath, update); } + fragment = 0; while (totalLength > 0) { - if (totalLength < FASTPATH_MAX_PACKET_SIZE) + if (totalLength < maxLength) length = totalLength; else - length = FASTPATH_MAX_PACKET_SIZE; + length = maxLength; totalLength -= length; + update = fastpath_update_pdu_init(fastpath); + + if (fragment == 0) + { + stream_write_uint8(update, FASTPATH_UPDATETYPE_SURFCMDS | (FASTPATH_FRAGMENT_FIRST << 4)); + stream_write_uint16(update, length); + stream_write(update, s->p, length); + fastpath_send_update_pdu(fastpath, update); + s->p += length; + } + else + { + if (totalLength == 0) + { + stream_write_uint8(update, FASTPATH_UPDATETYPE_SURFCMDS | (FASTPATH_FRAGMENT_LAST << 4)); + stream_write_uint16(update, length); + stream_write(update, s->p, length); + fastpath_send_update_pdu(fastpath, update); + s->p += length; + } + else + { + stream_write_uint8(update, FASTPATH_UPDATETYPE_SURFCMDS | (FASTPATH_FRAGMENT_NEXT << 4)); + stream_write_uint16(update, length); + stream_write(update, s->p, length); + fastpath_send_update_pdu(fastpath, update); + s->p += length; + } + } + + fragment++; } return True; diff --git a/libfreerdp-core/surface.c b/libfreerdp-core/surface.c index fb3075c4f..ad55f5d3f 100644 --- a/libfreerdp-core/surface.c +++ b/libfreerdp-core/surface.c @@ -60,16 +60,14 @@ static int update_recv_surfcmd_frame_marker(rdpUpdate* update, STREAM* s) boolean update_recv_surfcmds(rdpUpdate* update, uint16 size, STREAM* s) { + uint8* mark; uint16 cmdType; - - if (update->dump_rfx) - { - pcap_add_record(update->pcap_rfx, s->p, size); - pcap_flush(update->pcap_rfx); - } + uint16 cmdLength; while (size > 2) { + stream_get_mark(s, mark); + stream_read_uint16(s, cmdType); size -= 2; @@ -77,17 +75,25 @@ boolean update_recv_surfcmds(rdpUpdate* update, uint16 size, STREAM* s) { case CMDTYPE_SET_SURFACE_BITS: case CMDTYPE_STREAM_SURFACE_BITS: - size -= update_recv_surfcmd_surface_bits(update, s); + cmdLength = update_recv_surfcmd_surface_bits(update, s); break; case CMDTYPE_FRAME_MARKER: - size -= update_recv_surfcmd_frame_marker(update, s); + cmdLength = update_recv_surfcmd_frame_marker(update, s); break; default: DEBUG_WARN("unknown cmdType 0x%X", cmdType); return False; } + + size -= cmdLength; + + if (update->dump_rfx) + { + pcap_add_record(update->pcap_rfx, mark, cmdLength + 2); + pcap_flush(update->pcap_rfx); + } } return True; } diff --git a/server/test/freerdp_server.c b/server/test/freerdp_server.c index afab4a8b9..7aaa3129d 100644 --- a/server/test/freerdp_server.c +++ b/server/test/freerdp_server.c @@ -286,6 +286,8 @@ boolean test_peer_post_connect(freerdp_peer* client) test_peer_draw_background(client); test_peer_load_icon(client); + //client->update->dump_rfx = True; + if (client->update->dump_rfx) { test_peer_dump_rfx(client); @@ -324,13 +326,13 @@ void test_peer_extended_mouse_event(rdpInput* input, uint16 flags, uint16 x, uin static void* test_peer_mainloop(void* arg) { - freerdp_peer* client = (freerdp_peer*)arg; int i; int fds; int max_fds; int rcount; void* rfds[32]; fd_set rfds_set; + freerdp_peer* client = (freerdp_peer*) arg; memset(rfds, 0, sizeof(rfds)); From fe2e8f51323348176f63be66f7ca97b2e19e08f0 Mon Sep 17 00:00:00 2001 From: qubit Date: Sun, 28 Aug 2011 03:55:26 +0530 Subject: [PATCH 09/30] some basic functions --- include/freerdp/utils/certstore.h | 10 ++++- libfreerdp-core/tls.c | 6 ++- libfreerdp-utils/cerstore.c | 70 ++++++++++++++++++++++++++++++- 3 files changed, 81 insertions(+), 5 deletions(-) diff --git a/include/freerdp/utils/certstore.h b/include/freerdp/utils/certstore.h index 244b9d07b..2aa63be1a 100644 --- a/include/freerdp/utils/certstore.h +++ b/include/freerdp/utils/certstore.h @@ -9,7 +9,6 @@ typedef struct rdp_certdata rdpCertdata; #include #include #include -#include #include struct rdp_certdata { @@ -22,6 +21,13 @@ struct rdp_certstore char* path; char* file; char* home; - boolean available; struct rdp_certdata* certdata; }; +void certstore_create(rdpCertstore* certstore); +void certstore_open(rdpCertstore* certstore); +void certstore_load(rdpCertstore* certstore); +void certstore_close(rdpcertstore* certstore); +char* get_local_certloc(); +void certstore_init(rdpCertstore* certstore); +rdpCertstore* certstore_new(rdpCertdata* certdata); +void cerstore_free(rdpCertsore* certstore); diff --git a/libfreerdp-core/tls.c b/libfreerdp-core/tls.c index 09139f2e1..7f3a67828 100644 --- a/libfreerdp-core/tls.c +++ b/libfreerdp-core/tls.c @@ -250,7 +250,7 @@ rdpTls* tls_new() boolean tls_verify_cert(CryptoCert cert) { X509 *xcert=cert->px509; - char dir_path[1024]=""; + char *cert_loc; int ret=0; X509_STORE *cert_ctx=NULL; X509_LOOKUP *lookup=NULL; @@ -266,7 +266,9 @@ boolean tls_verify_cert(CryptoCert cert) if (lookup == NULL) goto end; X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT); - X509_LOOKUP_add_dir(lookup,CA_LOCAL_PATH,X509_FILETYPE_ASN1); + cert_loc=get_local_certloc(); + X509_LOOKUP_add_dir(lookup,cert_loc,X509_FILETYPE_ASN1); + xfree(cert_loc); csc = X509_STORE_CTX_new(); if (csc == NULL) goto end; diff --git a/libfreerdp-utils/cerstore.c b/libfreerdp-utils/cerstore.c index 7e4209762..46463c55b 100644 --- a/libfreerdp-utils/cerstore.c +++ b/libfreerdp-utils/cerstore.c @@ -24,8 +24,52 @@ #endif static char cert_dir[] = "freerdp"; +static char cert_loc[] = "cacert"; static char certstore_file[] = "known_hosts"; +void certstore_create(rdpCertstore* certstore) +{ + certstore->fp = fopen((char*)certstore->file, "w+"); + + if (certstore->fp == NULL) + { + printf("certstore_create: error opening [%s] for writing\n", certstore->file); + return; + } + fflush(certstore->fp); +} + +void certstore_load(rdpCertstore* certstore) +{ + certstore->fp = fopen((char*)certstore->file, "r+"); +} + +void certstore_open(rdpCertstore* certstore) +{ + struct stat stat_info; + + if (stat((char*)certstore->file, &stat_info) != 0) + certstore_create(certstore); + else + certstore_load(certstore); +} + +void certstore_close(rdpcertstore* certstore) +{ + if (certstore->fp != NULL) + fclose(certstore->fp); +} + +char* get_local_certloc() +{ + char *home_path; + char *cert_loc; + home_path=getenv("HOME"); + cert_loc=(char*)xmalloc(strlen(home_path)+strlen("/.")+strlen(cert_dir)+strlen("/")+strlen(cert_loc)+1); + sprintf(cert_loc,"%s/.%s/%s",home_path,cert_dir,cert_loc); + return cert_loc; +} + void certstore_init(rdpCertstore* certstore) { int length; @@ -33,7 +77,6 @@ void certstore_init(rdpCertstore* certstore) struct stat stat_info; home_path = getenv("HOME"); - certstore->available = True; if (home_path == NULL) { @@ -66,3 +109,28 @@ void certstore_init(rdpCertstore* certstore) certstore_open(certstore); } + +rdpCertstore* certstore_new(rdpCertdata* certdata) +{ + rdpCertstore* certstore = (rdpCertstore*) xzalloc(sizeof(rdpCertstore)); + + if (certstore != NULL) + { + certstore->certdata = certdata; + certstore_init(certstore); + } + + return certstore; +} + +void cerstore_free(rdpCertsore* certstore) +{ + if (certstore != NULL) + { + certstore_close(certstore); + xfree(certstore->path); + xfree(certstore->file); + xfree(certstore->home); + xfree(certstore); + } +} From c9c80f2ec94fe26423d8f35321585ce344e1c892 Mon Sep 17 00:00:00 2001 From: qubit Date: Sun, 28 Aug 2011 17:54:31 +0530 Subject: [PATCH 10/30] parse certstore file and print --- include/freerdp/utils/certstore.h | 1 + libfreerdp-utils/cerstore.c | 51 ++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/include/freerdp/utils/certstore.h b/include/freerdp/utils/certstore.h index 2aa63be1a..c6ae4a4a2 100644 --- a/include/freerdp/utils/certstore.h +++ b/include/freerdp/utils/certstore.h @@ -21,6 +21,7 @@ struct rdp_certstore char* path; char* file; char* home; + int match; struct rdp_certdata* certdata; }; void certstore_create(rdpCertstore* certstore); diff --git a/libfreerdp-utils/cerstore.c b/libfreerdp-utils/cerstore.c index 46463c55b..0e9e23495 100644 --- a/libfreerdp-utils/cerstore.c +++ b/libfreerdp-utils/cerstore.c @@ -75,7 +75,8 @@ void certstore_init(rdpCertstore* certstore) int length; char* home_path; struct stat stat_info; - + + certstore->match=1; home_path = getenv("HOME"); if (home_path == NULL) @@ -134,3 +135,51 @@ void cerstore_free(rdpCertsore* certstore) xfree(certstore); } } + +int match_certdata(rdpCertdata* certdata) +{ + char *host; + char *p; + char *thumb_print; + int length; + unsigned char c; + FILE* cfp; + rdpCertstore* certstore=certstore_new(certdata); + cfp=certstore->fp; + length=strlen(certdata->thumbprint); + for(;;) + { + if((int)fread(host,sizeof(char),strlen(certdata->hostname),cfp) < strlen(certdata->hostname)) + break; + if((!strcmp(host,certdata->hostname)) && ((c=fgetc(cfp))==' ' || c=='\t') ) + { + ungetc(c,cfp); + while((c=fgetc(cfp))==' ' || c=='\t'); + if(c==EOF) + break; + ungetc(c,cfp); + thumb_print=xzalloc(length+1); + p=thumb_print; + while((p-thumb_print < length) && (*p=fgetc(cfp))!=EOF && *p!='\n' && *p==certdata->thumbprint+p-thumb_print) + p++; + if(p-thumb_print==length) + certdata->match=0; + else + certdata->match=-1; + break; + } + else + while(c!='\n'||c!=EOF) + c=fgetc(cfp); + if(c==EOF) + break; + else + ungetc(c,cfp); + } + return certdata->match; +} +void print_certdata(rdpCertstore* certstore) +{ + lseek(certstore->fp,0,SEEK_END); + fprintf(certstore->fp,"%s %s\n",certstore->certdata->hostname,certstore->certdata->thumbprint); +} From 9ed52746e6d271b3439e616eefff4cddffeae73a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Sun, 28 Aug 2011 13:36:56 -0400 Subject: [PATCH 11/30] libfreerdp-core: refactoring of fast-path updates --- libfreerdp-core/fastpath.c | 96 ++++++++++++++++-------------------- server/test/freerdp_server.c | 2 +- 2 files changed, 43 insertions(+), 55 deletions(-) diff --git a/libfreerdp-core/fastpath.c b/libfreerdp-core/fastpath.c index 322417da1..227824524 100644 --- a/libfreerdp-core/fastpath.c +++ b/libfreerdp-core/fastpath.c @@ -73,6 +73,26 @@ uint16 fastpath_read_header(rdpFastPath* fastpath, STREAM* s) return length; } +inline void fastpath_read_update_header(STREAM* s, uint8* updateCode, uint8* fragmentation, uint8* compression) +{ + uint8 updateHeader; + + stream_read_uint8(s, updateHeader); + *updateCode = updateHeader & 0x0F; + *fragmentation = (updateHeader >> 4) & 0x03; + *compression = (updateHeader >> 6) & 0x03; +} + +inline void fastpath_write_update_header(STREAM* s, uint8 updateCode, uint8 fragmentation, uint8 compression) +{ + uint8 updateHeader = 0; + + updateHeader |= updateCode & 0x0F; + updateHeader |= (fragmentation << 4) & 0x03; + updateHeader |= (compression << 6) & 0x03; + stream_write_uint8(s, updateHeader); +} + boolean fastpath_read_security_header(rdpFastPath* fastpath, STREAM* s) { /* TODO: fipsInformation */ @@ -175,7 +195,6 @@ static void fastpath_recv_update(rdpFastPath* fastpath, uint8 updateCode, uint16 static void fastpath_recv_update_data(rdpFastPath* fastpath, STREAM* s) { - uint8 updateHeader; uint8 updateCode; uint8 fragmentation; uint8 compression; @@ -184,10 +203,7 @@ static void fastpath_recv_update_data(rdpFastPath* fastpath, STREAM* s) STREAM* update_stream; int next_pos; - stream_read_uint8(s, updateHeader); - updateCode = updateHeader & 0x0F; - fragmentation = (updateHeader >> 4) & 0x03; - compression = (updateHeader >> 6) & 0x03; + fastpath_read_update_header(s, &updateCode, &fragmentation, &compression); if (compression == FASTPATH_OUTPUT_COMPRESSION_USED) stream_read_uint8(s, compressionFlags); @@ -212,7 +228,9 @@ static void fastpath_recv_update_data(rdpFastPath* fastpath, STREAM* s) else { if (fragmentation == FASTPATH_FRAGMENT_FIRST) + { stream_set_pos(fastpath->updateData, 0); + } stream_check_size(fastpath->updateData, size); stream_copy(fastpath->updateData, s, size); @@ -481,61 +499,33 @@ boolean fastpath_send_fragmented_update_pdu(rdpFastPath* fastpath, STREAM* s) int fragment; uint16 length; uint16 maxLength; + uint16 fragLength; uint32 totalLength; + uint8 fragmentation; STREAM* update; - totalLength = stream_get_length(s); maxLength = FASTPATH_MAX_PACKET_SIZE - 6; + totalLength = stream_get_length(s); + stream_set_pos(s, 0); - if (totalLength <= maxLength) + for (fragment = 0; totalLength > 0; fragment++) { update = fastpath_update_pdu_init(fastpath); - stream_write_uint8(update, FASTPATH_UPDATETYPE_SURFCMDS | (FASTPATH_FRAGMENT_SINGLE << 4)); - stream_write_uint16(update, totalLength); - stream_write(update, s->data, totalLength); - return fastpath_send_update_pdu(fastpath, update); - } - - fragment = 0; - while (totalLength > 0) - { - if (totalLength < maxLength) - length = totalLength; - else - length = maxLength; - + length = MIN(maxLength, totalLength); + fragLength = length - 3; totalLength -= length; - update = fastpath_update_pdu_init(fastpath); - if (fragment == 0) - { - stream_write_uint8(update, FASTPATH_UPDATETYPE_SURFCMDS | (FASTPATH_FRAGMENT_FIRST << 4)); - stream_write_uint16(update, length); - stream_write(update, s->p, length); - fastpath_send_update_pdu(fastpath, update); - s->p += length; - } + if (totalLength == 0) + fragmentation = (fragment == 0) ? FASTPATH_FRAGMENT_SINGLE : FASTPATH_FRAGMENT_LAST; else - { - if (totalLength == 0) - { - stream_write_uint8(update, FASTPATH_UPDATETYPE_SURFCMDS | (FASTPATH_FRAGMENT_LAST << 4)); - stream_write_uint16(update, length); - stream_write(update, s->p, length); - fastpath_send_update_pdu(fastpath, update); - s->p += length; - } - else - { - stream_write_uint8(update, FASTPATH_UPDATETYPE_SURFCMDS | (FASTPATH_FRAGMENT_NEXT << 4)); - stream_write_uint16(update, length); - stream_write(update, s->p, length); - fastpath_send_update_pdu(fastpath, update); - s->p += length; - } - } + fragmentation = (fragment == 0) ? FASTPATH_FRAGMENT_FIRST : FASTPATH_FRAGMENT_NEXT; - fragment++; + fastpath_write_update_header(update, FASTPATH_UPDATETYPE_SURFCMDS, fragmentation, 0); + stream_write_uint16(update, length); + stream_write(update, s->p, fragLength); + stream_seek(s, fragLength); + + fastpath_send_update_pdu(fastpath, update); } return True; @@ -586,19 +576,17 @@ boolean fastpath_send_surfcmd_surface_bits(rdpFastPath* fastpath, SURFACE_BITS_C } fragment_size = MIN(FASTPATH_MAX_PACKET_SIZE - stream_get_length(s), bitmapDataLength); + if (fragment_size == bitmapDataLength) - { fragmentation = (i == 0 ? FASTPATH_FRAGMENT_SINGLE : FASTPATH_FRAGMENT_LAST); - } else - { fragmentation = (i == 0 ? FASTPATH_FRAGMENT_FIRST : FASTPATH_FRAGMENT_NEXT); - } + size += fragment_size; ep = stream_get_pos(s); stream_set_pos(s, bp); - stream_write_uint8(s, FASTPATH_UPDATETYPE_SURFCMDS | (fragmentation << 4)); + fastpath_write_update_header(s, FASTPATH_UPDATETYPE_SURFCMDS, fragmentation, 0); stream_write_uint16(s, size); stream_set_pos(s, ep); diff --git a/server/test/freerdp_server.c b/server/test/freerdp_server.c index 7aaa3129d..8762622c0 100644 --- a/server/test/freerdp_server.c +++ b/server/test/freerdp_server.c @@ -286,7 +286,7 @@ boolean test_peer_post_connect(freerdp_peer* client) test_peer_draw_background(client); test_peer_load_icon(client); - //client->update->dump_rfx = True; + client->update->dump_rfx = True; if (client->update->dump_rfx) { From 53aa93868398892a47a7fff6c377862b89b5eeb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Sun, 28 Aug 2011 15:12:33 -0400 Subject: [PATCH 12/30] libfreerdp-core: fix potential overflow in parsing of fragmented RemoteFX packets --- .gitignore | 3 --- libfreerdp-core/fastpath.c | 20 +++++++++----------- libfreerdp-core/surface.c | 4 ++-- libfreerdp-core/surface.h | 2 +- libfreerdp-utils/pcap.c | 2 +- server/test/rfx_test.pcap | Bin 0 -> 414979 bytes 6 files changed, 13 insertions(+), 18 deletions(-) create mode 100644 server/test/rfx_test.pcap diff --git a/.gitignore b/.gitignore index 67dec24f2..99a76ffaa 100644 --- a/.gitignore +++ b/.gitignore @@ -30,9 +30,6 @@ docs/api ipch Debug -# test files -*.pcap - # Binaries *.a *.so diff --git a/libfreerdp-core/fastpath.c b/libfreerdp-core/fastpath.c index 227824524..3aab07873 100644 --- a/libfreerdp-core/fastpath.c +++ b/libfreerdp-core/fastpath.c @@ -142,7 +142,7 @@ static void fastpath_recv_update_common(rdpFastPath* fastpath, STREAM* s) } } -static void fastpath_recv_update(rdpFastPath* fastpath, uint8 updateCode, uint16 size, STREAM* s) +static void fastpath_recv_update(rdpFastPath* fastpath, uint8 updateCode, uint32 size, STREAM* s) { switch (updateCode) { @@ -195,13 +195,14 @@ static void fastpath_recv_update(rdpFastPath* fastpath, uint8 updateCode, uint16 static void fastpath_recv_update_data(rdpFastPath* fastpath, STREAM* s) { + uint16 size; + int next_pos; + uint32 totalSize; uint8 updateCode; uint8 fragmentation; uint8 compression; uint8 compressionFlags; - uint16 size; STREAM* update_stream; - int next_pos; fastpath_read_update_header(s, &updateCode, &fragmentation, &compression); @@ -223,14 +224,13 @@ static void fastpath_recv_update_data(rdpFastPath* fastpath, STREAM* s) update_stream = NULL; if (fragmentation == FASTPATH_FRAGMENT_SINGLE) { + totalSize = size; update_stream = s; } else { if (fragmentation == FASTPATH_FRAGMENT_FIRST) - { stream_set_pos(fastpath->updateData, 0); - } stream_check_size(fastpath->updateData, size); stream_copy(fastpath->updateData, s, size); @@ -238,13 +238,13 @@ static void fastpath_recv_update_data(rdpFastPath* fastpath, STREAM* s) if (fragmentation == FASTPATH_FRAGMENT_LAST) { update_stream = fastpath->updateData; - size = stream_get_length(update_stream); + totalSize = stream_get_length(update_stream); stream_set_pos(update_stream, 0); } } if (update_stream) - fastpath_recv_update(fastpath, updateCode, size, update_stream); + fastpath_recv_update(fastpath, updateCode, totalSize, update_stream); stream_set_pos(s, next_pos); } @@ -499,7 +499,6 @@ boolean fastpath_send_fragmented_update_pdu(rdpFastPath* fastpath, STREAM* s) int fragment; uint16 length; uint16 maxLength; - uint16 fragLength; uint32 totalLength; uint8 fragmentation; STREAM* update; @@ -512,7 +511,6 @@ boolean fastpath_send_fragmented_update_pdu(rdpFastPath* fastpath, STREAM* s) { update = fastpath_update_pdu_init(fastpath); length = MIN(maxLength, totalLength); - fragLength = length - 3; totalLength -= length; if (totalLength == 0) @@ -522,8 +520,8 @@ boolean fastpath_send_fragmented_update_pdu(rdpFastPath* fastpath, STREAM* s) fastpath_write_update_header(update, FASTPATH_UPDATETYPE_SURFCMDS, fragmentation, 0); stream_write_uint16(update, length); - stream_write(update, s->p, fragLength); - stream_seek(s, fragLength); + stream_write(update, s->p, length); + stream_seek(s, length); fastpath_send_update_pdu(fastpath, update); } diff --git a/libfreerdp-core/surface.c b/libfreerdp-core/surface.c index ad55f5d3f..b0bc45411 100644 --- a/libfreerdp-core/surface.c +++ b/libfreerdp-core/surface.c @@ -58,11 +58,11 @@ static int update_recv_surfcmd_frame_marker(rdpUpdate* update, STREAM* s) return 6; } -boolean update_recv_surfcmds(rdpUpdate* update, uint16 size, STREAM* s) +boolean update_recv_surfcmds(rdpUpdate* update, uint32 size, STREAM* s) { uint8* mark; uint16 cmdType; - uint16 cmdLength; + uint32 cmdLength; while (size > 2) { diff --git a/libfreerdp-core/surface.h b/libfreerdp-core/surface.h index 1c18adf39..c19ed0d57 100644 --- a/libfreerdp-core/surface.h +++ b/libfreerdp-core/surface.h @@ -39,7 +39,7 @@ enum SURFCMD_FRAMEACTION SURFACECMD_FRAMEACTION_END = 0x0001 }; -boolean update_recv_surfcmds(rdpUpdate* update, uint16 size, STREAM* s); +boolean update_recv_surfcmds(rdpUpdate* update, uint32 size, STREAM* s); void update_write_surfcmd_surface_bits_header(STREAM* s, SURFACE_BITS_COMMAND* cmd); void update_write_surfcmd_frame_marker(STREAM* s, uint16 frameAction, uint32 frameId); diff --git a/libfreerdp-utils/pcap.c b/libfreerdp-utils/pcap.c index a0ca538c8..48f2a711d 100644 --- a/libfreerdp-utils/pcap.c +++ b/libfreerdp-utils/pcap.c @@ -149,7 +149,7 @@ rdpPcap* pcap_open(char* name, boolean write) pcap->header.version_minor = 4; pcap->header.thiszone = 0; pcap->header.sigfigs = 0; - pcap->header.snaplen = 65535; + pcap->header.snaplen = 0xFFFFFFFF; pcap->header.network = 0; pcap_write_header(pcap, &pcap->header); } diff --git a/server/test/rfx_test.pcap b/server/test/rfx_test.pcap new file mode 100644 index 0000000000000000000000000000000000000000..3a857a36a23723d3987df7fd5673283498389beb GIT binary patch literal 414979 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¥0exrBK5mM>A!%H6LyNx(W!OX{a7xXrlUAu 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

Q~xk`&)GzU44?S$57|b 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 Date: Sun, 28 Aug 2011 15:51:49 -0400 Subject: [PATCH 13/30] libfreerdp-core: added --play-rfx option to play RemoteFX data from a file --- include/freerdp/settings.h | 2 ++ include/freerdp/update.h | 1 + libfreerdp-core/freerdp.c | 32 ++++++++++++++++++++++++++++++++ libfreerdp-utils/args.c | 11 +++++++++++ server/test/rfx_test.pcap | Bin 414979 -> 419012 bytes 5 files changed, 46 insertions(+) diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index cc870e9d9..9adf77bb7 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -298,7 +298,9 @@ struct rdp_settings boolean frame_acknowledge; boolean dump_rfx; + boolean play_rfx; char* dump_rfx_file; + char* play_rfx_file; boolean remote_app; uint8 num_icon_caches; diff --git a/include/freerdp/update.h b/include/freerdp/update.h index 006f624b2..aaaf56567 100644 --- a/include/freerdp/update.h +++ b/include/freerdp/update.h @@ -1076,6 +1076,7 @@ struct rdp_update void* param2; boolean dump_rfx; + boolean play_rfx; rdpPcap* pcap_rfx; pcBeginPaint BeginPaint; diff --git a/libfreerdp-core/freerdp.c b/libfreerdp-core/freerdp.c index 4b06392e5..bd88f449d 100644 --- a/libfreerdp-core/freerdp.c +++ b/libfreerdp-core/freerdp.c @@ -20,6 +20,7 @@ #include "rdp.h" #include "input.h" #include "update.h" +#include "surface.h" #include "transport.h" #include "connection.h" @@ -46,6 +47,37 @@ boolean freerdp_connect(freerdp* instance) } IFCALL(instance->PostConnect, instance); + + if (instance->settings->play_rfx) + { + STREAM* s; + rdpUpdate* update; + pcap_record record; + + s = stream_new(1024); + instance->update->play_rfx = instance->settings->play_rfx; + instance->update->pcap_rfx = pcap_open(instance->settings->play_rfx_file, False); + update = instance->update; + + while (pcap_has_next_record(update->pcap_rfx)) + { + pcap_get_next_record_header(update->pcap_rfx, &record); + + s->data = xrealloc(s->data, record.length); + record.data = s->data; + s->size = record.length; + + pcap_get_next_record_content(update->pcap_rfx, &record); + stream_set_pos(s, 0); + + update->BeginPaint(update); + update_recv_surfcmds(update, s->size, s); + update->EndPaint(update); + } + + xfree(s->data); + return True; + } } return status; diff --git a/libfreerdp-utils/args.c b/libfreerdp-utils/args.c index 2d177d306..b6ce38145 100644 --- a/libfreerdp-utils/args.c +++ b/libfreerdp-utils/args.c @@ -293,6 +293,17 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv, settings->dump_rfx_file = xstrdup(argv[index]); settings->dump_rfx = True; } + else if (strcmp("--play-rfx", argv[index]) == 0) + { + index++; + if (index == argc) + { + printf("missing file name\n"); + return -1; + } + settings->play_rfx_file = xstrdup(argv[index]); + settings->play_rfx = True; + } else if (strcmp("-m", argv[index]) == 0) { settings->mouse_motion = 0; diff --git a/server/test/rfx_test.pcap b/server/test/rfx_test.pcap index 3a857a36a23723d3987df7fd5673283498389beb..c830e10b596daca4ba744f4d117c8b3561574160 100644 GIT binary patch delta 26204 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 P*M3pX|I*Ibdx8G}A!F{p delta 8660 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 From 66d1ceff036a4ea4d75b6501de81b3becfc5bb0f Mon Sep 17 00:00:00 2001 From: qubit Date: Mon, 29 Aug 2011 02:16:36 +0530 Subject: [PATCH 14/30] certificate verification (not tested) --- include/freerdp/utils/certstore.h | 9 +- libfreerdp-core/credssp.c | 69 ++++++++--- libfreerdp-core/crypto.c | 103 +++++++++++++---- libfreerdp-core/crypto.h | 2 + libfreerdp-core/tls.c | 87 ++++++++------ libfreerdp-core/tls.h | 4 +- libfreerdp-utils/cerstore.c | 185 ------------------------------ 7 files changed, 195 insertions(+), 264 deletions(-) delete mode 100644 libfreerdp-utils/cerstore.c diff --git a/include/freerdp/utils/certstore.h b/include/freerdp/utils/certstore.h index c6ae4a4a2..5eb786ca4 100644 --- a/include/freerdp/utils/certstore.h +++ b/include/freerdp/utils/certstore.h @@ -10,6 +10,7 @@ typedef struct rdp_certdata rdpCertdata; #include #include #include + struct rdp_certdata { char* thumbprint; @@ -24,11 +25,17 @@ struct rdp_certstore int match; struct rdp_certdata* certdata; }; + void certstore_create(rdpCertstore* certstore); void certstore_open(rdpCertstore* certstore); void certstore_load(rdpCertstore* certstore); void certstore_close(rdpcertstore* certstore); char* get_local_certloc(); +rdpCertdata* certdata_new(char* host_name,char* fingerprint); +void certdata_free(rdpCertdata* certdata); void certstore_init(rdpCertstore* certstore); rdpCertstore* certstore_new(rdpCertdata* certdata); -void cerstore_free(rdpCertsore* certstore); +void certstore_free(rdpCertsore* certstore); +int match_certdata(rdpCertdata* certdata); +void print_certdata(rdpCertstore* certstore); +#endif /* __CERTSTORE_UTILS_H */ diff --git a/libfreerdp-core/credssp.c b/libfreerdp-core/credssp.c index d58969ce8..7669da262 100644 --- a/libfreerdp-core/credssp.c +++ b/libfreerdp-core/credssp.c @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -28,9 +28,9 @@ /** * TSRequest ::= SEQUENCE { - * version [0] INTEGER, + * version [0] INTEGER, * negoTokens [1] NegoData OPTIONAL, - * authInfo [2] OCTET STRING OPTIONAL, + * authInfo [2] OCTET STRING OPTIONAL, * pubKeyAuth [3] OCTET STRING OPTIONAL * } * @@ -41,29 +41,29 @@ * } * * TSCredentials ::= SEQUENCE { - * credType [0] INTEGER, + * credType [0] INTEGER, * credentials [1] OCTET STRING * } * * TSPasswordCreds ::= SEQUENCE { - * domainName [0] OCTET STRING, - * userName [1] OCTET STRING, - * password [2] OCTET STRING + * domainName [0] OCTET STRING, + * userName [1] OCTET STRING, + * password [2] OCTET STRING * } * * TSSmartCardCreds ::= SEQUENCE { - * pin [0] OCTET STRING, - * cspData [1] TSCspDataDetail, - * userHint [2] OCTET STRING OPTIONAL, + * pin [0] OCTET STRING, + * cspData [1] TSCspDataDetail, + * userHint [2] OCTET STRING OPTIONAL, * domainHint [3] OCTET STRING OPTIONAL * } * * TSCspDataDetail ::= SEQUENCE { - * keySpec [0] INTEGER, - * cardName [1] OCTET STRING OPTIONAL, - * readerName [2] OCTET STRING OPTIONAL, + * keySpec [0] INTEGER, + * cardName [1] OCTET STRING OPTIONAL, + * readerName [2] OCTET STRING OPTIONAL, * containerName [3] OCTET STRING OPTIONAL, - * cspName [4] OCTET STRING OPTIONAL + * cspName [4] OCTET STRING OPTIONAL * } * */ @@ -100,6 +100,43 @@ void credssp_ntlmssp_init(rdpCredssp* credssp) ntlmssp->ntlm_v2 = 0; } +int tls_verify_certificate(CryptoCert cert,char* hostname) +{ + boolean ret; + ret=x509_verify_cert(cert); + if(!ret) + { + Certdata* certdata; + certdata=crypto_get_certdata(cert->px509,hostname); + Certstore* certstore=certstore_new(certdata); + if(match_certdata(certstore)==0) + return 0; + if(certstore->match==1) + { + crypto_cert_printinfo(cert->x509); + char answer; + while(1) + { + printf("Do you trust the above certificate? (Y/N)"); + answer=fgetc(stdin); + if(answer=='y' || answer =='Y') + { + print_certdata(certstore);break; + } + else if(answer=='n' || answer=='N') + { + /*disconnect*/break; + } + } + return 0; + } + else if(certstore->match==-1) + { + cert_print_error();/*disconnect*/ + } + certstore_free(certstore); + } +} /** * Get TLS public key. * @param credssp @@ -109,7 +146,7 @@ int credssp_get_public_key(rdpCredssp* credssp) { int ret; CryptoCert cert; - + cert = tls_get_certificate(credssp->transport->tls); if (cert == NULL) @@ -117,7 +154,7 @@ int credssp_get_public_key(rdpCredssp* credssp) printf("credssp_get_public_key: tls_get_certificate failed to return the server certificate.\n"); return 0; } - + tls_verify_certificate(cert,credssp->transport->settings->hostname); ret = crypto_cert_get_public_key(cert, &credssp->public_key); crypto_cert_free(cert); diff --git a/libfreerdp-core/crypto.c b/libfreerdp-core/crypto.c index 366e8d7c3..8cea73cb4 100644 --- a/libfreerdp-core/crypto.c +++ b/libfreerdp-core/crypto.c @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -189,33 +189,86 @@ void crypto_nonce(uint8* nonce, int size) { RAND_bytes((void*) nonce, size); } + char* crypto_cert_fingerprint(X509 *xcert) { - unsigned char fp[EVP_MAX_MD_SIZE]; - int i; - unsigned int fp_len; - X509_digest(xcert,EVP_sha1(),fp,&fp_len); - char *fp_buf=xzalloc(3*fp_len); - char *p = fp_buf; - for (i = 0; i < fp_len - 1; i++) - { - sprintf(p, "%02x:", fp[i]); - p = (char*) &fp_buf[i * 3]; - } - sprintf(p, "%02x", fp[i]); - return fp_buf; + unsigned char fp[EVP_MAX_MD_SIZE]; + int i; + unsigned int fp_len; + X509_digest(xcert,EVP_sha1(),fp,&fp_len); + char *fp_buf=xzalloc(3*fp_len); + char *p = fp_buf; + for (i = 0; i < fp_len - 1; i++) + { + sprintf(p, "%02x:", fp[i]); + p = (char*) &fp_buf[i * 3]; + } + sprintf(p, "%02x", fp[i]); + return fp_buf; } + +boolean x509_verify_cert(CryptoCert cert) +{ + X509 *xcert=cert->px509; + char *cert_loc; + int ret=0; + X509_STORE *cert_ctx=NULL; + X509_LOOKUP *lookup=NULL; + X509_STORE_CTX *csc; + cert_ctx=X509_STORE_new(); + if (cert_ctx == NULL) + goto end; + OpenSSL_add_all_algorithms(); + lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file()); + if (lookup == NULL) + goto end; + lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_hash_dir()); + if (lookup == NULL) + goto end; + X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT); + cert_loc=get_local_certloc(); + if(cert_loc!=NULL) + { + X509_LOOKUP_add_dir(lookup,cert_loc,X509_FILETYPE_ASN1); + xfree(cert_loc); + } + csc = X509_STORE_CTX_new(); + if (csc == NULL) + goto end; + X509_STORE_set_flags(cert_ctx, 0); + if(!X509_STORE_CTX_init(csc,cert_ctx,xcert,0)) + goto end; + int i=X509_verify_cert(csc); + X509_STORE_CTX_free(csc); + X509_STORE_free(cert_ctx); + ret=0; + end: + ret = (i > 0); + return(ret); +} + +rdpCertdata* crypto_get_certdata(X509 *xcert,char* hostname) +{ + rdpCertdata* certdata; + char *fp; + fp=crypto_cert_fingerprint(xcert); + certdata=certdata_new(hostname,fp); + xfree(fp); + return certdata; +} + void crypto_cert_printinfo(X509 *xcert) { - char *subject; - char *issuer; - char *fp; - subject=X509_NAME_oneline(X509_get_subject_name(xcert),NULL,0); - issuer=X509_NAME_oneline(X509_get_issuer_name(xcert),NULL,0); - fp=crypto_cert_fingerprint(xcert); - printf("Cerificate details:\n"); - printf("\tSubject : %s\n",subject); - printf("\tIssuer : %s\n",issuer); - printf("\tCert Thumbprint (sha1) : %s\n",fp); - xfree(fp); + char *subject; + char *issuer; + char *fp; + subject=X509_NAME_oneline(X509_get_subject_name(xcert),NULL,0); + issuer=X509_NAME_oneline(X509_get_issuer_name(xcert),NULL,0); + fp=crypto_cert_fingerprint(xcert); + printf("Cerificate details:\n"); + printf("\tSubject : %s\n",subject); + printf("\tIssuer : %s\n",issuer); + printf("\tThumbprint (sha1) : %s\n",fp); + printf("The above x509 certificate couldn't be verified.Possibly because you do not have the CA cetificate in your certstore or certificate has expired.\nPlease look at the docs on how to create local certstore for private CA.\n"); + xfree(fp); } diff --git a/libfreerdp-core/crypto.h b/libfreerdp-core/crypto.h index c93fb1a20..187871d6e 100644 --- a/libfreerdp-core/crypto.h +++ b/libfreerdp-core/crypto.h @@ -46,6 +46,7 @@ #include #include #include +#include struct crypto_sha1_struct { @@ -87,6 +88,7 @@ CryptoCert crypto_cert_read(uint8* data, uint32 length); char* cypto_cert_fingerprint(X509* xcert); void crypto_cert_printinfo(X509* xcert); void crypto_cert_free(CryptoCert cert); +boolean x509_verify_cert(CryptoCert cert); boolean crypto_cert_verify(CryptoCert server_cert, CryptoCert cacert); boolean crypto_cert_get_public_key(CryptoCert cert, rdpBlob* public_key); diff --git a/libfreerdp-core/tls.c b/libfreerdp-core/tls.c index 7f3a67828..61e9a6f77 100644 --- a/libfreerdp-core/tls.c +++ b/libfreerdp-core/tls.c @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -240,48 +240,63 @@ rdpTls* tls_new() tls->connect = tls_connect; tls->accept = tls_accept; tls->disconnect = tls_disconnect; - + SSL_load_error_strings(); SSL_library_init(); } return tls; } -boolean tls_verify_cert(CryptoCert cert) + +int tls_verify_certificate(CryptoCert cert,char* hostname) { - X509 *xcert=cert->px509; - char *cert_loc; - int ret=0; - X509_STORE *cert_ctx=NULL; - X509_LOOKUP *lookup=NULL; - X509_STORE_CTX *csc; - cert_ctx=X509_STORE_new(); - if (cert_ctx == NULL) - goto end; - OpenSSL_add_all_algorithms(); - lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file()); - if (lookup == NULL) - goto end; - lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_hash_dir()); - if (lookup == NULL) - goto end; - X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT); - cert_loc=get_local_certloc(); - X509_LOOKUP_add_dir(lookup,cert_loc,X509_FILETYPE_ASN1); - xfree(cert_loc); - csc = X509_STORE_CTX_new(); - if (csc == NULL) - goto end; - X509_STORE_set_flags(cert_ctx, 0); - if(!X509_STORE_CTX_init(csc,cert_ctx,xcert,0)) - goto end; - int i=X509_verify_cert(csc); - X509_STORE_CTX_free(csc); - X509_STORE_free(cert_ctx); - ret=0; - end: - ret = (i > 0); - return(ret); + boolean ret; + ret=x509_verify_cert(cert); + if(!ret) + { + Certdata* certdata; + certdata=crypto_get_certdata(cert->px509,hostname); + Certstore* certstore=certstore_new(certdata); + if(match_certdata(certstore)==0) + return 0; + if(certstore->match==1) + { + crypto_cert_printinfo(cert->x509); + char answer; + while(1) + { + printf("Do you trust the above certificate? (Y/N)"); + answer=fgetc(stdin); + if(answer=='y' || answer =='Y') + { + print_certdata(certstore);break; + } + else if(answer=='n' || answer=='N') + { + /*disconnect*/break; + } + } + return 0; + } + else if(certstore->match==-1) + { + tls_print_cert_error();/*disconnect*/ + } + certstore_free(certstore); + } +} + +void tls_print_cert_error() +{ + printf("#####################################\n"); + printf("##############WARNING################\n"); + printf("#####################################\n"); + printf("The thumbprint of certificate recieved\n"); + printf("did not match the stored thumbprint.You\n"); + printf("might be a victim of MAN in the MIDDLE\n"); + printf("ATTACK.It is also possible that server's\n"); + printf("certificate have been changed.In that case\n"); + printf("contact your server administrator\n"); } void tls_free(rdpTls* tls) diff --git a/libfreerdp-core/tls.h b/libfreerdp-core/tls.h index 61988a3ef..f16002992 100644 --- a/libfreerdp-core/tls.h +++ b/libfreerdp-core/tls.h @@ -41,6 +41,7 @@ struct rdp_tls TlsConnect connect; TlsAccept accept; TlsDisconnect disconnect; + struct rdp_settings* settings; }; boolean tls_connect(rdpTls* tls); @@ -49,8 +50,9 @@ boolean tls_disconnect(rdpTls* tls); int tls_read(rdpTls* tls, uint8* data, int length); int tls_write(rdpTls* tls, uint8* data, int length); CryptoCert tls_get_certificate(rdpTls* tls); +int tls_verify_certificate(CryptoCert cert,char* hostname); +void tls_print_cert_error(); boolean tls_print_error(char* func, SSL* connection, int value); -boolean tls_verify_cert(CryptoCert cert); rdpTls* tls_new(); void tls_free(rdpTls* tls); diff --git a/libfreerdp-utils/cerstore.c b/libfreerdp-utils/cerstore.c deleted file mode 100644 index 0e9e23495..000000000 --- a/libfreerdp-utils/cerstore.c +++ /dev/null @@ -1,185 +0,0 @@ -/** - * FreeRDP: A Remote Desktop Protocol Client - * certstore Utils - * - * Copyright 2011 Marc-Andre Moreau - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include - -#ifdef _WIN32 -#include -#endif - -static char cert_dir[] = "freerdp"; -static char cert_loc[] = "cacert"; -static char certstore_file[] = "known_hosts"; - -void certstore_create(rdpCertstore* certstore) -{ - certstore->fp = fopen((char*)certstore->file, "w+"); - - if (certstore->fp == NULL) - { - printf("certstore_create: error opening [%s] for writing\n", certstore->file); - return; - } - fflush(certstore->fp); -} - -void certstore_load(rdpCertstore* certstore) -{ - certstore->fp = fopen((char*)certstore->file, "r+"); -} - -void certstore_open(rdpCertstore* certstore) -{ - struct stat stat_info; - - if (stat((char*)certstore->file, &stat_info) != 0) - certstore_create(certstore); - else - certstore_load(certstore); -} - -void certstore_close(rdpcertstore* certstore) -{ - if (certstore->fp != NULL) - fclose(certstore->fp); -} - -char* get_local_certloc() -{ - char *home_path; - char *cert_loc; - home_path=getenv("HOME"); - cert_loc=(char*)xmalloc(strlen(home_path)+strlen("/.")+strlen(cert_dir)+strlen("/")+strlen(cert_loc)+1); - sprintf(cert_loc,"%s/.%s/%s",home_path,cert_dir,cert_loc); - return cert_loc; -} - -void certstore_init(rdpCertstore* certstore) -{ - int length; - char* home_path; - struct stat stat_info; - - certstore->match=1; - home_path = getenv("HOME"); - - if (home_path == NULL) - { - printf("could not get home path\n"); - certstore->available = False; - return; - } - - certstore->home = (char*) xstrdup(home_path); - printf("home path: %s\n", certstore->home); - - certstore->path = (char*) xmalloc(strlen(certstore->home) + strlen("/.") + strlen(cert_dir) + 1); - sprintf(certstore->path, "%s/.%s", certstore->home, cert_dir); - printf("certstore path: %s\n", certstore->path); - - if (stat(certstore->path, &stat_info) != 0) - { -#ifndef _WIN32 - mkdir(certstore->path, S_IRUSR | S_IWUSR | S_IXUSR); -#else - CreateDirectory(certstore->path, 0); -#endif - printf("creating directory %s\n", certstore->path); - } - - length = strlen(certstore->path); - certstore->file = (char*) xmalloc(strlen(certstore->path) + strlen("/") + strlen(certstore_file) + 1); - sprintf(certstore->file, "%s/%s", certstore->path, certstore_file); - printf("certstore file: %s\n", certstore->file); - - certstore_open(certstore); -} - -rdpCertstore* certstore_new(rdpCertdata* certdata) -{ - rdpCertstore* certstore = (rdpCertstore*) xzalloc(sizeof(rdpCertstore)); - - if (certstore != NULL) - { - certstore->certdata = certdata; - certstore_init(certstore); - } - - return certstore; -} - -void cerstore_free(rdpCertsore* certstore) -{ - if (certstore != NULL) - { - certstore_close(certstore); - xfree(certstore->path); - xfree(certstore->file); - xfree(certstore->home); - xfree(certstore); - } -} - -int match_certdata(rdpCertdata* certdata) -{ - char *host; - char *p; - char *thumb_print; - int length; - unsigned char c; - FILE* cfp; - rdpCertstore* certstore=certstore_new(certdata); - cfp=certstore->fp; - length=strlen(certdata->thumbprint); - for(;;) - { - if((int)fread(host,sizeof(char),strlen(certdata->hostname),cfp) < strlen(certdata->hostname)) - break; - if((!strcmp(host,certdata->hostname)) && ((c=fgetc(cfp))==' ' || c=='\t') ) - { - ungetc(c,cfp); - while((c=fgetc(cfp))==' ' || c=='\t'); - if(c==EOF) - break; - ungetc(c,cfp); - thumb_print=xzalloc(length+1); - p=thumb_print; - while((p-thumb_print < length) && (*p=fgetc(cfp))!=EOF && *p!='\n' && *p==certdata->thumbprint+p-thumb_print) - p++; - if(p-thumb_print==length) - certdata->match=0; - else - certdata->match=-1; - break; - } - else - while(c!='\n'||c!=EOF) - c=fgetc(cfp); - if(c==EOF) - break; - else - ungetc(c,cfp); - } - return certdata->match; -} -void print_certdata(rdpCertstore* certstore) -{ - lseek(certstore->fp,0,SEEK_END); - fprintf(certstore->fp,"%s %s\n",certstore->certdata->hostname,certstore->certdata->thumbprint); -} From 8bc7e301d13fc8a83ad62f70aa68ec4f10ec45b4 Mon Sep 17 00:00:00 2001 From: qubit Date: Mon, 29 Aug 2011 02:26:34 +0530 Subject: [PATCH 15/30] more commit --- libfreerdp-core/credssp.c | 40 ++------------------------------------- libfreerdp-core/tls.c | 12 ++++++++---- 2 files changed, 10 insertions(+), 42 deletions(-) diff --git a/libfreerdp-core/credssp.c b/libfreerdp-core/credssp.c index 7669da262..bb7c959fe 100644 --- a/libfreerdp-core/credssp.c +++ b/libfreerdp-core/credssp.c @@ -100,43 +100,6 @@ void credssp_ntlmssp_init(rdpCredssp* credssp) ntlmssp->ntlm_v2 = 0; } -int tls_verify_certificate(CryptoCert cert,char* hostname) -{ - boolean ret; - ret=x509_verify_cert(cert); - if(!ret) - { - Certdata* certdata; - certdata=crypto_get_certdata(cert->px509,hostname); - Certstore* certstore=certstore_new(certdata); - if(match_certdata(certstore)==0) - return 0; - if(certstore->match==1) - { - crypto_cert_printinfo(cert->x509); - char answer; - while(1) - { - printf("Do you trust the above certificate? (Y/N)"); - answer=fgetc(stdin); - if(answer=='y' || answer =='Y') - { - print_certdata(certstore);break; - } - else if(answer=='n' || answer=='N') - { - /*disconnect*/break; - } - } - return 0; - } - else if(certstore->match==-1) - { - cert_print_error();/*disconnect*/ - } - certstore_free(certstore); - } -} /** * Get TLS public key. * @param credssp @@ -154,7 +117,8 @@ int credssp_get_public_key(rdpCredssp* credssp) printf("credssp_get_public_key: tls_get_certificate failed to return the server certificate.\n"); return 0; } - tls_verify_certificate(cert,credssp->transport->settings->hostname); + if(tls_verify_certificate(cert,credssp->transport->settings->hostname)) + tls_disconnect(credssp->transport->tls); ret = crypto_cert_get_public_key(cert, &credssp->public_key); crypto_cert_free(cert); diff --git a/libfreerdp-core/tls.c b/libfreerdp-core/tls.c index 61e9a6f77..3849f9979 100644 --- a/libfreerdp-core/tls.c +++ b/libfreerdp-core/tls.c @@ -258,7 +258,7 @@ int tls_verify_certificate(CryptoCert cert,char* hostname) certdata=crypto_get_certdata(cert->px509,hostname); Certstore* certstore=certstore_new(certdata); if(match_certdata(certstore)==0) - return 0; + goto end; if(certstore->match==1) { crypto_cert_printinfo(cert->x509); @@ -273,16 +273,20 @@ int tls_verify_certificate(CryptoCert cert,char* hostname) } else if(answer=='n' || answer=='N') { - /*disconnect*/break; + certstore_free(certstore); + return 1; } } - return 0; } else if(certstore->match==-1) { - tls_print_cert_error();/*disconnect*/ + tls_print_cert_error(); + certstore_free(certstore); + return 1; } + end: certstore_free(certstore); + return 0; } } From 51b24c36283ed6c51b2e3ae6a2d2d13c0d047c43 Mon Sep 17 00:00:00 2001 From: qubit Date: Mon, 29 Aug 2011 03:24:53 +0530 Subject: [PATCH 16/30] fixes --- include/freerdp/utils/certstore.h | 9 +++++---- libfreerdp-core/crypto.h | 2 +- libfreerdp-core/tls.c | 8 ++++---- libfreerdp-utils/CMakeLists.txt | 1 + 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/include/freerdp/utils/certstore.h b/include/freerdp/utils/certstore.h index 5eb786ca4..c96a1c611 100644 --- a/include/freerdp/utils/certstore.h +++ b/include/freerdp/utils/certstore.h @@ -15,7 +15,8 @@ struct rdp_certdata { char* thumbprint; char* hostname; -} +}; + struct rdp_certstore { FILE* fp; @@ -29,13 +30,13 @@ struct rdp_certstore void certstore_create(rdpCertstore* certstore); void certstore_open(rdpCertstore* certstore); void certstore_load(rdpCertstore* certstore); -void certstore_close(rdpcertstore* certstore); +void certstore_close(rdpCertstore* certstore); char* get_local_certloc(); rdpCertdata* certdata_new(char* host_name,char* fingerprint); void certdata_free(rdpCertdata* certdata); void certstore_init(rdpCertstore* certstore); rdpCertstore* certstore_new(rdpCertdata* certdata); -void certstore_free(rdpCertsore* certstore); -int match_certdata(rdpCertdata* certdata); +void certstore_free(rdpCertstore* certstore); +int match_certdata(rdpCertstore* certstore); void print_certdata(rdpCertstore* certstore); #endif /* __CERTSTORE_UTILS_H */ diff --git a/libfreerdp-core/crypto.h b/libfreerdp-core/crypto.h index 187871d6e..c73827b96 100644 --- a/libfreerdp-core/crypto.h +++ b/libfreerdp-core/crypto.h @@ -41,7 +41,6 @@ #define EXPONENT_MAX_SIZE 4 #define MODULUS_MAX_SIZE 64 -#define CA_LOCAL_PATH ".freerdp/cacert" #include #include @@ -90,6 +89,7 @@ void crypto_cert_printinfo(X509* xcert); void crypto_cert_free(CryptoCert cert); boolean x509_verify_cert(CryptoCert cert); boolean crypto_cert_verify(CryptoCert server_cert, CryptoCert cacert); +rdpCertdata* crypto_get_certdata(X509 *xcert,char* hostname); boolean crypto_cert_get_public_key(CryptoCert cert, rdpBlob* public_key); void crypto_rsa_encrypt(uint8* input, int length, uint32 key_length, uint8* modulus, uint8* exponent, uint8* output); diff --git a/libfreerdp-core/tls.c b/libfreerdp-core/tls.c index 3849f9979..40edc9e65 100644 --- a/libfreerdp-core/tls.c +++ b/libfreerdp-core/tls.c @@ -254,14 +254,14 @@ int tls_verify_certificate(CryptoCert cert,char* hostname) ret=x509_verify_cert(cert); if(!ret) { - Certdata* certdata; + rdpCertdata* certdata; certdata=crypto_get_certdata(cert->px509,hostname); - Certstore* certstore=certstore_new(certdata); + rdpCertstore* certstore=certstore_new(certdata); if(match_certdata(certstore)==0) goto end; if(certstore->match==1) { - crypto_cert_printinfo(cert->x509); + crypto_cert_printinfo(cert->px509); char answer; while(1) { @@ -286,8 +286,8 @@ int tls_verify_certificate(CryptoCert cert,char* hostname) } end: certstore_free(certstore); - return 0; } + return 0; } void tls_print_cert_error() diff --git a/libfreerdp-utils/CMakeLists.txt b/libfreerdp-utils/CMakeLists.txt index cb7adbfbc..71a9eda63 100644 --- a/libfreerdp-utils/CMakeLists.txt +++ b/libfreerdp-utils/CMakeLists.txt @@ -34,6 +34,7 @@ set(FREERDP_UTILS_SRCS profiler.c rail.c registry.c + certstore.c semaphore.c sleep.c stopwatch.c From 5ecc560369af696bbece220f14f50d0b9772f4d7 Mon Sep 17 00:00:00 2001 From: qubit Date: Mon, 29 Aug 2011 03:46:33 +0530 Subject: [PATCH 17/30] more fixes --- include/freerdp/utils/certstore.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/freerdp/utils/certstore.h b/include/freerdp/utils/certstore.h index c96a1c611..75e8ea3ce 100644 --- a/include/freerdp/utils/certstore.h +++ b/include/freerdp/utils/certstore.h @@ -23,7 +23,7 @@ struct rdp_certstore char* path; char* file; char* home; - int match; + int match; struct rdp_certdata* certdata; }; From 064e36657e57cecbd3ed471afdf24c1d854f89fb Mon Sep 17 00:00:00 2001 From: qubit Date: Mon, 29 Aug 2011 03:49:25 +0530 Subject: [PATCH 18/30] .. --- libfreerdp-core/crypto.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libfreerdp-core/crypto.c b/libfreerdp-core/crypto.c index 8cea73cb4..f0df9a209 100644 --- a/libfreerdp-core/crypto.c +++ b/libfreerdp-core/crypto.c @@ -228,10 +228,10 @@ boolean x509_verify_cert(CryptoCert cert) X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT); cert_loc=get_local_certloc(); if(cert_loc!=NULL) - { - X509_LOOKUP_add_dir(lookup,cert_loc,X509_FILETYPE_ASN1); - xfree(cert_loc); - } + { + X509_LOOKUP_add_dir(lookup,cert_loc,X509_FILETYPE_ASN1); + xfree(cert_loc); + } csc = X509_STORE_CTX_new(); if (csc == NULL) goto end; From 86f48f018ae4d6b220eb338dd1e3edadb8b5bc20 Mon Sep 17 00:00:00 2001 From: qubit Date: Mon, 29 Aug 2011 03:52:24 +0530 Subject: [PATCH 19/30] certstore --- libfreerdp-utils/certstore.c | 213 +++++++++++++++++++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 libfreerdp-utils/certstore.c diff --git a/libfreerdp-utils/certstore.c b/libfreerdp-utils/certstore.c new file mode 100644 index 000000000..2e4caeb32 --- /dev/null +++ b/libfreerdp-utils/certstore.c @@ -0,0 +1,213 @@ +/** + * FreeRDP: A Remote Desktop Protocol Client + * certstore Utils + * + * Copyright 2011 Jiten Pathy + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#ifdef _WIN32 +#include +#endif + +static char cert_dir[] = "freerdp"; +static char cert_loc[] = "cacert"; +static char certstore_file[] = "known_hosts"; + +void certstore_create(rdpCertstore* certstore) +{ + certstore->fp = fopen((char*)certstore->file, "w+"); + + if (certstore->fp == NULL) + { + printf("certstore_create: error opening [%s] for writing\n", certstore->file); + return; + } + fflush(certstore->fp); +} + +void certstore_load(rdpCertstore* certstore) +{ + certstore->fp = fopen((char*)certstore->file, "r+"); +} + +void certstore_open(rdpCertstore* certstore) +{ + struct stat stat_info; + + if (stat((char*)certstore->file, &stat_info) != 0) + certstore_create(certstore); + else + certstore_load(certstore); +} + +void certstore_close(rdpCertstore* certstore) +{ + if (certstore->fp != NULL) + fclose(certstore->fp); +} + +char* get_local_certloc() +{ + char *home_path; + char *certloc; + struct stat stat_info; + home_path=getenv("HOME"); + certloc=(char*)xmalloc(strlen(home_path)+strlen("/.")+strlen(cert_dir)+strlen("/")+strlen(cert_loc)+1); + sprintf(certloc,"%s/.%s/%s",home_path,cert_dir,cert_loc); + if(stat((char*)certloc, &stat_info) != 0) + mkdir(certloc, S_IRUSR | S_IWUSR | S_IXUSR); + return certloc; +} + +void certstore_init(rdpCertstore* certstore) +{ + int length; + char* home_path; + struct stat stat_info; + + certstore->match=1; + home_path = getenv("HOME"); + + if (home_path == NULL) + { + printf("could not get home path\n"); + return; + } + + certstore->home = (char*) xstrdup(home_path); + printf("home path: %s\n", certstore->home); + + certstore->path = (char*) xmalloc(strlen(certstore->home) + strlen("/.") + strlen(cert_dir) + 1); + sprintf(certstore->path, "%s/.%s", certstore->home, cert_dir); + printf("certstore path: %s\n", certstore->path); + + if (stat(certstore->path, &stat_info) != 0) + { +#ifndef _WIN32 + mkdir(certstore->path, S_IRUSR | S_IWUSR | S_IXUSR); +#else + CreateDirectory(certstore->path, 0); +#endif + printf("creating directory %s\n", certstore->path); + } + + length = strlen(certstore->path); + certstore->file = (char*) xmalloc(strlen(certstore->path) + strlen("/") + strlen(certstore_file) + 1); + sprintf(certstore->file, "%s/%s", certstore->path, certstore_file); + printf("certstore file: %s\n", certstore->file); + + certstore_open(certstore); +} + +rdpCertdata* certdata_new(char* host_name,char* fingerprint) +{ + rdpCertdata* certdata=(rdpCertdata*)xzalloc(sizeof(rdpCertdata)); + if(certdata !=NULL) + { + certdata->hostname=xzalloc(strlen(host_name)+1); + certdata->thumbprint=xzalloc(strlen(fingerprint)+1); + sprintf(certdata->hostname,"%s",host_name); + sprintf(certdata->thumbprint,"%s",fingerprint); + } + return certdata; +} + +void certdata_free(rdpCertdata* certdata) +{ + if(certdata != NULL) + { + xfree(certdata->hostname); + xfree(certdata->thumbprint); + xfree(certdata); + } +} + +rdpCertstore* certstore_new(rdpCertdata* certdata) +{ + rdpCertstore* certstore = (rdpCertstore*) xzalloc(sizeof(rdpCertstore)); + + if (certstore != NULL) + { + certstore->certdata = certdata; + certstore_init(certstore); + } + + return certstore; +} + +void certstore_free(rdpCertstore* certstore) +{ + if (certstore != NULL) + { + certstore_close(certstore); + xfree(certstore->path); + xfree(certstore->file); + xfree(certstore->home); + certdata_free(certstore->certdata); + xfree(certstore); + } +} + +int match_certdata(rdpCertstore* certstore) +{ + char *host; + char *p; + char *thumb_print; + int length; + unsigned char c; + FILE* cfp; + cfp=certstore->fp; + rdpCertdata* cert_data=certstore->certdata; + length=strlen(cert_data->thumbprint); + host=xzalloc(strlen(cert_data->hostname)+1); + for(;;) + { + if((int)fread(host,sizeof(char),strlen(cert_data->hostname),cfp) < strlen(cert_data->hostname)) + break; + if((!strcmp(host,cert_data->hostname)) && ((c=fgetc(cfp))==' ' || c=='\t') ) + { + ungetc(c,cfp); + while((c=fgetc(cfp))==' ' || c=='\t'); + if(c==EOF) + break; + ungetc(c,cfp); + thumb_print=xzalloc(length+1); + p=thumb_print; + while((p-thumb_print) < length && (*p=fgetc(cfp))!=EOF && *p!='\n' && *p==*(cert_data->thumbprint+(p-thumb_print))) + p++; + if(p-thumb_print==length) + certstore->match=0; + else + certstore->match=-1; + break; + } + else + while(c!='\n'||c!=EOF) + c=fgetc(cfp); + if(c==EOF) + break; + else + ungetc(c,cfp); + } + xfree(host); + return certstore->match; +} +void print_certdata(rdpCertstore* certstore) +{ + fseek(certstore->fp,0,SEEK_END); + fprintf(certstore->fp,"%s %s\n",certstore->certdata->hostname,certstore->certdata->thumbprint); +} From 84498109c9769cc7360946d51bf7b2db799a943a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Sun, 28 Aug 2011 22:27:46 -0400 Subject: [PATCH 20/30] libfreerdp-core: fix replay of RemoteFX session from server --- client/X11/xf_event.c | 2 +- libfreerdp-core/fastpath.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/X11/xf_event.c b/client/X11/xf_event.c index 15dc8ddd8..d4dcf5427 100644 --- a/client/X11/xf_event.c +++ b/client/X11/xf_event.c @@ -476,7 +476,7 @@ boolean xf_event_process(freerdp* instance, XEvent* event) app = True; } -#if 1 +#if 0 if (event->type != MotionNotify) printf("X11 %s Event: wnd=0x%X\n", X11_EVENT_STRINGS[event->type], (uint32)event->xany.window); #endif diff --git a/libfreerdp-core/fastpath.c b/libfreerdp-core/fastpath.c index 3aab07873..b5bf10653 100644 --- a/libfreerdp-core/fastpath.c +++ b/libfreerdp-core/fastpath.c @@ -88,8 +88,8 @@ inline void fastpath_write_update_header(STREAM* s, uint8 updateCode, uint8 frag uint8 updateHeader = 0; updateHeader |= updateCode & 0x0F; - updateHeader |= (fragmentation << 4) & 0x03; - updateHeader |= (compression << 6) & 0x03; + updateHeader |= (fragmentation & 0x03) << 4; + updateHeader |= (compression & 0x03) << 6; stream_write_uint8(s, updateHeader); } From 9f98b550873566d11335233b8cf9d28893a0e73b Mon Sep 17 00:00:00 2001 From: Vic Lee Date: Mon, 29 Aug 2011 11:39:04 +0800 Subject: [PATCH 21/30] server/test: accept one argument to enable replay session. --- server/test/freerdp_server.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/server/test/freerdp_server.c b/server/test/freerdp_server.c index 8762622c0..c926363c6 100644 --- a/server/test/freerdp_server.c +++ b/server/test/freerdp_server.c @@ -30,6 +30,8 @@ #include #include +static char* test_pcap_file = NULL; + /* HL1, LH1, HH1, HL2, LH2, HH2, HL3, LH3, HH3, LL3 */ static const unsigned int test_quantization_values[] = { @@ -183,6 +185,8 @@ static void test_peer_draw_icon(freerdp_peer* client, int x, int y) RFX_RECT rect; STREAM* s; + if (client->update->dump_rfx) + return; if (!client->settings->rfx_codec || !info) return; if (info->icon_width < 1) @@ -241,7 +245,7 @@ void test_peer_dump_rfx(freerdp_peer* client) s = stream_new(512); update = client->update; - client->update->pcap_rfx = pcap_open("rfx_test.pcap", False); + client->update->pcap_rfx = pcap_open(test_pcap_file, False); pcap_rfx = client->update->pcap_rfx; while (pcap_has_next_record(pcap_rfx)) @@ -283,15 +287,17 @@ boolean test_peer_post_connect(freerdp_peer* client) /* A real server should tag the peer as activated here and start sending updates in mainloop. */ test_peer_init(client); - test_peer_draw_background(client); test_peer_load_icon(client); - client->update->dump_rfx = True; - - if (client->update->dump_rfx) + if (test_pcap_file != NULL) { + client->update->dump_rfx = True; test_peer_dump_rfx(client); } + else + { + test_peer_draw_background(client); + } /* Return False here would stop the execution of the peer mainloop. */ return True; @@ -486,8 +492,11 @@ int main(int argc, char* argv[]) instance->PeerAccepted = test_peer_accepted; + if (argc > 1) + test_pcap_file = argv[1]; + /* Open the server socket and start listening. */ - if (instance->Open(instance, (argc > 1 ? argv[1] : NULL), 3389)) + if (instance->Open(instance, NULL, 3389)) { /* Entering the server main loop. In a real server the listener can be run in its own thread. */ test_server_mainloop(instance); From 85e75629105305809396d71217af5c10009a367b Mon Sep 17 00:00:00 2001 From: cool Date: Sun, 28 Aug 2011 18:55:16 -1100 Subject: [PATCH 22/30] bug fix --- libfreerdp-core/credssp.c | 27 +++++++++++++-------------- libfreerdp-utils/certstore.c | 6 +++--- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/libfreerdp-core/credssp.c b/libfreerdp-core/credssp.c index bb7c959fe..27134ebb7 100644 --- a/libfreerdp-core/credssp.c +++ b/libfreerdp-core/credssp.c @@ -25,12 +25,11 @@ #include "ntlmssp.h" #include "credssp.h" - /** * TSRequest ::= SEQUENCE { - * version [0] INTEGER, + * version [0] INTEGER, * negoTokens [1] NegoData OPTIONAL, - * authInfo [2] OCTET STRING OPTIONAL, + * authInfo [2] OCTET STRING OPTIONAL, * pubKeyAuth [3] OCTET STRING OPTIONAL * } * @@ -41,29 +40,29 @@ * } * * TSCredentials ::= SEQUENCE { - * credType [0] INTEGER, + * credType [0] INTEGER, * credentials [1] OCTET STRING * } * * TSPasswordCreds ::= SEQUENCE { - * domainName [0] OCTET STRING, - * userName [1] OCTET STRING, - * password [2] OCTET STRING + * domainName [0] OCTET STRING, + * userName [1] OCTET STRING, + * password [2] OCTET STRING * } * * TSSmartCardCreds ::= SEQUENCE { - * pin [0] OCTET STRING, - * cspData [1] TSCspDataDetail, - * userHint [2] OCTET STRING OPTIONAL, + * pin [0] OCTET STRING, + * cspData [1] TSCspDataDetail, + * userHint [2] OCTET STRING OPTIONAL, * domainHint [3] OCTET STRING OPTIONAL * } * * TSCspDataDetail ::= SEQUENCE { - * keySpec [0] INTEGER, - * cardName [1] OCTET STRING OPTIONAL, - * readerName [2] OCTET STRING OPTIONAL, + * keySpec [0] INTEGER, + * cardName [1] OCTET STRING OPTIONAL, + * readerName [2] OCTET STRING OPTIONAL, * containerName [3] OCTET STRING OPTIONAL, - * cspName [4] OCTET STRING OPTIONAL + * cspName [4] OCTET STRING OPTIONAL * } * */ diff --git a/libfreerdp-utils/certstore.c b/libfreerdp-utils/certstore.c index 2e4caeb32..b784d33a3 100644 --- a/libfreerdp-utils/certstore.c +++ b/libfreerdp-utils/certstore.c @@ -196,12 +196,12 @@ int match_certdata(rdpCertstore* certstore) break; } else - while(c!='\n'||c!=EOF) + { + while(c!='\n' && c!=EOF) c=fgetc(cfp); if(c==EOF) break; - else - ungetc(c,cfp); + } } xfree(host); return certstore->match; From 88a839b207bd7ddfe20153d15ffd6e1f1a972c5d Mon Sep 17 00:00:00 2001 From: cool Date: Sun, 28 Aug 2011 19:06:05 -1100 Subject: [PATCH 23/30] remove temporarily added unnecessary code --- libfreerdp-core/tls.h | 1 - 1 file changed, 1 deletion(-) diff --git a/libfreerdp-core/tls.h b/libfreerdp-core/tls.h index f16002992..52b301c40 100644 --- a/libfreerdp-core/tls.h +++ b/libfreerdp-core/tls.h @@ -41,7 +41,6 @@ struct rdp_tls TlsConnect connect; TlsAccept accept; TlsDisconnect disconnect; - struct rdp_settings* settings; }; boolean tls_connect(rdpTls* tls); From 18614a53d03a588676b8e962308c2393a86d4aab Mon Sep 17 00:00:00 2001 From: Nils Andresen Date: Mon, 29 Aug 2011 21:59:29 +0200 Subject: [PATCH 24/30] client/X11/xfreerdp: rudimentary version of a man-page. --- client/X11/CMakeLists.txt | 14 +- client/X11/xfreerdp.1.xml | 389 ++++++++++++++++++++++++++++++++++++++ cmake/ConfigOptions.cmake | 1 + 3 files changed, 403 insertions(+), 1 deletion(-) create mode 100644 client/X11/xfreerdp.1.xml diff --git a/client/X11/CMakeLists.txt b/client/X11/CMakeLists.txt index 38364105d..1854f3327 100644 --- a/client/X11/CMakeLists.txt +++ b/client/X11/CMakeLists.txt @@ -32,7 +32,18 @@ add_executable(xfreerdp xf_window.h xfreerdp.c xfreerdp.h) - + +if(WITH_MANPAGES) + add_custom_command(OUTPUT xfreerdp.1 + COMMAND xmlto man ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp.1.xml + DEPENDS xfreerdp.1.xml) + + add_custom_target(xfreerdp.manpage ALL + DEPENDS xfreerdp.1) + + install(FILES xfreerdp.1 DESTINATION share/man/man1) +endif() + find_package(Xinerama) if(XINERAMA_FOUND) add_definitions(-DWITH_XINERAMA) @@ -63,3 +74,4 @@ target_link_libraries(xfreerdp freerdp-utils) target_link_libraries(xfreerdp ${X11_LIBRARIES}) install(TARGETS xfreerdp DESTINATION bin) + diff --git a/client/X11/xfreerdp.1.xml b/client/X11/xfreerdp.1.xml new file mode 100644 index 000000000..88b897dac --- /dev/null +++ b/client/X11/xfreerdp.1.xml @@ -0,0 +1,389 @@ + + + + 2011-08-27 + + The FreeRDP-Team + + + + xfreerdp + 1 + freerdp + xfreerdp + + + xfreerdp + X11 frontend to libFreeRDP + + + + 2011-08-27 + + + xfreerdp [options] server[:port] [[options] server[:port] …] + + + + + 2011-08-27 + + DESCRIPTION + + xfreerdp is a frontend to libFreeRDP, + which implements a client to the Remote Desktop Protocol (RDP). + RDP is used in a number of Microsoft products including Microsoft Windows + versions starting from NT Terminal Server. RDP is also implemented by xrdp and VirtualBox. + + + + OPTIONS + + + -0 + + + Attach to the admin console of the server. + + + + + -a bpp + + + Sets the color depth for the connection to bpp bits per pixel. + Valid values are 8, 15, 16, 24 and 32. The default value is the color depth of the FreeRDP-window. + + + + + -c dir + + + Sets the working-dir to dir. + This parameter is only used when an AlternateShell () is requested. + dir should contain the executable file specified in the AlternateShell. + + + + + -D + + + Removes the windows decorations. + + + + + -d + + + Domain used in authentication. + + + + + -f + + + start in full screen mode. This mode can always be en- and disabled using Ctrl-Alt-Enter. + + + + + -g geometry + + + Sets the size of the FreeRDP-window (and of the remote desktop, when establishing a new connection). + geometry can have one of the following forms: + + + + WxH - + in this case the resulting window will be of + WxH pixels. + + + + + P% - + in this case the resulting window will be P% + of your screen. + + + + + The special keyword workarea - + in this case the resulting window will be of the same size as your workarea. + + + + + + + + -k id + + + Sets the keyboard-layout-id to id. + + + + + -m + + + Don't send mouse motion events. + + + + + + -n hostname + + + Set the reported client hostname to hostname. + Default is to automatically detect the hostname. + + + + + -o + + + Play audio on the console instead of redirecting to the client. + + + + + -p password + + + Password used in authentication. + + + + + -s shell + + + Sets the startup-shell to shell. + This parameter should contain a complete path to the alternate shell. + If the alternete shell requires a different working directory use . + + + + + -t port + + + Connect to port, instead of the default 3389. + + + + + -u username + + + Username used in authentication. + + + + + -x flag + + + Set the experiance performance flags. + flag can be one of: + + + + m - (modem): Equivalent to 15. + + + + + b - (broadband): Equivalent to 1. + + + + + l - (lan): Equivalent to 0. + + + + + num - A number that represents a + bit-mask, were numbers mean the following + Taken from + MS-RDPBCGR Scetion 2.2.1.11.1.1.1 - Extended Info Packet: + + + 1: Disable desktop wallpaper. + + + 2: Disable full-window drag (only the window outline is displayed when the window is moved). + + + 4: Disable menu animations. + + + 8: Disable user interface themes. + + + 32: Disable mouse cursor shadows. + + + 64: Disable cursor blinking. + + + 128: Enable font smoothing. + + + 256: Enable Desktop Composition. + + + + + + + + + + -z + + + Enable compression. + + + + + --app + + + initialize a RemoteApp connection. This implies -g workarea. + FIXME: How to do RemoteApp + + + + + --ext + + + load an extension + FIXME: How to do this + + + + + --no-auth + + + Skips authentication. This is useful e.g. for the current FreeRDP server that doesn't yet support server-side authentication. + + + + + --no-fastpath + + + Disables fast-path. Use slow-path packets instead, which have larger headers. + It might be good for debugging certain issues when you suspect it might be + linked to the parsing of one of the two header types. + + + + + --no-osb + + + Disable off screen bitmaps. + + + + + --plugin + + + load a plugin + FIXME: How to do this + + + + + --rfx + + + Enable RemoteFX. + + + + + --no-rdp + + + Disable Standard RDP encryption. + + + + + --no-tls + + + Disable TLS encryption. + + + + + --no-nla + + + Disable network level authentication. + + + + + --sec proto + + + force protocol security. proto can be one of rdp, tls or nla. + + + + + --version + + + Print version information. + + + + + + + + + + LINKS + + http://www.freerdp.com/ + + + diff --git a/cmake/ConfigOptions.cmake b/cmake/ConfigOptions.cmake index c49541b80..295b0cd88 100644 --- a/cmake/ConfigOptions.cmake +++ b/cmake/ConfigOptions.cmake @@ -9,5 +9,6 @@ option(WITH_DEBUG_CERTIFICATE "Print certificate related debug messages." OFF) option(WITH_DEBUG_LICENSE "Print license debug messages." OFF) option(WITH_DEBUG_GDI "Print graphics debug messages." OFF) option(WITH_DEBUG_RFX "Print RemoteFX debug messages." OFF) +option(WITH_MANPAGES "Generate manpages." ON) option(WITH_PROFILER "Compile profiler." OFF) option(WITH_SSE2 "Use SSE2 optimization." OFF) From bd5fb5c62a77df2d3686245efeb8f5fe727521e8 Mon Sep 17 00:00:00 2001 From: Vic Lee Date: Tue, 30 Aug 2011 10:59:30 +0800 Subject: [PATCH 25/30] rdpsnd/pulse: add a pointer check. --- channels/rdpsnd/pulse/rdpsnd_pulse.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/channels/rdpsnd/pulse/rdpsnd_pulse.c b/channels/rdpsnd/pulse/rdpsnd_pulse.c index af316fbe7..1b2c59473 100644 --- a/channels/rdpsnd/pulse/rdpsnd_pulse.c +++ b/channels/rdpsnd/pulse/rdpsnd_pulse.c @@ -122,6 +122,8 @@ static void rdpsnd_pulse_stream_success_callback(pa_stream* stream, int success, static void rdpsnd_pulse_wait_for_operation(rdpsndPulsePlugin* pulse, pa_operation* operation) { + if (operation == NULL) + return; while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING) { pa_threaded_mainloop_wait(pulse->mainloop); From 559e610b8011dfef828d26b449cb6cfadc251d32 Mon Sep 17 00:00:00 2001 From: Vic Lee Date: Tue, 30 Aug 2011 16:00:09 +0800 Subject: [PATCH 26/30] cmake: fix installation of all headers. --- include/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 444d227f6..463315557 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -17,5 +17,5 @@ # See the License for the specific language governing permissions and # limitations under the License. -file(GLOB HEADERS "freerdp/*.h") +file(GLOB HEADERS "freerdp/*") install_files(/include/freerdp FILES ${HEADERS}) From 81cac9c787cb5173becfef9b63865a45215ebd03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Tue, 30 Aug 2011 12:20:36 -0400 Subject: [PATCH 27/30] libfreerdp-core: cleanup of certificate store --- .gitignore | 3 +- libfreerdp-core/crypto.c | 115 ++++++++++++++++++++++++--------------- libfreerdp-core/crypto.h | 2 +- libfreerdp-core/tls.c | 36 +++++++----- 4 files changed, 96 insertions(+), 60 deletions(-) diff --git a/.gitignore b/.gitignore index 99a76ffaa..0dcd5daa7 100644 --- a/.gitignore +++ b/.gitignore @@ -14,8 +14,9 @@ Makefile *.cproject *.settings -# Doxygen +# Documentation docs/api +client/X11/xfreerdp.1 # Mac OS X .DS_Store diff --git a/libfreerdp-core/crypto.c b/libfreerdp-core/crypto.c index f0df9a209..9aa65f0ab 100644 --- a/libfreerdp-core/crypto.c +++ b/libfreerdp-core/crypto.c @@ -190,85 +190,112 @@ void crypto_nonce(uint8* nonce, int size) RAND_bytes((void*) nonce, size); } -char* crypto_cert_fingerprint(X509 *xcert) +char* crypto_cert_fingerprint(X509* xcert) { - unsigned char fp[EVP_MAX_MD_SIZE]; - int i; + char* p; + int i = 0; + char* fp_buffer; unsigned int fp_len; - X509_digest(xcert,EVP_sha1(),fp,&fp_len); - char *fp_buf=xzalloc(3*fp_len); - char *p = fp_buf; + unsigned char fp[EVP_MAX_MD_SIZE]; + + X509_digest(xcert, EVP_sha1(), fp, &fp_len); + + fp_buffer = xzalloc(3 * fp_len); + p = fp_buffer; + for (i = 0; i < fp_len - 1; i++) { sprintf(p, "%02x:", fp[i]); - p = (char*) &fp_buf[i * 3]; + p = (char*) &fp_buffer[i * 3]; } - sprintf(p, "%02x", fp[i]); - return fp_buf; + sprintf(p, "%02x", fp[i]); + + return fp_buffer; } boolean x509_verify_cert(CryptoCert cert) { - X509 *xcert=cert->px509; - char *cert_loc; - int ret=0; - X509_STORE *cert_ctx=NULL; - X509_LOOKUP *lookup=NULL; - X509_STORE_CTX *csc; - cert_ctx=X509_STORE_new(); + char* cert_loc; + X509_STORE_CTX* csc; + boolean status = False; + X509_STORE* cert_ctx = NULL; + X509_LOOKUP* lookup = NULL; + X509* xcert = cert->px509; + + cert_ctx = X509_STORE_new(); + if (cert_ctx == NULL) goto end; + OpenSSL_add_all_algorithms(); - lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_file()); + lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_file()); + if (lookup == NULL) goto end; - lookup=X509_STORE_add_lookup(cert_ctx,X509_LOOKUP_hash_dir()); + + lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_hash_dir()); + if (lookup == NULL) goto end; - X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT); - cert_loc=get_local_certloc(); - if(cert_loc!=NULL) + + X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT); + cert_loc = get_local_certloc(); + + if(cert_loc != NULL) { - X509_LOOKUP_add_dir(lookup,cert_loc,X509_FILETYPE_ASN1); + X509_LOOKUP_add_dir(lookup, cert_loc, X509_FILETYPE_ASN1); xfree(cert_loc); } + csc = X509_STORE_CTX_new(); + if (csc == NULL) goto end; + X509_STORE_set_flags(cert_ctx, 0); - if(!X509_STORE_CTX_init(csc,cert_ctx,xcert,0)) + + if(!X509_STORE_CTX_init(csc, cert_ctx, xcert, 0)) goto end; - int i=X509_verify_cert(csc); + + if (X509_verify_cert(csc) == 1) + status = True; + X509_STORE_CTX_free(csc); X509_STORE_free(cert_ctx); - ret=0; - end: - ret = (i > 0); - return(ret); + +end: + return status; } -rdpCertdata* crypto_get_certdata(X509 *xcert,char* hostname) +rdpCertdata* crypto_get_certdata(X509* xcert, char* hostname) { + char* fp; rdpCertdata* certdata; - char *fp; - fp=crypto_cert_fingerprint(xcert); - certdata=certdata_new(hostname,fp); + + fp = crypto_cert_fingerprint(xcert); + certdata = certdata_new(hostname, fp); xfree(fp); + return certdata; } -void crypto_cert_printinfo(X509 *xcert) +void crypto_cert_printinfo(X509* xcert) { - char *subject; - char *issuer; - char *fp; - subject=X509_NAME_oneline(X509_get_subject_name(xcert),NULL,0); - issuer=X509_NAME_oneline(X509_get_issuer_name(xcert),NULL,0); - fp=crypto_cert_fingerprint(xcert); - printf("Cerificate details:\n"); - printf("\tSubject : %s\n",subject); - printf("\tIssuer : %s\n",issuer); - printf("\tThumbprint (sha1) : %s\n",fp); - printf("The above x509 certificate couldn't be verified.Possibly because you do not have the CA cetificate in your certstore or certificate has expired.\nPlease look at the docs on how to create local certstore for private CA.\n"); + char* fp; + char* issuer; + char* subject; + + subject = X509_NAME_oneline(X509_get_subject_name(xcert), NULL, 0); + issuer = X509_NAME_oneline(X509_get_issuer_name(xcert), NULL, 0); + fp = crypto_cert_fingerprint(xcert); + + printf("Certificate details:\n"); + printf("\tSubject: %s\n", subject); + printf("\tIssuer: %s\n", issuer); + printf("\tThumbprint: %s\n", fp); + printf("The above X.509 certificate could not be verified, possibly because you do not have " + "the CA certificate in your certificate store, or the certificate has expired." + "Please look at the documentation on how to create local certificate store for a private CA.\n"); + xfree(fp); } diff --git a/libfreerdp-core/crypto.h b/libfreerdp-core/crypto.h index c73827b96..b63ff16c4 100644 --- a/libfreerdp-core/crypto.h +++ b/libfreerdp-core/crypto.h @@ -89,7 +89,7 @@ void crypto_cert_printinfo(X509* xcert); void crypto_cert_free(CryptoCert cert); boolean x509_verify_cert(CryptoCert cert); boolean crypto_cert_verify(CryptoCert server_cert, CryptoCert cacert); -rdpCertdata* crypto_get_certdata(X509 *xcert,char* hostname); +rdpCertdata* crypto_get_certdata(X509* xcert, char* hostname); boolean crypto_cert_get_public_key(CryptoCert cert, rdpBlob* public_key); void crypto_rsa_encrypt(uint8* input, int length, uint32 key_length, uint8* modulus, uint8* exponent, uint8* output); diff --git a/libfreerdp-core/tls.c b/libfreerdp-core/tls.c index 40edc9e65..c5760f0bd 100644 --- a/libfreerdp-core/tls.c +++ b/libfreerdp-core/tls.c @@ -248,28 +248,34 @@ rdpTls* tls_new() return tls; } -int tls_verify_certificate(CryptoCert cert,char* hostname) +int tls_verify_certificate(CryptoCert cert, char* hostname) { boolean ret; - ret=x509_verify_cert(cert); - if(!ret) + ret = x509_verify_cert(cert); + + if (!ret) { rdpCertdata* certdata; - certdata=crypto_get_certdata(cert->px509,hostname); - rdpCertstore* certstore=certstore_new(certdata); - if(match_certdata(certstore)==0) + certdata = crypto_get_certdata(cert->px509, hostname); + rdpCertstore* certstore = certstore_new(certdata); + + if (match_certdata(certstore) == 0) goto end; - if(certstore->match==1) + + if (certstore->match == 1) { - crypto_cert_printinfo(cert->px509); char answer; + crypto_cert_printinfo(cert->px509); + while(1) { - printf("Do you trust the above certificate? (Y/N)"); + printf("Do you trust the above certificate? (Y/N) "); answer=fgetc(stdin); + if(answer=='y' || answer =='Y') - { - print_certdata(certstore);break; + { + print_certdata(certstore); + break; } else if(answer=='n' || answer=='N') { @@ -278,15 +284,17 @@ int tls_verify_certificate(CryptoCert cert,char* hostname) } } } - else if(certstore->match==-1) + else if (certstore->match == -1) { tls_print_cert_error(); certstore_free(certstore); return 1; } - end: + +end: certstore_free(certstore); } + return 0; } @@ -295,7 +303,7 @@ void tls_print_cert_error() printf("#####################################\n"); printf("##############WARNING################\n"); printf("#####################################\n"); - printf("The thumbprint of certificate recieved\n"); + printf("The thumbprint of certificate received\n"); printf("did not match the stored thumbprint.You\n"); printf("might be a victim of MAN in the MIDDLE\n"); printf("ATTACK.It is also possible that server's\n"); From a9a06abcc3085ccd9c2d1ac064017272b0837aa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Tue, 30 Aug 2011 14:21:16 -0400 Subject: [PATCH 28/30] xfreerdp: stabilizing RemoteApp, fix window styles --- client/X11/CMakeLists.txt | 10 +-- client/X11/xf_event.c | 4 +- client/X11/xf_rail.c | 15 +++- client/X11/xf_window.c | 142 ++++++++++++------------------------ client/X11/xf_window.h | 2 + client/X11/xfreerdp.c | 2 +- cmake/FindXext.cmake | 14 ++-- include/freerdp/rail/rail.h | 2 + libfreerdp-rail/window.c | 6 +- 9 files changed, 85 insertions(+), 112 deletions(-) diff --git a/client/X11/CMakeLists.txt b/client/X11/CMakeLists.txt index 1854f3327..142283065 100644 --- a/client/X11/CMakeLists.txt +++ b/client/X11/CMakeLists.txt @@ -46,23 +46,23 @@ endif() find_package(Xinerama) if(XINERAMA_FOUND) - add_definitions(-DWITH_XINERAMA) + add_definitions(-DWITH_XINERAMA -DWITH_XEXT) include_directories(${XINERAMA_INCLUDE_DIRS}) target_link_libraries(xfreerdp ${XINERAMA_LIBRARIES}) endif() find_package(Xext) -if(Xext_FOUND) +if(XEXT_FOUND) add_definitions(-DWITH_XEXT) - include_directories(${Xext_INCLUDE_DIRS}) - target_link_libraries(xfreerdp ${Xext_LIBRARIES}) + include_directories(${XEXT_INCLUDE_DIRS}) + target_link_libraries(xfreerdp ${XEXT_LIBRARIES}) endif() find_package(Xcursor) if(Xcursor_FOUND) add_definitions(-DWITH_XCURSOR) include_directories(${Xcursor_INCLUDE_DIRS}) - target_link_libraries(xfreerdp ${Xext_LIBRARIES}) + target_link_libraries(xfreerdp ${Xcursor_LIBRARIES}) endif() target_link_libraries(xfreerdp freerdp-core) diff --git a/client/X11/xf_event.c b/client/X11/xf_event.c index d4dcf5427..11bc57c9d 100644 --- a/client/X11/xf_event.c +++ b/client/X11/xf_event.c @@ -343,7 +343,7 @@ boolean xf_event_FocusIn(xfInfo* xfi, XEvent* event, boolean app) if (xfi->mouse_active && (app != True)) XGrabKeyboard(xfi->display, xfi->window->handle, True, GrabModeAsync, GrabModeAsync, CurrentTime); - xf_rail_send_activate(xfi, event->xany.window, True); + //xf_rail_send_activate(xfi, event->xany.window, True); xf_kbd_focus_in(xfi); return True; @@ -359,7 +359,7 @@ boolean xf_event_FocusOut(xfInfo* xfi, XEvent* event, boolean app) if (event->xfocus.mode == NotifyWhileGrabbed) XUngrabKeyboard(xfi->display, CurrentTime); - xf_rail_send_activate(xfi, event->xany.window, False); + //xf_rail_send_activate(xfi, event->xany.window, False); return True; } diff --git a/client/X11/xf_rail.c b/client/X11/xf_rail.c index c43f47dc9..3d64b04d3 100644 --- a/client/X11/xf_rail.c +++ b/client/X11/xf_rail.c @@ -82,6 +82,7 @@ void xf_rail_CreateWindow(rdpRail* rail, rdpWindow* window) window->windowId, window->ownerWindowId); xfparent = NULL; + if (window->ownerWindowId != 0) { rdpWindow* p = NULL; @@ -89,7 +90,7 @@ void xf_rail_CreateWindow(rdpRail* rail, rdpWindow* window) p = window_list_get_by_id(xfi->rail->list, window->ownerWindowId); if (p != NULL) - xfparent = (xfWindow *)p->extra; + xfparent = (xfWindow *) p->extra; } xfw = xf_CreateWindow((xfInfo*) rail->extra, xfparent, @@ -165,6 +166,17 @@ void xf_rail_SetWindowRects(rdpRail* rail, rdpWindow* window) xf_SetWindowRects(xfi, xfw, window->windowRects, window->numWindowRects); } +void xf_rail_SetWindowVisibilityRects(rdpRail* rail, rdpWindow* window) +{ + xfInfo* xfi; + xfWindow* xfw; + + xfi = (xfInfo*) rail->extra; + xfw = (xfWindow*) window->extra; + + xf_SetWindowVisibilityRects(xfi, xfw, window->windowRects, window->numWindowRects); +} + void xf_rail_DestroyWindow(rdpRail* rail, rdpWindow* window) { xfWindow* xfw; @@ -181,6 +193,7 @@ void xf_rail_register_callbacks(xfInfo* xfi, rdpRail* rail) rail->SetWindowText = xf_rail_SetWindowText; rail->SetWindowIcon = xf_rail_SetWindowIcon; rail->SetWindowRects = xf_rail_SetWindowRects; + rail->SetWindowVisibilityRects = xf_rail_SetWindowVisibilityRects; rail->DestroyWindow = xf_rail_DestroyWindow; } diff --git a/client/X11/xf_window.c b/client/X11/xf_window.c index 2a22bb0f7..b70f6d7ce 100644 --- a/client/X11/xf_window.c +++ b/client/X11/xf_window.c @@ -41,9 +41,6 @@ struct _PropMotifWmHints }; typedef struct _PropMotifWmHints PropMotifWmHints; -void xf_ReferenceWindow(xfInfo* xfi, xfWindow* window); -void xf_DereferenceWindow(xfInfo* xfi, xfWindow* window); - void xf_SendClientMessage(xfInfo* xfi, xfWindow* window, Atom atom, long msg, long d1, long d2, long d3) { XEvent xevent; @@ -162,43 +159,38 @@ void xf_SetWindowDecorations(xfInfo* xfi, xfWindow* window, boolean show) window->decorations = show; } +void xf_SetWindowUnlisted(xfInfo* xfi, xfWindow* window) +{ + Atom window_state[2]; + + window_state[0] = xfi->_NET_WM_STATE_SKIP_PAGER; + window_state[1] = xfi->_NET_WM_STATE_SKIP_TASKBAR; + + XChangeProperty(xfi->display, window->handle, xfi->_NET_WM_STATE, + XA_ATOM, 32, PropModeReplace, (uint8*) &window_state, 2); +} + void xf_SetWindowStyle(xfInfo* xfi, xfWindow* window, uint32 style, uint32 ex_style) { Atom window_type; window_type = xfi->_NET_WM_WINDOW_TYPE_NORMAL; - if (((style & WS_POPUP) !=0) || - ((style & WS_DLGFRAME) != 0) || - ((ex_style & WS_EX_DLGMODALFRAME) != 0) - ) + if ((style & WS_POPUP) || (style & WS_DLGFRAME) || (ex_style & WS_EX_DLGMODALFRAME)) { window_type = xfi->_NET_WM_WINDOW_TYPE_DIALOG; } - else if ((ex_style & WS_EX_TOOLWINDOW) != 0) + + if (ex_style & WS_EX_TOOLWINDOW) { + xf_SetWindowUnlisted(xfi, window); window_type = xfi->_NET_WM_WINDOW_TYPE_UTILITY; } XChangeProperty(xfi->display, window->handle, xfi->_NET_WM_WINDOW_TYPE, - xfi->_NET_WM_WINDOW_TYPE, 32, PropModeReplace, (unsigned char*)&window_type, 1); + XA_ATOM, 32, PropModeReplace, (uint8*) &window_type, 1); } -void xf_SetWindowChildState(xfInfo* xfi, xfWindow* window) -{ - Atom window_state[2]; - - if (window->parent != NULL) - { - window_state[0] = xfi->_NET_WM_STATE_SKIP_PAGER; - window_state[1] = xfi->_NET_WM_STATE_SKIP_TASKBAR; - - XChangeProperty(xfi->display, window->handle, xfi->_NET_WM_STATE, - xfi->_NET_WM_STATE, 32, PropModeReplace, (unsigned char*)&window_state, 2); - } -} - - xfWindow* xf_CreateDesktopWindow(xfInfo* xfi, char* name, int width, int height) { xfWindow* window; @@ -295,36 +287,19 @@ xfWindow* xf_CreateWindow(xfInfo* xfi, xfWindow* parent, int x, int y, int width XGCValues gcv; int input_mask; XClassHint* class_hints; - Window parent_handle; - int lx; - int ly; window->ref_count = 0; window->decorations = False; window->fullscreen = False; window->parent = parent; - lx = x; - ly = y; - parent_handle = RootWindowOfScreen(xfi->screen); - - if (window->parent != NULL) - { - lx = x - window->parent->left; - ly = y - window->parent->top; - parent_handle = parent->handle; - } - - window->handle = XCreateWindow(xfi->display, parent_handle, - lx, ly, window->width, window->height, 0, xfi->depth, InputOutput, xfi->visual, + window->handle = XCreateWindow(xfi->display, RootWindowOfScreen(xfi->screen), + x, y, window->width, window->height, 0, xfi->depth, InputOutput, xfi->visual, CWBackPixel | CWBackingStore | CWOverrideRedirect | CWColormap | CWBorderPixel, &xfi->attribs); - xf_ReferenceWindow(xfi, window); - xf_ReferenceWindow(xfi, window->parent); - xf_SetWindowDecorations(xfi, window, window->decorations); - xf_SetWindowChildState(xfi, window); + xf_SetWindowUnlisted(xfi, window); class_hints = XAllocClassHint(); @@ -352,10 +327,6 @@ xfWindow* xf_CreateWindow(xfInfo* xfi, xfWindow* parent, int x, int y, int width window->gc = XCreateGC(xfi->display, window->handle, GCGraphicsExposures, &gcv); window->surface = XCreatePixmap(xfi->display, window->handle, window->width, window->height, xfi->depth); - printf("xf_CreateWindow: h=0x%X p=0x%X x=%d y=%d w=%d h=%d\n", (uint32)window->handle, - (window->parent != NULL) ? (uint32)window->parent->handle : 0, - x, y, width, height); - xf_MoveWindow(xfi, window, x, y, width, height); } @@ -364,37 +335,19 @@ xfWindow* xf_CreateWindow(xfInfo* xfi, xfWindow* parent, int x, int y, int width void xf_MoveWindow(xfInfo* xfi, xfWindow* window, int x, int y, int width, int height) { - int lx, ly; Pixmap surface; if ((width * height) < 1) return; - printf("xf_MoveWindow: BEFORE correctness h=0x%X x=%d y=%d w=%d h=%d\n", - (uint32) window->handle, x, y, width, height); - xf_FixWindowCoordinates(&x, &y, &width, &height); - if (window->parent != NULL) - { - lx = x - window->parent->left; - ly = y - window->parent->top; - } - else - { - lx = x; - ly = y; - } - - printf("xf_MoveWindow: AFTER correctness h=0x%X x=%d y=%d lx=%d ly=%d w=%d h=%d \n", - (uint32) window->handle, x, y, lx, ly, width, height); - if (window->width == width && window->height == height) - XMoveWindow(xfi->display, window->handle, lx, ly); + XMoveWindow(xfi->display, window->handle, x, y); else if (window->left == x && window->top == y) XResizeWindow(xfi->display, window->handle, width, height); else - XMoveResizeWindow(xfi->display, window->handle, lx, ly, width, height); + XMoveResizeWindow(xfi->display, window->handle, x, y, width, height); surface = XCreatePixmap(xfi->display, window->handle, width, height, xfi->depth); XCopyArea(xfi->display, surface, window->surface, window->gc, 0, 0, window->width, window->height, 0, 0); @@ -490,42 +443,41 @@ void xf_SetWindowRects(xfInfo* xfi, xfWindow* window, RECTANGLE_16* rects, int n xfree(xrects); } -void xf_ReferenceWindow(xfInfo* xfi, xfWindow* window) +void xf_SetWindowVisibilityRects(xfInfo* xfi, xfWindow* window, RECTANGLE_16* rects, int nrects) { - if (window == NULL) return; - window->ref_count++; -} + int i; + XRectangle* xrects; -void xf_DereferenceWindow(xfInfo* xfi, xfWindow* window) -{ - if (window == NULL) return; + xrects = xmalloc(sizeof(XRectangle) * nrects); - window->ref_count--; - if (window->ref_count == 0) + for (i = 0; i < nrects; i++) { - printf("xf_DerefrenceWindow: destroying h=0x%X p=0x%X\n", (uint32)window->handle, - (window->parent != NULL) ? (uint32)window->parent->handle : 0); - - if (window->gc) - XFreeGC(xfi->display, window->gc); - if (window->surface) - XFreePixmap(xfi->display, window->surface); - if (window->handle) - { - XUnmapWindow(xfi->display, window->handle); - XDestroyWindow(xfi->display, window->handle); - } - xfree(window); + xrects[i].x = rects[i].left; + xrects[i].y = rects[i].top; + xrects[i].width = rects[i].right - rects[i].left; + xrects[i].height = rects[i].bottom - rects[i].top; } + +#ifdef WITH_XEXT + XShapeCombineRectangles(xfi->display, window->handle, ShapeBounding, 0, 0, xrects, nrects, ShapeSet, 0); +#endif + + xfree(xrects); } void xf_DestroyWindow(xfInfo* xfi, xfWindow* window) { - xfWindow* parent = window->parent; + if (window->gc) + XFreeGC(xfi->display, window->gc); - printf("xf_DestroyWindow: h=0x%X p=0x%X\n", (uint32)window->handle, - (window->parent != NULL) ? (uint32)window->parent->handle : 0); + if (window->surface) + XFreePixmap(xfi->display, window->surface); - xf_DereferenceWindow(xfi, window); - xf_DereferenceWindow(xfi, parent); + if (window->handle) + { + XUnmapWindow(xfi->display, window->handle); + XDestroyWindow(xfi->display, window->handle); + } + + xfree(window); } diff --git a/client/X11/xf_window.h b/client/X11/xf_window.h index e71eacae1..d9046d89d 100644 --- a/client/X11/xf_window.h +++ b/client/X11/xf_window.h @@ -52,6 +52,7 @@ boolean xf_GetWorkArea(xfInfo* xfi); void xf_SetWindowFullscreen(xfInfo* xfi, xfWindow* window, boolean fullscreen); void xf_SetWindowDecorations(xfInfo* xfi, xfWindow* window, boolean show); +void xf_SetWindowUnlisted(xfInfo* xfi, xfWindow* window); xfWindow* xf_CreateDesktopWindow(xfInfo* xfi, char* name, int width, int height); @@ -60,6 +61,7 @@ void xf_MoveWindow(xfInfo* xfi, xfWindow* window, int x, int y, int width, int h void xf_ShowWindow(xfInfo* xfi, xfWindow* window, uint8 state); void xf_SetWindowIcon(xfInfo* xfi, xfWindow* window, rdpIcon* icon); void xf_SetWindowRects(xfInfo* xfi, xfWindow* window, RECTANGLE_16* rects, int nrects); +void xf_SetWindowVisibilityRects(xfInfo* xfi, xfWindow* window, RECTANGLE_16* rects, int nrects); void xf_SetWindowStyle(xfInfo* xfi, xfWindow* window, uint32 style, uint32 ex_style); void xf_DestroyWindow(xfInfo* xfi, xfWindow* window); diff --git a/client/X11/xfreerdp.c b/client/X11/xfreerdp.c index 48da95fb1..3a66a7031 100644 --- a/client/X11/xfreerdp.c +++ b/client/X11/xfreerdp.c @@ -310,7 +310,7 @@ boolean xf_pre_connect(freerdp* instance) xfi->depth = DefaultDepthOfScreen(xfi->screen); xfi->big_endian = (ImageByteOrder(xfi->display) == MSBFirst); - xfi->mouse_motion = False; + xfi->mouse_motion = True; xfi->complex_regions = True; xfi->decoration = settings->decorations; xfi->remote_app = settings->remote_app; diff --git a/cmake/FindXext.cmake b/cmake/FindXext.cmake index 211de22bc..cc4bf5dbd 100644 --- a/cmake/FindXext.cmake +++ b/cmake/FindXext.cmake @@ -28,22 +28,22 @@ # limitations under the License. #============================================================================= -find_path(Xext_INCLUDE_DIR NAMES Xext.h +find_path(XEXT_INCLUDE_DIR NAMES Xext.h PATH_SUFFIXES X11/extensions DOC "The Xext include directory" ) -find_library(Xext_LIBRARY NAMES Xext +find_library(XEXT_LIBRARY NAMES Xext DOC "The Xext library" ) include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Xext DEFAULT_MSG Xext_LIBRARY Xext_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(XEXT DEFAULT_MSG XEXT_LIBRARY XEXT_INCLUDE_DIR) -if(Xext_FOUND) - set( Xext_LIBRARIES ${Xext_LIBRARY} ) - set( Xext_INCLUDE_DIRS ${Xext_INCLUDE_DIR} ) +if(XEXT_FOUND) + set( XEXT_LIBRARIES ${XEXT_LIBRARY} ) + set( XEXT_INCLUDE_DIRS ${XEXT_INCLUDE_DIR} ) endif() -mark_as_advanced(Xext_INCLUDE_DIR Xext_LIBRARY) +mark_as_advanced(XEXT_INCLUDE_DIR XEXT_LIBRARY) diff --git a/include/freerdp/rail/rail.h b/include/freerdp/rail/rail.h index 9e50d28fc..00f90b5e9 100644 --- a/include/freerdp/rail/rail.h +++ b/include/freerdp/rail/rail.h @@ -40,6 +40,7 @@ typedef void (*railShowWindow)(rdpRail* rail, rdpWindow* window, uint8 state); typedef void (*railSetWindowText)(rdpRail* rail, rdpWindow* window); typedef void (*railSetWindowIcon)(rdpRail* rail, rdpWindow* window, rdpIcon* icon); typedef void (*railSetWindowRects)(rdpRail* rail, rdpWindow* window); +typedef void (*railSetWindowVisibilityRects)(rdpRail* rail, rdpWindow* window); struct rdp_rail { @@ -56,6 +57,7 @@ struct rdp_rail railSetWindowText SetWindowText; railSetWindowIcon SetWindowIcon; railSetWindowRects SetWindowRects; + railSetWindowVisibilityRects SetWindowVisibilityRects; }; FREERDP_API void rail_register_update_callbacks(rdpRail* rail, rdpUpdate* update); diff --git a/libfreerdp-rail/window.c b/libfreerdp-rail/window.c index 51fb6ef0e..9a55e01c0 100644 --- a/libfreerdp-rail/window.c +++ b/libfreerdp-rail/window.c @@ -284,6 +284,10 @@ void rail_CreateWindow(rdpRail* rail, rdpWindow* window) { IFCALL(rail->SetWindowRects, rail, window); } + if (window->fieldFlags & WINDOW_ORDER_FIELD_VISIBILITY) + { + IFCALL(rail->SetWindowVisibilityRects, rail, window); + } } void rail_UpdateWindow(rdpRail* rail, rdpWindow* window) @@ -356,7 +360,7 @@ void rail_UpdateWindow(rdpRail* rail, rdpWindow* window) if (window->fieldFlags & WINDOW_ORDER_FIELD_VISIBILITY) { - + IFCALL(rail->SetWindowVisibilityRects, rail, window); } } From bc28606f01f57d84f86a06108f5a74cd95d55449 Mon Sep 17 00:00:00 2001 From: Nils Andresen Date: Tue, 30 Aug 2011 20:24:28 +0200 Subject: [PATCH 29/30] client/X11: Do not break compilation, if xmlto is not available --- client/X11/CMakeLists.txt | 19 ++++++++++++------- cmake/FindXmlto.cmake | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 cmake/FindXmlto.cmake diff --git a/client/X11/CMakeLists.txt b/client/X11/CMakeLists.txt index 1854f3327..73f61c2cb 100644 --- a/client/X11/CMakeLists.txt +++ b/client/X11/CMakeLists.txt @@ -17,6 +17,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +include(FindXmlto) include_directories(${X11_INCLUDE_DIRS}) add_executable(xfreerdp @@ -34,15 +35,19 @@ add_executable(xfreerdp xfreerdp.h) if(WITH_MANPAGES) - add_custom_command(OUTPUT xfreerdp.1 - COMMAND xmlto man ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp.1.xml - DEPENDS xfreerdp.1.xml) + if(XMLTO_FOUND) + add_custom_command(OUTPUT xfreerdp.1 + COMMAND ${XMLTO_EXECUTABLE} man ${CMAKE_CURRENT_SOURCE_DIR}/xfreerdp.1.xml + DEPENDS xfreerdp.1.xml) - add_custom_target(xfreerdp.manpage ALL - DEPENDS xfreerdp.1) + add_custom_target(xfreerdp.manpage ALL + DEPENDS xfreerdp.1) - install(FILES xfreerdp.1 DESTINATION share/man/man1) -endif() + install(FILES xfreerdp.1 DESTINATION share/man/man1) + else(XMLTO_FOUND) + message(WARNING "WITH_MANPAGES was set, but xmlto was not found. man-pages will not be installed") + endif(XMLTO_FOUND) +endif(WITH_MANPAGES) find_package(Xinerama) if(XINERAMA_FOUND) diff --git a/cmake/FindXmlto.cmake b/cmake/FindXmlto.cmake new file mode 100644 index 000000000..7d2107bab --- /dev/null +++ b/cmake/FindXmlto.cmake @@ -0,0 +1,35 @@ +# - Find xmlto +# Find the xmlto docbook xslt frontend +# +# This module defines the following variables: +# XMLTO_FOUND - True if xmlto was found +# XMLTO_EXECUTABLE - Path to xmlto, if xmlto was found +# + +#============================================================================= +# Copyright 2011 Nils Andresen +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#============================================================================= +set(XMLTO_FOUND false) + +find_program(XMLTO_EXECUTABLE + NAMES xmlto + DOC "docbook xslt frontend") + +if(XMLTO_EXECUTABLE) + set(XMLTO_FOUND true) + message(STATUS "Found XMLTO: ${XMLTO_EXECUTABLE}") +endif() + +mark_as_advanced(XMLTO_EXECUTABLE) From 9d7fce919466f870d6ee27de720c243fc42ebe7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Tue, 30 Aug 2011 15:06:50 -0400 Subject: [PATCH 30/30] xfreerdp: fix listing of RemoteApp windows in taskbar --- client/X11/xf_rail.c | 4 ++-- client/X11/xf_window.c | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/client/X11/xf_rail.c b/client/X11/xf_rail.c index 3d64b04d3..ca815a771 100644 --- a/client/X11/xf_rail.c +++ b/client/X11/xf_rail.c @@ -98,10 +98,10 @@ void xf_rail_CreateWindow(rdpRail* rail, rdpWindow* window) window->windowWidth, window->windowHeight, window->windowId); - XStoreName(xfi->display, xfw->handle, window->title); - xf_SetWindowStyle(xfi, xfw, window->style, window->extendedStyle); + XStoreName(xfi->display, xfw->handle, window->title); + window->extra = (void*) xfw; window->extraId = (void*) xfw->handle; } diff --git a/client/X11/xf_window.c b/client/X11/xf_window.c index b70f6d7ce..28f9a45ee 100644 --- a/client/X11/xf_window.c +++ b/client/X11/xf_window.c @@ -299,7 +299,6 @@ xfWindow* xf_CreateWindow(xfInfo* xfi, xfWindow* parent, int x, int y, int width CWBorderPixel, &xfi->attribs); xf_SetWindowDecorations(xfi, window, window->decorations); - xf_SetWindowUnlisted(xfi, window); class_hints = XAllocClassHint();