summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorJay Sorg <jay.sorg@gmail.com>2017-06-08 09:39:07 -0700
committermetalefty <meta@vmeta.jp>2017-06-22 11:47:48 +0900
commit8d63c32899ff9972e45cbb19f7aa020da31bbd8e (patch)
tree85e1cb7dea383aaeeb0d616d6464fe8dce1eead4 /common
parent5def0596e0c8832d8c47396b7b5ab91258e3e4d9 (diff)
downloadxrdp-proprietary-8d63c32899ff9972e45cbb19f7aa020da31bbd8e.tar.gz
xrdp-proprietary-8d63c32899ff9972e45cbb19f7aa020da31bbd8e.zip
move openssl calls to common/libssl.c, check for defines
Diffstat (limited to 'common')
-rw-r--r--common/ssl_calls.c81
-rw-r--r--common/ssl_calls.h9
2 files changed, 86 insertions, 4 deletions
diff --git a/common/ssl_calls.c b/common/ssl_calls.c
index 0362f668..a741ef92 100644
--- a/common/ssl_calls.c
+++ b/common/ssl_calls.c
@@ -37,6 +37,7 @@
#include "arch.h"
#include "ssl_calls.h"
#include "trans.h"
+#include "log.h"
#define SSL_WANT_READ_WRITE_TIMEOUT 100
@@ -829,7 +830,6 @@ ssl_tls_can_recv(struct ssl_tls *tls, int sck, int millis)
return g_sck_can_recv(sck, millis);
}
-
/*****************************************************************************/
const char *
ssl_get_version(const struct ssl_st *ssl)
@@ -843,3 +843,82 @@ ssl_get_cipher_name(const struct ssl_st *ssl)
{
return SSL_get_cipher_name(ssl);
}
+
+/*****************************************************************************/
+int
+ssl_get_protocols_from_string(const char *str, long *ssl_protocols)
+{
+ long protocols;
+ long bad_protocols;
+ int rv;
+
+ if ((str == NULL) || (ssl_protocols == NULL))
+ {
+ return 1;
+ }
+ rv = 0;
+ protocols = 0;
+#if defined(SSL_OP_NO_SSLv3)
+ protocols |= SSL_OP_NO_SSLv3;
+#endif
+#if defined(SSL_OP_NO_TLSv1)
+ protocols |= SSL_OP_NO_TLSv1;
+#endif
+#if defined(SSL_OP_NO_TLSv1_1)
+ protocols |= SSL_OP_NO_TLSv1_1;
+#endif
+#if defined(SSL_OP_NO_TLSv1_2)
+ protocols |= SSL_OP_NO_TLSv1_2;
+#endif
+ bad_protocols = protocols;
+ if (g_pos(str, ",TLSv1.2,") >= 0)
+ {
+#if defined(SSL_OP_NO_TLSv1_2)
+ log_message(LOG_LEVEL_DEBUG, "TLSv1.2 enabled");
+ protocols &= ~SSL_OP_NO_TLSv1_2;
+#else
+ log_message(LOG_LEVEL_DEBUG, "TLSv1.2 not enabled, not available");
+ rv |= (1 << 1);
+#endif
+ }
+ if (g_pos(str, ",TLSv1.1,") >= 0)
+ {
+#if defined(SSL_OP_NO_TLSv1_1)
+ log_message(LOG_LEVEL_DEBUG, "TLSv1.1 enabled");
+ protocols &= ~SSL_OP_NO_TLSv1_1;
+#else
+ log_message(LOG_LEVEL_DEBUG, "TLSv1.1 not enabled, not available");
+ rv |= (1 << 2);
+#endif
+ }
+ if (g_pos(str, ",TLSv1,") >= 0)
+ {
+#if defined(SSL_OP_NO_TLSv1)
+ log_message(LOG_LEVEL_DEBUG, "TLSv1 enabled");
+ protocols &= ~SSL_OP_NO_TLSv1;
+#else
+ log_message(LOG_LEVEL_DEBUG, "TLSv1 not enabled, not available");
+ rv |= (1 << 3);
+#endif
+ }
+ if (g_pos(str, ",SSLv3,") >= 0)
+ {
+#if defined(SSL_OP_NO_SSLv3)
+ log_message(LOG_LEVEL_DEBUG, "SSLv3 enabled");
+ protocols &= ~SSL_OP_NO_SSLv3;
+#else
+ log_message(LOG_LEVEL_DEBUG, "SSLv3 not enabled, not available");
+ rv |= (1 << 4);
+#endif
+ }
+ if (protocols == bad_protocols)
+ {
+ log_message(LOG_LEVEL_WARNING, "No SSL/TLS protocols enabled. "
+ "At least one protocol should be enabled to accept "
+ "TLS connections.");
+ rv |= (1 << 5);
+ }
+ *ssl_protocols = protocols;
+ return rv;
+}
+
diff --git a/common/ssl_calls.h b/common/ssl_calls.h
index 4c069cb0..dc60a23e 100644
--- a/common/ssl_calls.h
+++ b/common/ssl_calls.h
@@ -108,8 +108,11 @@ int
ssl_tls_write(struct ssl_tls *tls, const char *data, int length);
int
ssl_tls_can_recv(struct ssl_tls *tls, int sck, int millis);
-
-const char *ssl_get_version(const struct ssl_st *ssl);
-const char *ssl_get_cipher_name(const struct ssl_st *ssl);
+const char *
+ssl_get_version(const struct ssl_st *ssl);
+const char *
+ssl_get_cipher_name(const struct ssl_st *ssl);
+int
+ssl_get_protocols_from_string(const char *str, long *ssl_protocols);
#endif