summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Fackler <sfackler@gmail.com>2014-02-27 23:39:28 -0800
committerSteven Fackler <sfackler@gmail.com>2014-02-27 23:39:28 -0800
commitf5f10deadcd39872caa654e5439b473a325953bf (patch)
tree3241361a24ce4ff2bfcd3a0a7b340441d82a184a
parentc3cf00ea10efdc922dd7215575fd390c2bfe54c6 (diff)
downloadrust-openssl-f5f10deadcd39872caa654e5439b473a325953bf.zip
Add SSLv2 support behind a cfg flag
Many OpenSSL distributions have SSLv2 support compiled out, so it should be opt-in.
-rw-r--r--ssl/ffi.rs2
-rw-r--r--ssl/mod.rs16
-rw-r--r--ssl/tests.rs1
3 files changed, 18 insertions, 1 deletions
diff --git a/ssl/ffi.rs b/ssl/ffi.rs
index 0be09371..53a3b4f8 100644
--- a/ssl/ffi.rs
+++ b/ssl/ffi.rs
@@ -111,6 +111,8 @@ extern "C" {
pub fn SSL_library_init() -> c_int;
+ #[cfg(sslv2)]
+ pub fn SSLv2_method() -> *SSL_METHOD;
pub fn SSLv3_method() -> *SSL_METHOD;
pub fn TLSv1_method() -> *SSL_METHOD;
pub fn SSLv23_method() -> *SSL_METHOD;
diff --git a/ssl/mod.rs b/ssl/mod.rs
index 706df857..ad6dd023 100644
--- a/ssl/mod.rs
+++ b/ssl/mod.rs
@@ -38,15 +38,29 @@ fn init() {
/// Determines the SSL method supported
pub enum SslMethod {
+ #[cfg(sslv2)]
+ /// Only support the SSLv2 protocol
+ Sslv2,
/// Only support the SSLv3 protocol
Sslv3,
/// Only support the TLSv1 protocol
Tlsv1,
/// Support the SSLv2, SSLv3 and TLSv1 protocols
- Sslv23
+ Sslv23,
}
impl SslMethod {
+ #[cfg(sslv2)]
+ unsafe fn to_raw(&self) -> *ffi::SSL_METHOD {
+ match *self {
+ Sslv2 => ffi::SSLv2_method(),
+ Sslv3 => ffi::SSLv3_method(),
+ Tlsv1 => ffi::TLSv1_method(),
+ Sslv23 => ffi::SSLv23_method()
+ }
+ }
+
+ #[cfg(not(sslv2))]
unsafe fn to_raw(&self) -> *ffi::SSL_METHOD {
match *self {
Sslv3 => ffi::SSLv3_method(),
diff --git a/ssl/tests.rs b/ssl/tests.rs
index 39a756cd..751ca7ab 100644
--- a/ssl/tests.rs
+++ b/ssl/tests.rs
@@ -1,3 +1,4 @@
+use std::from_str::FromStr;
use std::io::Writer;
use std::io::net::tcp::TcpStream;
use std::str;