Make ClientSession::new() fallible

This commit is contained in:
Dirkjan Ochtman 2021-02-18 15:44:11 +01:00 committed by ctz
parent cc4ed5fc57
commit 3d8f6c1c94
11 changed files with 38 additions and 38 deletions

View File

@ -46,7 +46,7 @@ impl TlsClient {
socket: sock,
closing: false,
clean_closure: false,
tls_session: rustls::ClientSession::new(&cfg, hostname),
tls_session: rustls::ClientSession::new(&cfg, hostname).unwrap(),
}
}

View File

@ -364,7 +364,7 @@ fn bench_handshake(params: &BenchmarkParam, clientauth: ClientAuth, resume: Resu
for _ in 0..rounds {
let dns_name = webpki::DNSNameRef::try_from_ascii_str("localhost").unwrap();
let mut client = ClientSession::new(&client_config, dns_name);
let mut client = ClientSession::new(&client_config, dns_name).unwrap();
let mut server = ServerSession::new(&server_config);
server_time += time(|| {
@ -439,7 +439,7 @@ fn bench_bulk(params: &BenchmarkParam, plaintext_size: u64, mtu: Option<usize>)
));
let dns_name = webpki::DNSNameRef::try_from_ascii_str("localhost").unwrap();
let mut client = ClientSession::new(&client_config, dns_name);
let mut client = ClientSession::new(&client_config, dns_name).unwrap();
let mut server = ServerSession::new(&server_config);
do_handshake(&mut client, &mut server);
@ -508,7 +508,7 @@ fn bench_memory(params: &BenchmarkParam, session_count: u64) {
for _i in 0..session_count {
servers.push(ServerSession::new(&server_config));
let dns_name = webpki::DNSNameRef::try_from_ascii_str("localhost").unwrap();
clients.push(ClientSession::new(&client_config, dns_name));
clients.push(ClientSession::new(&client_config, dns_name).unwrap());
}
for _step in 0..5 {

View File

@ -1058,7 +1058,7 @@ fn main() {
dns_name,
opts.quic_transport_params.clone(),
)
};
}.unwrap();
ClientOrServer::Client(c)
}
}

View File

@ -46,7 +46,7 @@ fn parse_args(args: &[String]) -> Result<(String, u16, ClientConfig), Box<dyn Er
fn communicate(host: String, port: u16, config: ClientConfig) -> Result<Verdict, Box<dyn Error>> {
let dns_name = webpki::DNSNameRef::try_from_ascii_str(&host).unwrap();
let rc_config = Arc::new(config);
let mut client = ClientSession::new(&rc_config, dns_name);
let mut client = ClientSession::new(&rc_config, dns_name).unwrap();
let mut stream = TcpStream::connect((&*host, port))?;
client.write_all(b"GET / HTTP/1.0\r\nConnection: close\r\nContent-Length: 0\r\n\r\n")?;

View File

@ -21,7 +21,7 @@ fn main() {
.add_server_trust_anchors(&webpki_roots::TLS_SERVER_ROOTS);
let dns_name = webpki::DNSNameRef::try_from_ascii_str("google.com").unwrap();
let mut sess = rustls::ClientSession::new(&Arc::new(config), dns_name);
let mut sess = rustls::ClientSession::new(&Arc::new(config), dns_name).unwrap();
let mut sock = TcpStream::connect("google.com:443").unwrap();
let mut tls = rustls::Stream::new(&mut sess, &mut sock);
tls.write(

View File

@ -10,7 +10,7 @@ use webpki_roots;
fn start_session(config: &Arc<rustls::ClientConfig>, domain_name: &str) {
let dns_name = webpki::DNSNameRef::try_from_ascii_str(domain_name).unwrap();
let mut sess = rustls::ClientSession::new(config, dns_name);
let mut sess = rustls::ClientSession::new(config, dns_name).unwrap();
let mut sock = TcpStream::connect(format!("{}:443", domain_name)).unwrap();
sock.set_nodelay(true).unwrap();
let request = format!(

View File

@ -25,7 +25,7 @@ fn main() {
.add_server_trust_anchors(&webpki_roots::TLS_SERVER_ROOTS);
let dns_name = webpki::DNSNameRef::try_from_ascii_str("google.com").unwrap();
let mut sess = rustls::ClientSession::new(&Arc::new(config), dns_name);
let mut sess = rustls::ClientSession::new(&Arc::new(config), dns_name).unwrap();
let mut sock = TcpStream::connect("google.com:443").unwrap();
let mut tls = rustls::Stream::new(&mut sess, &mut sock);
tls.write(

View File

@ -665,10 +665,10 @@ impl ClientSession {
/// Make a new ClientSession. `config` controls how
/// we behave in the TLS protocol, `hostname` is the
/// hostname of who we want to talk to.
pub fn new(config: &Arc<ClientConfig>, hostname: webpki::DNSNameRef) -> ClientSession {
pub fn new(config: &Arc<ClientConfig>, hostname: webpki::DNSNameRef) -> Result<ClientSession, TLSError> {
let mut imp = ClientSessionImpl::new(config);
imp.start_handshake(hostname.into(), vec![]).unwrap();
ClientSession { imp }
imp.start_handshake(hostname.into(), vec![])?;
Ok(ClientSession { imp })
}
/// Returns an `io::Write` implementer you can write bytes to

View File

@ -335,7 +335,7 @@ pub trait ClientQuicExt {
quic_version: Version,
hostname: webpki::DNSNameRef,
params: Vec<u8>,
) -> ClientSession {
) -> Result<ClientSession, TLSError> {
assert!(
config
.versions
@ -349,8 +349,8 @@ pub trait ClientQuicExt {
};
let mut imp = ClientSessionImpl::new(config);
imp.common.protocol = Protocol::Quic;
imp.start_handshake(hostname.into(), vec![ext]).unwrap();
ClientSession { imp }
imp.start_handshake(hostname.into(), vec![ext])?;
Ok(ClientSession { imp })
}
}

View File

@ -442,7 +442,7 @@ fn server_cert_resolve_with_sni() {
});
let mut client =
ClientSession::new(&Arc::new(client_config), dns_name("the-value-from-sni"));
ClientSession::new(&Arc::new(client_config), dns_name("the-value-from-sni")).unwrap();
let mut server = ServerSession::new(&Arc::new(server_config));
let err = do_handshake_until_error(&mut client, &mut server);
@ -462,7 +462,7 @@ fn server_cert_resolve_with_alpn() {
..Default::default()
});
let mut client = ClientSession::new(&Arc::new(client_config), dns_name("sni-value"));
let mut client = ClientSession::new(&Arc::new(client_config), dns_name("sni-value")).unwrap();
let mut server = ServerSession::new(&Arc::new(server_config));
let err = do_handshake_until_error(&mut client, &mut server);
@ -481,7 +481,7 @@ fn client_trims_terminating_dot() {
..Default::default()
});
let mut client = ClientSession::new(&Arc::new(client_config), dns_name("some-host.com."));
let mut client = ClientSession::new(&Arc::new(client_config), dns_name("some-host.com.")).unwrap();
let mut server = ServerSession::new(&Arc::new(server_config));
let err = do_handshake_until_error(&mut client, &mut server);
@ -504,7 +504,7 @@ fn check_sigalgs_reduced_by_ciphersuite(
..Default::default()
});
let mut client = ClientSession::new(&Arc::new(client_config), dns_name("localhost"));
let mut client = ClientSession::new(&Arc::new(client_config), dns_name("localhost")).unwrap();
let mut server = ServerSession::new(&Arc::new(server_config));
let err = do_handshake_until_error(&mut client, &mut server);
@ -562,7 +562,7 @@ fn client_with_sni_disabled_does_not_send_sni() {
for client_config in AllClientVersions::new(client_config) {
let mut client =
ClientSession::new(&Arc::new(client_config), dns_name("value-not-sent"));
ClientSession::new(&Arc::new(client_config), dns_name("value-not-sent")).unwrap();
let mut server = ServerSession::new(&server_config);
let err = do_handshake_until_error(&mut client, &mut server);
@ -581,7 +581,7 @@ fn client_checks_server_certificate_with_given_name() {
let mut client = ClientSession::new(
&Arc::new(client_config),
dns_name("not-the-right-hostname.com"),
);
).unwrap();
let mut server = ServerSession::new(&server_config);
let err = do_handshake_until_error(&mut client, &mut server);
@ -783,7 +783,7 @@ mod test_clientverifier {
for client_config in AllClientVersions::new(client_config) {
let mut server = ServerSession::new(&server_config);
let mut client =
ClientSession::new(&Arc::new(client_config), dns_name("notlocalhost"));
ClientSession::new(&Arc::new(client_config), dns_name("notlocalhost")).unwrap();
let errs = do_handshake_until_both_error(&mut client, &mut server);
assert_eq!(
errs,
@ -822,7 +822,7 @@ mod test_clientverifier {
for client_config in AllClientVersions::new(client_config) {
let mut server = ServerSession::new(&server_config);
let mut client =
ClientSession::new(&Arc::new(client_config), dns_name("notlocalhost"));
ClientSession::new(&Arc::new(client_config), dns_name("notlocalhost")).unwrap();
let errs = do_handshake_until_both_error(&mut client, &mut server);
assert_eq!(
errs,
@ -862,7 +862,7 @@ mod test_clientverifier {
println!("Failing: {:?}", client_config.versions);
let mut server = ServerSession::new(&server_config);
let mut client =
ClientSession::new(&Arc::new(client_config), dns_name("localhost"));
ClientSession::new(&Arc::new(client_config), dns_name("localhost")).unwrap();
let errs = do_handshake_until_both_error(&mut client, &mut server);
assert_eq!(
errs,
@ -899,7 +899,7 @@ mod test_clientverifier {
for client_config in AllClientVersions::new(client_config) {
let mut server = ServerSession::new(&server_config);
let mut client =
ClientSession::new(&Arc::new(client_config), dns_name("localhost"));
ClientSession::new(&Arc::new(client_config), dns_name("localhost")).unwrap();
let err = do_handshake_until_error(&mut client, &mut server);
assert_eq!(
err,
@ -933,7 +933,7 @@ mod test_clientverifier {
for client_config in AllClientVersions::new(client_config) {
let mut server = ServerSession::new(&server_config);
let mut client =
ClientSession::new(&Arc::new(client_config), dns_name("localhost"));
ClientSession::new(&Arc::new(client_config), dns_name("localhost")).unwrap();
let errs = do_handshake_until_both_error(&mut client, &mut server);
assert_eq!(
errs,
@ -1673,7 +1673,7 @@ fn server_exposes_offered_sni() {
let kt = KeyType::RSA;
for client_config in AllClientVersions::new(make_client_config(kt)) {
let mut client =
ClientSession::new(&Arc::new(client_config), dns_name("second.testserver.com"));
ClientSession::new(&Arc::new(client_config), dns_name("second.testserver.com")).unwrap();
let mut server = ServerSession::new(&Arc::new(make_server_config(kt)));
assert_eq!(None, server.get_sni_hostname());
@ -1688,7 +1688,7 @@ fn server_exposes_offered_sni_smashed_to_lowercase() {
let kt = KeyType::RSA;
for client_config in AllClientVersions::new(make_client_config(kt)) {
let mut client =
ClientSession::new(&Arc::new(client_config), dns_name("SECOND.TESTServer.com"));
ClientSession::new(&Arc::new(client_config), dns_name("SECOND.TESTServer.com")).unwrap();
let mut server = ServerSession::new(&Arc::new(make_server_config(kt)));
assert_eq!(None, server.get_sni_hostname());
@ -1709,7 +1709,7 @@ fn server_exposes_offered_sni_even_if_resolver_fails() {
for client_config in AllClientVersions::new(make_client_config(kt)) {
let mut server = ServerSession::new(&server_config);
let mut client =
ClientSession::new(&Arc::new(client_config), dns_name("thisdoesNOTexist.com"));
ClientSession::new(&Arc::new(client_config), dns_name("thisdoesNOTexist.com")).unwrap();
assert_eq!(None, server.get_sni_hostname());
transfer(&mut client, &mut server);
@ -1741,13 +1741,13 @@ fn sni_resolver_works() {
let server_config = Arc::new(server_config);
let mut server1 = ServerSession::new(&server_config);
let mut client1 = ClientSession::new(&Arc::new(make_client_config(kt)), dns_name("localhost"));
let mut client1 = ClientSession::new(&Arc::new(make_client_config(kt)), dns_name("localhost")).unwrap();
let err = do_handshake_until_error(&mut client1, &mut server1);
assert_eq!(err, Ok(()));
let mut server2 = ServerSession::new(&server_config);
let mut client2 =
ClientSession::new(&Arc::new(make_client_config(kt)), dns_name("notlocalhost"));
ClientSession::new(&Arc::new(make_client_config(kt)), dns_name("notlocalhost")).unwrap();
let err = do_handshake_until_error(&mut client2, &mut server2);
assert_eq!(
err,
@ -2573,7 +2573,7 @@ mod test_quic {
// full handshake
let mut client =
ClientSession::new_quic(&client_config, quic::Version::V1, dns_name("localhost"), client_params.into());
ClientSession::new_quic(&client_config, quic::Version::V1, dns_name("localhost"), client_params.into()).unwrap();
let mut server = ServerSession::new_quic(&server_config, quic::Version::V1, server_params.into());
let client_initial = step(&mut client, &mut server).unwrap();
assert!(client_initial.is_none());
@ -2613,7 +2613,7 @@ mod test_quic {
// 0-RTT handshake
let mut client =
ClientSession::new_quic(&client_config, quic::Version::V1, dns_name("localhost"), client_params.into());
ClientSession::new_quic(&client_config, quic::Version::V1, dns_name("localhost"), client_params.into()).unwrap();
assert!(
client
.get_negotiated_ciphersuite()
@ -2647,7 +2647,7 @@ mod test_quic {
quic::Version::V1,
dns_name("localhost"),
client_params.into(),
);
).unwrap();
let mut server = ServerSession::new_quic(&server_config, quic::Version::V1, server_params.into());
step(&mut client, &mut server).unwrap();
assert_eq!(client.get_quic_transport_parameters(), Some(server_params));
@ -2671,7 +2671,7 @@ mod test_quic {
quic::Version::V1,
dns_name("example.com"),
client_params.into(),
);
).unwrap();
let mut server = ServerSession::new_quic(&server_config, quic::Version::V1, server_params.into());
step(&mut client, &mut server).unwrap();
step(&mut server, &mut client)
@ -2705,7 +2705,7 @@ mod test_quic {
quic::Version::V1,
dns_name("localhost"),
client_params.into(),
);
).unwrap();
let mut server = ServerSession::new_quic(&server_config, quic::Version::V1, server_params.into());
assert_eq!(
@ -2900,7 +2900,7 @@ fn test_client_mtu_reduction() {
let mut client_config = make_client_config(*kt);
client_config.set_mtu(&Some(64));
let mut client = ClientSession::new(&Arc::new(client_config), dns_name("localhost"));
let mut client = ClientSession::new(&Arc::new(client_config), dns_name("localhost")).unwrap();
let writes = collect_write_lengths(&mut client);
println!("writes at mtu=64: {:?}", writes);
assert!(writes.iter().all(|x| *x <= 64));

View File

@ -265,7 +265,7 @@ pub fn make_pair_for_arc_configs(
server_config: &Arc<ServerConfig>,
) -> (ClientSession, ServerSession) {
(
ClientSession::new(client_config, dns_name("localhost")),
ClientSession::new(client_config, dns_name("localhost")).unwrap(),
ServerSession::new(server_config),
)
}