Merge pull request #112 from amousset/zsck-master

feat(transport): Upgrade to OpenSSL ^0.9
This commit is contained in:
Alexis Mousset
2017-01-01 13:08:26 +01:00
committed by GitHub
3 changed files with 28 additions and 19 deletions

View File

@@ -11,18 +11,18 @@ authors = ["Alexis Mousset <contact@amousset.me>"]
keywords = ["email", "smtp", "mailer"]
[dependencies]
bufstream = "0.1"
email = "0.0"
log = "0.3"
mime = "0.2"
openssl = "0.8"
rustc-serialize = "0.3"
rust-crypto = "0.2"
time = "0.1"
uuid = { version = "0.3", features = ["v4"] }
bufstream = "^0.1"
email = "^0.0"
log = "^0.3"
mime = "^0.2"
openssl = "^0.9"
rustc-serialize = "^0.3"
rust-crypto = "^0.2"
time = "^0.1"
uuid = { version = "^0.3", features = ["v4"] }
[dev-dependencies]
env_logger = "0.3"
env_logger = "^0.3"
[features]
unstable = []

View File

@@ -1,6 +1,6 @@
//! A trait to represent a stream
use openssl::ssl::{SslContext, SslStream};
use openssl::ssl::{Ssl, SslContext, SslStream};
use std::fmt;
use std::fmt::{Debug, Formatter};
use std::io;
@@ -24,9 +24,13 @@ impl Connector for NetworkStream {
match ssl_context {
Some(context) => {
match SslStream::connect(context, tcp_stream) {
Ok(stream) => Ok(NetworkStream::Ssl(stream)),
Err(err) => Err(io::Error::new(ErrorKind::Other, err)),
match Ssl::new(context) {
Ok(ssl) => {
ssl.connect(tcp_stream)
.map(|s| NetworkStream::Ssl(s))
.map_err(|e| io::Error::new(ErrorKind::Other, e))
}
Err(e) => Err(io::Error::new(ErrorKind::Other, e)),
}
}
None => Ok(NetworkStream::Plain(tcp_stream)),
@@ -37,9 +41,14 @@ impl Connector for NetworkStream {
*self = match *self {
NetworkStream::Plain(ref mut stream) => {
match SslStream::connect(ssl_context, stream.try_clone().unwrap()) {
Ok(ssl_stream) => NetworkStream::Ssl(ssl_stream),
Err(err) => return Err(io::Error::new(ErrorKind::Other, err)),
match Ssl::new(ssl_context) {
Ok(ssl) => {
match ssl.connect(stream.try_clone().unwrap()) {
Ok(ssl_stream) => NetworkStream::Ssl(ssl_stream),
Err(err) => return Err(io::Error::new(ErrorKind::Other, err)),
}
}
Err(e) => return Err(io::Error::new(ErrorKind::Other, e)),
}
}
NetworkStream::Ssl(_) => return Ok(()),
@@ -122,4 +131,4 @@ impl Timeout for NetworkStream {
NetworkStream::Ssl(ref mut stream) => stream.get_mut().set_write_timeout(duration),
}
}
}
}

View File

@@ -101,7 +101,7 @@ impl SmtpTransportBuilder {
Some(addr) => {
Ok(SmtpTransportBuilder {
server_addr: addr,
ssl_context: SslContext::new(SslMethod::Tlsv1).unwrap(),
ssl_context: SslContext::builder(SslMethod::tls()).unwrap().build(),
security_level: SecurityLevel::Opportunistic,
smtp_utf8: false,
credentials: None,